From 0558da4e38911ca58563787cc27a938fcb056fb2 Mon Sep 17 00:00:00 2001 From: wangyidong Date: Fri, 12 Oct 2018 14:00:09 +0800 Subject: [PATCH] * finish task #4967. --- db/update10.4.sql | 5 ++++- module/common/model.php | 3 +++ module/project/config.php | 2 ++ module/task/lang/en.php | 1 + module/task/lang/zh-cn.php | 1 + module/task/model.php | 41 ++++++++++++++++++++++++++------------ module/user/model.php | 4 ++-- 7 files changed, 41 insertions(+), 16 deletions(-) diff --git a/db/update10.4.sql b/db/update10.4.sql index b9538a5041..5164300388 100644 --- a/db/update10.4.sql +++ b/db/update10.4.sql @@ -1 +1,4 @@ -update zt_task set `parent` = -1 where `id` in (select `parent` from zt_task where `parent` > 0 group by `parent`) \ No newline at end of file +update zt_task set `parent` = -1 where `id` in (select `parent` from zt_task where `parent` > 0 group by `parent`); +ALTER TABLE `zt_userview` CHANGE `products` `products` mediumtext COLLATE 'utf8_general_ci' NOT NULL AFTER `account`, +CHANGE `projects` `projects` mediumtext COLLATE 'utf8_general_ci' NOT NULL AFTER `products`; +ALTER TABLE `zt_task` ADD `finishedList` text NOT NULL AFTER `finishedDate`; diff --git a/module/common/model.php b/module/common/model.php index cbc5336868..823dbc8b70 100644 --- a/module/common/model.php +++ b/module/common/model.php @@ -813,6 +813,9 @@ EOD; { if(isonlybody() and strpos($extraClass, 'showinonlybody') === false) return false; + /* Remove iframe for operation button in modal. Prevent pop up in modal. */ + if(isonlybody() and strpos($extraClass, 'showinonlybody') !== false) $extraClass = str_replace('iframe', '', $extraClass); + global $app, $lang; /* Judge the $method of $module clickable or not, default is clickable. */ diff --git a/module/project/config.php b/module/project/config.php index cc66d9294d..20eefb6162 100644 --- a/module/project/config.php +++ b/module/project/config.php @@ -54,6 +54,7 @@ $config->project->search['fields']['canceledBy'] = $lang->task->canceledBy; $config->project->search['fields']['lastEditedBy'] = $lang->task->lastEditedBy; $config->project->search['fields']['mailto'] = $lang->task->mailto; +$config->project->search['fields']['finishedList'] = $lang->task->finishedList; $config->project->search['fields']['openedDate'] = $lang->task->openedDate; $config->project->search['fields']['deadline'] = $lang->task->deadline; @@ -87,6 +88,7 @@ $config->project->search['params']['cancelBy'] = array('operator' => '=', $config->project->search['params']['lastEditedBy'] = array('operator' => '=', 'control' => 'select', 'values' => 'users'); $config->project->search['params']['mailto'] = array('operator' => 'include', 'control' => 'select', 'values' => 'users'); +$config->project->search['params']['finishedList'] = array('operator' => 'include', 'control' => 'select', 'values' => 'users'); $config->project->search['params']['openedDate'] = array('operator' => '=', 'control' => 'input', 'values' => '', 'class' => 'date'); $config->project->search['params']['deadline'] = array('operator' => '=', 'control' => 'input', 'values' => '', 'class' => 'date'); diff --git a/module/task/lang/en.php b/module/task/lang/en.php index 28489151c8..a1c303a631 100644 --- a/module/task/lang/en.php +++ b/module/task/lang/en.php @@ -84,6 +84,7 @@ $lang->task->finishedBy = 'Finished'; $lang->task->finishedByAB = 'Finished'; $lang->task->finishedDate = 'Finished on'; $lang->task->finishedDateAB = 'Finished on'; +$lang->task->finishedList = 'Finished list'; $lang->task->canceledBy = 'Cancelled by'; $lang->task->canceledDate = 'Cancelled on'; $lang->task->closedBy = 'Closed by'; diff --git a/module/task/lang/zh-cn.php b/module/task/lang/zh-cn.php index 41b2782cbd..cae335973e 100644 --- a/module/task/lang/zh-cn.php +++ b/module/task/lang/zh-cn.php @@ -84,6 +84,7 @@ $lang->task->finishedBy = '由谁完成'; $lang->task->finishedByAB = '完成者'; $lang->task->finishedDate = '完成时间'; $lang->task->finishedDateAB = '完成时间'; +$lang->task->finishedList = '完成者列表'; $lang->task->canceledBy = '由谁取消'; $lang->task->canceledDate = '取消时间'; $lang->task->closedBy = '由谁关闭'; diff --git a/module/task/model.php b/module/task/model.php index a43f2ff138..ae5037c39f 100644 --- a/module/task/model.php +++ b/module/task/model.php @@ -420,8 +420,6 @@ class taskModel extends model if($status == 'doing') { - $task->assignedTo = ''; - $task->assignedDate = ''; $task->finishedBy = ''; $task->finishedDate = ''; $task->closedBy = ''; @@ -457,16 +455,16 @@ class taskModel extends model * @access public * @return object|bool */ - public function computeHours4Multiple($oldTask, $task = null) + public function computeHours4Multiple($oldTask, $task = null, $team = array()) { if(!$oldTask) return false; - $team = $this->dao->select('*')->from(TABLE_TEAM)->where('root')->eq($oldTask->id)->andWhere('type')->eq('task')->orderBy('order')->fetchAll('account'); + if(empty($team)) $team = $this->dao->select('*')->from(TABLE_TEAM)->where('root')->eq($oldTask->id)->andWhere('type')->eq('task')->orderBy('order')->fetchAll('account'); if(!empty($team)) { $now = helper::now(); $teams = array_keys($team); - $currentTask = isset($task) ? $task : new stdclass(); + $currentTask = !empty($task) ? $task : new stdclass(); if(!isset($currentTask->status)) $currentTask->status = $oldTask->status; if(!empty($this->post->assignedTo)) @@ -508,7 +506,7 @@ class taskModel extends model $currentTask->left += (float)$member->left; } - if(isset($task)) + if(!empty($task)) { if($this->post->status) return $currentTask; @@ -537,14 +535,22 @@ class taskModel extends model elseif($oldTask->assignedTo == $teams[count($teams) - 1]) { $currentTask->status = 'done'; - if($oldTask->left > 0) - { - $currentTask->finishedBy = $this->app->user->account; - $currentTask->finishedDate = $now; - } + $currentTask->finishedBy = $this->app->user->account; + $currentTask->finishedDate = $now; } } + if(($oldTask->assignedTo != $currentTask->assignedTo or $currentTask->status == 'done') + and isset($team[$this->app->user->account]) and $team[$this->app->user->account]->left == 0 + and strpos($oldTask->finishedLis, ",{$this->app->user->account},") === false) + { + $currentTask->finishedList = ',' . trim(trim($oldTask->finishedList, ',') . ",{$this->app->user->account}", ',') . ','; + } + if(($oldTask->status == 'done' or $oldTask->status == 'closed') and $currentTask->status == 'doing' and $this->post->assignedTo) + { + $currentTask->finishedList = ',' . trim(substr($oldTask->finishedList, 0, strpos($oldTask->finishedList, ",{$this->post->assignedTo},")), ',') . ','; + } + return $currentTask; } $this->dao->update(TABLE_TASK)->data($currentTask)->autoCheck()->where('id')->eq($oldTask->id)->exec(); @@ -1161,6 +1167,7 @@ class taskModel extends model ->setDefault('status', 'done') ->setDefault('finishedBy, lastEditedBy', $this->app->user->account) ->setDefault('finishedDate, lastEditedDate', $now) + ->setDefault('finishedDate, lastEditedDate', $now) ->removeIF(!empty($oldTask->team), 'finishedBy,finishedDate,status,left') ->remove('comment,files,labels') ->get(); @@ -1488,7 +1495,11 @@ class taskModel extends model ->beginIF($type == 'undone')->andWhere("(t1.status = 'wait' or t1.status ='doing')")->fi() ->beginIF($type == 'needconfirm')->andWhere('t2.version > t1.storyVersion')->andWhere("t2.status = 'active'")->fi() ->beginIF($type == 'assignedtome')->andWhere('t1.assignedTo')->eq($this->app->user->account)->fi() - ->beginIF($type == 'finishedbyme')->andWhere('t1.finishedby')->eq($this->app->user->account)->fi() + ->beginIF($type == 'finishedbyme') + ->andWhere('t1.finishedby', 1)->eq($this->app->user->account) + ->orWhere('t1.finishedList')->like("%,{$this->app->user->account},%") + ->markRight(1) + ->fi() ->beginIF($type == 'delayed')->andWhere('t1.deadline')->gt('1970-1-1')->andWhere('t1.deadline')->lt(date(DT_DATE1))->andWhere('t1.status')->in('wait,doing')->fi() ->beginIF(is_array($type) or strpos(',all,undone,needconfirm,assignedtome,delayed,finishedbyme,myinvolved,', ",$type,") === false)->andWhere('t1.status')->in($type)->fi() ->beginIF($modules)->andWhere('t1.module')->in($modules)->fi() @@ -1521,7 +1532,11 @@ class taskModel extends model ->beginIF($type == 'undone')->andWhere("(t1.status = 'wait' or t1.status ='doing')")->fi() ->beginIF($type == 'needconfirm')->andWhere('t2.version > t1.storyVersion')->andWhere("t2.status = 'active'")->fi() ->beginIF($type == 'assignedtome')->andWhere('t1.assignedTo')->eq($this->app->user->account)->fi() - ->beginIF($type == 'finishedbyme')->andWhere('t1.finishedby')->eq($this->app->user->account)->fi() + ->beginIF($type == 'finishedbyme') + ->andWhere('t1.finishedby', 1)->eq($this->app->user->account) + ->orWhere('t1.finishedList')->like("%,{$this->app->user->account},%") + ->markRight(1) + ->fi() ->beginIF($type == 'delayed')->andWhere('t1.deadline')->gt('1970-1-1')->andWhere('t1.deadline')->lt(date(DT_DATE1))->andWhere('t1.status')->in('wait,doing')->fi() ->beginIF(is_array($type) or strpos(',all,undone,needconfirm,assignedtome,delayed,finishedbyme,myinvolved,', ",$type,") === false)->andWhere('t1.status')->in($type)->fi() ->beginIF($modules)->andWhere('t1.module')->in($modules)->fi() diff --git a/module/user/model.php b/module/user/model.php index d968facc0c..0b1a9d4f5e 100644 --- a/module/user/model.php +++ b/module/user/model.php @@ -1322,7 +1322,7 @@ class userModel extends model $userView = $this->dao->select('*')->from(TABLE_USERVIEW)->where('account')->eq($account)->fetch(); if(empty($userView)) $userView = $this->computeUserView($account); - if(!empty($acls['products'])) + if(!empty($acls['products']) and !$this->session->user->admin) { $grantProducts = ''; foreach($acls['products'] as $productID) @@ -1331,7 +1331,7 @@ class userModel extends model } $userView->products = $grantProducts; } - if(!empty($acls['projects'])) + if(!empty($acls['projects']) and !$this->session->user->admin) { $grantProjects = ''; foreach($acls['projects'] as $projectID)