diff --git a/db/update16.2.sql b/db/update16.2.sql index c6ffc46d79..150331a5bf 100644 --- a/db/update16.2.sql +++ b/db/update16.2.sql @@ -1,7 +1,7 @@ ALTER TABLE `zt_kanbanspace` ADD `type` varchar(50) NOT NULL AFTER `name`; UPDATE `zt_kanbanspace` SET `type` = 'cooperation'; ALTER TABLE `zt_kanban` ADD `performable` enum ('0', '1') NOT NULL DEFAULT '0' AFTER `archived`; -ALTER TABLE `zt_kanbancard` ADD `status` enum ('doing', 'done') NOT NULL DEFAULT 'doing' AFTER `name`; +ALTER TABLE `zt_kanbancard` ADD `status` varchar(30) NOT NULL AFTER `name`; ALTER TABLE `zt_job` ADD `sonarqubeServer` mediumint(8) unsigned NOT NULL AFTER `triggerType`; ALTER TABLE `zt_job` ADD `projectKey` varchar(255) NOT NULL AFTER `sonarqubeServer`; diff --git a/module/group/lang/resource.php b/module/group/lang/resource.php index dabeb585e3..e0a6e1816f 100644 --- a/module/group/lang/resource.php +++ b/module/group/lang/resource.php @@ -669,7 +669,8 @@ $lang->resource->kanban->assigntoCard = 'assigntoCard'; //$lang->resource->kanban->copyCard = 'copyCard'; $lang->resource->kanban->deleteCard = 'deleteCard'; $lang->resource->kanban->moveCard = 'moveCard'; -$lang->resource->kanban->editCardStatus = 'editCardStatus'; +$lang->resource->kanban->finishCard = 'finishCard'; +$lang->resource->kanban->activeCard = 'activeCard'; $lang->resource->kanban->setCardColor = 'setCardColor'; $lang->resource->kanban->laneMove = 'laneMove'; $lang->resource->kanban->viewArchivedColumn = 'viewArchivedColumn'; diff --git a/module/kanban/control.php b/module/kanban/control.php index b30c9c46ea..bde75c8692 100644 --- a/module/kanban/control.php +++ b/module/kanban/control.php @@ -733,21 +733,39 @@ class kanban extends control } /** - * Update card status. + * Finish a card. * * @param int $cardID * @param int $kanbanID * @access public * @return void */ - public function editCardStatus($cardID, $kanbanID) + public function finishCard($cardID, $kanbanID) { - $card = $this->kanban->getCardByID($cardID); - $card->status = $card->status == 'doing' ? 'done' : 'doing'; - - $this->dao->update(TABLE_KANBANCARD)->set('status')->eq($card->status)->where('id')->eq($cardID)->exec(); + $this->dao->update(TABLE_KANBANCARD)->set('status')->eq('done')->where('id')->eq($cardID)->exec(); if(dao::isError()) return $this->send(array('result' => 'fail', 'message' => dao::getError())); + if(isonlybody()) return print(js::reload('parent.parent')); + + $kanbanGroup = $this->kanban->getKanbanData($kanbanID); + return print(json_encode($kanbanGroup)); + } + + /** + * Active a card. + * + * @param int $cardID + * @param int $kanbanID + * @access public + * @return void + */ + public function activeCard($cardID, $kanbanID) + { + $this->dao->update(TABLE_KANBANCARD)->set('status')->eq('doing')->where('id')->eq($cardID)->exec(); + if(dao::isError()) return $this->send(array('result' => 'fail', 'message' => dao::getError())); + + if(isonlybody()) return print(js::reload('parent.parent')); + $kanbanGroup = $this->kanban->getKanbanData($kanbanID); return print(json_encode($kanbanGroup)); } diff --git a/module/kanban/js/view.js b/module/kanban/js/view.js index 6254102e2c..5e298ae439 100644 --- a/module/kanban/js/view.js +++ b/module/kanban/js/view.js @@ -257,7 +257,7 @@ function renderKanbanItem(item, $item) { var $title = $item.children('.title'); var privs = item.actions; - var printMoreBtn = (privs.includes('editCard') || privs.includes('editCardStatus') ||privs.includes('archiveCard') || privs.includes('copyCard') || privs.includes('deleteCard') || privs.includes('moveCard') || privs.includes('setCardColor')); + var printMoreBtn = (privs.includes('editCard') || privs.includes('finishCard') || privs.includes('activeCard') ||privs.includes('archiveCard') || privs.includes('copyCard') || privs.includes('deleteCard') || privs.includes('moveCard') || privs.includes('setCardColor')); if(privs.includes('sortCard')) $item.parent().addClass('sort'); if(!$title.length) @@ -447,17 +447,43 @@ function setCardColor(cardID, color, kanbanID, regionID) } /** - * Update card status. + * Finish a card. * * @param int $cardID * @param int $kanbanID + * @param int $regionID * @access public * @return void */ -function editCardStatus(cardID, kanbanID, regionID) +function finishCard(cardID, kanbanID, regionID) { if(!cardID) return false; - var url = createLink('kanban', 'editCardStatus', 'cardID=' + cardID + '&kanbanID=' + kanbanID); + var url = createLink('kanban', 'finishCard', 'cardID=' + cardID + '&kanbanID=' + kanbanID); + return $.ajax( + { + method: 'post', + dataType: 'json', + url: url, + success: function(data) + { + updateRegion(regionID, data[regionID]); + } + }); +} + +/** + * Active a card. + * + * @param int $cardID + * @param int $kanbanID + * @param int $regionID + * @access public + * @return void + */ +function activeCard(cardID, kanbanID, regionID) +{ + if(!cardID) return false; + var url = createLink('kanban', 'activeCard', 'cardID=' + cardID + '&kanbanID=' + kanbanID); return $.ajax( { method: 'post', @@ -722,22 +748,16 @@ function createCardMenu(options) var items = []; if(privs.includes('editCard')) items.push({label: kanbanLang.editCard, icon: 'edit', url: createLink('kanban', 'editCard', 'cardID=' + card.id, '', 'true'), className: 'iframe', attrs: {'data-toggle': 'modal', 'data-width': '80%'}}); - if(privs.includes('editCardStatus') && kanban.performable == 1) + if(kanban.performable == 1) { - var statusLang = ''; - var statusIcon = ''; - if(card.status == 'doing') + if(privs.includes('activeCard') && card.status != 'doing') { - statusLang = kanbanLang.finishCard; - statusIcon = 'checked'; + items.push({label: kanbanLang.activeCard, icon: 'magic', onClick: function(){activeCard(card.id, card.kanban, card.region);}}); } else { - statusLang = kanbanLang.activeCard; - statusIcon = 'magic'; + items.push({label: kanbanLang.finishCard, icon: 'checked', onClick: function(){finishCard(card.id, card.kanban, card.region);}}); } - - items.push({label: statusLang, icon: statusIcon, onClick: function(){editCardStatus(card.id, card.kanban, card.region);}}); } if(privs.includes('archiveCard') && kanban.archived == '1') items.push({label: kanbanLang.archiveCard, icon: 'card-archive', url: createLink('kanban', 'archiveCard', 'cardID=' + card.id), attrs: {'target': 'hiddenwin'}}); if(privs.includes('copyCard')) items.push({label: kanbanLang.copyCard, icon: 'copy', url: createLink('kanban', 'copyCard', 'cardID=' + card.id, '', 'true'), className: 'iframe', attrs: {'data-toggle': 'modal'}}); diff --git a/module/kanban/model.php b/module/kanban/model.php index b653ea8bd7..140289a6b0 100644 --- a/module/kanban/model.php +++ b/module/kanban/model.php @@ -872,7 +872,7 @@ class kanbanModel extends model ->andWhere('type')->eq('common') ->fetchAll(); - $actions = array('editCard', 'editCardStatus', 'archiveCard', 'deleteCard', 'moveCard', 'setCardColor', 'viewCard', 'sortCard'); + $actions = array('editCard', 'finishCard', 'activeCard', 'archiveCard', 'deleteCard', 'moveCard', 'setCardColor', 'viewCard', 'sortCard'); $cardGroup = array(); foreach($cellList as $cell) { diff --git a/module/kanban/view/viewcard.html.php b/module/kanban/view/viewcard.html.php index 7de50aaf78..2d9b94fb30 100644 --- a/module/kanban/view/viewcard.html.php +++ b/module/kanban/view/viewcard.html.php @@ -39,12 +39,19 @@ //common::printLink('kanban', 'assigntoCard', "cardID=$card->id", "{$lang->kanbancard->assign}", '', "class='btn btn-link iframe' title='{$lang->kanbancard->assign}'", true, true); if($kanban->archived) { - common::printLink('kanban', 'archiveCard', "cardID=$card->id", "{$lang->kanbancard->archive}", 'hiddenwin', "class='btn btn-link' title='{$lang->kanbancard->archive}'", true, true); + common::printLink('kanban', 'archiveCard', "cardID=$card->id", "{$lang->kanbancard->archive}", 'hiddenwin', "class='btn btn-link' title='{$lang->kanbancard->archive}'", true, true); echo "
"; } common::printLink('kanban', 'editCard', "cardID=$card->id", '', '', "class='btn btn-link iframe' data-width='80%' title='{$lang->kanbancard->edit}'", true, true); + + if($kanban->performable) + { + if($card->status == 'done') common::printLink('kanban', 'activeCard', "cardID={$card->id}&kanbanID={$kanban->id}", '', '', "class='btn btn-link iframe' title='{$lang->kanban->activeCard}'", true, true); + if($card->status == 'doing') common::printLink('kanban', 'finishCard', "cardID={$card->id}&kanbanID={$kanban->id}", '', '', "class='btn btn-link iframe' title='{$lang->kanban->finishCard}'", true, true); + } + common::printLink('kanban', 'copyCard', "cardID=$card->id", '', '', "class='btn btn-link iframe' title='{$lang->kanbancard->copy}'", true, true); common::printLink('kanban', 'deleteCard', "cardID=$card->id", '', 'hiddenwin', "class='btn btn-link' title='{$lang->kanbancard->delete}'",true, true); ?>