diff --git a/module/kanban/control.php b/module/kanban/control.php index 0c95ce5e27..cf45f3ef81 100644 --- a/module/kanban/control.php +++ b/module/kanban/control.php @@ -597,6 +597,9 @@ class kanban extends control } else { + $column = $this->kanban->getColumnById($columnID); + if($column->parent) $this->kanban->processCards($column); + $this->kanban->archiveColumn($columnID); if(dao::isError()) die(js::error(dao::getError())); @@ -677,7 +680,11 @@ class kanban extends control } else { - $this->kanban->delete(TABLE_KANBANCOLUMN, $columnID); + $column = $this->kanban->getColumnById($columnID); + if($column->parent) $this->kanban->processCards($column); + + $this->dao->delete()->from(TABLE_KANBANCOLUMN)->where('id')->eq($columnID)->exec(); + die(js::reload('parent')); } } diff --git a/module/kanban/js/view.js b/module/kanban/js/view.js index 00f61487e8..e059349e82 100644 --- a/module/kanban/js/view.js +++ b/module/kanban/js/view.js @@ -829,8 +829,8 @@ function createColumnMenu(options) items.push({label: kanbanLang.createColumnOnRight, icon: 'col-add-right', url: createLink('kanban', 'createColumn', 'columnID=' + column.id + '&position=right'), className: 'iframe', attrs: {'data-toggle': 'modal'}}); } if(privs.includes('copyColumn')) items.push({label: kanbanLang.copyColumn, icon: 'copy', url: createLink('kanban', 'copyColumn', 'columnID=' + column.id), className: 'iframe', attrs: {'data-toggle': 'modal'}}); - if(privs.includes('archiveColumn') && kanban.archived == '1' && column.$kanbanData.columns.length > 1) items.push({label: kanbanLang.archiveColumn, icon: 'card-archive', url: createLink('kanban', 'archiveColumn', 'columnID=' + column.id), attrs: {'target': 'hiddenwin'}}); - if(privs.includes('deleteColumn') && column.$kanbanData.columns.length > 1) items.push({label: kanbanLang.deleteColumn, icon: 'trash', url: createLink('kanban', 'deleteColumn', 'columnID=' + column.id), attrs: {'target': 'hiddenwin'}}); + if(privs.includes('archiveColumn') && kanban.archived == '1') items.push({label: kanbanLang.archiveColumn, icon: 'card-archive', url: createLink('kanban', 'archiveColumn', 'columnID=' + column.id), attrs: {'target': 'hiddenwin'}}); + if(privs.includes('deleteColumn')) items.push({label: kanbanLang.deleteColumn, icon: 'trash', url: createLink('kanban', 'deleteColumn', 'columnID=' + column.id), attrs: {'target': 'hiddenwin'}}); var bounds = options.$trigger[0].getBoundingClientRect(); items.$options = {x: bounds.right, y: bounds.top}; diff --git a/module/kanban/lang/zh-cn.php b/module/kanban/lang/zh-cn.php index a6737a8cf0..a4cabb7628 100644 --- a/module/kanban/lang/zh-cn.php +++ b/module/kanban/lang/zh-cn.php @@ -262,9 +262,9 @@ $lang->kanbancolumn->childName = '子列名称'; $lang->kanbancolumn->childColor = '子状态颜色'; $lang->kanbancolumn->empty = '暂时没有看板列'; -$lang->kanbancolumn->confirmArchive = '您确认归档该列吗?归档列后,该列和列中所有卡片将被隐藏,您可以在区域-已归档中查看已归档的列。'; -$lang->kanbancolumn->confirmDelete = '您确认删除该列吗?删除列后,该列中所有卡片也会被删除。'; -$lang->kanbancolumn->confirmRestore = '您确定要还原该看板列吗?还原看板列后,该看板列和看板列中所有的任务将同时还原到之前的位置。'; +$lang->kanbancolumn->confirmArchive = '您确认归档该列吗?归档列后,该列将被隐藏,列中所有卡片移动到兄弟列或父列,您可以在区域-已归档中查看已归档的列。'; +$lang->kanbancolumn->confirmDelete = '您确认删除该列吗?删除列后,该列中所有卡片会被移动到兄弟列或父列。'; +$lang->kanbancolumn->confirmRestore = '您确定要还原该看板列吗?还原后,该看板列将回到之前的位置。'; $lang->kanbanlane = new stdclass(); $lang->kanbanlane->name = $lang->kanban->laneName; diff --git a/module/kanban/model.php b/module/kanban/model.php index b8b8adc898..4bfd8e3886 100644 --- a/module/kanban/model.php +++ b/module/kanban/model.php @@ -2791,6 +2791,39 @@ class kanbanModel extends model */ public function restoreColumn($columnID) { + $column = $this->getColumnByID($columnID); + + if($column->parent) + { + $parent = $this->getColumnByID($column->parent); + + /* If the parent column is normal now, put its card into child column. */ + if($parent->parent != -1) + { + $parentCells = $this->dao->select('*')->from(TABLE_KANBANCELL) + ->where('`column`')->eq($column->parent) + ->andWhere('type')->eq('common') + ->fetchAll('id'); + + foreach($parentCells as $cell) + { + $this->dao->update(TABLE_KANBANCELL)->set('cards')->eq($cell->cards) + ->where('lane')->eq($cell->lane) + ->andWhere('`column`')->eq($columnID) + ->andWhere('type')->eq('common') + ->exec(); + + $this->dao->update(TABLE_KANBANCELL)->set('cards')->eq('') + ->where('lane')->eq($cell->lane) + ->andWhere('`column`')->eq($cell->column) + ->andWhere('type')->eq('common') + ->exec(); + } + + $this->dao->update(TABLE_KANBANCOLUMN)->set('parent')->eq(-1)->where('id')->eq($column->parent)->exec(); + } + } + $this->dao->update(TABLE_KANBANCOLUMN) ->set('archived')->eq(0) ->where('id')->eq($columnID) @@ -2843,6 +2876,53 @@ class kanbanModel extends model if(!dao::isError()) return common::createChanges($oldCard, $card); } + /** + * Process cards when delete a column. + * + * @param object $column + * @access public + * @return void + */ + public function processCards($column) + { + $firstColumnID = $this->dao->select('id')->from(TABLE_KANBANCOLUMN) + ->where('parent')->eq($column->parent) + ->andWhere('id')->ne($column->id) + ->andWhere('deleted')->eq('0') + ->andWhere('archived')->eq('0') + ->orderBy('`order` asc') + ->fetch('id'); + + $extendID = $firstColumnID; + if(!$firstColumnID) + { + $extendID = $column->parent; + $this->dao->update(TABLE_KANBANCOLUMN)->set('parent')->eq(0)->where('id')->eq($column->parent)->exec(); + } + + $cells = $this->dao->select('*')->from(TABLE_KANBANCELL) + ->where('`column`')->eq($column->id) + ->andWhere('type')->eq('common') + ->fetchAll('id'); + + foreach($cells as $cell) + { + $extendCards = $this->dao->select('cards')->from(TABLE_KANBANCELL) + ->where('lane')->eq($cell->lane) + ->andWhere('`column`')->eq($extendID) + ->andWhere('type')->eq('common') + ->fetch('cards'); + + $extendCards = $extendCards ? $extendCards . ltrim($cell->cards, ',') : $cell->cards; + + $this->dao->update(TABLE_KANBANCELL)->set('cards')->eq($extendCards) + ->where('lane')->eq($cell->lane) + ->andWhere('`column`')->eq($extendID) + ->andWhere('type')->eq('common') + ->exec(); + } + } + /** * Get space by id. * @@ -3148,18 +3228,6 @@ class kanbanModel extends model case 'deletecolumn' : if($object->deleted != '0') return false; - if($object->parent > 0) - { - $childrenCount = $this->dao->select('COUNT(id) AS count')->from(TABLE_KANBANCOLUMN) - ->where('parent')->eq($object->parent) - ->andWhere('deleted')->eq('0') - ->andWhere('archived')->eq('0') - ->fetch('count'); - - return $childrenCount > 2; - } - - $count = $this->dao->select('COUNT(id) AS count')->from(TABLE_KANBANCOLUMN) ->where('region')->eq($object->region) ->andWhere('parent')->in('0,-1')