From 0983c30e8dabd798d146e8fa445323d41d743376 Mon Sep 17 00:00:00 2001 From: xieqiyu Date: Wed, 30 Mar 2022 17:26:17 +0800 Subject: [PATCH] * Fix bug#18083. --- module/task/control.php | 2 +- module/task/lang/en.php | 2 +- module/task/lang/zh-cn.php | 2 +- module/task/model.php | 37 ++++++++++++++++++++++++------------- 4 files changed, 27 insertions(+), 16 deletions(-) diff --git a/module/task/control.php b/module/task/control.php index f869833fb1..d9711ecb04 100644 --- a/module/task/control.php +++ b/module/task/control.php @@ -562,7 +562,7 @@ class task extends control if($this->post->names) { $allChanges = $this->task->batchUpdate(); - if(dao::isError()) return print(js::error(dao::getError())); + if(dao::isError()) return $this->send(array('result' => 'fail', 'message' => dao::getError())); if(!empty($allChanges)) { diff --git a/module/task/lang/en.php b/module/task/lang/en.php index 3a1c97a3f9..4c7464d2d1 100644 --- a/module/task/lang/en.php +++ b/module/task/lang/en.php @@ -247,7 +247,7 @@ $lang->task->error->finishedDateSmall = '"Finished Date" should be > "Real Start $lang->task->error->alreadyConsumed = 'The currently selected parent task has been consumed.'; $lang->task->error->date = 'The date should be >= today.'; $lang->task->error->leftEmpty = 'When the task status is %s, "Hours Left" cannot be 0'; -$lang->task->error->leftEmptyAB = 'task#%sWhen the task status is %s, "Hours Left" cannot be 0'; +$lang->task->error->leftEmptyAB = 'task#%sWhen the task status is %s, "Left" cannot be 0'; /* Report. */ $lang->task->report = new stdclass(); diff --git a/module/task/lang/zh-cn.php b/module/task/lang/zh-cn.php index d8234cc45f..b289c2171b 100644 --- a/module/task/lang/zh-cn.php +++ b/module/task/lang/zh-cn.php @@ -247,7 +247,7 @@ $lang->task->error->finishedDateSmall = '实际完成不能小于实际开始'; $lang->task->error->alreadyConsumed = '当前选中的父任务已有消耗。'; $lang->task->error->date = '日期不能大于今天'; $lang->task->error->leftEmpty = '任务状态为%s时,预计剩余不能为0'; -$lang->task->error->leftEmptyAB = 'task#%s任务状态为%s时,预计剩余不能为0'; +$lang->task->error->leftEmptyAB = 'task#%s任务状态为%s时,剩余不能为0'; /* Report. */ $lang->task->report = new stdclass(); diff --git a/module/task/model.php b/module/task/model.php index 7416b93276..4ffc3f2522 100644 --- a/module/task/model.php +++ b/module/task/model.php @@ -998,7 +998,7 @@ class taskModel extends model $requiredFields = str_replace(',estimate,', ',', $requiredFields); } - if(strpos(',done,wait,cancel,closed,', $task->status) === false && empty($teams) && $task->left == 0) + if(strpos(',done,wait,cancel,closed,', $task->status) === false && empty($teams) && empty($task->left)) { dao::$errors[] = sprintf($this->lang->task->error->leftEmpty, $this->lang->task->statusList[$task->status]); return false; @@ -1118,7 +1118,6 @@ class taskModel extends model { if(isset($data->modules[$taskID]) and ($data->modules[$taskID] == 'ditto')) $data->modules[$taskID] = isset($prev['module']) ? $prev['module'] : 0; if($data->types[$taskID] == 'ditto') $data->types[$taskID] = isset($prev['type']) ? $prev['type'] : ''; - if($data->statuses[$taskID] == 'ditto') $data->statuses[$taskID] = isset($prev['status']) ? $prev['status'] : ''; if($data->assignedTos[$taskID] == 'ditto') $data->assignedTos[$taskID] = isset($prev['assignedTo']) ? $prev['assignedTo'] : ''; if($data->pris[$taskID] == 'ditto') $data->pris[$taskID] = isset($prev['pri']) ? $prev['pri'] : 0; if($data->finishedBys[$taskID] == 'ditto') $data->finishedBys[$taskID] = isset($prev['finishedBy']) ? $prev['finishedBy'] : ''; @@ -1129,7 +1128,6 @@ class taskModel extends model $prev['module'] = $data->modules[$taskID]; $prev['type'] = $data->types[$taskID]; - $prev['status'] = $data->statuses[$taskID]; $prev['assignedTo'] = $data->assignedTos[$taskID]; $prev['pri'] = $data->pris[$taskID]; $prev['finishedBy'] = $data->finishedBys[$taskID]; @@ -1150,7 +1148,7 @@ class taskModel extends model $task->name = $data->names[$taskID]; $task->module = isset($data->modules[$taskID]) ? $data->modules[$taskID] : 0; $task->type = $data->types[$taskID]; - $task->status = $data->statuses[$taskID]; + $task->status = isset($data->statuses[$taskID]) ? $data->statuses[$taskID] : $oldTask->status; $task->assignedTo = $task->status == 'closed' ? 'closed' : $data->assignedTos[$taskID]; $task->pri = $data->pris[$taskID]; $task->estimate = isset($data->estimates[$taskID]) ? $data->estimates[$taskID] : $oldTask->estimate; @@ -1185,11 +1183,12 @@ class taskModel extends model if($message) return print(js::alert($message)); } - if($data->consumeds[$taskID]) + if(isset($data->consumeds[$taskID])) { if($data->consumeds[$taskID] < 0) { - echo js::alert(sprintf($this->lang->task->error->consumed, $taskID)); + dao::$errors[] = sprintf($this->lang->task->error->consumed, $taskID); + return false; } else { @@ -1261,9 +1260,19 @@ class taskModel extends model /* Check field not empty. */ foreach($tasks as $taskID => $task) { - if($task->status == 'done' and $task->consumed == false) return print(js::error('task#' . $taskID . sprintf($this->lang->error->notempty, $this->lang->task->consumedThisTime))); if($task->status == 'cancel') continue; - if(!empty($task->deadline) and $task->estStarted > $task->deadline) return print(js::error('task#' . $taskID . $this->lang->task->error->deadlineSmall)); + if($task->status == 'done' and $task->consumed == false) + { + dao::$errors[] = 'task#' . $taskID . sprintf($this->lang->error->notempty, $this->lang->task->consumedThisTime); + return false; + } + + if(!empty($task->deadline) and $task->estStarted > $task->deadline) + { + dao::$errors[] = 'task#' . $taskID . $this->lang->task->error->deadlineSmall; + return false; + } + foreach(explode(',', $this->config->task->edit->requiredFields) as $field) { $field = trim($field); @@ -1280,11 +1289,12 @@ class taskModel extends model foreach($tasks as $taskID => $task) { - if(strpos(',done,wait,cancel,closed,', $task->status) === false && empty($teams) && $task->parent > 0 && $task->consumed != 0) + if(strpos(',done,wait,cancel,closed,', $task->status) === false && empty($teams) && $task->parent >= 0 && empty($task->left)) { dao::$errors[] = sprintf($this->lang->task->error->leftEmptyAB, $taskID, $this->lang->task->statusList[$task->status]); return false; } + $oldTask = $oldTasks[$taskID]; $this->dao->update(TABLE_TASK)->data($task) ->autoCheck() @@ -1303,6 +1313,11 @@ class taskModel extends model ->batchCheckIF($task->closedReason == 'cancel', 'finishedBy, finishedDate', 'empty') ->where('id')->eq((int)$taskID) ->exec(); + if(dao::isError()) + { + dao::$errors[] = 'task#' . $taskID . dao::getError(true); + return false; + } if($task->status == 'done' and $task->closedReason) $this->dao->update(TABLE_TASK)->set('status')->eq('closed')->where('id')->eq($taskID)->exec(); @@ -1333,10 +1348,6 @@ class taskModel extends model if($task->status != $oldTask->status) $this->loadModel('kanban')->updateLane($oldTask->execution, 'task', $oldTask->id); $allChanges[$taskID] = common::createChanges($oldTask, $task); } - else - { - return print(js::error('task#' . $taskID . dao::getError(true))); - } } if(!dao::isError()) $this->loadModel('score')->create('ajax', 'batchEdit'); return $allChanges;