diff --git a/module/execution/model.php b/module/execution/model.php index d511c05cee..a6df2c908b 100755 --- a/module/execution/model.php +++ b/module/execution/model.php @@ -1331,6 +1331,8 @@ class executionModel extends model */ public function getList(int $projectID = 0, string $type = 'all',string $status = 'all', int $limit = 0, int $productID = 0, int $branch = 0, object|null $pager = null, bool $withChildren = true) { + if(common::isTutorialMode()) return $this->loadModel('tutorial')->getExecutionStats($type); + if($status == 'involved') return $this->getInvolvedExecutionList($projectID, $status, $limit, $productID, $branch); if($productID != 0) @@ -1823,6 +1825,8 @@ class executionModel extends model */ public function getNoMultipleID(int $projectID): int { + if(common::isTutorialMode()) return $this->loadModel('tutorial')->getExecution()->id; + return (int)$this->dao->select('id')->from(TABLE_EXECUTION)->where('project')->eq($projectID)->andWhere('multiple')->eq(0)->andWhere('deleted')->eq(0)->fetch('id'); } diff --git a/module/execution/ui/task.html.php b/module/execution/ui/task.html.php index b359cd1f37..f4dc6f57eb 100644 --- a/module/execution/ui/task.html.php +++ b/module/execution/ui/task.html.php @@ -114,7 +114,7 @@ toolbar ) : null, $canCreate && $canBatchCreate ? btngroup ( - btn(setClass('btn primary'), set::icon('plus'), set::url($createLink), $lang->task->create), + btn(setClass('btn primary createTask-btn'), set::icon('plus'), set::url($createLink), $lang->task->create), dropdown ( btn(setClass('btn primary dropdown-toggle'), @@ -123,7 +123,7 @@ toolbar set::placement('bottom-end') ) ) : null, - $canCreate && !$canBatchCreate ? item(set($createItem + array('class' => 'btn primary', 'icon' => 'plus'))) : null, + $canCreate && !$canBatchCreate ? item(set($createItem + array('class' => 'btn primary createTask-btn', 'icon' => 'plus'))) : null, $canBatchCreate && !$canCreate ? item(set($batchCreateItem + array('class' => 'btn primary', 'icon' => 'plus'))) : null ); diff --git a/module/project/model.php b/module/project/model.php index 65ab083998..bcc3b6cc51 100755 --- a/module/project/model.php +++ b/module/project/model.php @@ -2164,7 +2164,7 @@ class projectModel extends model { $this->session->set('multiple', true); - $project = $this->projectTao->fetchProjectInfo($projectID); + $project = common::isTutorialMode() ? $this->loadModel('tutorial')->getProject() : $this->projectTao->fetchProjectInfo($projectID); if(empty($project) || $project->multiple) return false; if(!in_array($project->type, array('project', 'sprint', 'kanban'))) return false; diff --git a/module/task/config.php b/module/task/config.php index a963d7d07e..2f12b25b66 100644 --- a/module/task/config.php +++ b/module/task/config.php @@ -122,6 +122,7 @@ $config->task->actionList['close']['hint'] = $lang->task->close; $config->task->actionList['close']['text'] = $lang->task->close; $config->task->actionList['close']['url'] = array('module' => 'task', 'method' => 'close', 'params' => 'taskID={id}'); $config->task->actionList['close']['data-toggle'] = 'modal'; +$config->task->actionList['close']['class'] = 'task-close-btn'; $config->task->actionList['recordWorkhour']['icon'] = 'time'; $config->task->actionList['recordWorkhour']['hint'] = $lang->task->record; diff --git a/module/tutorial/config/taskManage.php b/module/tutorial/config/taskManage.php new file mode 100644 index 0000000000..caba009586 --- /dev/null +++ b/module/tutorial/config/taskManage.php @@ -0,0 +1,198 @@ +name = 'taskManage'; +$taskManage->title = $lang->tutorial->taskManage->title; +$taskManage->icon = 'check-sign text-special'; +$taskManage->type = 'basic'; +$taskManage->modules = 'project,execution,task'; +$taskManage->app = 'project'; +$taskManage->tasks = array(); + +$taskManage->tasks['taskManage'] = array(); +$taskManage->tasks['taskManage']['name'] = 'taskManage'; +$taskManage->tasks['taskManage']['title'] = $lang->tutorial->taskManage->title; +$taskManage->tasks['taskManage']['startUrl'] = array('project', 'browse'); +$taskManage->tasks['taskManage']['steps'] = array(); + +$taskManage->tasks['taskManage']['steps'][] = array( + 'type' => 'openApp', + 'app' => 'project', + 'title' => $lang->tutorial->taskManage->step1->name, + 'desc' => $lang->tutorial->taskManage->step1->desc +); + +$taskManage->tasks['taskManage']['steps'][] = array( + 'type' => 'click', + 'target' => '#actionBar .create-project-btn', + 'page' => 'project-browse', + 'title' => $lang->tutorial->taskManage->step2->name, + 'desc' => $lang->tutorial->taskManage->step2->desc +); + +$taskManage->tasks['taskManage']['steps'][] = array( + 'type' => 'click', + 'target' => '#modelList div.scrum div.model-item', + 'page' => 'project-browse', + 'title' => $lang->tutorial->taskManage->step3->name, + 'desc' => $lang->tutorial->taskManage->step3->desc +); + +$taskManage->tasks['taskManage']['steps'][] = array( + 'type' => 'form', + 'page' => 'project-create', + 'title' => $lang->tutorial->taskManage->step4->name +); + +$taskManage->tasks['taskManage']['steps'][] = array( + 'type' => 'saveForm', + 'page' => 'project-create', + 'title' => $lang->tutorial->taskManage->step5->name, + 'desc' => $lang->tutorial->taskManage->step5->desc +); + +$taskManage->tasks['taskManage']['steps'][] = array( + 'type' => 'click', + 'target' => '#table-project-browse .dtable-body div[data-col="name"][data-row="2"] a', + 'page' => 'project-browse', + 'url' => array('project', 'browse'), + 'title' => $lang->tutorial->taskManage->step6->name, + 'desc' => $lang->tutorial->taskManage->step6->desc +); + +$taskManage->tasks['taskManage']['steps'][] = array( + 'type' => 'click', + 'target' => 'a.createTask-btn', + 'page' => 'execution-task', + 'title' => $lang->tutorial->taskManage->step7->name, + 'desc' => $lang->tutorial->taskManage->step7->desc +); + +$taskManage->tasks['taskManage']['steps'][] = array( + 'type' => 'form', + 'page' => 'task-create', + 'title' => $lang->tutorial->taskManage->step8->name +); + +$taskManage->tasks['taskManage']['steps'][] = array( + 'type' => 'saveForm', + 'page' => 'task-create', + 'title' => $lang->tutorial->taskManage->step9->name, + 'desc' => $lang->tutorial->taskManage->step9->desc +); + +$taskManage->tasks['taskManage']['steps'][] = array( + 'type' => 'click', + 'target' => '#table-execution-task div[data-row="1"] a.dtable-assign-btn', + 'page' => 'execution-task', + 'url' => array('execution', 'task', 'executionID=3'), + 'title' => $lang->tutorial->taskManage->step10->name, + 'desc' => $lang->tutorial->taskManage->step10->desc +); + +$taskManage->tasks['taskManage']['steps'][] = array( + 'type' => 'form', + 'page' => 'execution-task', + 'title' => $lang->tutorial->taskManage->step11->name, +); + +$taskManage->tasks['taskManage']['steps'][] = array( + 'type' => 'saveForm', + 'page' => 'form button[type="submit"]', + 'page' => 'execution-task', + 'title' => $lang->tutorial->taskManage->step12->name, + 'desc' => $lang->tutorial->taskManage->step12->desc +); + +$taskManage->tasks['taskManage']['steps'][] = array( + 'type' => 'click', + 'target' => '#table-execution-task div[data-row="1"] a.task-start-btn', + 'page' => 'execution-task', + 'url' => array('execution', 'task', 'executionID=3'), + 'title' => $lang->tutorial->taskManage->step13->name, + 'desc' => $lang->tutorial->taskManage->step13->desc +); + +$taskManage->tasks['taskManage']['steps'][] = array( + 'type' => 'form', + 'page' => 'execution-task', + 'title' => $lang->tutorial->taskManage->step14->name, +); + +$taskManage->tasks['taskManage']['steps'][] = array( + 'type' => 'saveForm', + 'page' => 'form button[type="submit"]', + 'page' => 'execution-task', + 'title' => $lang->tutorial->taskManage->step15->name, + 'desc' => $lang->tutorial->taskManage->step15->desc +); + +$taskManage->tasks['taskManage']['steps'][] = array( + 'type' => 'click', + 'target' => '#table-execution-task div[data-row="1"] a.task-record-btn', + 'page' => 'execution-task', + 'url' => array('execution', 'task', 'executionID=3'), + 'title' => $lang->tutorial->taskManage->step16->name, + 'desc' => $lang->tutorial->taskManage->step16->desc +); + +$taskManage->tasks['taskManage']['steps'][] = array( + 'type' => 'form', + 'page' => 'execution-task', + 'title' => $lang->tutorial->taskManage->step17->name, +); + +$taskManage->tasks['taskManage']['steps'][] = array( + 'type' => 'saveForm', + 'page' => 'form button[type="submit"]', + 'page' => 'execution-task', + 'title' => $lang->tutorial->taskManage->step18->name, + 'desc' => $lang->tutorial->taskManage->step18->desc +); + +$taskManage->tasks['taskManage']['steps'][] = array( + 'type' => 'click', + 'target' => '#table-execution-task div[data-row="1"] a.task-finish-btn', + 'page' => 'execution-task', + 'url' => array('execution', 'task', 'executionID=3'), + 'title' => $lang->tutorial->taskManage->step19->name, + 'desc' => $lang->tutorial->taskManage->step19->desc +); + +$taskManage->tasks['taskManage']['steps'][] = array( + 'type' => 'form', + 'page' => 'execution-task', + 'title' => $lang->tutorial->taskManage->step20->name, +); + +$taskManage->tasks['taskManage']['steps'][] = array( + 'type' => 'saveForm', + 'target' => 'form button[type="submit"]', + 'page' => 'execution-task', + 'title' => $lang->tutorial->taskManage->step21->name, + 'desc' => $lang->tutorial->taskManage->step21->desc +); + +$taskManage->tasks['taskManage']['steps'][] = array( + 'type' => 'click', + 'target' => '#table-execution-task div[data-row="2"] a.task-close-btn', + 'page' => 'execution-task', + 'url' => array('execution', 'task', 'executionID=3'), + 'title' => $lang->tutorial->taskManage->step22->name, + 'desc' => $lang->tutorial->taskManage->step22->desc +); + +$taskManage->tasks['taskManage']['steps'][] = array( + 'type' => 'form', + 'page' => 'execution-task', + 'title' => $lang->tutorial->taskManage->step23->name, +); + +$taskManage->tasks['taskManage']['steps'][] = array( + 'type' => 'saveForm', + 'target' => 'form button[type="submit"]', + 'page' => 'execution-task', + 'title' => $lang->tutorial->taskManage->step24->name, + 'desc' => $lang->tutorial->taskManage->step24->desc +); diff --git a/module/tutorial/config/zenguides.php b/module/tutorial/config/zenguides.php index 509010a64a..e8e5125cfe 100644 --- a/module/tutorial/config/zenguides.php +++ b/module/tutorial/config/zenguides.php @@ -37,6 +37,7 @@ $config->tutorial->guides[$manageAccount->name] = $manageAccount; $config->tutorial->guides[$scrumProjectManage->basic->name] = $scrumProjectManage->basic; $config->tutorial->guides[$waterfallProjectManage->basic->name] = $waterfallProjectManage->basic; $config->tutorial->guides[$kanbanProjectManage->basic->name] = $kanbanProjectManage->basic; +$config->tutorial->guides[$taskManage->name] = $taskManage; /* Advance tutorial. */ $config->tutorial->guides[$scrumProjectManage->advance->name] = $scrumProjectManage->advance; diff --git a/module/tutorial/lang/zh-cn.php b/module/tutorial/lang/zh-cn.php index a2b67788b7..46db98101f 100644 --- a/module/tutorial/lang/zh-cn.php +++ b/module/tutorial/lang/zh-cn.php @@ -796,3 +796,95 @@ $lang->tutorial->kanbanProjectManage->manageBuild->step4->desc = '保存后在 $lang->tutorial->kanbanProjectManage->manageBuild->step5 = new stdClass(); $lang->tutorial->kanbanProjectManage->manageBuild->step5->name = '点击累积流图'; $lang->tutorial->kanbanProjectManage->manageBuild->step5->desc = '可以在这里查看累积流图进行看板跟踪'; + +$lang->tutorial->taskManage = new stdClass(); +$lang->tutorial->taskManage->title = '任务管理教程'; + +$lang->tutorial->taskManage->step1 = new stdClass(); +$lang->tutorial->taskManage->step1->name = '点击项目'; +$lang->tutorial->taskManage->step1->desc = '点击进入项目,对项目及其任务进行管理'; + +$lang->tutorial->taskManage->step2 = new stdClass(); +$lang->tutorial->taskManage->step2->name = '点击创建项目'; +$lang->tutorial->taskManage->step2->desc = '点击创建一个无迭代的项目管理任务'; + +$lang->tutorial->taskManage->step3 = new stdClass(); +$lang->tutorial->taskManage->step3->name = '点击Scrum项目'; +$lang->tutorial->taskManage->step3->desc = '点击创建一个无迭代的项目'; + +$lang->tutorial->taskManage->step4 = new stdClass(); +$lang->tutorial->taskManage->step4->name = '填写表单'; + +$lang->tutorial->taskManage->step5 = new stdClass(); +$lang->tutorial->taskManage->step5->name = '保存表单'; +$lang->tutorial->taskManage->step5->desc = '保存后在项目列表查看'; + +$lang->tutorial->taskManage->step6 = new stdClass(); +$lang->tutorial->taskManage->step6->name = '点击项目名称'; +$lang->tutorial->taskManage->step6->desc = '点击项目名称,进入项目'; + +$lang->tutorial->taskManage->step7 = new stdClass(); +$lang->tutorial->taskManage->step7->name = '点击新建任务'; +$lang->tutorial->taskManage->step7->desc = '点击创建项目的任务'; + +$lang->tutorial->taskManage->step8 = new stdClass(); +$lang->tutorial->taskManage->step8->name = '填写表单'; + +$lang->tutorial->taskManage->step9 = new stdClass(); +$lang->tutorial->taskManage->step9->name = '保存表单'; +$lang->tutorial->taskManage->step9->desc = '保存后可以在任务列表中查看任务'; + +$lang->tutorial->taskManage->step10 = new stdClass(); +$lang->tutorial->taskManage->step10->name = '点击指派给'; +$lang->tutorial->taskManage->step10->desc = '点击领取、分配任务到人'; + +$lang->tutorial->taskManage->step11 = new stdClass(); +$lang->tutorial->taskManage->step11->name = '填写表单'; + +$lang->tutorial->taskManage->step12 = new stdClass(); +$lang->tutorial->taskManage->step12->name = '保存表单'; +$lang->tutorial->taskManage->step12->desc = '保存后在任务列表中指派给字段会显示被指派的用户'; + +$lang->tutorial->taskManage->step13 = new stdClass(); +$lang->tutorial->taskManage->step13->name = '点击开始任务'; +$lang->tutorial->taskManage->step13->desc = '您可以在这里开始任务,并记录消耗和剩余工时'; + +$lang->tutorial->taskManage->step14 = new stdClass(); +$lang->tutorial->taskManage->step14->name = '填写表单'; + +$lang->tutorial->taskManage->step15 = new stdClass(); +$lang->tutorial->taskManage->step15->name = '保存表单'; +$lang->tutorial->taskManage->step15->desc = '保存后任务状态变为进行中'; + +$lang->tutorial->taskManage->step16 = new stdClass(); +$lang->tutorial->taskManage->step16->name = '点击记录工时'; +$lang->tutorial->taskManage->step16->desc = '您可以在这里记录消耗和剩余工时,当剩余工时为0后,任务会自动完成'; + +$lang->tutorial->taskManage->step17 = new stdClass(); +$lang->tutorial->taskManage->step17->name = '填写表单'; + +$lang->tutorial->taskManage->step18 = new stdClass(); +$lang->tutorial->taskManage->step18->name = '保存表单'; +$lang->tutorial->taskManage->step18->desc = '保存后返回任务列表'; + +$lang->tutorial->taskManage->step19 = new stdClass(); +$lang->tutorial->taskManage->step19->name = '点击完成任务'; +$lang->tutorial->taskManage->step19->desc = '您可以在这里完成任务'; + +$lang->tutorial->taskManage->step20 = new stdClass(); +$lang->tutorial->taskManage->step20->name = '填写表单'; + +$lang->tutorial->taskManage->step21 = new stdClass(); +$lang->tutorial->taskManage->step21->name = '保存表单'; +$lang->tutorial->taskManage->step21->desc = '保存后任务状态变为已完成'; + +$lang->tutorial->taskManage->step22 = new stdClass(); +$lang->tutorial->taskManage->step22->name = '点击关闭任务'; +$lang->tutorial->taskManage->step22->desc = '确认任务完成后点击关闭任务'; + +$lang->tutorial->taskManage->step23 = new stdClass(); +$lang->tutorial->taskManage->step23->name = '填写表单'; + +$lang->tutorial->taskManage->step24 = new stdClass(); +$lang->tutorial->taskManage->step24->name = '保存表单'; +$lang->tutorial->taskManage->step24->desc = '保存后任务状态变为已关闭'; diff --git a/module/tutorial/model.php b/module/tutorial/model.php index b94b338484..718b48ec4e 100644 --- a/module/tutorial/model.php +++ b/module/tutorial/model.php @@ -192,6 +192,12 @@ class tutorialModel extends model $project->name = 'Kanban Project'; $project->model = 'kanban'; } + if($guide && strpos($guide, 'taskManage') !== false) + { + $project->name = 'No multiple Project'; + $project->model = 'scrum'; + $project->multiple = '0'; + } return $project; } @@ -453,6 +459,12 @@ class tutorialModel extends model $execution->name = 'Test Kanban'; $execution->type = 'kanban'; } + if($guide && strpos($guide, 'taskManage') !== false) + { + $execution->name = 'No multiple execution'; + $execution->type = 'spring'; + $execution->multiple = 0; + } return $execution; } @@ -648,10 +660,16 @@ class tutorialModel extends model */ public function getTasks(): array { - $task = $this->getTask(); + $waitTask = $this->getTask(); + + $doneTask = $this->getTask(); + $doneTask->id = 2; + $doneTask->status = 'done'; + $doneTask->finishedBy = 'test'; $tasks = array(); - $tasks[$task->id] = $task; + $tasks[$waitTask->id] = $waitTask; + $tasks[$doneTask->id] = $doneTask; return $tasks; }