diff options
author | Joas Schilling <coding@schilljs.com> | 2021-08-25 18:30:34 +0300 |
---|---|---|
committer | Joas Schilling <coding@schilljs.com> | 2021-08-25 18:31:26 +0300 |
commit | 86e2d11a6e2cdf775644add43021653eef032a3f (patch) | |
tree | ad740553f59e4459d1379134b5236091f9582c57 /lib | |
parent | a073dc4f5ef63b5c068a56aa69b4178757b237cc (diff) |
Add system messages for circles
Signed-off-by: Joas Schilling <coding@schilljs.com>
Diffstat (limited to 'lib')
-rw-r--r-- | lib/Chat/Parser/SystemMessage.php | 56 | ||||
-rw-r--r-- | lib/Chat/SystemMessage/Listener.php | 4 |
2 files changed, 60 insertions, 0 deletions
diff --git a/lib/Chat/Parser/SystemMessage.php b/lib/Chat/Parser/SystemMessage.php index 00029c2be..ad63f4f7e 100644 --- a/lib/Chat/Parser/SystemMessage.php +++ b/lib/Chat/Parser/SystemMessage.php @@ -23,6 +23,7 @@ declare(strict_types=1); namespace OCA\Talk\Chat\Parser; +use OCA\Circles\CirclesManager; use OCA\DAV\CardDAV\PhotoCache; use OCA\Talk\Exceptions\ParticipantNotFoundException; use OCA\Talk\GuestManager; @@ -72,6 +73,10 @@ class SystemMessage { /** @var string[] */ protected $groupNames = []; /** @var string[] */ + protected $circleNames = []; + /** @var string[] */ + protected $circleLinks = []; + /** @var string[] */ protected $guestNames = []; public function __construct(IUserManager $userManager, @@ -302,6 +307,22 @@ class SystemMessage { } elseif ($cliIsActor) { $parsedMessage = $this->l->t('An administrator removed group {group}'); } + } elseif ($message === 'circle_added') { + $parsedParameters['circle'] = $this->getCircle($parameters['circle']); + $parsedMessage = $this->l->t('{actor} added circle {circle}'); + if ($currentUserIsActor) { + $parsedMessage = $this->l->t('You added circle {circle}'); + } elseif ($cliIsActor) { + $parsedMessage = $this->l->t('An administrator added circle {circle}'); + } + } elseif ($message === 'circle_removed') { + $parsedParameters['circle'] = $this->getCircle($parameters['circle']); + $parsedMessage = $this->l->t('{actor} removed circle {circle}'); + if ($currentUserIsActor) { + $parsedMessage = $this->l->t('You removed circle {circle}'); + } elseif ($cliIsActor) { + $parsedMessage = $this->l->t('An administrator removed circle {circle}'); + } } elseif ($message === 'moderator_promoted') { $parsedParameters['user'] = $this->getUser($parameters['user']); $parsedMessage = $this->l->t('{actor} promoted {user} to moderator'); @@ -585,6 +606,27 @@ class SystemMessage { ]; } + protected function getCircle(string $circleId): array { + if (!isset($this->circleNames[$circleId])) { + $this->loadCircleDetails($circleId); + } + + if (!isset($this->circleNames[$circleId])) { + return [ + 'type' => 'highlight', + 'id' => $circleId, + 'name' => $circleId, + ]; + } + + return [ + 'type' => 'circle', + 'id' => $circleId, + 'name' => $this->circleNames[$circleId], + 'url' => $this->circleLinks[$circleId], + ]; + } + protected function getDisplayName(string $uid): string { $user = $this->userManager->get($uid); if ($user instanceof IUser) { @@ -601,6 +643,20 @@ class SystemMessage { return $gid; } + protected function loadCircleDetails(string $circleId): void { + try { + $circlesManager = \OC::$server->get(CirclesManager::class); + $circlesManager->startSuperSession(); + $circle = $circlesManager->getCircle($circleId); + $circlesManager->stopSession(); + + $this->circleNames[$circleId] = $circle->getDisplayName(); + $this->circleLinks[$circleId] = $circle->getUrl(); + } catch (\Exception $e) { + $circlesManager->stopSession(); + } + } + protected function getGuest(Room $room, string $actorId): array { if (!isset($this->guestNames[$actorId])) { $this->guestNames[$actorId] = $this->getGuestName($room, $actorId); diff --git a/lib/Chat/SystemMessage/Listener.php b/lib/Chat/SystemMessage/Listener.php index 87b6c2564..810f2487c 100644 --- a/lib/Chat/SystemMessage/Listener.php +++ b/lib/Chat/SystemMessage/Listener.php @@ -353,6 +353,8 @@ class Listener implements IEventListener { foreach ($event->getAttendees() as $attendee) { if ($attendee->getActorType() === Attendee::ACTOR_GROUPS) { $this->sendSystemMessage($event->getRoom(), 'group_added', ['group' => $attendee->getActorId()]); + } elseif ($attendee->getActorType() === Attendee::ACTOR_CIRCLES) { + $this->sendSystemMessage($event->getRoom(), 'circle_added', ['circle' => $attendee->getActorId()]); } } } @@ -361,6 +363,8 @@ class Listener implements IEventListener { foreach ($event->getAttendees() as $attendee) { if ($attendee->getActorType() === Attendee::ACTOR_GROUPS) { $this->sendSystemMessage($event->getRoom(), 'group_removed', ['group' => $attendee->getActorId()]); + } elseif ($attendee->getActorType() === Attendee::ACTOR_CIRCLES) { + $this->sendSystemMessage($event->getRoom(), 'circle_removed', ['circle' => $attendee->getActorId()]); } } } |