99namespace OC ;
1010
1111use OC \Hooks \PublicEmitter ;
12+ use OCP \EventDispatcher \Event ;
1213use OCP \EventDispatcher \IEventDispatcher ;
14+ use OCP \EventDispatcher \IEventListener ;
15+ use OCP \Group \Events \GroupDeletedEvent ;
1316use OCP \Group \Events \SubAdminAddedEvent ;
1417use OCP \Group \Events \SubAdminRemovedEvent ;
1518use OCP \Group \ISubAdmin ;
1821use OCP \IGroupManager ;
1922use OCP \IUser ;
2023use OCP \IUserManager ;
24+ use OCP \User \Events \UserDeletedEvent ;
25+ use Override ;
2126
22- class SubAdmin extends PublicEmitter implements ISubAdmin {
27+ /**
28+ * @template-implements IEventListener<GroupDeletedEvent|UserDeletedEvent>
29+ */
30+ class SubAdmin extends PublicEmitter implements ISubAdmin, IEventListener {
2331 public function __construct (
24- private IUserManager $ userManager ,
25- private IGroupManager $ groupManager ,
26- private IDBConnection $ dbConn ,
27- private IEventDispatcher $ eventDispatcher ,
32+ private readonly IUserManager $ userManager ,
33+ private readonly IGroupManager $ groupManager ,
34+ private readonly IDBConnection $ dbConn ,
35+ private readonly IEventDispatcher $ eventDispatcher ,
2836 ) {
29- $ this ->userManager ->listen ('\OC\User ' , 'postDelete ' , function ($ user ): void {
30- $ this ->post_deleteUser ($ user );
31- });
32- $ this ->groupManager ->listen ('\OC\Group ' , 'postDelete ' , function ($ group ): void {
33- $ this ->post_deleteGroup ($ group );
34- });
3537 }
3638
37- /**
38- * add a SubAdmin
39- * @param IUser $user user to be SubAdmin
40- * @param IGroup $group group $user becomes subadmin of
41- */
4239 #[\Override]
4340 public function createSubAdmin (IUser $ user , IGroup $ group ): void {
4441 $ qb = $ this ->dbConn ->getQueryBuilder ();
@@ -56,11 +53,6 @@ public function createSubAdmin(IUser $user, IGroup $group): void {
5653 $ this ->eventDispatcher ->dispatchTyped ($ event );
5754 }
5855
59- /**
60- * delete a SubAdmin
61- * @param IUser $user the user that is the SubAdmin
62- * @param IGroup $group the group
63- */
6456 #[\Override]
6557 public function deleteSubAdmin (IUser $ user , IGroup $ group ): void {
6658 $ qb = $ this ->dbConn ->getQueryBuilder ();
@@ -76,11 +68,6 @@ public function deleteSubAdmin(IUser $user, IGroup $group): void {
7668 $ this ->eventDispatcher ->dispatchTyped ($ event );
7769 }
7870
79- /**
80- * get groups of a SubAdmin
81- * @param IUser $user the SubAdmin
82- * @return IGroup[]
83- */
8471 #[\Override]
8572 public function getSubAdminsGroups (IUser $ user ): array {
8673 $ groupIds = $ this ->getSubAdminsGroupIds ($ user );
@@ -129,11 +116,6 @@ public function getSubAdminsGroupsName(IUser $user): array {
129116 }, $ this ->getSubAdminsGroups ($ user ));
130117 }
131118
132- /**
133- * get SubAdmins of a group
134- * @param IGroup $group the group
135- * @return IUser[]
136- */
137119 #[\Override]
138120 public function getGroupsSubAdmins (IGroup $ group ): array {
139121 $ qb = $ this ->dbConn ->getQueryBuilder ();
@@ -182,12 +164,6 @@ public function getAllSubAdmins(): array {
182164 return $ subadmins ;
183165 }
184166
185- /**
186- * checks if a user is a SubAdmin of a group
187- * @param IUser $user
188- * @param IGroup $group
189- * @return bool
190- */
191167 #[\Override]
192168 public function isSubAdminOfGroup (IUser $ user , IGroup $ group ): bool {
193169 $ qb = $ this ->dbConn ->getQueryBuilder ();
@@ -208,11 +184,6 @@ public function isSubAdminOfGroup(IUser $user, IGroup $group): bool {
208184 return $ result ;
209185 }
210186
211- /**
212- * checks if a user is a SubAdmin
213- * @param IUser $user
214- * @return bool
215- */
216187 #[\Override]
217188 public function isSubAdmin (IUser $ user ): bool {
218189 // Check if the user is already an admin
@@ -239,12 +210,6 @@ public function isSubAdmin(IUser $user): bool {
239210 return $ isSubAdmin !== false ;
240211 }
241212
242- /**
243- * checks if a user is a accessible by a subadmin
244- * @param IUser $subadmin
245- * @param IUser $user
246- * @return bool
247- */
248213 #[\Override]
249214 public function isUserAccessible (IUser $ subadmin , IUser $ user ): bool {
250215 if ($ subadmin ->getUID () === $ user ->getUID ()) {
@@ -267,10 +232,9 @@ public function isUserAccessible(IUser $subadmin, IUser $user): bool {
267232 }
268233
269234 /**
270- * delete all SubAdmins by $user
271- * @param IUser $user
235+ * Delete all SubAdmins by $user
272236 */
273- private function post_deleteUser (IUser $ user ) {
237+ private function postDeleteUser (IUser $ user ): void {
274238 $ qb = $ this ->dbConn ->getQueryBuilder ();
275239
276240 $ qb ->delete ('group_admin ' )
@@ -279,14 +243,24 @@ private function post_deleteUser(IUser $user) {
279243 }
280244
281245 /**
282- * delete all SubAdmins by $group
283- * @param IGroup $group
246+ * Delete all SubAdmins by $group
284247 */
285- private function post_deleteGroup (IGroup $ group ) {
248+ private function postDeleteGroup (IGroup $ group ): void {
286249 $ qb = $ this ->dbConn ->getQueryBuilder ();
287250
288251 $ qb ->delete ('group_admin ' )
289252 ->where ($ qb ->expr ()->eq ('gid ' , $ qb ->createNamedParameter ($ group ->getGID ())))
290253 ->executeStatement ();
291254 }
255+
256+ #[Override]
257+ public function handle (Event $ event ): void {
258+ if ($ event instanceof GroupDeletedEvent) {
259+ $ this ->postDeleteGroup ($ event ->getGroup ());
260+ }
261+
262+ if ($ event instanceof UserDeletedEvent) {
263+ $ this ->postDeleteUser ($ event ->getUser ());
264+ }
265+ }
292266}
0 commit comments