* Fix bug#18083.

This commit is contained in:
xieqiyu
2022-03-30 17:26:17 +08:00
parent a42d621269
commit 0983c30e8d
4 changed files with 27 additions and 16 deletions
+24 -13
View File
@@ -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;