diff --git a/appinfo/routes.php b/appinfo/routes.php index f0b10b22a..6948f1b8c 100644 --- a/appinfo/routes.php +++ b/appinfo/routes.php @@ -101,6 +101,7 @@ return [ ['name' => 'stack_api#create', 'url' => '/api/v1.0/boards/{boardId}/stacks', 'verb' => 'POST'], ['name' => 'stack_api#update', 'url' => '/api/v1.0/boards/{boardId}/stacks/{stackId}', 'verb' => 'PUT'], ['name' => 'stack_api#delete', 'url' => '/api/v1.0/boards/{boardId}/stacks/{stackId}', 'verb' => 'DELETE'], + ['name' => 'stack_api#clone', 'url' => '/api/v1.0/boards/{boardId}/stacks/{stackId}/clone', 'verb' => 'POST'], ['name' => 'card_api#get', 'url' => '/api/v1.0/boards/{boardId}/stacks/{stackId}/cards/{cardId}', 'verb' => 'GET'], ['name' => 'card_api#create', 'url' => '/api/v1.0/boards/{boardId}/stacks/{stackId}/cards', 'verb' => 'POST'], diff --git a/lib/Db/AssignedLabels.php b/lib/Db/AssignedLabels.php index 68625aecb..3b59e451a 100644 --- a/lib/Db/AssignedLabels.php +++ b/lib/Db/AssignedLabels.php @@ -27,12 +27,13 @@ use JsonSerializable; class AssignedLabels extends RelationalEntity implements JsonSerializable { public $id; - protected $label; + protected $labelId; protected $cardId; public function __construct() { $this->addType('id', 'integer'); $this->addType('cardId', 'integer'); - $this->addResolvable('label'); + $this->addType('labelId', 'integer'); + } } diff --git a/lib/Db/AssignedLabelsMapper.php b/lib/Db/AssignedLabelsMapper.php index 236976695..85c957e91 100644 --- a/lib/Db/AssignedLabelsMapper.php +++ b/lib/Db/AssignedLabelsMapper.php @@ -38,7 +38,7 @@ class AssignedLabelsMapper extends DeckMapper { private $groupManager; public function __construct(IDBConnection $db, CardMapper $cardMapper, IUserManager $userManager, IGroupManager $groupManager) { - parent::__construct($db, 'deck_assigned_labels', Labels::class); + parent::__construct($db, 'deck_assigned_labels', AssignedLabels::class); $this->cardMapper = $cardMapper; $this->userManager = $userManager; $this->groupManager = $groupManager; @@ -50,9 +50,7 @@ class AssignedLabelsMapper extends DeckMapper { * @return array|Entity */ public function find($cardId) { - $sql = 'SELECT l.*,card_id FROM `*PREFIX*deck_assigned_labels` as al ' . - 'INNER JOIN `*PREFIX*deck_labels` as l ON l.id = al.label_id ' . - 'WHERE `card_id` = ?'; + $sql = 'SELECT * from `*PREFIX*deck_assigned_labels` where `card_id` = ?'; $labels = $this->findEntities($sql, [$cardId]); return $labels; diff --git a/lib/Service/StackService.php b/lib/Service/StackService.php index 65214528a..bc19211c6 100644 --- a/lib/Service/StackService.php +++ b/lib/Service/StackService.php @@ -57,7 +57,7 @@ class StackService { private $assignedUsersMapper; private $assignedLabelsMapper; private $attachmentService; - + private $activityManager; /** @var EventDispatcherInterface */ private $eventDispatcher; @@ -407,7 +407,7 @@ class StackService { $newStack = new Stack(); $newStack->setTitle($stack->getTitle() . ' (' . $this->l10n->t('copy') . ')'); $newStack->setBoardId($boardId); - $newStack->setOrder($stack->getOrder() +1); + $newStack->setOrder(999); $newStack = $this->stackMapper->insert($newStack); $this->activityManager->triggerEvent( @@ -421,9 +421,9 @@ class StackService { ); $cards = $this->cardMapper->findAll($id); - $c = []; + $newCardArray = []; foreach ($cards as $card) { - + $newCard = new Card(); $newCard->setTitle($card->getTitle()); $newCard->setStackId($newStack->getId()); @@ -441,45 +441,42 @@ class StackService { new FTSEvent( null, ['id' => $newCard->getId(), 'card' => $newCard, 'userId' => $owner, 'stackId' => $stackId] ) - ); + ); if ($boardId === $stack->getBoardId()) { - + $assignedLabels = $this->assignedLabelsMapper->find($card->getId()); - $l = []; + $newLabelArray = []; foreach ($assignedLabels as $assignedLabel) { - - $assignment = $assignedLabel; + + $assignment = new AssignedLabels(); $assignment->setCardId($newCard->getId()); + $assignment->setLabelId($assignedLabel->getLabelId()); $assignment = $this->assignedLabelsMapper->insert($assignment); - // $assignment = new AssignedLabels(); - // $assignment->setCardId($newCard->getId()); - // $assignment->setLabel($assignedLabel); - // $assignment = $this->assignedLabelsMapper->insert($assignment); - $l[] = $assignment; - } - $newCard->setLabels($l); - + $newLabelArray[] = $assignment; + } + $newCard->setLabels($newLabelArray); + $assignedUsers = $this->assignedUsersMapper->find($card->getId()); - $u = []; + $newUserArray = []; foreach ($assignedUsers as $assignedUser) { $assignment = new AssignedUsers(); $assignment->setCardId($newCard->getId()); $assignment->setParticipant($assignedUser->getParticipant()); $assignment->setType($assignedUser->getType()); $assignment = $this->assignedUsersMapper->insert($assignment); - $u[] = $assignment; + $newUserArray[] = $assignment; } - $newCard->setAssignedUsers($u); - $c[] = $newCard; + $newCard->setAssignedUsers($newUserArray); + $newCardArray[] = $newCard; } } - $newStack->setCards($c); + $this->enrichStackWithCards($newStack); return $newStack; } } diff --git a/src/store/stack.js b/src/store/stack.js index 9a90e25cc..504e3584f 100644 --- a/src/store/stack.js +++ b/src/store/stack.js @@ -58,9 +58,6 @@ export default { state.stacks.splice(existingIndex, 1) } }, - /* cloneStack(state, stack) { - this.commit('addStack', stack) - }, */ updateStack(state, stack) { const existingIndex = state.stacks.findIndex(_stack => _stack.id === stack.id) if (existingIndex !== -1) {