diff --git a/module/bug/model.php b/module/bug/model.php index 00985c85ff..742d6379d5 100644 --- a/module/bug/model.php +++ b/module/bug/model.php @@ -200,7 +200,8 @@ class bugModel extends model $bug->os = $data->oses[$i]; $bug->browser = $data->browsers[$i]; $bug->keywords = $data->keywords[$i]; - $bug->laneID = $data->lanes[$i]; + + if(isset($data->lanes[$i])) $bug->laneID = $data->lanes[$i]; if($bug->execution != 0) $bug->project = $this->dao->select('parent')->from(TABLE_EXECUTION)->where('id')->eq($bug->execution)->fetch('parent'); @@ -237,8 +238,12 @@ class bugModel extends model /* When the bug is created by uploading an image, add the image to the step of the bug. */ foreach($bugs as $i => $bug) { - $laneID = isset($bug->laneID) ? $bug->laneID : $output['laneID']; - unset($bug->laneID); + $laneID = isset($output['laneID']) ? $output['laneID'] : 0; + if(isset($bug->laneID)) + { + $laneID = $bug->laneID; + unset($bug->laneID); + } if(!empty($data->uploadImage[$i])) { @@ -278,8 +283,13 @@ class bugModel extends model if($bug->execution) { - $columnIDByLaneID = $this->kanban->getColumnIDByLaneID($laneID, 'unconfirmed'); - $columnID = empty($columnIDByLaneID) ? $output['columnID'] : $columnIDByLaneID; + $columnID = isset($output['columnID']) ? $output['columnID'] : 0; + if(!empty($laneID)) + { + $columnIDByLaneID = $this->kanban->getColumnIDByLaneID($laneID, 'unconfirmed'); + $columnID = empty($columnIDByLaneID) ? $columnID : $columnIDByLaneID; + } + if(!empty($laneID) and !empty($columnID)) $this->kanban->addKanbanCell($bug->execution, $laneID, $columnID, 'bug', $bugID); if(empty($laneID) or empty($columnID)) $this->kanban->updateLane($bug->execution, 'bug'); diff --git a/module/execution/js/kanban.js b/module/execution/js/kanban.js index 846760f0fd..36a950d081 100644 --- a/module/execution/js/kanban.js +++ b/module/execution/js/kanban.js @@ -290,7 +290,7 @@ function createColumnCreateMenu(options) else if(col.type == 'wait') { if(priv.canCreateTask) items.push({label: taskLang.create, url: $.createLink('task', 'create', 'executionID=' + executionID + "&storyID=0&moduleID=0&taskID=0&todoID=0&extra=laneID=" + laneID + ",columnID=" + col.id, '', true), className: 'iframe', attrs: {'data-toggle': 'modal', 'data-width': '80%'}}); - if(priv.canBatchCreateTask) items.push({label: taskLang.batchCreate, url: $.createLink('task', 'batchcreate', 'executionID=' + executionID + "&storyID=0&moduleID=0&taskID=0&iframe=0&extra=laneID=" + laneID + ",columnID=" + col.id, '', true), className: 'iframe', attrs: {'data-toggle': 'modal', 'data-width': '80%'}}); + if(priv.canBatchCreateTask) items.push({label: taskLang.batchCreate, url: $.createLink('task', 'batchcreate', 'executionID=' + executionID + "&storyID=0&moduleID=0&taskID=0&iframe=0&extra=regionID=" + regionID + ",laneID=" + laneID + ",columnID=" + col.id, '', true), className: 'iframe', attrs: {'data-toggle': 'modal', 'data-width': '80%'}}); if(priv.canImportBug && vision == 'rnd') items.push({label: executionLang.importBug, url: $.createLink('execution', 'importBug', 'executionID=' + executionID + "&storyID=0&moduleID=0&taskID=0&todoID=0&extra=laneID=" + laneID + ",columnID=" + col.id, '', true), className: 'iframe', attrs: {'data-toggle': 'modal', 'data-width': '80%'}}); } return items; diff --git a/module/task/control.php b/module/task/control.php index 2b6ff72d24..e3897f7cad 100644 --- a/module/task/control.php +++ b/module/task/control.php @@ -389,6 +389,23 @@ class task extends control $showAllModule = isset($this->config->execution->task->allModule) ? $this->config->execution->task->allModule : ''; $modules = $this->loadModel('tree')->getTaskOptionMenu($executionID, 0, 0, $showAllModule ? 'allModule' : ''); + if($execution->type == 'kanban') + { + $extra = str_replace(array(',', ' '), array('&', ''), $extra); + parse_str($extra, $output); + + $this->loadModel('kanban'); + $regionPairs = $this->kanban->getRegionPairs($executionID, 0, 'execution'); + $regionID = isset($output['regionID']) ? $output['regionID'] : key($regionPairs); + $lanePairs = $this->kanban->getLanePairsByRegion($regionID, 'task'); + $laneID = isset($output['laneID']) ? $output['laneID'] : key($lanePairs); + + $this->view->regionID = $regionID; + $this->view->laneID = $laneID; + $this->view->regionPairs = $regionPairs; + $this->view->lanePairs = $lanePairs; + } + $title = $execution->name . $this->lang->colon . $this->lang->task->batchCreate; $position[] = html::a($taskLink, $execution->name); $position[] = $this->lang->task->common; diff --git a/module/task/js/batchcreate.js b/module/task/js/batchcreate.js index 1c4416ea19..1d7c70c856 100755 --- a/module/task/js/batchcreate.js +++ b/module/task/js/batchcreate.js @@ -184,6 +184,27 @@ function markStoryTask() }); } +/** + * Set lane. + * + * @param int $regionID + * @param int $num + * @access public + * @return void + */ +function setLane(regionID, num) +{ + laneLink = createLink('kanban', 'ajaxGetLanes', 'regionID=' + regionID + '&type=task&field=lanes&i=' + num); + $.get(laneLink, function(lanes) + { + if(!lanes) lanes = ''; + $('#lanes' + num).replaceWith(lanes); + $("#lanes" + num + "_chosen").remove(); + $("#lanes" + num).next('.picker').remove(); + $("#lanes" + num).chosen(); + }); +} + $(document).on('chosen:showing_dropdown', 'select[name^="story"],.chosen-with-drop', function() { var select = $(this).closest('td').find('select'); diff --git a/module/task/model.php b/module/task/model.php index 4ce2d24a75..8ce70b8948 100644 --- a/module/task/model.php +++ b/module/task/model.php @@ -331,6 +331,7 @@ class taskModel extends model if($assignedTo) $data[$i]->assignedDate = $now; if(strpos($this->config->task->create->requiredFields, 'estStarted') !== false and empty($estStarted)) $data[$i]->estStarted = ''; if(strpos($this->config->task->create->requiredFields, 'deadline') !== false and empty($deadline)) $data[$i]->deadline = ''; + if(isset($tasks->lanes[$i])) $data[$i]->laneID = $tasks->lanes[$i]; foreach($extendFields as $extendField) { @@ -387,6 +388,13 @@ class taskModel extends model foreach($data as $i => $task) { + $laneID = isset($output['laneID']) ? $output['laneID'] : 0; + if(isset($task->laneID)) + { + $laneID = $task->laneID; + unset($task->laneID); + } + $task->version = 1; $this->dao->insert(TABLE_TASK)->data($task) ->autoCheck() @@ -418,7 +426,14 @@ class taskModel extends model } else { - if(isset($output['laneID']) and isset($output['columnID'])) $this->kanban->addKanbanCell($executionID, $output['laneID'], $output['columnID'], 'task', $taskID); + $columnID = isset($output['columnID']) ? $output['columnID'] : 0; + if(!empty($laneID)) + { + $columnIDByLaneID = $this->kanban->getColumnIDByLaneID($laneID, 'wait'); + $columnID = empty($columnIDByLaneID) ? $columnID : $columnIDByLaneID; + } + + if(!empty($laneID) and !empty($columnID)) $this->kanban->addKanbanCell($executionID, $laneID, $columnID, 'task', $taskID); } $actionID = $this->action->create('task', $taskID, 'Opened', ''); diff --git a/module/task/view/batchcreate.html.php b/module/task/view/batchcreate.html.php index 3611a5b4a1..010e9daf70 100644 --- a/module/task/view/batchcreate.html.php +++ b/module/task/view/batchcreate.html.php @@ -64,6 +64,10 @@