diff --git a/module/execution/js/kanban.js b/module/execution/js/kanban.js index f3cf82656a..95fee6f6f1 100644 --- a/module/execution/js/kanban.js +++ b/module/execution/js/kanban.js @@ -816,7 +816,7 @@ function handleDropTask($element, event, kanban) var cardID = $card.data().id; var fromColType = $oldCol.data('type'); var toColType = $newCol.data('type'); - var regionID = $card.closest('.region').data().id; + var regionID = groupBy == 'default' ? $card.closest('.region').data().id : executionID; changeCardColType(cardID, oldCol.id, newCol.id, oldLane.id, newLane.id, cardType, fromColType, toColType, regionID); } @@ -831,8 +831,6 @@ var kanbanActionHandlers = */ function handleKanbanAction(action, $element, event, kanban) { - if(groupBy && groupBy != 'default') return false; - $('.kanban').attr('data-action-enabled', action); var handler = kanbanActionHandlers[action]; if(handler) handler($element, event, kanban); @@ -988,7 +986,8 @@ function changeCardColType(cardID, fromColID, toColID, fromLaneID, toLaneID, car url: link, success: function(data) { - updateRegion(regionID, data[regionID]); + data = groupBy == 'default' ? data[regionID] : data[groupBy]; + updateRegion(regionID, data); }, error: function(xhr, status, error) { @@ -1017,6 +1016,8 @@ function changeCardColType(cardID, fromColID, toColID, fromLaneID, toLaneID, car function deleteCard(objectType, objectID, regionID) { $.zui.ContextMenu.hide(); + + regionID = regionID ? regionID : 0; setTimeout(function() { var objectLang = objectType + 'Lang'; @@ -1033,7 +1034,8 @@ function deleteCard(objectType, objectID, regionID) url: url, success: function(data) { - updateRegion(regionID, data[regionID]); + data = groupBy == 'default' ? data[regionID] : data[groupBy]; + updateRegion(regionID, data); } }); }, 200) @@ -1230,7 +1232,7 @@ function initKanban($kanban) onRenderLaneName: renderLaneName, onRenderHeaderCol: renderHeaderCol, onRenderCount: renderCount, - droppable: groupBy == 'default' ? {target: findDropColumns, finish:handleFinishDrop} : false, + droppable: {target: findDropColumns, finish:handleFinishDrop}, virtualize: true, virtualCardList: true }); diff --git a/module/kanban/control.php b/module/kanban/control.php index da91c5fb76..6654116088 100644 --- a/module/kanban/control.php +++ b/module/kanban/control.php @@ -1479,9 +1479,10 @@ class kanban extends control $this->loadModel($objectType)->delete(constant($table), $objectID); if(dao::isError()) return $this->send(array('result' => 'fail', 'message' => dao::getError())); - $kanbanID = $this->kanban->getKanbanIDByregion($regionID); + $kanbanID = $regionID ? $this->kanban->getKanbanIDByregion($regionID) : $this->session->execution; $browseType = $this->config->vision == 'lite' ? 'task' : $this->session->execLaneType; - $kanbanGroup = $this->kanban->getRDKanban($kanbanID, $browseType); + $groupBy = $this->session->execGroupBy ? $this->session->execGroupBy : 'default'; + $kanbanGroup = $this->kanban->getRDKanban($kanbanID, $browseType, 'id_desc', 0, $groupBy); return print(json_encode($kanbanGroup)); } @@ -1715,12 +1716,22 @@ class kanban extends control */ public function ajaxMoveCard($cardID = 0, $fromColID = 0, $toColID = 0, $fromLaneID = 0, $toLaneID = 0, $executionID = 0, $browseType = 'all', $groupBy = '', $regionID = 0, $orderBy = '') { - $fromCell = $this->dao->select('id, cards')->from(TABLE_KANBANCELL) + $fromCell = $this->dao->select('id, cards, lane')->from(TABLE_KANBANCELL) ->where('kanban')->eq($executionID) - ->andWhere('lane')->eq($fromLaneID) ->andWhere('`column`')->eq($fromColID) + ->beginIF(!$groupBy or $groupBy == 'default')->andWhere('lane')->eq($fromLaneID)->fi() + ->beginIF($groupBy and $groupBy != 'default') + ->andWhere('type')->eq($browseType) + ->andWhere('cards')->like("%,$cardID,%") + ->fi() ->fetch(); + if($groupBy and $groupBy != 'default') + { + $fromLaneID = $fromCell->lane; + $toLaneID = $fromCell->lane; + } + $toCell = $this->dao->select('id, cards')->from(TABLE_KANBANCELL) ->where('kanban')->eq($executionID) ->andWhere('lane')->eq($toLaneID) diff --git a/module/kanban/model.php b/module/kanban/model.php index e28cbb4dfc..05a625e814 100644 --- a/module/kanban/model.php +++ b/module/kanban/model.php @@ -1456,7 +1456,7 @@ class kanbanModel extends model $columns = $this->dao->select('t1.*, GROUP_CONCAT(t1.cards) as cards, t2.`type` as columnType, t2.limit, t2.name as columnName, t2.color')->from(TABLE_KANBANCELL)->alias('t1') ->leftJoin(TABLE_KANBANCOLUMN)->alias('t2')->on('t1.`column` = t2.id') - ->leftJoin(TABLE_KANBANLANE)->alias('t3')->on('t2.group = t3.group') + ->leftJoin(TABLE_KANBANLANE)->alias('t3')->on('t1.lane = t3.id') ->leftJoin(TABLE_KANBANREGION)->alias('t4')->on('t1.kanban = t4.kanban') ->where('t1.kanban')->eq($executionID) ->andWhere('t1.`type`')->eq($browseType) @@ -1490,6 +1490,7 @@ class kanbanModel extends model $laneData['name'] = (($groupBy == 'pri' or $groupBy == 'severity') and $laneID) ? $this->lang->$browseType->$groupBy . ':' . $lane->name : $lane->name; $laneData['color'] = $lane->color; $laneData['order'] = $lane->order; + $laneData['type'] = $browseType; $laneData['defaultCardType'] = $browseType; /* Construct kanban column data. */ @@ -1507,7 +1508,6 @@ class kanbanModel extends model if($this->isClickable($column, $action)) $column->actions[] = $action; } - $columnData[$column->column]['id'] = $column->column; $columnData[$column->column]['type'] = $column->columnType; $columnData[$column->column]['name'] = $column->columnName; @@ -1621,6 +1621,7 @@ class kanbanModel extends model foreach($objectPairs as $objectID => $objectName) { if(!isset($groupByList[$objectID]) and $objectID) continue; + if($browseType == 'task' and $groupBy == 'type' and !$objectID) continue; $lane = new stdclass(); $lane->id = $groupBy . $objectID; @@ -3132,7 +3133,24 @@ class kanbanModel extends model */ public function moveCard($cardID, $fromColID, $toColID, $fromLaneID, $toLaneID, $kanbanID = 0) { - $fromCellCards = $this->dao->select('cards')->from(TABLE_KANBANCELL)->where('lane')->eq($fromLaneID)->andWhere('`column`')->eq($fromColID)->fetch('cards'); + $groupBy = $this->session->execGroupBy ? $this->session->execGroupBy : ''; + + $fromCell = $this->dao->select('cards, lane')->from(TABLE_KANBANCELL) + ->where('`column`')->eq($fromColID) + ->beginIF(!$groupBy or $groupBy == 'default')->andWhere('lane')->eq($fromLaneID)->fi() + ->beginIF($groupBy and $groupBy != 'default') + ->andWhere('type')->eq($this->session->execLaneType) + ->andWhere('cards')->like("%,$cardID,%") + ->fi() + ->fetch(); + + if($groupBy and $groupBy != 'default') + { + $fromLaneID = $fromCell->lane; + $toLaneID = $fromCell->lane; + } + + $fromCellCards = $fromCell->cards; $toCell = $this->dao->select('*')->from(TABLE_KANBANCELL)->where('lane')->eq($toLaneID)->andWhere('`column`')->eq($toColID)->fetch(); $toCellCards = $this->dao->select('cards')->from(TABLE_KANBANCELL)->where('lane')->eq($toLaneID)->andWhere('`column`')->eq($toColID)->fetch('cards'); diff --git a/module/task/control.php b/module/task/control.php index 387200148c..babc3b8ff2 100755 --- a/module/task/control.php +++ b/module/task/control.php @@ -90,7 +90,7 @@ class task extends control if($execution->type == 'kanban') { $regionPairs = $this->kanban->getRegionPairs($execution->id, 0, 'execution'); - $regionID = isset($output['regionID']) ? $output['regionID'] : key($regionPairs); + $regionID = !empty($output['regionID']) ? $output['regionID'] : key($regionPairs); $lanePairs = $this->kanban->getLanePairsByRegion($regionID, 'task'); $laneID = isset($output['laneID']) ? $output['laneID'] : key($lanePairs); @@ -139,7 +139,7 @@ class task extends control /* if status is exists then this task has exists not new create. */ if($taskID['status'] == 'exists') continue; - $taskID = $taskID['id']; + $taskID = $taskID['id']; $this->action->create('task', $taskID, 'Opened', ''); } @@ -173,8 +173,10 @@ class task extends control { if($execution->type == 'kanban' and $this->app->tab == 'execution') { - $kanbanData = $this->kanban->getRDKanban($executionID, $this->session->execLaneType ? $this->session->execLaneType : 'all'); - $kanbanData = json_encode($kanbanData); + $execLaneType = $this->session->execLaneType ? $this->session->execLaneType : 'all'; + $execGroupBy = $this->session->execGroupBy ? $this->session->execGroupBy : 'default'; + $kanbanData = $this->loadModel('kanban')->getRDKanban($executionID, $execLaneType, 'id_desc', 0, $execGroupBy); + $kanbanData = json_encode($kanbanData); return $this->send(array('result' => 'success', 'message' => $this->lang->saveSuccess, 'closeModal' => true, 'callback' => "parent.updateKanban($kanbanData, 0)")); } @@ -347,8 +349,10 @@ class task extends control { if($execution->type == 'kanban' and $this->app->tab == 'execution') { - $kanbanData = $this->loadModel('kanban')->getRDKanban($executionID, $this->session->execLaneType ? $this->session->execLaneType : 'all'); - $kanbanData = json_encode($kanbanData); + $execLaneType = $this->session->execLaneType ? $this->session->execLaneType : 'all'; + $execGroupBy = $this->session->execGroupBy ? $this->session->execGroupBy : 'default'; + $kanbanData = $this->loadModel('kanban')->getRDKanban($executionID, $execLaneType, 'id_desc', 0, $execGroupBy); + $kanbanData = json_encode($kanbanData); return print(js::closeModal('parent.parent', '', "parent.parent.updateKanban($kanbanData, 0)")); } @@ -397,7 +401,7 @@ class task extends control $this->loadModel('kanban'); $regionPairs = $this->kanban->getRegionPairs($executionID, 0, 'execution'); - $regionID = isset($output['regionID']) ? $output['regionID'] : key($regionPairs); + $regionID = !empty($output['regionID']) ? $output['regionID'] : key($regionPairs); $lanePairs = $this->kanban->getLanePairsByRegion($regionID, 'task'); $laneID = isset($output['laneID']) ? $output['laneID'] : key($lanePairs); @@ -503,9 +507,9 @@ class task extends control if(isonlybody()) { $execution = $this->execution->getByID($task->execution); - if($execution->type == 'kanban' and $this->app->tab == 'execution' and $kanbanGroup == 'default') + if($execution->type == 'kanban' and $this->app->tab == 'execution') { - $kanbanData = $this->loadModel('kanban')->getRDKanban($task->execution, $this->session->execLaneType ? $this->session->execLaneType : 'all'); + $kanbanData = $this->loadModel('kanban')->getRDKanban($task->execution, $this->session->execLaneType ? $this->session->execLaneType : 'all', 'id_desc', 0, $kanbanGroup); $kanbanData = json_encode($kanbanData); return print(js::closeModal('parent.parent', '', "parent.parent.updateKanban($kanbanData)")); @@ -738,9 +742,9 @@ class task extends control { $task = $this->task->getById($taskID); $execution = $this->execution->getByID($task->execution); - if($execution->type == 'kanban' and $this->app->tab == 'execution' and $kanbanGroup == 'default') + if($execution->type == 'kanban' and $this->app->tab == 'execution') { - $kanbanData = $this->loadModel('kanban')->getRDKanban($task->execution, $this->session->execLaneType ? $this->session->execLaneType : 'all'); + $kanbanData = $this->loadModel('kanban')->getRDKanban($task->execution, $this->session->execLaneType ? $this->session->execLaneType : 'all', 'id_desc', 0, $kanbanGroup); $kanbanData = json_encode($kanbanData); return print(js::closeModal('parent.parent', '', "parent.parent.updateKanban($kanbanData)")); @@ -988,9 +992,11 @@ class task extends control $execution = $this->execution->getByID($task->execution); if($execution->type == 'kanban' and $this->app->tab == 'execution') { - $regionID = isset($output['regionID']) ? $output['regionID'] : 0; - $kanbanData = $this->loadModel('kanban')->getRDKanban($task->execution, $this->session->execLaneType ? $this->session->execLaneType : 'all', 'id_desc', $regionID); - $kanbanData = json_encode($kanbanData); + $regionID = isset($output['regionID']) ? $output['regionID'] : 0; + $execLaneType = $this->session->execLaneType ? $this->session->execLaneType : 'all'; + $execGroupBy = $this->session->execGroupBy ? $this->session->execGroupBy : 'default'; + $kanbanData = $this->loadModel('kanban')->getRDKanban($task->execution, $execLaneType, 'id_desc', $regionID, $execGroupBy); + $kanbanData = json_encode($kanbanData); return print(js::closeModal('parent.parent', '', "parent.parent.updateKanban($kanbanData, $regionID)")); } @@ -1050,8 +1056,10 @@ class task extends control $execution = $this->execution->getByID($task->execution); if($execution->type == 'kanban' and $this->app->tab == 'execution') { - $kanbanData = $this->loadModel('kanban')->getRDKanban($task->execution, $this->session->execLaneType ? $this->session->execLaneType : 'all'); - $kanbanData = json_encode($kanbanData); + $execLaneType = $this->session->execLaneType ? $this->session->execLaneType : 'all'; + $execGroupBy = $this->session->execGroupBy ? $this->session->execGroupBy : 'default'; + $kanbanData = $this->loadModel('kanban')->getRDKanban($task->execution, $execLaneType, 'id_desc', 0, $execGroupBy); + $kanbanData = json_encode($kanbanData); return print(js::closeModal('parent.parent', '', "parent.parent.updateKanban($kanbanData)")); } @@ -1184,9 +1192,11 @@ class task extends control $execution = $this->execution->getByID($task->execution); if($execution->type == 'kanban' and $this->app->tab == 'execution') { - $regionID = isset($output['regionID']) ? $output['regionID'] : 0; - $kanbanData = $this->loadModel('kanban')->getRDKanban($task->execution, $this->session->execLaneType ? $this->session->execLaneType : 'all', 'id_desc', $regionID); - $kanbanData = json_encode($kanbanData); + $regionID = !empty($output['regionID']) ? $output['regionID'] : 0; + $execLaneType = $this->session->execLaneType ? $this->session->execLaneType : 'all'; + $execGroupBy = $this->session->execGroupBy ? $this->session->execGroupBy : 'default'; + $kanbanData = $this->loadModel('kanban')->getRDKanban($task->execution, $execLaneType, 'id_desc', $regionID, $execGroupBy); + $kanbanData = json_encode($kanbanData); return print(js::closeModal('parent.parent', '', "parent.parent.updateKanban($kanbanData, $regionID)")); } @@ -1272,9 +1282,11 @@ class task extends control $execution = $this->execution->getByID($task->execution); if($execution->type == 'kanban' and $this->app->tab == 'execution') { - $regionID = isset($output['regionID']) ? $output['regionID'] : 0; - $kanbanData = $this->loadModel('kanban')->getRDKanban($task->execution, $this->session->execLaneType ? $this->session->execLaneType : 'all', 'id_desc', $regionID); - $kanbanData = json_encode($kanbanData); + $regionID = !empty($output['regionID']) ? $output['regionID'] : 0; + $execLaneType = $this->session->execLaneType ? $this->session->execLaneType : 'all'; + $execGroupBy = $this->session->execGroupBy ? $this->session->execGroupBy : 'default'; + $kanbanData = $this->loadModel('kanban')->getRDKanban($task->execution, $execLaneType, 'id_desc', $regionID, $execGroupBy); + $kanbanData = json_encode($kanbanData); return print(js::closeModal('parent.parent', '', "parent.parent.updateKanban($kanbanData, $regionID)")); } @@ -1328,8 +1340,10 @@ class task extends control $execution = $this->execution->getByID($task->execution); if($execution->type == 'kanban' and $this->app->tab == 'execution') { - $kanbanData = $this->loadModel('kanban')->getRDKanban($task->execution, $this->session->execLaneType ? $this->session->execLaneType : 'all'); - $kanbanData = json_encode($kanbanData); + $execLaneType = $this->session->execLaneType ? $this->session->execLaneType : 'all'; + $execGroupBy = $this->session->execGroupBy ? $this->session->execGroupBy : 'default'; + $kanbanData = $this->loadModel('kanban')->getRDKanban($task->execution, $execLaneType, 'id_desc', 0, $execGroupBy); + $kanbanData = json_encode($kanbanData); return print(js::closeModal('parent.parent', '', "parent.parent.updateKanban($kanbanData)")); } @@ -1399,9 +1413,11 @@ class task extends control if($execution->type == 'kanban' and $this->app->tab == 'execution') { - $regionID = isset($output['regionID']) ? $output['regionID'] : 0; - $kanbanData = $this->loadModel('kanban')->getRDKanban($task->execution, $this->session->execLaneType ? $this->session->execLaneType : 'all', 'id_desc', $regionID); - $kanbanData = json_encode($kanbanData); + $regionID = !empty($output['regionID']) ? $output['regionID'] : 0; + $execLaneType = $this->session->execLaneType ? $this->session->execLaneType : 'all'; + $execGroupBy = $this->session->execGroupBy ? $this->session->execGroupBy : 'default'; + $kanbanData = $this->loadModel('kanban')->getRDKanban($task->execution, $execLaneType, 'id_desc', $regionID, $execGroupBy); + $kanbanData = json_encode($kanbanData); return print(js::closeModal('parent.parent', '', "parent.parent.updateKanban($kanbanData, $regionID)")); } @@ -1562,9 +1578,11 @@ class task extends control $execution = $this->execution->getByID($task->execution); if($execution->type == 'kanban' and $this->app->tab == 'execution') { - $regionID = isset($output['regionID']) ? $output['regionID'] : 0; - $kanbanData = $this->loadModel('kanban')->getRDKanban($task->execution, $this->session->execLaneType ? $this->session->execLaneType : 'all', 'id_desc', $regionID); - $kanbanData = json_encode($kanbanData); + $regionID = !empty($output['regionID']) ? $output['regionID'] : 0; + $execLaneType = $this->session->execLaneType ? $this->session->execLaneType : 'all'; + $execGroupBy = $this->session->execGroupBy ? $this->session->execGroupBy : 'default'; + $kanbanData = $this->loadModel('kanban')->getRDKanban($task->execution, $execLaneType, 'id_desc', $regionID, $execGroupBy); + $kanbanData = json_encode($kanbanData); return print(js::closeModal('parent.parent', '', "parent.parent.updateKanban($kanbanData, $regionID)")); } @@ -1618,9 +1636,11 @@ class task extends control $execution = $this->execution->getByID($task->execution); if($execution->type == 'kanban' and $this->app->tab == 'execution') { - $regionID = isset($output['regionID']) ? $output['regionID'] : 0; - $kanbanData = $this->loadModel('kanban')->getRDKanban($task->execution, $this->session->execLaneType ? $this->session->execLaneType : 'all', 'id_desc', $regionID); - $kanbanData = json_encode($kanbanData); + $regionID = !empty($output['regionID']) ? $output['regionID'] : 0; + $execLaneType = $this->session->execLaneType ? $this->session->execLaneType : 'all'; + $execGroupBy = $this->session->execGroupBy ? $this->session->execGroupBy : 'default'; + $kanbanData = $this->loadModel('kanban')->getRDKanban($task->execution, $execLaneType, 'id_desc', $regionID, $execGroupBy); + $kanbanData = json_encode($kanbanData); return print(js::closeModal('parent.parent', '', "parent.parent.updateKanban($kanbanData, $regionID)")); }