Skip to content

Commit 77b465b

Browse files
committed
refactor(group): Remove old hooks system for hooks
Not used anymore in github.com/nextcloud and there is a modern replacement since NC 18 Signed-off-by: Carl Schwan <carl@carlschwan.eu>
1 parent 3be9f94 commit 77b465b

7 files changed

Lines changed: 32 additions & 76 deletions

File tree

build/psalm-baseline.xml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2879,6 +2879,11 @@
28792879
<code><![CDATA[getSubject]]></code>
28802880
</DeprecatedMethod>
28812881
</file>
2882+
<file src="core/AppInfo/Application.php">
2883+
<DeprecatedClass>
2884+
<code><![CDATA[BeforeUserRemovedEvent::class]]></code>
2885+
</DeprecatedClass>
2886+
</file>
28822887
<file src="core/BackgroundJobs/BackgroundCleanupUpdaterBackupsJob.php">
28832888
<DeprecatedClass>
28842889
<code><![CDATA[Files::rmdirr($dir)]]></code>

core/AppInfo/Application.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -119,6 +119,7 @@ public function register(IRegistrationContext $context): void {
119119
$context->registerEventListener(BeforeGroupDeletedEvent::class, GroupManager::class);
120120
$context->registerEventListener(BeforeUserAddedEvent::class, GroupManager::class);
121121
$context->registerEventListener(BeforeUserRemovedEvent::class, GroupManager::class);
122+
$context->registerEventListener(GroupDeletedEvent::class, GroupManager::class);
122123

123124
// Tags
124125
$context->registerEventListener(UserDeletedEvent::class, TagManager::class);

lib/OC.php

Lines changed: 0 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -884,7 +884,6 @@ public static function init(): void {
884884
self::registerResourceCollectionHooks();
885885
self::registerFileReferenceEventListener();
886886
self::registerRenderReferenceEventListener();
887-
self::registerAppRestrictionsHooks();
888887

889888
// Make sure that the application class is not loaded before the database is setup
890889
if ($systemConfig->getValue('installed', false)) {
@@ -1061,29 +1060,6 @@ private static function registerAccountHooks(): void {
10611060
$dispatcher->addServiceListener(UserChangedEvent::class, \OC\Accounts\Hooks::class);
10621061
}
10631062

1064-
private static function registerAppRestrictionsHooks(): void {
1065-
/** @var \OC\Group\Manager $groupManager */
1066-
$groupManager = Server::get(\OCP\IGroupManager::class);
1067-
$groupManager->listen('\OC\Group', 'postDelete', function (\OCP\IGroup $group) {
1068-
$appManager = Server::get(\OCP\App\IAppManager::class);
1069-
$apps = $appManager->getEnabledAppsForGroup($group);
1070-
foreach ($apps as $appId) {
1071-
$restrictions = $appManager->getAppRestriction($appId);
1072-
if (empty($restrictions)) {
1073-
continue;
1074-
}
1075-
$key = array_search($group->getGID(), $restrictions, true);
1076-
unset($restrictions[$key]);
1077-
$restrictions = array_values($restrictions);
1078-
if (empty($restrictions)) {
1079-
$appManager->disableApp($appId);
1080-
} else {
1081-
$appManager->enableAppForGroups($appId, $restrictions);
1082-
}
1083-
}
1084-
});
1085-
}
1086-
10871063
private static function registerResourceCollectionHooks(): void {
10881064
\OC\Collaboration\Resources\Listener::register(Server::get(IEventDispatcher::class));
10891065
}

lib/private/Group/Group.php

Lines changed: 0 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@
88

99
namespace OC\Group;
1010

11-
use OC\Hooks\PublicEmitter;
1211
use OC\User\LazyUser;
1312
use OC\User\User;
1413
use OCP\EventDispatcher\IEventDispatcher;
@@ -48,7 +47,6 @@ public function __construct(
4847
private array $backends,
4948
private IEventDispatcher $dispatcher,
5049
private IUserManager $userManager,
51-
private ?PublicEmitter $emitter = null,
5250
/** @var ?non-empty-string $displayName */
5351
protected ?string $displayName = null,
5452
) {
@@ -154,20 +152,13 @@ public function addUser(IUser $user): void {
154152

155153
$this->dispatcher->dispatchTyped(new BeforeUserAddedEvent($this, $user));
156154

157-
if ($this->emitter) {
158-
$this->emitter->emit('\OC\Group', 'preAddUser', [$this, $user]);
159-
}
160155
foreach ($this->backends as $backend) {
161156
if ($backend->implementsActions(\OC\Group\Backend::ADD_TO_GROUP)) {
162157
/** @var IAddToGroupBackend $backend */
163158
$backend->addToGroup($user->getUID(), $this->gid);
164159
$this->users[$user->getUID()] = $user;
165160

166161
$this->dispatcher->dispatchTyped(new UserAddedEvent($this, $user));
167-
168-
if ($this->emitter) {
169-
$this->emitter->emit('\OC\Group', 'postAddUser', [$this, $user]);
170-
}
171162
return;
172163
}
173164
}
@@ -180,9 +171,6 @@ public function addUser(IUser $user): void {
180171
public function removeUser(IUser $user): void {
181172
$result = false;
182173
$this->dispatcher->dispatchTyped(new BeforeUserRemovedEvent($this, $user));
183-
if ($this->emitter) {
184-
$this->emitter->emit('\OC\Group', 'preRemoveUser', [$this, $user]);
185-
}
186174
foreach ($this->backends as $backend) {
187175
if ($backend->implementsActions(\OC\Group\Backend::REMOVE_FROM_GOUP) && $backend->inGroup($user->getUID(), $this->gid)) {
188176
/** @var IRemoveFromGroupBackend $backend */
@@ -192,9 +180,6 @@ public function removeUser(IUser $user): void {
192180
}
193181
if ($result) {
194182
$this->dispatcher->dispatchTyped(new UserRemovedEvent($this, $user));
195-
if ($this->emitter) {
196-
$this->emitter->emit('\OC\Group', 'postRemoveUser', [$this, $user]);
197-
}
198183
if ($this->users) {
199184
foreach ($this->users as $index => $groupUser) {
200185
if ($groupUser->getUID() === $user->getUID()) {
@@ -323,9 +308,6 @@ public function delete(): bool {
323308

324309
$result = false;
325310
$this->dispatcher->dispatchTyped(new BeforeGroupDeletedEvent($this));
326-
if ($this->emitter) {
327-
$this->emitter->emit('\OC\Group', 'preDelete', [$this]);
328-
}
329311
foreach ($this->backends as $backend) {
330312
if ($backend->implementsActions(\OC\Group\Backend::DELETE_GROUP)) {
331313
/** @var IDeleteGroupBackend $backend */
@@ -334,9 +316,6 @@ public function delete(): bool {
334316
}
335317
if ($result) {
336318
$this->dispatcher->dispatchTyped(new GroupDeletedEvent($this));
337-
if ($this->emitter) {
338-
$this->emitter->emit('\OC\Group', 'postDelete', [$this]);
339-
}
340319
}
341320
return $result;
342321
}

lib/private/Group/Manager.php

Lines changed: 24 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@
88

99
namespace OC\Group;
1010

11-
use OC\Hooks\PublicEmitter;
1211
use OC\Settings\AuthorizedGroupMapper;
1312
use OC\SubAdmin;
1413
use OCA\Settings\Settings\Admin\Users;
@@ -23,6 +22,7 @@
2322
use OCP\Group\Events\BeforeUserAddedEvent;
2423
use OCP\Group\Events\BeforeUserRemovedEvent;
2524
use OCP\Group\Events\GroupCreatedEvent;
25+
use OCP\Group\Events\GroupDeletedEvent;
2626
use OCP\GroupInterface;
2727
use OCP\ICache;
2828
use OCP\ICacheFactory;
@@ -34,21 +34,9 @@
3434
use 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
}

lib/public/IGroupManager.php

Lines changed: 1 addition & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -11,17 +11,7 @@
1111
use OCP\AppFramework\Attribute\Consumable;
1212

1313
/**
14-
* Class Manager
15-
*
16-
* Hooks available in scope \OC\Group:
17-
* - preAddUser(\OC\Group\Group $group, \OC\User\User $user)
18-
* - postAddUser(\OC\Group\Group $group, \OC\User\User $user)
19-
* - preRemoveUser(\OC\Group\Group $group, \OC\User\User $user)
20-
* - postRemoveUser(\OC\Group\Group $group, \OC\User\User $user)
21-
* - preDelete(\OC\Group\Group $group)
22-
* - postDelete(\OC\Group\Group $group)
23-
* - preCreate(string $groupId)
24-
* - postCreate(\OC\Group\Group $group)
14+
* Group manager interface.
2515
*
2616
* @since 8.0.0
2717
*/

tests/lib/Group/GroupTest.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -491,7 +491,7 @@ public function testSetDisplayNameDispatchesOldValue(): void {
491491
->with('group1', 'New Name')
492492
->willReturn(true);
493493

494-
$group = new Group('group1', [$backend], $dispatcher, $userManager, null, 'Old Name');
494+
$group = new Group('group1', [$backend], $dispatcher, $userManager, 'Old Name');
495495
$this->assertTrue($group->setDisplayName('New Name'));
496496
}
497497

0 commit comments

Comments
 (0)