diff options
author | Joas Schilling <coding@schilljs.com> | 2021-06-08 16:42:31 +0300 |
---|---|---|
committer | Joas Schilling <coding@schilljs.com> | 2021-08-24 17:55:34 +0300 |
commit | 2ea32cfbb5461b9207b6f6c503c0aca59c6f4744 (patch) | |
tree | 27d802c4c965f6addce64ba34f583d5bb3f14cd4 /lib | |
parent | 8a984779ea3bd268280b5fa3482e38ec63162a4c (diff) |
Check nested circles
Signed-off-by: Joas Schilling <coding@schilljs.com>
Diffstat (limited to 'lib')
-rw-r--r-- | lib/AppInfo/Application.php | 5 | ||||
-rw-r--r-- | lib/Listener/CircleMembershipListener.php | 22 |
2 files changed, 21 insertions, 6 deletions
diff --git a/lib/AppInfo/Application.php b/lib/AppInfo/Application.php index 43fb3fbef..bc4174d94 100644 --- a/lib/AppInfo/Application.php +++ b/lib/AppInfo/Application.php @@ -25,10 +25,6 @@ namespace OCA\Talk\AppInfo; use OCA\Circles\Events\AddingCircleMemberEvent; use OCA\Circles\Events\CircleDestroyedEvent; -use OCA\Circles\Events\CircleMemberAddedEvent; -use OCA\Circles\Events\CircleMemberRemovedEvent; -use OCA\Circles\Events\MembershipsCreatedEvent; -use OCA\Circles\Events\MembershipsRemovedEvent; use OCA\Circles\Events\RemovingCircleMemberEvent; use OCA\Files_Sharing\Event\BeforeTemplateRenderedEvent; use OCA\Talk\Activity\Listener as ActivityListener; @@ -53,6 +49,7 @@ use OCA\Talk\Files\TemplateLoader as FilesTemplateLoader; use OCA\Talk\Flow\RegisterOperationsListener; use OCA\Talk\Listener\BeforeUserLoggedOutListener; use OCA\Talk\Listener\CircleDeletedListener; +use OCA\Talk\Listener\CircleMembershipListener; use OCA\Talk\Listener\CSPListener; use OCA\Talk\Listener\FeaturePolicyListener; use OCA\Talk\Listener\GroupDeletedListener; diff --git a/lib/Listener/CircleMembershipListener.php b/lib/Listener/CircleMembershipListener.php index 71a96bae4..3bbc8921a 100644 --- a/lib/Listener/CircleMembershipListener.php +++ b/lib/Listener/CircleMembershipListener.php @@ -76,8 +76,26 @@ class CircleMembershipListener implements IEventListener { protected function addingCircleMemberEvent(AddingCircleMemberEvent $event): void { $roomsForTargetCircle = $this->manager->getRoomsForActor(Attendee::ACTOR_CIRCLES, $event->getCircle()->getSingleId()); + $roomsToAdd = []; + foreach ($roomsForTargetCircle as $room) { + $roomsToAdd[$room->getId()] = $room; + } + + // Check nested circles + $memberships = $event->getCircle()->getMemberships(); + foreach ($memberships as $membership) { + $parentId = $membership->getCircleId(); + $parentRooms = $this->manager->getRoomsForActor(Attendee::ACTOR_CIRCLES, $parentId); + foreach ($parentRooms as $room) { + if (isset($roomsToAdd[$room->getId()])) { + continue; + } + $roomsToAdd[$room->getId()] = $room; + } + } + - if (empty($roomsForTargetCircle)) { + if (empty($roomsToAdd)) { // The circle is not in any room => bye! return; } @@ -96,7 +114,7 @@ class CircleMembershipListener implements IEventListener { $userMembers = $basedOnCircle->getInheritedMembers(); foreach ($userMembers as $userMember) { - $this->addNewMemberToRooms($roomsForTargetCircle, $userMember); + $this->addNewMemberToRooms(array_values($roomsToAdd), $userMember); } } } |