From 0adde5be6763f65a1a8cdc97cade67251b7d3023 Mon Sep 17 00:00:00 2001 From: tianshujie Date: Wed, 19 Jan 2022 13:56:50 +0800 Subject: [PATCH 1/4] * Remove useless code. --- module/kanban/control.php | 3 +-- module/kanban/js/view.js | 4 ++-- module/kanban/model.php | 2 +- 3 files changed, 4 insertions(+), 5 deletions(-) diff --git a/module/kanban/control.php b/module/kanban/control.php index 89bb9f9c97..c0ed2d837d 100644 --- a/module/kanban/control.php +++ b/module/kanban/control.php @@ -669,12 +669,11 @@ class kanban extends control * @param int $kanbanID * @param int $regionID * @param int $groupID - * @param int $laneID * @param int $columnID * @access public * @return void */ - public function createCard($kanbanID = 0, $regionID = 0, $groupID = 0, $laneID = 0, $columnID = 0) + public function createCard($kanbanID = 0, $regionID = 0, $groupID = 0, $columnID = 0) { if($_POST) { diff --git a/module/kanban/js/view.js b/module/kanban/js/view.js index f5d6bf9f11..12ffc1def1 100644 --- a/module/kanban/js/view.js +++ b/module/kanban/js/view.js @@ -145,7 +145,7 @@ function renderHeaderCol($column, column, $header, kanbanData) if(columnPrivs.includes('createCard') && column.parent != -1) { - var cardUrl = createLink('kanban', 'createCard', 'kanbanID=' + kanbanID + '®ionID=' + regionID + '&groupID=' + groupID + '&laneID=' + laneID + '&columnID=' + columnID); + var cardUrl = createLink('kanban', 'createCard', 'kanbanID=' + kanbanID + '®ionID=' + regionID + '&groupID=' + groupID + '&columnID=' + columnID); addItemBtn = ['', '', ''].join(''); } @@ -489,7 +489,7 @@ function openAddTaskForm($element) var laneID = $element.closest('.kanban-lane').data('id'); var columnID = $element.closest('.kanban-col').data('id'); var status = $element.closest('.kanban-col').data('type'); - var modalUrl = createLink('kanban', 'createCard', 'kanbanID=' + kanbanID + '®ionID=' + regionID + '&groupID=' + groupID + '&laneID=' + laneID + '&columnID=' + columnID); + var modalUrl = createLink('kanban', 'createCard', 'kanbanID=' + kanbanID + '®ionID=' + regionID + '&groupID=' + groupID + '&columnID=' + columnID); $.zui.modalTrigger.show( { url: modalUrl, diff --git a/module/kanban/model.php b/module/kanban/model.php index aeee70f5ec..69ea99f957 100644 --- a/module/kanban/model.php +++ b/module/kanban/model.php @@ -460,7 +460,7 @@ class kanbanModel extends model $cardID = $this->dao->lastInsertID(); $this->file->saveUpload('kanbancard', $cardID); $this->file->updateObjectID($this->post->uid, $cardID, 'kanbancard'); - $this->addKanbanCell($kanbanID, $this->post->lane, $columnID, 'common', $cardID); + $this->addKanbanCell($kanbanID, (int)$this->post->lane, $columnID, 'common', $cardID); return $cardID; } From 1c60beb471cdfd5b5d42effe0d79c3ae42c77d2b Mon Sep 17 00:00:00 2001 From: tianshujie Date: Wed, 19 Jan 2022 16:02:34 +0800 Subject: [PATCH 2/4] * Finish task #48005. --- module/group/lang/resource.php | 12 +++++------- module/kanban/control.php | 20 ++++++++++++++++++++ module/kanban/js/view.js | 22 +++++++++++++--------- module/kanban/model.php | 12 ++++++++---- 4 files changed, 46 insertions(+), 20 deletions(-) diff --git a/module/group/lang/resource.php b/module/group/lang/resource.php index e72e4e7126..c28fbfb220 100644 --- a/module/group/lang/resource.php +++ b/module/group/lang/resource.php @@ -670,7 +670,6 @@ $lang->resource->kanban->deleteCard = 'deleteCard'; $lang->resource->kanban->moveCard = 'moveCard'; $lang->resource->kanban->setCardColor = 'setCardColor'; $lang->resource->kanban->laneMove = 'laneMove'; -$lang->resource->kanban->cardsSort = 'cardsSort'; $lang->resource->kanban->viewArchivedColumn = 'viewArchivedColumn'; $lang->resource->kanban->viewArchivedCard = 'viewArchivedCard'; $lang->resource->kanban->restoreCard = 'restoreCard'; @@ -714,12 +713,11 @@ $lang->kanban->methodOrder[170] = 'assigntoCard'; $lang->kanban->methodOrder[175] = 'moveCard'; $lang->kanban->methodOrder[180] = 'setCardColor'; $lang->kanban->methodOrder[185] = 'laneMove'; -$lang->kanban->methodorder[190] = 'cardsSort'; -$lang->kanban->methodOrder[195] = 'viewArchivedColumn'; -$lang->kanban->methodorder[200] = 'viewArchivedCard'; -$lang->kanban->methodorder[205] = 'archiveColumn'; -$lang->kanban->methodorder[210] = 'restoreCard'; -$lang->kanban->methodorder[215] = 'setLaneHeight'; +$lang->kanban->methodOrder[190] = 'viewArchivedColumn'; +$lang->kanban->methodorder[195] = 'viewArchivedCard'; +$lang->kanban->methodorder[200] = 'archiveColumn'; +$lang->kanban->methodorder[205] = 'restoreCard'; +$lang->kanban->methodorder[210] = 'setLaneHeight'; /* Execution. */ $lang->resource->execution = new stdclass(); diff --git a/module/kanban/control.php b/module/kanban/control.php index c0ed2d837d..fc6f3c8072 100644 --- a/module/kanban/control.php +++ b/module/kanban/control.php @@ -781,6 +781,26 @@ class kanban extends control die(json_encode($kanbanGroup)); } + /** + * Sort cards. + * + * @param int $kanbanID + * @param int $laneID + * @param int $columnID + * @param string $cards + * @access public + * @return void + */ + public function sortCard($kanbanID, $laneID, $columnID, $cards = '') + { + if(empty($cards)) return; + + $this->dao->update(TABLE_KANBANCELL)->set('cards')->eq(",$cards,")->where('kanban')->eq($kanbanID)->andWhere('lane')->eq($laneID)->andWhere('`column`')->eq($columnID)->exec(); + + if(dao::isError()) return $this->send(array('result' => 'fail', 'message' => dao::getError())); + return $this->send(array('result' => 'success', 'message' => $this->lang->saveSuccess)); + } + /** * Archive a card. * diff --git a/module/kanban/js/view.js b/module/kanban/js/view.js index 12ffc1def1..246d4696c6 100644 --- a/module/kanban/js/view.js +++ b/module/kanban/js/view.js @@ -258,6 +258,8 @@ 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')); + + if(privs.includes('sortCard')) $item.parent().addClass('sort'); if(!$title.length) { if(privs.includes('viewCard')) $title = $('').appendTo($item).attr('href', createLink('kanban', 'viewCard', 'cardID=' + item.id, '', true)); @@ -930,29 +932,29 @@ $(function() var $cards = null; $('#kanban').sortable( { - selector: '.region, .kanban-board, .kanban-lane', - trigger: '.region.sort > .region-header, .kanban-board.sort > .kanban-header > .kanban-group-header, .kanban-lane.sort > .kanban-lane-name', + selector: '.region, .kanban-board, .kanban-lane, .kanban-item.sort', + trigger: '.region.sort > .region-header, .kanban-board.sort > .kanban-header > .kanban-group-header, .kanban-lane.sort > .kanban-lane-name, .kanban-item.sort', container: function($ele) { return $ele.parent(); }, targetSelector: function($ele) { - /* Sort regions */ + /* Sort regions. */ if($ele.hasClass('region')) { sortType = 'region'; return $ele.parent().children('.region'); } - /* Sort boards */ + /* Sort boards. */ if($ele.hasClass('kanban-board')) { sortType = 'board'; return $ele.parent().children('.kanban-board'); } - /* Sort lanes */ + /* Sort lanes. */ if($ele.hasClass('kanban-lane')) { sortType = 'lane'; @@ -961,10 +963,10 @@ $(function() return $ele.parent().children('.kanban-lane'); } - /* Sort lanes */ + /* Sort cards. */ if($ele.hasClass('kanban-item')) { - sortType = 'item'; + sortType = 'card'; return $ele.parent().children('.kanban-item'); } }, @@ -1015,9 +1017,11 @@ $(function() var region = e.element.parent().parent().data('id'); url = createLink('kanban', 'sortLane', 'region=' + region + '&lanes=' + orders.join(',')); } - if(sortType == 'item') + if(sortType == 'card') { - url = createLink('task', 'sort', 'kanbanID=' + kanbanID + '&tasks=' + orders.join(',')); + var laneID = e.element.closest('.kanban-lane').data('id'); + var columnID = e.element.closest('.kanban-col').data('id'); + url = createLink('kanban', 'sortCard', 'kanbanID=' + kanbanID + '&laneID=' + laneID + '&columnID=' + columnID + '&cards=' + orders.join(',')); } if(!url) return true; diff --git a/module/kanban/model.php b/module/kanban/model.php index 69ea99f957..a94c618d1d 100644 --- a/module/kanban/model.php +++ b/module/kanban/model.php @@ -858,17 +858,21 @@ class kanbanModel extends model */ public function getCardGroupByKanban($kanbanID) { - $cards = $this->dao->select('t1.*,t2.kanban,t2.lane,t2.column')->from(TABLE_KANBANCARD)->alias('t1') + /* Get card data.*/ + $sql = $this->dao->select('t1.*,t2.kanban,t2.lane,t2.column')->from(TABLE_KANBANCARD)->alias('t1') ->leftJoin(TABLE_KANBANCELL)->alias('t2')->on('t1.kanban=t2.kanban') ->where('deleted')->eq(0) ->andWhere("INSTR(t2.cards, CONCAT(',',t1.id,','))")->gt(0) ->andWhere('archived')->eq(0) ->andWhere('t2.kanban')->eq($kanbanID) ->andWhere('t2.type')->eq('common') - //->orderBy('`order` asc') - ->fetchAll('id'); + ->get(); + + $sql .= "ORDER BY FIND_IN_SET(t1.id, t2.cards)"; + $stmt = $this->dbh->query($sql); + $cards = $stmt->fetchAll(); + $actions = array('editCard', 'archiveCard', 'deleteCard', 'moveCard', 'setCardColor', 'viewCard', 'sortCard'); - $actions = array('editCard', 'archiveCard', 'deleteCard', 'moveCard', 'setCardColor', 'viewCard'); $cardGroup = array(); foreach($cards as $card) { From 131cdb614c2aab5790b79df6daee3a2abc321aa1 Mon Sep 17 00:00:00 2001 From: tianshujie Date: Wed, 19 Jan 2022 16:33:57 +0800 Subject: [PATCH 3/4] * Modify card query logic. --- module/kanban/model.php | 37 +++++++++++++++++++------------------ 1 file changed, 19 insertions(+), 18 deletions(-) diff --git a/module/kanban/model.php b/module/kanban/model.php index a94c618d1d..b13cd1bbce 100644 --- a/module/kanban/model.php +++ b/module/kanban/model.php @@ -859,30 +859,31 @@ class kanbanModel extends model public function getCardGroupByKanban($kanbanID) { /* Get card data.*/ - $sql = $this->dao->select('t1.*,t2.kanban,t2.lane,t2.column')->from(TABLE_KANBANCARD)->alias('t1') - ->leftJoin(TABLE_KANBANCELL)->alias('t2')->on('t1.kanban=t2.kanban') + $cards = $this->dao->select('*')->from(TABLE_KANBANCARD)->alias('t1') ->where('deleted')->eq(0) - ->andWhere("INSTR(t2.cards, CONCAT(',',t1.id,','))")->gt(0) - ->andWhere('archived')->eq(0) - ->andWhere('t2.kanban')->eq($kanbanID) - ->andWhere('t2.type')->eq('common') - ->get(); + ->andWhere('kanban')->eq($kanbanID) + ->fetchAll('id'); - $sql .= "ORDER BY FIND_IN_SET(t1.id, t2.cards)"; - $stmt = $this->dbh->query($sql); - $cards = $stmt->fetchAll(); - $actions = array('editCard', 'archiveCard', 'deleteCard', 'moveCard', 'setCardColor', 'viewCard', 'sortCard'); + $cellList = $this->dao->select('*')->from(TABLE_KANBANCELL)->where('kanban')->eq($kanbanID)->fetchAll(); + $actions = array('editCard', 'archiveCard', 'deleteCard', 'moveCard', 'setCardColor', 'viewCard', 'sortCard'); $cardGroup = array(); - foreach($cards as $card) + foreach($cellList as $cell) { - $card->actions = array(); - foreach($actions as $action) - { - if(common::hasPriv('kanban', $action)) $card->actions[] = $action; - } + $cardIdList = array_filter(explode(',', $cell->cards)); - $cardGroup[$card->lane]['column' . $card->column][] = $card; + if(empty($cardIdList)) continue; + foreach($cardIdList as $cardID) + { + $card = zget($cards, $cardID); + $card->actions = array(); + foreach($actions as $action) + { + if(common::hasPriv('kanban', $action)) $card->actions[] = $action; + } + + $cardGroup[$cell->lane]['column' . $cell->column][] = $card; + } } return $cardGroup; From 5bd18ec7612b4d3659b7eb3bf01dbed086e7dc99 Mon Sep 17 00:00:00 2001 From: tianshujie Date: Wed, 19 Jan 2022 16:43:00 +0800 Subject: [PATCH 4/4] * Add conditional judgment. --- module/kanban/model.php | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/module/kanban/model.php b/module/kanban/model.php index b13cd1bbce..92af56ceb0 100644 --- a/module/kanban/model.php +++ b/module/kanban/model.php @@ -862,9 +862,13 @@ class kanbanModel extends model $cards = $this->dao->select('*')->from(TABLE_KANBANCARD)->alias('t1') ->where('deleted')->eq(0) ->andWhere('kanban')->eq($kanbanID) + ->andWhere('archived')->eq(0) ->fetchAll('id'); - $cellList = $this->dao->select('*')->from(TABLE_KANBANCELL)->where('kanban')->eq($kanbanID)->fetchAll(); + $cellList = $this->dao->select('*')->from(TABLE_KANBANCELL) + ->where('kanban')->eq($kanbanID) + ->andWhere('type')->eq('common') + ->fetchAll(); $actions = array('editCard', 'archiveCard', 'deleteCard', 'moveCard', 'setCardColor', 'viewCard', 'sortCard'); $cardGroup = array(); @@ -875,6 +879,8 @@ class kanbanModel extends model if(empty($cardIdList)) continue; foreach($cardIdList as $cardID) { + if(!isset($cards[$cardID])) continue; + $card = zget($cards, $cardID); $card->actions = array(); foreach($actions as $action)