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);
}
}