@@ -46,16 +46,35 @@ class SharingController extends Controller
4646 public function create (AddSharingRequest $ request , Share $ share ): array
4747 {
4848 // delete any already created.
49- AccessPermission::whereIn ('user_id ' , $ request ->userIds ())
50- ->whereIn ('base_album_id ' , $ request ->albumIds ())
49+ AccessPermission::whereIn (APC ::BASE_ALBUM_ID , $ request ->albumIds ())
50+ ->where (fn ($ q ) => $ q ->whereIn (APC ::USER_ID , $ request ->userIds ())
51+ ->orWhereIn (APC ::USER_GROUP_ID , $ request ->userGroupIds ()))
5152 ->delete ();
5253
5354 $ access_permissions = [];
55+
5456 // Not optimal, but this is barely used, so who cares.
5557 // A better approach would be to do a massive insert in a single SQL query from the cross product.
56- foreach ($ request ->userIds () as $ user_id ) {
57- foreach ($ request ->albumIds () as $ album_id ) {
58- $ access_permissions [] = $ share ->do ($ request ->permResource (), $ user_id , $ album_id );
58+ foreach ($ request ->albumIds () as $ album_id ) {
59+ foreach ($ request ->userIds () as $ user_id ) {
60+ // Create a new sharing permission for each user and album combination.
61+ // This is not optimal, but it is simple and works.
62+ // A better approach would be to do a massive insert in a single SQL query from the cross product.
63+ $ access_permissions [] = $ share ->do (
64+ access_permission_resource: $ request ->permResource (),
65+ user_id: $ user_id ,
66+ base_album_id: $ album_id
67+ );
68+ }
69+ foreach ($ request ->userGroupIds () as $ user_group_id ) {
70+ // Create a new sharing permission for each user group and album combination.
71+ // This is not optimal, but it is simple and works.
72+ // A better approach would be to do a massive insert in a single SQL query from the cross product.
73+ $ access_permissions [] = $ share ->do (
74+ access_permission_resource: $ request ->permResource (),
75+ user_group_id: $ user_group_id ,
76+ base_album_id: $ album_id
77+ );
5978 }
6079 }
6180
@@ -92,9 +111,10 @@ public function edit(EditSharingRequest $request): AccessPermissionResource
92111 */
93112 public function list (ListSharingRequest $ request ): Collection
94113 {
95- $ query = AccessPermission::with (['album ' , 'user ' ]);
96- $ query = $ query ->whereNotNull (APC ::USER_ID );
114+ $ query = AccessPermission::with (['album ' , 'user ' , 'user_group ' ]);
97115 $ query = $ query ->where (APC ::BASE_ALBUM_ID , '= ' , $ request ->album ()->id );
116+ $ query = $ query ->where (fn ($ q ) => $ q ->whereNotNull (APC ::USER_ID )
117+ ->orWhereNotNull (APC ::USER_GROUP_ID ));
98118
99119 return AccessPermissionResource::collect ($ query ->get ());
100120 }
@@ -108,12 +128,14 @@ public function list(ListSharingRequest $request): Collection
108128 */
109129 public function listAll (ListAllSharingRequest $ request ): Collection
110130 {
111- $ query = AccessPermission::with (['album ' , 'user ' ]);
131+ $ query = AccessPermission::with (['album ' , 'user ' , ' user_group ' ]);
112132 $ query = $ query ->when (
113133 !Auth::user ()->may_administrate ,
114134 fn ($ q ) => $ q ->whereIn ('base_album_id ' , BaseAlbumImpl::select ('id ' )
115- ->where ('owner_id ' , '= ' , Auth::id ())));
116- $ query = $ query ->whereNotNull ('user_id ' );
135+ ->where ('owner_id ' , '= ' , Auth::id ()))
136+ );
137+ $ query = $ query ->whereNotNull (APC ::USER_ID );
138+ $ query = $ query ->orWhereNotNull (APC ::USER_GROUP_ID );
117139 $ query = $ query ->orderBy ('base_album_id ' , 'asc ' );
118140
119141 return AccessPermissionResource::collect ($ query ->get ());
@@ -134,10 +156,12 @@ public function listAlbums(ListAllSharingRequest $request, ListAlbums $list_albu
134156 $ owner_id = $ user ->id ;
135157 }
136158
137- return TargetAlbumResource::collect ($ list_albums ->do (
138- albums_filtering: resolve (Collection::class),
139- parent_id: null ,
140- owner_id: $ owner_id )
159+ return TargetAlbumResource::collect (
160+ $ list_albums ->do (
161+ albums_filtering: resolve (Collection::class),
162+ parent_id: null ,
163+ owner_id: $ owner_id
164+ )
141165 );
142166 }
143167
@@ -173,4 +197,4 @@ public function propagate(PropagateSharingRequest $request, Propagate $propagate
173197 $ propagate ->update ($ album );
174198 }
175199 }
176- }
200+ }
0 commit comments