Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/nextcloud/spreed.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorJoas Schilling <coding@schilljs.com>2021-06-08 16:42:31 +0300
committerJoas Schilling <coding@schilljs.com>2021-08-24 17:55:34 +0300
commit2ea32cfbb5461b9207b6f6c503c0aca59c6f4744 (patch)
tree27d802c4c965f6addce64ba34f583d5bb3f14cd4 /lib
parent8a984779ea3bd268280b5fa3482e38ec63162a4c (diff)
Check nested circles
Signed-off-by: Joas Schilling <coding@schilljs.com>
Diffstat (limited to 'lib')
-rw-r--r--lib/AppInfo/Application.php5
-rw-r--r--lib/Listener/CircleMembershipListener.php22
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);
}
}
}