From fc9fa5dc2598a7af67619ffc02e4940b3d30543b Mon Sep 17 00:00:00 2001 From: Sergey Shliakhov Date: Mon, 25 May 2020 09:46:57 +0200 Subject: [PATCH] Update docs Signed-off-by: Sergey Shliakhov fix: conflicts --- docs/User_documentation_en.md | 5 +++ lib/Command/TransferOwnership.php | 52 +++++++++++-------------------- lib/Db/AclMapper.php | 17 ++++++++++ lib/Db/AssignmentMapper.php | 16 ++++++++++ lib/Db/BoardMapper.php | 16 ++++++++++ lib/Db/CardMapper.php | 16 ++++++++++ lib/Service/BoardService.php | 18 +++++++++++ 7 files changed, 107 insertions(+), 33 deletions(-) diff --git a/docs/User_documentation_en.md b/docs/User_documentation_en.md index 25ea8f8ee..040808f62 100644 --- a/docs/User_documentation_en.md +++ b/docs/User_documentation_en.md @@ -14,6 +14,7 @@ Overall, Deck is easy to use. You can create boards, add users, share the Deck, 3. [Handle cards options](#3-handle-cards-options) 4. [Archive old tasks](#4-archive-old-tasks) 5. [Manage your board](#5-manage-your-board) +6. [New owner for the deck entities](#8-new-owner-for-the-deck-entities) ### 1. Create my first board In this example, we're going to create a board and share it with an other nextcloud user. @@ -91,3 +92,7 @@ For example the search `project tag:ToDo assigned:alice assigned:bob` will retur Other text tokens will be used to perform a case-insensitive search on the card title and description In addition wuotes can be used to pass a query with spaces, e.g. `"Exact match with spaces"` or `title:"My card"`. + +### 8. New owner for the deck entities +You can transfer ownership of boards, cards, etc to a new user, using `occ` command `deck:transfer-ownership` +`$ php occ deck:transfer-ownership owner newOwner` diff --git a/lib/Command/TransferOwnership.php b/lib/Command/TransferOwnership.php index e7b242efb..e2a7c67ce 100644 --- a/lib/Command/TransferOwnership.php +++ b/lib/Command/TransferOwnership.php @@ -1,8 +1,8 @@ boardService = $boardService; + } + protected function configure() { $this ->setName('deck:transfer-ownership') @@ -19,45 +28,22 @@ final class TransferOwnership extends Command { InputArgument::REQUIRED, 'Owner uid' ) - ->addArgument( - 'newOwner', - InputArgument::REQUIRED, - 'New owner uid' - ); + ->addArgument( + 'newOwner', + InputArgument::REQUIRED, + 'New owner uid' + ); } protected function execute(InputInterface $input, OutputInterface $output) { $owner = $input->getArgument('owner'); $newOwner = $input->getArgument('newOwner'); - $db = \OC::$server->getDatabaseConnection(); - $output->writeln("Transfer deck entities from $owner to $newOwner"); - $params = [ - 'owner' => $owner, - 'newOwner' => $newOwner - ]; + $output->writeln("Transfer deck entities from $owner to $newOwner"); - $output->writeln('update oc_deck_assigned_users'); - $stmt = $db->prepare('UPDATE `oc_deck_assigned_users` SET `participant` = :newOwner WHERE `participant` = :owner'); - $stmt->execute($params); + $this->boardService->transferOwnership($owner, $newOwner); - $output->writeln('update oc_deck_attachment'); - $stmt = $db->prepare('UPDATE `oc_deck_attachment` SET `created_by` = :newOwner WHERE `created_by` = :owner'); - $stmt->execute($params); - - $output->writeln('update oc_deck_boards'); - $stmt = $db->prepare('UPDATE `oc_deck_boards` SET `owner` = :newOwner WHERE `owner` = :owner'); - $stmt->execute($params); - - $output->writeln('update oc_deck_board_acl'); - $stmt = $db->prepare('UPDATE `oc_deck_board_acl` SET `participant` = :newOwner WHERE `participant` = :owner'); - $stmt->execute($params); - - $output->writeln('update oc_deck_cards'); - $stmt = $db->prepare('UPDATE `oc_deck_cards` SET `owner` = :newOwner WHERE `owner` = :owner'); - $stmt->execute($params); - - $output->writeln("Transfer deck entities from $owner to $newOwner completed"); - } + $output->writeln("Transfer deck entities from $owner to $newOwner completed"); + } } diff --git a/lib/Db/AclMapper.php b/lib/Db/AclMapper.php index 4eb6a59c6..721ff1b6e 100644 --- a/lib/Db/AclMapper.php +++ b/lib/Db/AclMapper.php @@ -57,4 +57,21 @@ class AclMapper extends DeckMapper implements IPermissionMapper { $sql = 'SELECT * from *PREFIX*deck_board_acl WHERE type = ? AND participant = ?'; return $this->findEntities($sql, [$type, $participant]); } + + /** + * @param $ownerId + * @param $newOwnerId + * @return void + */ + public function transferOwnership($ownerId, $newOwnerId) + { + $params = [ + 'owner' => $ownerId, + 'newOwner' => $newOwnerId, + 'type' => Acl::PERMISSION_TYPE_USER + ]; + $sql = "UPDATE `{$this->tableName}` SET `participant` = :newOwner WHERE `participant` = :owner AND `type` = :type"; + $stmt = $this->execute($sql, $params); + $stmt->closeCursor(); + } } diff --git a/lib/Db/AssignmentMapper.php b/lib/Db/AssignmentMapper.php index 275dd1f77..5ed3ce115 100644 --- a/lib/Db/AssignmentMapper.php +++ b/lib/Db/AssignmentMapper.php @@ -146,4 +146,20 @@ class AssignmentMapper extends QBMapper implements IPermissionMapper { } return null; } + + /** + * @param $ownerId + * @param $newOwnerId + * @return void + */ + public function transferOwnership($ownerId, $newOwnerId) + { + $params = [ + 'owner' => $ownerId, + 'newOwner' => $newOwnerId + ]; + $sql = "UPDATE `{$this->tableName}` SET `participant` = :newOwner WHERE `participant` = :owner"; + $stmt = $this->execute($sql, $params); + $stmt->closeCursor(); + } } diff --git a/lib/Db/BoardMapper.php b/lib/Db/BoardMapper.php index 6b08000ba..4e0af34fe 100644 --- a/lib/Db/BoardMapper.php +++ b/lib/Db/BoardMapper.php @@ -475,4 +475,20 @@ class BoardMapper extends QBMapper implements IPermissionMapper { return null; }); } + + /** + * @param $ownerId + * @param $newOwnerId + * @return void + */ + public function transferOwnership($ownerId, $newOwnerId) + { + $params = [ + 'owner' => $ownerId, + 'newOwner' => $newOwnerId + ]; + $sql = "UPDATE `{$this->tableName}` SET `owner` = :newOwner WHERE `owner` = :owner"; + $stmt = $this->execute($sql, $params); + $stmt->closeCursor(); + } } diff --git a/lib/Db/CardMapper.php b/lib/Db/CardMapper.php index 529808f55..432862b05 100644 --- a/lib/Db/CardMapper.php +++ b/lib/Db/CardMapper.php @@ -586,4 +586,20 @@ class CardMapper extends QBMapper implements IPermissionMapper { return null; }); } + + /** + * @param $ownerId + * @param $newOwnerId + * @return void + */ + public function transferOwnership($ownerId, $newOwnerId) + { + $params = [ + 'owner' => $ownerId, + 'newOwner' => $newOwnerId + ]; + $sql = "UPDATE `{$this->tableName}` SET `owner` = :newOwner WHERE `owner` = :owner"; + $stmt = $this->execute($sql, $params); + $stmt->closeCursor(); + } } diff --git a/lib/Service/BoardService.php b/lib/Service/BoardService.php index 568299c53..9f81cc4c7 100644 --- a/lib/Service/BoardService.php +++ b/lib/Service/BoardService.php @@ -30,6 +30,7 @@ use OCA\Deck\AppInfo\Application; use OCA\Deck\Db\Acl; use OCA\Deck\Db\AclMapper; use OCA\Deck\Db\AssignmentMapper; +use OCA\Deck\Db\CardMapper; use OCA\Deck\Db\ChangeHelper; use OCA\Deck\Db\IPermissionMapper; use OCA\Deck\Db\Label; @@ -69,6 +70,8 @@ class BoardService { private $activityManager; private $eventDispatcher; private $changeHelper; + private $cardMapper; + private $boardsCache = null; private $urlGenerator; @@ -83,6 +86,7 @@ class BoardService { PermissionService $permissionService, NotificationHelper $notificationHelper, AssignmentMapper $assignedUsersMapper, + CardMapper $cardMapper, IUserManager $userManager, IGroupManager $groupManager, ActivityManager $activityManager, @@ -107,6 +111,7 @@ class BoardService { $this->changeHelper = $changeHelper; $this->userId = $userId; $this->urlGenerator = $urlGenerator; + $this->cardMapper = $cardMapper; } /** @@ -673,6 +678,19 @@ class BoardService { return $newBoard; } + /** + * @param $ownerId + * @param $newOwnerId + * @return void + */ + public function transferOwnership($owner, $newOwner) + { + $this->boardMapper->transferOwnership($owner, $newOwner); + $this->assignedUsersMapper->transferOwnership($owner, $newOwner); + $this->aclMapper->transferOwnership($owner, $newOwner); + $this->cardMapper->transferOwnership($owner, $newOwner); + } + private function enrichWithStacks($board, $since = -1) { $stacks = $this->stackMapper->findAll($board->getId(), null, null, $since);