88
99namespace OC \Group ;
1010
11- use OC \Hooks \PublicEmitter ;
1211use OC \Settings \AuthorizedGroupMapper ;
1312use OC \SubAdmin ;
1413use OCA \Settings \Settings \Admin \Users ;
2322use OCP \Group \Events \BeforeUserAddedEvent ;
2423use OCP \Group \Events \BeforeUserRemovedEvent ;
2524use OCP \Group \Events \GroupCreatedEvent ;
25+ use OCP \Group \Events \GroupDeletedEvent ;
2626use OCP \GroupInterface ;
2727use OCP \ICache ;
2828use OCP \ICacheFactory ;
3434use OCP \Server ;
3535
3636/**
37- * Class Manager
38- *
39- * Hooks available in scope \OC\Group:
40- * - preAddUser(\OC\Group\Group $group, \OC\User\User $user)
41- * - postAddUser(\OC\Group\Group $group, \OC\User\User $user)
42- * - preRemoveUser(\OC\Group\Group $group, \OC\User\User $user)
43- * - postRemoveUser(\OC\Group\Group $group, \OC\User\User $user)
44- * - preDelete(\OC\Group\Group $group)
45- * - postDelete(\OC\Group\Group $group)
46- * - preCreate(string $groupId)
47- * - postCreate(\OC\Group\Group $group)
48- *
4937 * @template-implements IEventListener<BeforeGroupDeletedEvent|BeforeGroupCreatedEvent|BeforeUserAddedEvent|BeforeUserRemovedEvent>
5038 */
51- class Manager extends PublicEmitter implements IGroupManager, IEventListener {
39+ class Manager implements IGroupManager, IEventListener {
5240 /** @var list<GroupInterface> */
5341 private array $ backends = [];
5442 /** @var array<string, IGroup> */
@@ -134,7 +122,7 @@ protected function getGroupObject(string $gid, ?string $displayName = null): ?IG
134122 return null ;
135123 }
136124 /** @var GroupInterface[] $backends */
137- $ this ->cachedGroups [$ gid ] = new Group ($ gid , $ backends , $ this ->dispatcher , $ this ->userManager , $ this , $ displayName );
125+ $ this ->cachedGroups [$ gid ] = new Group ($ gid , $ backends , $ this ->dispatcher , $ this ->userManager , $ displayName );
138126 return $ this ->cachedGroups [$ gid ];
139127 }
140128
@@ -189,7 +177,7 @@ public function getGroupsObjects(array $gids, array $displayNames = []): array {
189177 if (count ($ backends [$ gid ]) === 0 ) {
190178 continue ;
191179 }
192- $ this ->cachedGroups [$ gid ] = new Group ($ gid , $ backends [$ gid ], $ this ->dispatcher , $ this ->userManager , $ this , $ displayNames [$ gid ]);
180+ $ this ->cachedGroups [$ gid ] = new Group ($ gid , $ backends [$ gid ], $ this ->dispatcher , $ this ->userManager , $ displayNames [$ gid ]);
193181 $ groups [$ gid ] = $ this ->cachedGroups [$ gid ];
194182 }
195183 return $ groups ;
@@ -210,21 +198,18 @@ public function createGroup(string $gid): ?IGroup {
210198 throw new \Exception ('Group name is limited to ' . self ::MAX_GROUP_LENGTH . ' characters ' );
211199 } else {
212200 $ this ->dispatcher ->dispatchTyped (new BeforeGroupCreatedEvent ($ gid ));
213- $ this ->emit ('\OC\Group ' , 'preCreate ' , [$ gid ]);
214201 foreach ($ this ->backends as $ backend ) {
215202 if ($ backend ->implementsActions (Backend::CREATE_GROUP )) {
216203 if ($ backend instanceof ICreateNamedGroupBackend) {
217204 $ groupName = $ gid ;
218205 if (($ gid = $ backend ->createGroup ($ groupName )) !== null ) {
219206 $ group = $ this ->getGroupObject ($ gid );
220207 $ this ->dispatcher ->dispatchTyped (new GroupCreatedEvent ($ group ));
221- $ this ->emit ('\OC\Group ' , 'postCreate ' , [$ group ]);
222208 return $ group ;
223209 }
224210 } elseif ($ backend ->createGroup ($ gid )) {
225211 $ group = $ this ->getGroupObject ($ gid );
226212 $ this ->dispatcher ->dispatchTyped (new GroupCreatedEvent ($ group ));
227- $ this ->emit ('\OC\Group ' , 'postCreate ' , [$ group ]);
228213 return $ group ;
229214 }
230215 }
@@ -403,5 +388,25 @@ public function handle(Event $event): void {
403388 $ this ->cachedUserGroups ->remove ($ event ->getUser ()->getUID ());
404389 unset($ this ->cachedUserGroupsLocal [$ event ->getUser ()->getUID ()]);
405390 }
391+
392+ if ($ event instanceof GroupDeletedEvent) {
393+ $ group = $ event ->getGroup ();
394+ $ appManager = Server::get (\OCP \App \IAppManager::class);
395+ $ apps = $ appManager ->getEnabledAppsForGroup ($ group );
396+ foreach ($ apps as $ appId ) {
397+ $ restrictions = $ appManager ->getAppRestriction ($ appId );
398+ if (empty ($ restrictions )) {
399+ continue ;
400+ }
401+ $ key = array_search ($ group ->getGID (), $ restrictions , true );
402+ unset($ restrictions [$ key ]);
403+ $ restrictions = array_values ($ restrictions );
404+ if (empty ($ restrictions )) {
405+ $ appManager ->disableApp ($ appId );
406+ } else {
407+ $ appManager ->enableAppForGroups ($ appId , $ restrictions );
408+ }
409+ }
410+ }
406411 }
407412}
0 commit comments