diff --git a/module/task/config.php b/module/task/config.php index 2eecf78ae3..c4ebe9b4b8 100644 --- a/module/task/config.php +++ b/module/task/config.php @@ -10,6 +10,7 @@ $config->task->edit = new stdclass(); $config->task->start = new stdclass(); $config->task->finish = new stdclass(); $config->task->activate = new stdclass(); +$config->task->view = new stdclass(); $config->task->create->requiredFields = 'execution,name,type'; $config->task->edit->requiredFields = $config->task->create->requiredFields; @@ -82,3 +83,94 @@ $config->task->afterOptions = array(); $config->task->afterOptions[] = array('text' => $lang->task->afterChoices['continueAdding'], 'value' => 'continueAdding'); $config->task->afterOptions[] = array('text' => $lang->task->afterChoices['toTaskList'], 'value' => 'toTaskList', 'checked' => true); $config->task->afterOptions[] = array('text' => $lang->task->afterChoices['toStoryList'], 'value' => 'toStoryList'); + +$config->task->actionList['confirmStoryChange']['icon'] = 'search'; +$config->task->actionList['confirmStoryChange']['hint'] = $lang->task->activate; +$config->task->actionList['confirmStoryChange']['url'] = helper::createLink('task', 'confirmStoryChange', 'taskID={id}'); +$config->task->actionList['confirmStoryChange']['order'] = 5; +$config->task->actionList['confirmStoryChange']['show'] = 'clickable'; + +$config->task->actionList['start']['icon'] = 'play'; +$config->task->actionList['start']['hint'] = $lang->task->start; +$config->task->actionList['start']['text'] = $lang->task->start; +$config->task->actionList['start']['url'] = helper::createLink('task', 'start', 'taskID={id}', '', true); +$config->task->actionList['start']['data-toggle'] = 'modal'; +$config->task->actionList['start']['order'] = 10; +$config->task->actionList['start']['show'] = 'default'; + +$config->task->actionList['restart']['icon'] = 'restart'; +$config->task->actionList['restart']['hint'] = $lang->task->restart; +$config->task->actionList['restart']['text'] = $lang->task->restart; +$config->task->actionList['restart']['url'] = helper::createLink('task', 'restart', 'taskID={id}', '', true); +$config->task->actionList['restart']['data-toggle'] = 'modal'; +$config->task->actionList['restart']['order'] = 10; +$config->task->actionList['restart']['show'] = 'clickable'; + +$config->task->actionList['finish']['icon'] = 'checked'; +$config->task->actionList['finish']['hint'] = $lang->task->finish; +$config->task->actionList['finish']['text'] = $lang->task->finish; +$config->task->actionList['finish']['url'] = helper::createLink('task', 'finish', 'taskID={id}', '', true); +$config->task->actionList['finish']['data-toggle'] = 'modal'; +$config->task->actionList['finish']['order'] = 15; + +$config->task->actionList['close']['icon'] = 'off'; +$config->task->actionList['close']['hint'] = $lang->task->close; +$config->task->actionList['close']['text'] = $lang->task->close; +$config->task->actionList['close']['url'] = helper::createLink('task', 'close', 'taskID={id}', '', true); +$config->task->actionList['close']['data-toggle'] = 'modal'; +$config->task->actionList['close']['order'] = 20; + +$config->task->actionList['recordWorkhour']['icon'] = 'time'; +$config->task->actionList['recordWorkhour']['hint'] = $lang->task->record; +$config->task->actionList['recordWorkhour']['text'] = $lang->task->record; +$config->task->actionList['recordWorkhour']['url'] = helper::createLink('task', 'recordWorkhour', 'taskID={id}', '', true); +$config->task->actionList['recordWorkhour']['data-toggle'] = 'modal'; +$config->task->actionList['recordWorkhour']['order'] = 25; + +$config->task->actionList['edit']['icon'] = 'edit'; +$config->task->actionList['edit']['hint'] = $lang->task->edit; +$config->task->actionList['edit']['text'] = $lang->task->edit; +$config->task->actionList['edit']['url'] = helper::createLink('task', 'edit', 'taskID={id}'); +$config->task->actionList['edit']['order'] = 30; + +$config->task->actionList['batchCreate']['icon'] = 'split'; +$config->task->actionList['batchCreate']['hint'] = $lang->task->batchCreate; +$config->task->actionList['batchCreate']['text'] = $lang->task->batchCreate; +$config->task->actionList['batchCreate']['url'] = helper::createLink('task', 'batchCreate', 'execution={execution}&storyID={story}&moduleID={module}&taskID={id}'); +$config->task->actionList['batchCreate']['order'] = 35; + +$config->task->actionList['create']['icon'] = 'copy'; +$config->task->actionList['create']['hint'] = $lang->task->children; +$config->task->actionList['create']['text'] = $lang->task->children; +$config->task->actionList['create']['url'] = helper::createLink('task', 'create', 'projctID={execution}&storyID=0&moduleID=0&taskID={id}'); + +$config->task->actionList['delete']['icon'] = 'trash'; +$config->task->actionList['delete']['hint'] = $lang->task->delete; +$config->task->actionList['delete']['text'] = $lang->task->delete; +$config->task->actionList['delete']['url'] = helper::createLink('task', 'delete', 'executionID={execution}&taskID={id}'); + +$config->task->actionList['view']['icon'] = 'chevron-double-up'; +$config->task->actionList['view']['hint'] = $lang->task->parent; +$config->task->actionList['view']['text'] = $lang->task->parent; +$config->task->actionList['view']['url'] = helper::createLink('task', 'view', 'taskID={id}'); + +$config->task->actionList['cancel']['icon'] = 'ban-circle'; +$config->task->actionList['cancel']['hint'] = $lang->task->cancel; +$config->task->actionList['cancel']['text'] = $lang->task->cancel; +$config->task->actionList['cancel']['url'] = helper::createLink('task', 'cancel', 'taskID={id}', '', true); +$config->task->actionList['cancel']['data-toggle'] = 'modal'; + +$config->task->actionList['pause']['icon'] = 'pause'; +$config->task->actionList['pause']['hint'] = $lang->task->pause; +$config->task->actionList['pause']['text'] = $lang->task->pause; +$config->task->actionList['pause']['url'] = helper::createLink('task', 'pause', 'taskID={id}', '', true); +$config->task->actionList['pause']['data-toggle'] = 'modal'; + +$config->task->actionList['assignedTo']['icon'] = 'hand-right'; +$config->task->actionList['assignedTo']['hint'] = $lang->task->assign; +$config->task->actionList['assignedTo']['text'] = $lang->task->assign; +$config->task->actionList['assignedTo']['url'] = helper::createLink('task', 'assginedTo', 'taskID={id}', '', true); +$config->task->actionList['assignedTo']['data-toggle'] = 'modal'; + +$config->task->view->operateList['main'] = array('batchCreate', 'assignTo', 'start', 'restart', 'recordWorkhour', 'pause', 'finish', 'activate', 'close', 'cancel'); +$config->task->view->operateList['common'] = array('edit', 'create', 'delete', 'view'); diff --git a/module/task/config/dtable.php b/module/task/config/dtable.php index 7fa117dd66..730eb28309 100644 --- a/module/task/config/dtable.php +++ b/module/task/config/dtable.php @@ -1,5 +1,6 @@ task->dtable = new stdclass(); +$config->task->dtable->operateList = array('batchCreate', 'confirmStoryChange', 'start', 'restart', 'recordWorkhour', 'finish', 'close', 'edit'); $config->task->dtable->fieldList['id']['title'] = $lang->idAB; $config->task->dtable->fieldList['id']['name'] = 'id'; @@ -151,56 +152,17 @@ $config->task->dtable->fieldList['mailto']['name'] = 'mailto'; $config->task->dtable->fieldList['mailto']['type'] = 'user'; $config->task->dtable->fieldList['mailto']['sortType'] = true; -$config->task->dtable->fieldList['actions']['title'] = $lang->actions; -$config->task->dtable->fieldList['actions']['name'] = 'actions'; -$config->task->dtable->fieldList['actions']['fixed'] = 'right'; -$config->task->dtable->fieldList['actions']['width'] = '180'; -$config->task->dtable->fieldList['actions']['type'] = 'actions'; +$config->task->dtable->fieldList['actions']['title'] = $lang->actions; +$config->task->dtable->fieldList['actions']['name'] = 'actions'; +$config->task->dtable->fieldList['actions']['fixed'] = 'right'; +$config->task->dtable->fieldList['actions']['width'] = '180'; +$config->task->dtable->fieldList['actions']['type'] = 'actions'; +$config->task->dtable->fieldList['actions']['actionsMap'] = array(); -$config->task->dtable->fieldList['actions']['actionsMap']['confirmStoryChange']['icon'] = 'search'; -$config->task->dtable->fieldList['actions']['actionsMap']['confirmStoryChange']['hint'] = $lang->task->activate; -$config->task->dtable->fieldList['actions']['actionsMap']['confirmStoryChange']['url'] = helper::createLink('task', 'confirmStoryChange', 'taskID={id}'); -$config->task->dtable->fieldList['actions']['actionsMap']['confirmStoryChange']['order'] = 5; -$config->task->dtable->fieldList['actions']['actionsMap']['confirmStoryChange']['show'] = 'clickable'; +foreach($config->task->dtable->operateList as $operate) +{ + $settings = $config->task->actionList[$operate]; + $settings['text'] = ''; -$config->task->dtable->fieldList['actions']['actionsMap']['start']['icon'] = 'play'; -$config->task->dtable->fieldList['actions']['actionsMap']['start']['hint'] = $lang->task->start; -$config->task->dtable->fieldList['actions']['actionsMap']['start']['url'] = helper::createLink('task', 'start', 'taskID={id}', '', true); -$config->task->dtable->fieldList['actions']['actionsMap']['start']['data-toggle'] = 'modal'; -$config->task->dtable->fieldList['actions']['actionsMap']['start']['order'] = 10; -$config->task->dtable->fieldList['actions']['actionsMap']['start']['show'] = 'default'; - -$config->task->dtable->fieldList['actions']['actionsMap']['restart']['icon'] = 'icon-restart'; -$config->task->dtable->fieldList['actions']['actionsMap']['restart']['hint'] = $lang->task->restart; -$config->task->dtable->fieldList['actions']['actionsMap']['restart']['url'] = helper::createLink('task', 'restart', 'taskID={id}', '', true); -$config->task->dtable->fieldList['actions']['actionsMap']['restart']['data-toggle'] = 'modal'; -$config->task->dtable->fieldList['actions']['actionsMap']['restart']['order'] = 10; -$config->task->dtable->fieldList['actions']['actionsMap']['restart']['show'] = 'clickable'; - -$config->task->dtable->fieldList['actions']['actionsMap']['finish']['icon'] = 'checked'; -$config->task->dtable->fieldList['actions']['actionsMap']['finish']['hint'] = $lang->task->finish; -$config->task->dtable->fieldList['actions']['actionsMap']['finish']['url'] = helper::createLink('task', 'finish', 'taskID={id}', '', true); -$config->task->dtable->fieldList['actions']['actionsMap']['finish']['data-toggle'] = 'modal'; -$config->task->dtable->fieldList['actions']['actionsMap']['finish']['order'] = 15; - -$config->task->dtable->fieldList['actions']['actionsMap']['close']['icon'] = 'off'; -$config->task->dtable->fieldList['actions']['actionsMap']['close']['hint'] = $lang->task->close; -$config->task->dtable->fieldList['actions']['actionsMap']['close']['url'] = helper::createLink('task', 'close', 'taskID={id}', '', true); -$config->task->dtable->fieldList['actions']['actionsMap']['close']['data-toggle'] = 'modal'; -$config->task->dtable->fieldList['actions']['actionsMap']['close']['order'] = 20; - -$config->task->dtable->fieldList['actions']['actionsMap']['recordWorkhour']['icon'] = 'time'; -$config->task->dtable->fieldList['actions']['actionsMap']['recordWorkhour']['hint'] = $lang->task->record; -$config->task->dtable->fieldList['actions']['actionsMap']['recordWorkhour']['url'] = helper::createLink('task', 'recordWorkhour', 'taskID={id}', '', true); -$config->task->dtable->fieldList['actions']['actionsMap']['recordWorkhour']['data-toggle'] = 'modal'; -$config->task->dtable->fieldList['actions']['actionsMap']['recordWorkhour']['order'] = 25; - -$config->task->dtable->fieldList['actions']['actionsMap']['edit']['icon'] = 'edit'; -$config->task->dtable->fieldList['actions']['actionsMap']['edit']['hint'] = $lang->task->edit; -$config->task->dtable->fieldList['actions']['actionsMap']['edit']['url'] = helper::createLink('task', 'edit', 'taskID={id}'); -$config->task->dtable->fieldList['actions']['actionsMap']['edit']['order'] = 30; - -$config->task->dtable->fieldList['actions']['actionsMap']['batchCreate']['icon'] = 'split'; -$config->task->dtable->fieldList['actions']['actionsMap']['batchCreate']['hint'] = $lang->task->batchCreate; -$config->task->dtable->fieldList['actions']['actionsMap']['batchCreate']['url'] = helper::createLink('task', 'batchCreate', 'execution={execution}&storyID={story}&moduleID={module}&taskID={id}'); -$config->task->dtable->fieldList['actions']['actionsMap']['batchCreate']['order'] = 35; + $config->task->dtable->fieldList['actions']['actionsMap'][$operate] = $settings; +} diff --git a/module/task/control.php b/module/task/control.php index 60a572920c..fd3536fe10 100755 --- a/module/task/control.php +++ b/module/task/control.php @@ -369,8 +369,7 @@ class task extends control $this->view->linkMRTitles = $this->loadModel('mr')->getLinkedMRPairs($taskID, 'task'); $this->view->linkCommits = $this->loadModel('repo')->getCommitsByObject($taskID, 'task'); $this->view->methodName = $this->methodName; - // $this->display(); - $this->render(); + $this->display(); } /** diff --git a/module/task/ui/view.html.php b/module/task/ui/view.html.php index 1f47fdb140..052e90ab69 100644 --- a/module/task/ui/view.html.php +++ b/module/task/ui/view.html.php @@ -8,6 +8,45 @@ detailHeader to::title(entityLabel(set(array('entityID' => $task->id, 'level' => 1, 'text' => $task->name)))), to::suffix(btn(set::icon('plus'), set::url(''), set::type('primary'), $lang->task->create)) ); + +/* Build replace url param, replace {id} to $task->id. */ +$urlReplaceName = array(); +$urlReplaceValue = array(); +foreach($task as $key => $value) +{ + $urlReplaceName[] = "{{$key}}"; + $urlReplaceValue[] = $value; +} + +/* Construct suitable actions for the current task. */ +$operateMenus = array(); +foreach($config->task->view->operateList['main'] as $operate) +{ + if(!common::hasPriv('task', $operate)) continue; + if(!$this->task->isClickable($task, $operate)) continue; + + if($operate == 'batchCreate' && (!empty($task->team) || !empty($task->children))) continue; + + $settings = $config->task->actionList[$operate]; + $settings['url'] = str_replace($urlReplaceName, $urlReplaceValue, $settings['url']); + + $operateMenus[] = $settings; +} + +/* Construct common actions for task. */ +$commonActions = array(); +foreach($config->task->view->operateList['common'] as $operate) +{ + if(!common::hasPriv('task', $operate)) continue; + if($operate == 'view' && $task->parent <= 0) continue; + + $settings = $config->task->actionList[$operate]; + $settings['url'] = str_replace($urlReplaceName, $urlReplaceValue, $settings['url']); + $settings['text'] = ''; + + $commonActions[] = $settings; +} + detailBody ( sectionList @@ -33,7 +72,19 @@ detailBody set::text($task->storyTitle), )) ), - history(set(array('actions' => $actions, 'users' => $users, 'methodName' => $methodName))) + history(), + center + ( + floatToolbar + ( + set::prefix + ( + array(array('icon' => 'back', 'text' => $lang->goback)) + ), + set::main($operateMenus), + set::suffix($commonActions) + ) + ) ), detailSide (