Skip to content

Commit 6a06f33

Browse files
committed
refactor(SubAdmin): Port away from listener
Signed-off-by: Carl Schwan <carl@carlschwan.eu>
1 parent 77b465b commit 6a06f33

3 files changed

Lines changed: 33 additions & 54 deletions

File tree

core/AppInfo/Application.php

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@
4141
use OC\Group\Manager as GroupManager;
4242
use OC\OCM\OCMDiscoveryHandler;
4343
use OC\OCM\OCMJwksHandler;
44+
use OC\SubAdmin;
4445
use OC\TagManager;
4546
use OC\User\DisplayNameCache;
4647
use OCP\AppFramework\App;
@@ -120,6 +121,8 @@ public function register(IRegistrationContext $context): void {
120121
$context->registerEventListener(BeforeUserAddedEvent::class, GroupManager::class);
121122
$context->registerEventListener(BeforeUserRemovedEvent::class, GroupManager::class);
122123
$context->registerEventListener(GroupDeletedEvent::class, GroupManager::class);
124+
$context->registerEventListener(GroupDeletedEvent::class, SubAdmin::class);
125+
$context->registerEventListener(UserDeletedEvent::class, SubAdmin::class);
123126

124127
// Tags
125128
$context->registerEventListener(UserDeletedEvent::class, TagManager::class);

lib/private/SubAdmin.php

Lines changed: 28 additions & 54 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,10 @@
99
namespace OC;
1010

1111
use OC\Hooks\PublicEmitter;
12+
use OCP\EventDispatcher\Event;
1213
use OCP\EventDispatcher\IEventDispatcher;
14+
use OCP\EventDispatcher\IEventListener;
15+
use OCP\Group\Events\GroupDeletedEvent;
1316
use OCP\Group\Events\SubAdminAddedEvent;
1417
use OCP\Group\Events\SubAdminRemovedEvent;
1518
use OCP\Group\ISubAdmin;
@@ -18,27 +21,21 @@
1821
use OCP\IGroupManager;
1922
use OCP\IUser;
2023
use 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
}

lib/public/Group/ISubAdmin.php

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,12 +9,14 @@
99

1010
namespace OCP\Group;
1111

12+
use OCP\AppFramework\Attribute\Consumable;
1213
use OCP\IGroup;
1314
use OCP\IUser;
1415

1516
/**
1617
* @since 16.0.0
1718
*/
19+
#[Consumable(since: '16.0.0')]
1820
interface ISubAdmin {
1921
/**
2022
* add a SubAdmin

0 commit comments

Comments
 (0)