From 0dbb278a988b540f4d4f4db1cb88db7aaad558f4 Mon Sep 17 00:00:00 2001 From: Luka Trovic Date: Tue, 5 Apr 2022 18:06:33 +0200 Subject: [PATCH] fix: clone cards while cloning boards Signed-off-by: Luka Trovic --- lib/Service/BoardService.php | 34 ++++++++++++++++++++++++++++++---- 1 file changed, 30 insertions(+), 4 deletions(-) diff --git a/lib/Service/BoardService.php b/lib/Service/BoardService.php index e1cfc8023..13fb3ec4c 100644 --- a/lib/Service/BoardService.php +++ b/lib/Service/BoardService.php @@ -47,9 +47,11 @@ use OCP\EventDispatcher\IEventDispatcher; use OCP\IConfig; use OCP\IGroupManager; use OCP\IL10N; +use OCA\Deck\Db\Card; use OCA\Deck\Db\Board; use OCA\Deck\Db\BoardMapper; use OCA\Deck\Db\LabelMapper; +use OCA\Deck\Event\CardCreatedEvent; use OCP\IUserManager; use OCA\Deck\BadRequestException; use OCP\IURLGenerator; @@ -673,15 +675,39 @@ class BoardService { $stacks = $this->stackMapper->findAll($id); foreach ($stacks as $stack) { - $newStack = new Stack(); - $newStack->setTitle($stack->getTitle()); - $newStack->setBoardId($newBoard->getId()); - $this->stackMapper->insert($newStack); + $this->cloneStack($stack, $newBoard->getId()); } return $newBoard; } + private function cloneStack($stack, $newBoardId) + { + $newStack = new Stack(); + $newStack->setTitle($stack->getTitle()); + $newStack->setBoardId($newBoardId); + $insertedStack = $this->stackMapper->insert($newStack); + $cards = $this->cardMapper->findAll($stack->getId()); + + foreach ($cards as $card) { + $newCard = new Card(); + $newCard->setTitle($card->getTitle()); + $newCard->setStackId($insertedStack->getId()); + $newCard->setType($card->getType()); + $newCard->setOrder($card->getOrder()); + $newCard->setOwner($card->getOwner()); + $newCard->setDescription($card->getDescription()); + $newCard->setDuedate($card->getDuedate()); + $newCard = $this->cardMapper->insert($newCard); + + $this->activityManager->triggerEvent(ActivityManager::DECK_OBJECT_CARD, $newCard, ActivityManager::SUBJECT_CARD_CREATE); + $this->changeHelper->cardChanged($newCard->getId(), false); + $this->eventDispatcher->dispatchTyped(new CardCreatedEvent($newCard)); + } + + return $stack; + } + public function transferBoardOwnership(int $boardId, string $newOwner, bool $changeContent = false): Board { \OC::$server->getDatabaseConnection()->beginTransaction(); try {