From 74e0149a6dcc4b7fc83a4a0eaca76637f00075cc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julius=20H=C3=A4rtl?= Date: Mon, 14 Mar 2022 17:56:07 +0100 Subject: [PATCH] Reuse single board transfer for all user boards MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Julius Härtl --- lib/Command/TransferOwnership.php | 8 +++-- lib/Service/BoardService.php | 54 +++++++++++++------------------ 2 files changed, 27 insertions(+), 35 deletions(-) diff --git a/lib/Command/TransferOwnership.php b/lib/Command/TransferOwnership.php index 3b42132ca..715200f75 100644 --- a/lib/Command/TransferOwnership.php +++ b/lib/Command/TransferOwnership.php @@ -77,12 +77,14 @@ final class TransferOwnership extends Command { if ($boardId) { $this->boardService->transferBoardOwnership($boardId, $newOwner, $remapAssignment); - $output->writeln("Board " . $board->getTitle() . " from ". $board->getOwner() ." transferred to $newOwner completed"); + $output->writeln("Board " . $board->getTitle() . " from ". $board->getOwner() ." transferred to $newOwner completed"); return 0; } - $this->boardService->transferOwnership($owner, $newOwner, $remapAssignment); - $output->writeln("All boards from $owner to $newOwner transferred"); + foreach ($this->boardService->transferOwnership($owner, $newOwner, $remapAssignment) as $board) { + $output->writeln(" - " . $board->getTitle() . " transferred"); + } + $output->writeln("All boards from $owner to $newOwner transferred"); return 0; } diff --git a/lib/Service/BoardService.php b/lib/Service/BoardService.php index 04321eb8f..0bbde4cb8 100644 --- a/lib/Service/BoardService.php +++ b/lib/Service/BoardService.php @@ -678,42 +678,32 @@ class BoardService { return $newBoard; } - public function transferBoardOwnership(int $boardId, string $newOwner, $changeContent = false): void { - $board = $this->boardMapper->find($boardId); - $previousOwner = $board->getOwner(); - $this->clearBoardFromCache($board); - $this->aclMapper->deleteParticipantFromBoard($boardId, Acl::PERMISSION_TYPE_USER, $newOwner); - $this->boardMapper->transferOwnership($previousOwner, $newOwner, $boardId); + public function transferBoardOwnership(int $boardId, string $newOwner, bool $changeContent = false): Board { + \OC::$server->getDatabaseConnection()->beginTransaction(); + try { + $board = $this->boardMapper->find($boardId); + $previousOwner = $board->getOwner(); + $this->clearBoardFromCache($board); + $this->aclMapper->deleteParticipantFromBoard($boardId, Acl::PERMISSION_TYPE_USER, $newOwner); + $this->boardMapper->transferOwnership($previousOwner, $newOwner, $boardId); - // Optionally also change user assignments and card owner information - if ($changeContent) { - $this->assignedUsersMapper->remapAssignedUser($boardId, $previousOwner, $newOwner); - $this->cardMapper->remapCardOwner($boardId, $previousOwner, $newOwner); + // Optionally also change user assignments and card owner information + if ($changeContent) { + $this->assignedUsersMapper->remapAssignedUser($boardId, $previousOwner, $newOwner); + $this->cardMapper->remapCardOwner($boardId, $previousOwner, $newOwner); + } + \OC::$server->getDatabaseConnection()->commit(); + return $this->boardMapper->find($boardId); + } catch (\Throwable $e) { + \OC::$server->getDatabaseConnection()->rollBack(); + throw $e; } } - public function transferOwnership(string $owner, string $newOwner, $changeContent = false): void { - \OC::$server->getDatabaseConnection()->beginTransaction(); - try { - $boards = $this->boardMapper->findAllByUser($owner); - foreach ($boards as $board) { - $this->clearBoardFromCache($board); - } - - $this->boardMapper->transferOwnership($owner, $newOwner); - // Optionally also change user assignments and card owner information - if ($changeContent) { - foreach ($boards as $board) { - $this->clearBoardFromCache($board); - $this->aclMapper->deleteParticipantFromBoard($board->getId(), Acl::PERMISSION_TYPE_USER, $newOwner); - $this->assignedUsersMapper->remapAssignedUser($board->getId(), $owner, $newOwner); - $this->cardMapper->remapCardOwner($board->getId(), $owner, $newOwner); - } - } - - \OC::$server->getDatabaseConnection()->commit(); - } catch (\Throwable $e) { - \OC::$server->getDatabaseConnection()->rollBack(); + public function transferOwnership(string $owner, string $newOwner, bool $changeContent = false): \Generator { + $boards = $this->boardMapper->findAllByUser($owner); + foreach ($boards as $board) { + yield $this->transferBoardOwnership($board->getId(), $newOwner, $changeContent); } }