From 7b0694844cd92b8973a3fedb693f7a825ae6fd53 Mon Sep 17 00:00:00 2001 From: mayue Date: Fri, 21 Jan 2022 08:32:21 +0800 Subject: [PATCH] * Finish task #47998. --- db/update16.2.sql | 3 ++- module/group/lang/resource.php | 2 ++ module/kanban/control.php | 20 ++++++++++++++++ module/kanban/js/view.js | 44 ++++++++++++++++++++++++++++++++-- module/kanban/lang/en.php | 2 ++ module/kanban/lang/zh-cn.php | 2 ++ module/kanban/model.php | 2 +- 7 files changed, 71 insertions(+), 4 deletions(-) diff --git a/db/update16.2.sql b/db/update16.2.sql index 75c4536ef7..c6ffc46d79 100644 --- a/db/update16.2.sql +++ b/db/update16.2.sql @@ -1,6 +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_job` ADD `sonarqubeServer` mediumint(8) unsigned NOT NULL AFTER `triggerType`; -ALTER TABLE `zt_job` ADD `projectKey` varchar(255) NOT NULL AFTER `sonarqubeServer`; \ No newline at end of file +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 0a0706d26a..dabeb585e3 100644 --- a/module/group/lang/resource.php +++ b/module/group/lang/resource.php @@ -644,6 +644,7 @@ $lang->resource->kanban->close = 'close'; $lang->resource->kanban->delete = 'delete'; $lang->resource->kanban->createRegion = 'createRegion'; $lang->resource->kanban->editRegion = 'editRegion'; +$lang->resource->kanban->setDoneFunction = 'setDoneFunction'; $lang->resource->kanban->sortRegion = 'sortRegion'; $lang->resource->kanban->sortGroup = 'sortGroup'; $lang->resource->kanban->deleteRegion = 'deleteRegion'; @@ -668,6 +669,7 @@ $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->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 0e2ce2cccd..b30c9c46ea 100644 --- a/module/kanban/control.php +++ b/module/kanban/control.php @@ -732,6 +732,26 @@ class kanban extends control $this->display(); } + /** + * Update card status. + * + * @param int $cardID + * @param int $kanbanID + * @access public + * @return void + */ + public function editCardStatus($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(); + if(dao::isError()) return $this->send(array('result' => 'fail', 'message' => dao::getError())); + + $kanbanGroup = $this->kanban->getKanbanData($kanbanID); + return print(json_encode($kanbanGroup)); + } + /** * View a card. * diff --git a/module/kanban/js/view.js b/module/kanban/js/view.js index 246d4696c6..6254102e2c 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('archiveCard') || privs.includes('copyCard') || privs.includes('deleteCard') || privs.includes('moveCard') || privs.includes('setCardColor')); + var printMoreBtn = (privs.includes('editCard') || privs.includes('editCardStatus') ||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) @@ -437,7 +437,6 @@ function setCardColor(cardID, color, kanbanID, regionID) url: url, success: function(data) { - regions = data; updateRegion(regionID, data[regionID]); }, error: function(xhr, status, error) @@ -447,6 +446,30 @@ function setCardColor(cardID, color, kanbanID, regionID) }); } +/** + * Update card status. + * + * @param int $cardID + * @param int $kanbanID + * @access public + * @return void + */ +function editCardStatus(cardID, kanbanID, regionID) +{ + if(!cardID) return false; + var url = createLink('kanban', 'editCardStatus', 'cardID=' + cardID + '&kanbanID=' + kanbanID); + return $.ajax( + { + method: 'post', + dataType: 'json', + url: url, + success: function(data) + { + updateRegion(regionID, data[regionID]); + } + }); +} + /** * Update a region. * @@ -699,6 +722,23 @@ 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) + { + var statusLang = ''; + var statusIcon = ''; + if(card.status == 'doing') + { + statusLang = kanbanLang.finishCard; + statusIcon = 'checked'; + } + else + { + statusLang = kanbanLang.activeCard; + statusIcon = 'magic'; + } + + 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'}}); if(privs.includes('deleteCard')) items.push({label: kanbanLang.deleteCard, icon: 'trash', url: createLink('kanban', 'deleteCard', 'cardID=' + card.id), attrs: {'target': 'hiddenwin'}}); diff --git a/module/kanban/lang/en.php b/module/kanban/lang/en.php index 8570d1359f..2cc8d684f4 100644 --- a/module/kanban/lang/en.php +++ b/module/kanban/lang/en.php @@ -27,6 +27,8 @@ $lang->kanban->sortColumn = 'Sort Column'; $lang->kanban->deleteColumn = 'Delete Column'; $lang->kanban->createCard = 'Create Card'; $lang->kanban->editCard = 'Edit Card'; +$lang->kanban->finishCard = 'Finish Card'; +$lang->kanban->activeCard = 'Active Card'; $lang->kanban->viewCard = 'View Card'; $lang->kanban->archiveCard = 'Archive Card'; $lang->kanban->sortCard = 'Sort Card'; diff --git a/module/kanban/lang/zh-cn.php b/module/kanban/lang/zh-cn.php index 048e6a91fb..88abfbd07a 100644 --- a/module/kanban/lang/zh-cn.php +++ b/module/kanban/lang/zh-cn.php @@ -27,6 +27,8 @@ $lang->kanban->sortColumn = '看板列排序'; $lang->kanban->deleteColumn = '删除看板列'; $lang->kanban->createCard = '创建卡片'; $lang->kanban->editCard = '编辑卡片'; +$lang->kanban->finishCard = '完成卡片'; +$lang->kanban->activeCard = '激活卡片'; $lang->kanban->viewCard = '查看卡片'; $lang->kanban->archiveCard = '归档卡片'; $lang->kanban->sortCard = '卡片排序'; diff --git a/module/kanban/model.php b/module/kanban/model.php index b24674dfb9..b653ea8bd7 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', 'archiveCard', 'deleteCard', 'moveCard', 'setCardColor', 'viewCard', 'sortCard'); + $actions = array('editCard', 'editCardStatus', 'archiveCard', 'deleteCard', 'moveCard', 'setCardColor', 'viewCard', 'sortCard'); $cardGroup = array(); foreach($cellList as $cell) {