From fd0f8e02f28e95e098a6f66bfcfb1dc1598f1e2a Mon Sep 17 00:00:00 2001 From: wangyidong Date: Wed, 13 Aug 2014 09:03:41 +0000 Subject: [PATCH] * finish task #1202. --- db/update6.1.sql | 1 + module/action/lang/en.php | 3 +++ module/action/lang/zh-cn.php | 3 +++ module/common/lang/en.php | 1 + module/common/lang/zh-cn.php | 1 + module/project/model.php | 4 ++-- module/task/config.php | 1 + module/task/control.php | 32 ++++++++++++++++++++++++++++ module/task/lang/en.php | 2 ++ module/task/lang/zh-cn.php | 2 ++ module/task/model.php | 32 +++++++++++++++++++++++++++- module/task/view/pause.html.php | 37 +++++++++++++++++++++++++++++++++ module/task/view/view.html.php | 1 + 13 files changed, 117 insertions(+), 3 deletions(-) create mode 100644 db/update6.1.sql create mode 100644 module/task/view/pause.html.php diff --git a/db/update6.1.sql b/db/update6.1.sql new file mode 100644 index 0000000000..6df0288152 --- /dev/null +++ b/db/update6.1.sql @@ -0,0 +1 @@ +ALTER TABLE `zt_task` CHANGE `status` `status` enum('wait','doing','done','pause','cancel','closed') COLLATE 'utf8_general_ci' NOT NULL DEFAULT 'wait' AFTER `deadline`; diff --git a/module/action/lang/en.php b/module/action/lang/en.php index 9cc43276fe..5abda598ee 100755 --- a/module/action/lang/en.php +++ b/module/action/lang/en.php @@ -91,6 +91,7 @@ $lang->action->desc->canceled = '$date, canceled by $actoraction->desc->svncommited = '$date, $actor commited to svn,revision is #$extra.' . "\n"; $lang->action->desc->gitcommited = '$date, $actor commited to git,revision is #$extra.' . "\n"; $lang->action->desc->finished = '$date, finished by $actor.'; +$lang->action->desc->paused = '$date, paused by $actor.'; $lang->action->desc->diff1 = 'changed %s, old is "%s", new is "%s".
'; $lang->action->desc->diff2 = 'changed %s, the diff is:' . "\n" . "
%s
" . "\n"; $lang->action->desc->diff3 = "changed file's name %s to %s."; @@ -131,6 +132,7 @@ $lang->action->label->recordestimate = 'Hours'; $lang->action->label->editestimate = 'edit hour'; $lang->action->label->canceled = 'canceled'; $lang->action->label->finished = 'finished'; +$lang->action->label->paused = 'paused'; $lang->action->label->login = 'login'; $lang->action->label->logout = "logout"; @@ -204,5 +206,6 @@ $lang->action->search->label['recordestimate'] = $lang->action->label->reco $lang->action->search->label['editestimate'] = $lang->action->label->editestimate; $lang->action->search->label['canceled'] = $lang->action->label->canceled; $lang->action->search->label['finished'] = $lang->action->label->finished; +$lang->action->search->label['paused'] = $lang->action->label->paused; $lang->action->search->label['login'] = $lang->action->label->login; $lang->action->search->label['logout'] = $lang->action->label->logout; diff --git a/module/action/lang/zh-cn.php b/module/action/lang/zh-cn.php index 9aaf1920d1..89926d6512 100755 --- a/module/action/lang/zh-cn.php +++ b/module/action/lang/zh-cn.php @@ -91,6 +91,7 @@ $lang->action->desc->canceled = '$date, 由 $actor 取消 $lang->action->desc->svncommited = '$date, 由 $actor 提交代码,版本为#$extra。' . "\n"; $lang->action->desc->gitcommited = '$date, 由 $actor 提交代码,版本为#$extra。' . "\n"; $lang->action->desc->finished = '$date, 由 $actor 完成。' . "\n"; +$lang->action->desc->paused = '$date, 由 $actor 暂停。' . "\n"; $lang->action->desc->diff1 = '修改了 %s,旧值为 "%s",新值为 "%s"。
' . "\n"; $lang->action->desc->diff2 = '修改了 %s,区别为:' . "\n" . "
%s
" . "\n"; $lang->action->desc->diff3 = '将文件名 %s 改为 %s 。' . "\n"; @@ -131,6 +132,7 @@ $lang->action->label->recordestimate = '记录了工时'; $lang->action->label->editestimate = '编辑了工时'; $lang->action->label->canceled = '取消了'; $lang->action->label->finished = '完成'; +$lang->action->label->paused = '暂停'; $lang->action->label->login = '登录系统'; $lang->action->label->logout = "退出登录"; @@ -204,5 +206,6 @@ $lang->action->search->label['recordestimate'] = $lang->action->label->reco $lang->action->search->label['editestimate'] = $lang->action->label->editestimate; $lang->action->search->label['canceled'] = $lang->action->label->canceled; $lang->action->search->label['finished'] = $lang->action->label->finished; +$lang->action->search->label['paused'] = $lang->action->label->paused; $lang->action->search->label['login'] = $lang->action->label->login; $lang->action->search->label['logout'] = $lang->action->label->logout; diff --git a/module/common/lang/en.php b/module/common/lang/en.php index df18d45623..4d205b2c5c 100644 --- a/module/common/lang/en.php +++ b/module/common/lang/en.php @@ -460,6 +460,7 @@ $lang->icons['review'] = 'search'; $lang->icons['confirm'] = 'search'; $lang->icons['putoff'] = 'calendar'; $lang->icons['suspend'] = 'pause'; +$lang->icons['pause'] = 'pause'; $lang->icons['cancel'] = 'ban-circle'; $lang->icons['recordEstimate'] = 'time'; $lang->icons['customFields'] = 'cogs'; diff --git a/module/common/lang/zh-cn.php b/module/common/lang/zh-cn.php index a6e832d2a6..cb3fd375c0 100644 --- a/module/common/lang/zh-cn.php +++ b/module/common/lang/zh-cn.php @@ -460,6 +460,7 @@ $lang->icons['review'] = 'search'; $lang->icons['confirm'] = 'search'; $lang->icons['putoff'] = 'calendar'; $lang->icons['suspend'] = 'pause'; +$lang->icons['pause'] = 'pause'; $lang->icons['cancel'] = 'ban-circle'; $lang->icons['recordEstimate'] = 'time'; $lang->icons['customFields'] = 'cogs'; diff --git a/module/project/model.php b/module/project/model.php index 49f86dd878..d3bb09b804 100644 --- a/module/project/model.php +++ b/module/project/model.php @@ -1414,7 +1414,7 @@ class projectModel extends model */ public function summary($tasks) { - $taskSum = $statusWait = $statusDone = $statusDoing = $statusClosed = $statusCancel = 0; + $taskSum = $statusWait = $statusDone = $statusDoing = $statusClosed = $statusCancel = $statusPause = 0; $totalEstimate = $totalConsumed = $totalLeft = 0.0; foreach($tasks as $task) { @@ -1425,7 +1425,7 @@ class projectModel extends model $$statusVar ++; } - return sprintf($this->lang->project->taskSummary, count($tasks), $statusWait, $statusDoing, $totalEstimate, $totalConsumed, $totalLeft); + return sprintf($this->lang->project->taskSummary, count($tasks), $statusWait, $statusDoing, $totalEstimate, round($totalConsumed, 1), $totalLeft); } /** diff --git a/module/task/config.php b/module/task/config.php index bc32e2d480..a2e8fa766b 100644 --- a/module/task/config.php +++ b/module/task/config.php @@ -27,6 +27,7 @@ $config->task->editor->finish = array('id' => 'comment', 'tools' => 'simpleToo $config->task->editor->close = array('id' => 'comment', 'tools' => 'simpleTools'); $config->task->editor->activate = array('id' => 'comment', 'tools' => 'simpleTools'); $config->task->editor->cancel = array('id' => 'comment', 'tools' => 'simpleTools'); +$config->task->editor->pause = array('id' => 'comment', 'tools' => 'simpleTools'); $config->task->exportFields = ' id, project, module, story, diff --git a/module/task/control.php b/module/task/control.php index eada0d42c4..c7005acdc3 100644 --- a/module/task/control.php +++ b/module/task/control.php @@ -595,6 +595,38 @@ class task extends control $this->display(); } + /** + * Pause task. + * + * @param int $taskID + * @access public + * @return void + */ + public function pause($taskID) + { + $this->commonAction($taskID); + + if(!empty($_POST)) + { + $this->loadModel('action'); + $changes = $this->task->pause($taskID); + if(dao::isError()) die(js::error(dao::getError())); + + if($this->post->comment != '' or !empty($changes)) + { + $actionID = $this->action->create('task', $taskID, 'Paused', $this->post->comment); + $this->action->logHistory($actionID, $changes); + } + if(isonlybody()) die(js::closeModal('parent.parent', 'this')); + die(js::locate($this->createLink('task', 'view', "taskID=$taskID"), 'parent')); + } + + $this->view->title = $this->view->project->name . $this->lang->colon .$this->lang->task->pause; + $this->view->position[] = $this->lang->task->pause; + + $this->display(); + } + /** * Close a task. * diff --git a/module/task/lang/en.php b/module/task/lang/en.php index a002eef3f1..e8a8deb79d 100644 --- a/module/task/lang/en.php +++ b/module/task/lang/en.php @@ -22,6 +22,7 @@ $lang->task->logEfforts = "Log working hours"; $lang->task->record = "Estimate"; $lang->task->start = "Start"; $lang->task->finish = "Finish"; +$lang->task->pause = "Pause"; $lang->task->close = "Close"; $lang->task->batchClose = "Batch close"; $lang->task->cancel = "Cancel"; @@ -89,6 +90,7 @@ $lang->task->statusList[''] = ''; $lang->task->statusList['wait'] = 'Pending'; $lang->task->statusList['doing'] = 'Doing'; $lang->task->statusList['done'] = 'Done'; +$lang->task->statusList['pause'] = 'Paused'; $lang->task->statusList['cancel'] = 'Canceled'; $lang->task->statusList['closed'] = 'Closed'; diff --git a/module/task/lang/zh-cn.php b/module/task/lang/zh-cn.php index c04127ac22..7476caf050 100644 --- a/module/task/lang/zh-cn.php +++ b/module/task/lang/zh-cn.php @@ -22,6 +22,7 @@ $lang->task->logEfforts = "记录工时"; $lang->task->record = "工时"; $lang->task->start = "开始"; $lang->task->finish = "完成"; +$lang->task->pause = "暂停"; $lang->task->close = "关闭"; $lang->task->batchClose = "批量关闭"; $lang->task->cancel = "取消"; @@ -89,6 +90,7 @@ $lang->task->statusList[''] = ''; $lang->task->statusList['wait'] = '未开始'; $lang->task->statusList['doing'] = '进行中'; $lang->task->statusList['done'] = '已完成'; +$lang->task->statusList['pause'] = '已暂停'; $lang->task->statusList['cancel'] = '已取消'; $lang->task->statusList['closed'] = '已关闭'; diff --git a/module/task/model.php b/module/task/model.php index 1fa103c6e6..f21a7ba8ab 100644 --- a/module/task/model.php +++ b/module/task/model.php @@ -499,6 +499,13 @@ class taskModel extends model $data->assignedDate = $now; $data->realStarted = date('Y-m-d'); } + else if($task->status == 'pause') + { + $task->status = 'doing'; + $data->status = $task->status; + $data->assignedTo = $this->app->user->account; + $data->assignedDate = $now; + } $this->dao->update(TABLE_TASK)->data($data)->where('id')->eq($taskID)->exec(); @@ -558,6 +565,28 @@ class taskModel extends model if($oldTask->story) $this->loadModel('story')->setStage($oldTask->story); if(!dao::isError()) return common::createChanges($oldTask, $task); } + + /** + * Pause task + * + * @param int $taskID + * @access public + * @return array + */ + public function pause($taskID) + { + $oldTask = $this->getById($taskID); + $now = helper::now(); + $task = fixer::input('post') + ->setDefault('status', 'pause') + ->setDefault('lastEditedBy', $this->app->user->account) + ->setDefault('lastEditedDate', $now) + ->remove('comment')->get(); + + $this->dao->update(TABLE_TASK)->data($task)->autoCheck()->where('id')->eq((int)$taskID)->exec(); + + if(!dao::isError()) return common::createChanges($oldTask, $task); + } /** * Close a task. @@ -1334,7 +1363,8 @@ class taskModel extends model if($action == 'finish') return $task->status != 'done' and $task->status != 'closed' and $task->status != 'cancel'; if($action == 'close') return $task->status == 'done' or $task->status == 'cancel'; if($action == 'activate') return $task->status == 'done' or $task->status == 'closed' or $task->status == 'cancel' ; - if($action == 'cancel') return $task->status != 'done ' and $task->status != 'closed' and $task->status != 'cancel'; + if($action == 'cancel') return $task->status != 'done' and $task->status != 'closed' and $task->status != 'cancel'; + if($action == 'pause') return $task->status != 'done' and $task->status != 'closed' and $task->status != 'cancel' and $task->status != 'wait' and $task->status != 'pause'; return true; } diff --git a/module/task/view/pause.html.php b/module/task/view/pause.html.php new file mode 100644 index 0000000000..5d9043c090 --- /dev/null +++ b/module/task/view/pause.html.php @@ -0,0 +1,37 @@ + + * @package task + * @version $Id$ + * @link http://www.zentao.net + */ +?> + + +
+
+ icons['task']);?> id;?> + createLink('task', 'view', 'task=' . $task->id), $task->name, '_blank');?> + task->pause;?> icons['pause']);?> +
+
+ +
+ + + + + + + + +
comment;?>
+
+
+ +
+ diff --git a/module/task/view/view.html.php b/module/task/view/view.html.php index ac00c41d36..a74668c686 100644 --- a/module/task/view/view.html.php +++ b/module/task/view/view.html.php @@ -34,6 +34,7 @@ common::printIcon('task', 'assignTo', "projectID=$task->project&taskID=$task->id", $task, 'button', '', '', 'iframe', true); common::printIcon('task', 'start', "taskID=$task->id", $task, 'button', '', '', 'iframe', true); common::printIcon('task', 'recordEstimate', "taskID=$task->id", $task, 'button', '', '', 'iframe', true); + common::printIcon('task', 'pause', "taskID=$task->id", $task, 'button', '', '', 'iframe', true); common::printIcon('task', 'finish', "taskID=$task->id", $task, 'button', '', '', 'iframe showinonlybody text-success', true); common::printIcon('task', 'close', "taskID=$task->id", $task, 'button', '', '', 'iframe', true); common::printIcon('task', 'activate', "taskID=$task->id", $task, 'button', '', '', 'iframe text-success', true);