66 */
77namespace OCA \Deck \Listeners ;
88
9+ use OCA \Circles \Model \Member ;
910use OCA \Deck \Event \AclCreatedEvent ;
1011use OCA \Deck \Event \AclDeletedEvent ;
12+ use OCA \Deck \Service \CirclesService ;
1113use OCA \Files_Sharing \Event \UserShareAccessUpdatedEvent ;
1214use OCP \EventDispatcher \Event ;
1315use OCP \EventDispatcher \IEventDispatcher ;
1618use OCP \IUserManager ;
1719use OCP \Share \IShare ;
1820
21+ /** @template-implements IEventListener<Event|AclDeletedEvent|AclCreatedEvent> */
1922class 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