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-08-25 18:30:34 +0300
committerJoas Schilling <coding@schilljs.com>2021-08-25 18:31:26 +0300
commit86e2d11a6e2cdf775644add43021653eef032a3f (patch)
treead740553f59e4459d1379134b5236091f9582c57 /lib
parenta073dc4f5ef63b5c068a56aa69b4178757b237cc (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.php56
-rw-r--r--lib/Chat/SystemMessage/Listener.php4
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()]);
}
}
}