diff --git a/module/task/control.php b/module/task/control.php index 589f64f30e..aeff71b43c 100644 --- a/module/task/control.php +++ b/module/task/control.php @@ -23,14 +23,6 @@ class task extends control $this->loadModel('project'); $this->loadModel('story'); $this->loadModel('tree'); - - /* Add required fields to waterfall project. */ - $project = $this->project->getByID($this->session->PRJ); - if(!empty($project) && $project->model == 'waterfall') - { - $this->config->task->create->requiredFields .= ',estStarted,deadline'; - $this->config->task->edit->requiredFields .= ',estStarted,deadline'; - } } /** @@ -57,9 +49,6 @@ class task extends control die(js::locate($this->createLink('project', 'task', "projectID=$projectID"))); } - $program = $this->loadModel('project')->getByID($this->session->PRJ); - if($program->model == 'waterfall') $this->config->task->create->requiredFields .= ',estStarted,deadline'; - $task = new stdClass(); $task->module = $moduleID; $task->assignedTo = ''; diff --git a/module/task/model.php b/module/task/model.php index 53082092de..14765651c6 100644 --- a/module/task/model.php +++ b/module/task/model.php @@ -28,6 +28,7 @@ class taskModel extends model return false; } + $this->getExtraRequiredFields(); $projectID = (int)$projectID; $taskIdList = array(); $taskFiles = array(); @@ -279,6 +280,7 @@ class taskModel extends model $assignedTo = ''; /* Get task data. */ + $this->getExtraRequiredFields(); $extendFields = $this->getFlowExtendFields(); $data = array(); foreach($tasks->name as $i => $name) @@ -776,6 +778,8 @@ class taskModel extends model */ public function update($taskID) { + $this->getExtraRequiredFields(); + $oldTask = $this->getByID($taskID); if($this->post->estimate < 0 or $this->post->left < 0 or $this->post->consumed < 0) { @@ -834,6 +838,8 @@ class taskModel extends model ->setIF($oldTask->parent < 0, 'estimate', $oldTask->estimate) ->setIF($oldTask->parent < 0, 'left', $oldTask->left) + ->setIF($oldTask->name != $task->name || $oldTask->estStarted != $task->estStarted || $oldTask->deadline != $task->deadline, 'version', $oldTask->version + 1) + ->setDefault('lastEditedBy', $this->app->user->account) ->add('lastEditedDate', $now) ->stripTags($this->config->task->editor->edit['id'], $this->config->allowedTags) @@ -898,13 +904,6 @@ class taskModel extends model } } - /* Mark design version.*/ - if(isset($task->design) && !empty($task->design)) - { - $design = $this->loadModel('design')->getByID($task->design); - $this->dao->update(TABLE_TASK)->set('designVersion')->eq($design->version)->where('id')->eq($taskID)->exec(); - } - $projectType = $this->dao->select('*')->from(TABLE_PROJECT)->where('id')->eq($task->project)->fetch('type'); $requiredFields = "," . $this->config->task->edit->requiredFields . ","; if($projectType == 'ops') @@ -943,10 +942,16 @@ class taskModel extends model if(!dao::isError()) { + /* Mark design version.*/ + if(isset($task->design) && !empty($task->design)) + { + $design = $this->loadModel('design')->getByID($task->design); + $this->dao->update(TABLE_TASK)->set('designVersion')->eq($design->version)->where('id')->eq($taskID)->exec(); + } + /* Record task version. */ - if($oldTask->name != $task->name || $oldTask->estStarted != $task->estStarted || $oldTask->deadline != $task->deadline) + if($task->version > $oldTask->version) { - $task->version = $oldTask->version + 1; $taskSpec = new stdClass(); $taskSpec->task = $taskID; $taskSpec->version = $task->version; @@ -1081,14 +1086,6 @@ class taskModel extends model if($oldTask->name != $task->name || $oldTask->estStarted != $task->estStarted || $oldTask->deadline != $task->deadline) { $task->version = $oldTask->version + 1; - $taskSpec = new stdClass(); - $taskSpec->task = $taskID; - $taskSpec->version = $task->version; - $taskSpec->name = $task->name; - $taskSpec->estStarted = $task->estStarted; - $taskSpec->deadline = $task->deadline; - - $this->dao->insert(TABLE_TASKSPEC)->data($taskSpec)->autoCheck()->exec(); } foreach($extendFields as $extendField) @@ -1176,6 +1173,7 @@ class taskModel extends model { if($task->status == 'done' and $task->consumed == false) die(js::error('task#' . $taskID . sprintf($this->lang->error->notempty, $this->lang->task->consumedThisTime))); if($task->status == 'cancel') continue; + if($task->estStarted > $task->deadline) die(js::error('task#' . $taskID . $this->lang->task->error->deadlineSmall)); foreach(explode(',', $this->config->task->edit->requiredFields) as $field) { $field = trim($field); @@ -1217,6 +1215,19 @@ class taskModel extends model if($oldTask->story != false) $this->loadModel('story')->setStage($oldTask->story); if(!dao::isError()) { + /* Record version change history. */ + if($task->version > $oldTask->version) + { + $taskSpec = new stdClass(); + $taskSpec->task = $taskID; + $taskSpec->version = $task->version; + $taskSpec->name = $task->name; + $taskSpec->estStarted = $task->estStarted; + $taskSpec->deadline = $task->deadline; + + $this->dao->insert(TABLE_TASKSPEC)->data($taskSpec)->autoCheck()->exec(); + } + if($oldTask->parent > 0) { $this->updateParentStatus($oldTask->id); @@ -3231,4 +3242,21 @@ class taskModel extends model } return $members; } + + /** + * Get additional required fields. + * + * @access public + * @return void + */ + public function getExtraRequiredFields() + { + /* Add required fields to waterfall project. */ + $project = $this->loadModel('program')->getPRJByID($this->session->PRJ); + if(!empty($project) && $project->model == 'waterfall') + { + $this->config->task->create->requiredFields .= ',estStarted,deadline'; + $this->config->task->edit->requiredFields .= ',estStarted,deadline'; + } + } }