Skip to content

Commit a799ab4

Browse files
committed
emit UserShareAccessUpdatedEvent for all members of a circle
Signed-off-by: grnd-alt <git@belakkaf.net>
1 parent dfe25f2 commit a799ab4

File tree

1 file changed

+24
-7
lines changed

1 file changed

+24
-7
lines changed

lib/Listeners/AclCreatedRemovedListener.php

Lines changed: 24 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,10 @@
66
*/
77
namespace OCA\Deck\Listeners;
88

9+
use OCA\Circles\Model\Member;
910
use OCA\Deck\Event\AclCreatedEvent;
1011
use OCA\Deck\Event\AclDeletedEvent;
12+
use OCA\Deck\Service\CirclesService;
1113
use OCA\Files_Sharing\Event\UserShareAccessUpdatedEvent;
1214
use OCP\EventDispatcher\Event;
1315
use OCP\EventDispatcher\IEventDispatcher;
@@ -16,8 +18,10 @@
1618
use OCP\IUserManager;
1719
use OCP\Share\IShare;
1820

21+
/** @template-implements IEventListener<Event|AclDeletedEvent|AclCreatedEvent> */
1922
class AclCreatedRemovedListener implements IEventListener {
2023
public function __construct(
24+
private CirclesService $circlesService,
2125
private IGroupManager $groupManager,
2226
private IEventDispatcher $eventDispatcher,
2327
private IUserManager $userManager,
@@ -30,14 +34,27 @@ public function handle(Event $event): void {
3034
}
3135

3236
$acl = $event->getAcl();
33-
if ($acl->getType() === IShare::TYPE_GROUP) {
34-
$group = $this->groupManager->get($acl->getParticipant());
35-
foreach ($group->getUsers() as $user) {
37+
switch ($acl->getType()) {
38+
case IShare::TYPE_GROUP:
39+
$group = $this->groupManager->get($acl->getParticipant());
40+
foreach ($group->getUsers() as $user) {
41+
$this->eventDispatcher->dispatchTyped(new UserShareAccessUpdatedEvent($user));
42+
}
43+
break;
44+
case IShare::TYPE_CIRCLE:
45+
$circle = $this->circlesService->getCircle($acl->getParticipant());
46+
$members = array_filter($circle->getInheritedMembers(), static function (Member $member) {
47+
return $member->getUserType() === Member::TYPE_USER;
48+
});
49+
foreach ($members as $member) {
50+
$user = $this->userManager->get($member->getUserId());
51+
$this->eventDispatcher->dispatchTyped(new UserShareAccessUpdatedEvent($user));
52+
}
53+
break;
54+
default:
55+
$user = $this->userManager->get($acl->getParticipant());
3656
$this->eventDispatcher->dispatchTyped(new UserShareAccessUpdatedEvent($user));
37-
}
38-
} else {
39-
$user = $this->userManager->get($acl->getParticipant());
40-
$this->eventDispatcher->dispatchTyped(new UserShareAccessUpdatedEvent($user));
57+
break;
4158
}
4259
}
4360
}

0 commit comments

Comments
 (0)