From f686b1e75b694d2eae7d307051f26e41e411278d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julius=20H=C3=A4rtl?= Date: Thu, 6 Sep 2018 21:09:21 +0200 Subject: [PATCH] Activity: trigger activity on board share/unshare MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Julius Härtl --- lib/Activity/ActivityManager.php | 25 ++++++++++++++++++++++++- lib/Activity/DeckProvider.php | 21 ++++++++++++++++++++- lib/Service/BoardService.php | 3 ++- 3 files changed, 46 insertions(+), 3 deletions(-) diff --git a/lib/Activity/ActivityManager.php b/lib/Activity/ActivityManager.php index 3dbcd5852..6805e26cb 100644 --- a/lib/Activity/ActivityManager.php +++ b/lib/Activity/ActivityManager.php @@ -24,6 +24,8 @@ namespace OCA\Deck\Activity; use InvalidArgumentException; +use OCA\Deck\Db\Acl; +use OCA\Deck\Db\AclMapper; use OCA\Deck\Db\AssignedUsers; use OCA\Deck\Db\Attachment; use OCA\Deck\Db\AttachmentMapper; @@ -50,6 +52,7 @@ class ActivityManager { private $boardMapper; private $cardMapper; private $attachmentMapper; + private $aclMapper; private $stackMapper; private $l10n; @@ -63,6 +66,7 @@ class ActivityManager { const SUBJECT_BOARD_DELETE = 'board_delete'; const SUBJECT_BOARD_RESTORE = 'board_restore'; const SUBJECT_BOARD_SHARE = 'board_share'; + const SUBJECT_BOARD_UNSHARE = 'board_unshare'; const SUBJECT_BOARD_ARCHIVE = 'board_archive'; const SUBJECT_BOARD_UNARCHIVE = 'board_unarchive'; @@ -105,6 +109,7 @@ class ActivityManager { CardMapper $cardMapper, StackMapper $stackMapper, AttachmentMapper $attachmentMapper, + AclMapper $aclMapper, IL10N $l10n, $userId ) { @@ -114,6 +119,7 @@ class ActivityManager { $this->cardMapper = $cardMapper; $this->stackMapper = $stackMapper; $this->attachmentMapper = $attachmentMapper; + $this->aclMapper = $aclMapper; $this->l10n = $l10n; $this->userId = $userId; } @@ -137,7 +143,10 @@ class ActivityManager { $subject = $ownActivity ? $this->l10n->t('You have restored the board {board}') : $this->l10n->t('{user} has restored the board {board}'); break; case self::SUBJECT_BOARD_SHARE: - $subject = $ownActivity ? $this->l10n->t('You have shared the board {board} with {sharee}') : $this->l10n->t('{user} has shared the board {board} with {sharee}'); + $subject = $ownActivity ? $this->l10n->t('You have shared the board {board} with {acl}') : $this->l10n->t('{user} has shared the board {board} with {sharee}'); + break; + case self::SUBJECT_BOARD_UNSHARE: + $subject = $ownActivity ? $this->l10n->t('You have removed {acl} from the board {board}') : $this->l10n->t('{user} has removed {acl} from the board {board}'); break; case self::SUBJECT_BOARD_ARCHIVE: $subject = $ownActivity ? $this->l10n->t('You have archived the board {board}') : $this->l10n->t('{user} has archived the board {board}'); @@ -343,6 +352,10 @@ class ActivityManager { $subjectParams = $this->findDetailsForAttachment($entity->getId()); $object = $subjectParams['card']; break; + case self::SUBJECT_BOARD_SHARE: + case self::SUBJECT_BOARD_UNSHARE: + $subjectParams = $this->findDetailsForAcl($entity->getId()); + break; default: throw new \Exception('Unknown subject for activity.'); break; @@ -423,6 +436,7 @@ class ActivityManager { break; case Label::class: case Stack::class: + case Acl::class: $objectId = $entity->getBoardId(); break; default: @@ -459,4 +473,13 @@ class ActivityManager { return array_merge($data, ['attachment' => $attachment]); } + private function findDetailsForAcl($aclId) { + $acl = $this->aclMapper->find($aclId); + $board = $this->boardMapper->find($acl->getBoardId()); + return [ + 'acl' => $acl, + 'board' => $board + ]; + } + } diff --git a/lib/Activity/DeckProvider.php b/lib/Activity/DeckProvider.php index d63205873..0ee4d5f95 100644 --- a/lib/Activity/DeckProvider.php +++ b/lib/Activity/DeckProvider.php @@ -25,6 +25,7 @@ namespace OCA\Deck\Activity; use cogpowered\FineDiff\Diff; +use OCA\Deck\Db\Acl; use OCP\Activity\IEvent; use OCP\Activity\IProvider; use OCP\IURLGenerator; @@ -162,7 +163,7 @@ class DeckProvider implements IProvider { } if (array_key_exists('assigneduser', $subjectParams)) { - $user = $userManager->get($subjectParams['assigneduser']); + $user = $this->userManager->get($subjectParams['assigneduser']); $params['assigneduser'] = [ 'type' => 'user', 'id' => $subjectParams['assigneduser'], @@ -170,6 +171,24 @@ class DeckProvider implements IProvider { ]; } + if (array_key_exists('acl', $subjectParams)) { + if ($subjectParams['acl']['type'] === Acl::PERMISSION_TYPE_USER) { + $user = $this->userManager->get($subjectParams['acl']['participant']); + $params['acl'] = [ + 'type' => 'user', + 'id' => $subjectParams['acl']['participant'], + 'name' => $user !== null ? $user->getDisplayName() : $subjectParams['acl']['participant'] + ]; + } else { + $params['acl'] = [ + 'type' => 'highlight', + 'id' => $subjectParams['acl']['participant'], + 'name' => $subjectParams['acl']['participant'] + ]; + } + + } + if (array_key_exists('before', $subjectParams)) { $params['before'] = [ 'type' => 'highlight', diff --git a/lib/Service/BoardService.php b/lib/Service/BoardService.php index de9852004..b421a46d8 100644 --- a/lib/Service/BoardService.php +++ b/lib/Service/BoardService.php @@ -434,8 +434,8 @@ class BoardService { $this->notificationHelper->sendBoardShared($boardId, $acl); $newAcl = $this->aclMapper->insert($acl); - $this->boardMapper->mapAcl($newAcl); $this->activityManager->triggerEvent(ActivityManager::DECK_OBJECT_BOARD, $newAcl, ActivityManager::SUBJECT_BOARD_SHARE); + $this->boardMapper->mapAcl($newAcl); return $newAcl; } @@ -502,6 +502,7 @@ class BoardService { $this->assignedUsersMapper->delete($assignement); } } + $this->activityManager->triggerEvent(ActivityManager::DECK_OBJECT_BOARD, $acl, ActivityManager::SUBJECT_BOARD_UNSHARE); return $this->aclMapper->delete($acl); }