diff --git a/module/programplan/model.php b/module/programplan/model.php index 207cbd4ccc..1a13229b50 100755 --- a/module/programplan/model.php +++ b/module/programplan/model.php @@ -41,6 +41,8 @@ class programplanModel extends model */ public function getStage(int $executionID = 0, int $productID = 0, string $browseType = 'all', string $orderBy = 'id_asc'): array { + if(common::isTutorialMode()) return $this->loadModel('tutorial')->getStages(); + $plans = $this->programplanTao->getStageList($executionID, $productID, $browseType, $orderBy); return $this->processPlans($plans); } diff --git a/module/programplan/ui/gantt.html.php b/module/programplan/ui/gantt.html.php index 7be091c226..95708296f6 100644 --- a/module/programplan/ui/gantt.html.php +++ b/module/programplan/ui/gantt.html.php @@ -53,7 +53,7 @@ if($app->rawModule == 'programplan') )) ), btn(set::url($this->createLink('programplan', 'ajaxcustom')), set::icon('cog-outline'), $lang->settings, setClass('no-underline'), set::type('link'), set('data-toggle', 'modal'), set('data-size', 'sm')), - (common::hasPriv('programplan', 'create') && empty($product->deleted)) ? btn(set::url($this->createLink('programplan', 'create', "projectID=$projectID")), set::icon('plus'), $lang->programplan->create, setClass('primary')) : null + (common::hasPriv('programplan', 'create') && empty($product->deleted)) ? btn(set::url($this->createLink('programplan', 'create', "projectID=$projectID")), set::icon('plus'), $lang->programplan->create, setClass('primary programplan-create-btn')) : null ); } diff --git a/module/project/model.php b/module/project/model.php index e305779c0f..65ab083998 100755 --- a/module/project/model.php +++ b/module/project/model.php @@ -167,7 +167,7 @@ class projectModel extends model public function getByID(int $projectID, string $type = ''): object|false { /* Using demo data during tutorials. */ - if(commonModel::isTutorialMode()) return $this->loadModel('tutorial')->getProject(); + if(commonModel::isTutorialMode()) return empty($projectID) ? false : $this->loadModel('tutorial')->getProject(); /* Get project info. */ $project = $this->projectTao->fetchProjectInfo($projectID, $type); diff --git a/module/stage/model.php b/module/stage/model.php index 420cd8e500..f0de13f94d 100644 --- a/module/stage/model.php +++ b/module/stage/model.php @@ -150,6 +150,8 @@ class stageModel extends model */ public function getStages(string $orderBy = 'id_desc', int $projectID = 0, string $type = ''): array { + if(common::isTutorialMode()) return $this->loadModel('tutorial')->getStages(); + if($projectID) { return $this->dao->select('`id`,name,type,percent,openedBy as createdBy,`begin` as createdDate,lastEditedBy as editedBy,`end` as editedDate,deleted') diff --git a/module/tutorial/config/waterfallProjectManage.php b/module/tutorial/config/waterfallProjectManage.php index 5f07e2a247..530a59baef 100644 --- a/module/tutorial/config/waterfallProjectManage.php +++ b/module/tutorial/config/waterfallProjectManage.php @@ -6,7 +6,7 @@ $waterfallProjectManage->name = 'waterfallProjectManage'; $waterfallProjectManage->title = $lang->tutorial->waterfallProjectManage->title; $waterfallProjectManage->icon = 'waterfall text-special'; $waterfallProjectManage->type = 'basic'; -$waterfallProjectManage->modules = 'project,execution,build,task,bug,testreport,issue,risk'; +$waterfallProjectManage->modules = 'project,execution,build,task,bug,testreport,issue,risk,programplan'; $waterfallProjectManage->app = 'project'; $waterfallProjectManage->tasks = array(); @@ -102,4 +102,72 @@ $waterfallProjectManage->tasks['manageProject']['steps'][] = array( 'desc' => $lang->tutorial->waterfallProjectManage->manageProject->step11->desc ); +$waterfallProjectManage->tasks['setStage'] = array(); +$waterfallProjectManage->tasks['setStage']['name'] = 'setStage'; +$waterfallProjectManage->tasks['setStage']['title'] = $lang->tutorial->waterfallProjectManage->setStage->title; +$waterfallProjectManage->tasks['setStage']['startUrl'] = array('project', 'index', 'project=2'); +$waterfallProjectManage->tasks['setStage']['steps'] = array(); + +$waterfallProjectManage->tasks['setStage']['steps'][] = array( + 'type' => 'clickNavbar', + 'target' => 'execution', + 'page' => 'project-index', + 'title' => $lang->tutorial->waterfallProjectManage->setStage->step1->name, + 'desc' => $lang->tutorial->waterfallProjectManage->setStage->step1->desc +); + +$waterfallProjectManage->tasks['setStage']['steps'][] = array( + 'type' => 'click', + 'target' => in_array($config->edition, array('max', 'ipd')) ? '#actionBar a.programplan-create-btn' : '#actionBar a.create-execution-btn', + 'page' => in_array($config->edition, array('max', 'ipd')) ? 'programplan-browse' : 'project-execution', + 'url' => in_array($config->edition, array('max', 'ipd')) ? array('programplan', 'browse', 'projectID=2') : array('project', 'execution', 'status=all&projectID=2'), + 'title' => $lang->tutorial->waterfallProjectManage->setStage->step2->name, + 'desc' => $lang->tutorial->waterfallProjectManage->setStage->step2->desc +); + +$waterfallProjectManage->tasks['setStage']['steps'][] = array( + 'type' => 'form', + 'target' => '#dataform', + 'page' => 'programplan-create', + 'title' => $lang->tutorial->waterfallProjectManage->setStage->step3->name +); + +$waterfallProjectManage->tasks['setStage']['steps'][] = array( + 'type' => 'saveForm', + 'target' => '#dataform button[type="submit"]', + 'page' => 'programplan-create', + 'title' => $lang->tutorial->waterfallProjectManage->setStage->step4->name, + 'desc' => $lang->tutorial->waterfallProjectManage->setStage->step4->desc +); + +if(in_array($config->edition, array('max', 'ipd'))) +{ + $waterfallProjectManage->tasks['setStage']['steps'][] = array( + 'type' => 'click', + 'target' => '#actionBar a.switchBtn', + 'page' => 'programplan-browse', + 'url' => array('programplan', 'browse', 'projectID=2'), + 'title' => $lang->tutorial->waterfallProjectManage->setStage->step5->name, + 'desc' => $lang->tutorial->waterfallProjectManage->setStage->step5->desc + ); +} + +$waterfallProjectManage->tasks['setStage']['steps'][] = array( + 'type' => 'click', + 'target' => '#table-project-execution .dtable-cell[data-row="pid3"][data-col="nameCol"] a', + 'page' => 'project-execution', + 'url' => array('project', 'execution', 'status=all&projectID=2'), + 'title' => $lang->tutorial->waterfallProjectManage->setStage->step6->name, + 'desc' => $lang->tutorial->waterfallProjectManage->setStage->step6->desc +); + +$waterfallProjectManage->tasks['setStage']['steps'][] = array( + 'type' => 'clickNavbar', + 'target' => 'burn', + 'page' => 'execution-task', + 'url' => array('execution', 'task', 'executionID=3'), + 'title' => $lang->tutorial->waterfallProjectManage->setStage->step7->name, + 'desc' => $lang->tutorial->waterfallProjectManage->setStage->step7->desc +); + $config->tutorial->guides[$waterfallProjectManage->name] = $waterfallProjectManage; diff --git a/module/tutorial/lang/zh-cn.php b/module/tutorial/lang/zh-cn.php index dfee4f4888..234510ec41 100644 --- a/module/tutorial/lang/zh-cn.php +++ b/module/tutorial/lang/zh-cn.php @@ -568,3 +568,33 @@ $lang->tutorial->waterfallProjectManage->manageProject->step10->name = '填写 $lang->tutorial->waterfallProjectManage->manageProject->step11 = new stdClass(); $lang->tutorial->waterfallProjectManage->manageProject->step11->name = '保存表单'; $lang->tutorial->waterfallProjectManage->manageProject->step11->desc = '保存后可以在团队中查看团队成员'; + +$lang->tutorial->waterfallProjectManage->setStage = new stdClass(); +$lang->tutorial->waterfallProjectManage->setStage->title = '阶段设置'; + +$lang->tutorial->waterfallProjectManage->setStage->step1 = new stdClass(); +$lang->tutorial->waterfallProjectManage->setStage->step1->name = '点击阶段'; +$lang->tutorial->waterfallProjectManage->setStage->step1->desc = '可以在这里维护阶段'; + +$lang->tutorial->waterfallProjectManage->setStage->step2 = new stdClass(); +$lang->tutorial->waterfallProjectManage->setStage->step2->name = '点击设置阶段'; +$lang->tutorial->waterfallProjectManage->setStage->step2->desc = '点击设置阶段可以确定项目的各个阶段,将阶段设置为里程碑,可以查看相关里程碑报告。'; + +$lang->tutorial->waterfallProjectManage->setStage->step3 = new stdClass(); +$lang->tutorial->waterfallProjectManage->setStage->step3->name = '填写表单'; + +$lang->tutorial->waterfallProjectManage->setStage->step4 = new stdClass(); +$lang->tutorial->waterfallProjectManage->setStage->step4->name = '保存表单'; +$lang->tutorial->waterfallProjectManage->setStage->step4->desc = '可以为每个阶段设置起止日期,保存在阶段列表中查看所有阶段'; + +$lang->tutorial->waterfallProjectManage->setStage->step5 = new stdClass(); +$lang->tutorial->waterfallProjectManage->setStage->step5->name = '切换视图'; +$lang->tutorial->waterfallProjectManage->setStage->step5->desc = '在这里可以切换为甘特图视图查看阶段'; + +$lang->tutorial->waterfallProjectManage->setStage->step6 = new stdClass(); +$lang->tutorial->waterfallProjectManage->setStage->step6->name = '点击开发阶段'; +$lang->tutorial->waterfallProjectManage->setStage->step6->desc = '可以在每个阶段中分配相应的资源和任务'; + +$lang->tutorial->waterfallProjectManage->setStage->step7 = new stdClass(); +$lang->tutorial->waterfallProjectManage->setStage->step7->name = '点击燃尽图'; +$lang->tutorial->waterfallProjectManage->setStage->step7->desc = '查看燃尽图可以跟进阶段'; diff --git a/module/tutorial/model.php b/module/tutorial/model.php index b579298765..55372b597f 100644 --- a/module/tutorial/model.php +++ b/module/tutorial/model.php @@ -176,7 +176,7 @@ class tutorialModel extends model $project->storyType = 'story,requirement,epic'; $project->charter = 0; - list($guide, $guideTask, $guideStepIndex) = explode('-', $_SERVER['HTTP_X_ZIN_TUTORIAL']); + list($guide, $guideTask, $guideStepIndex) = empty($_SERVER['HTTP_X_ZIN_TUTORIAL']) ? array() : explode('-', $_SERVER['HTTP_X_ZIN_TUTORIAL']); if($guide == 'scrumProjectManage') { $project->name = 'Scrum Project'; @@ -334,6 +334,41 @@ class tutorialModel extends model return array(3 => 'Test execution'); } + /** + * 获取新手模式阶段。 + * Get tutorial stage. + * + * @access public + * @return object + */ + public function getStage(): object + { + $stage = new stdClass(); + $stage->id = 3; + $stage->name = 'Development stage'; + $stage->percent = 50; + $stage->type = 'dev'; + $stage->projectType = 'waterfall'; + $stage->createdBy = ''; + $stage->createdDate = ''; + $stage->editedBy = ''; + $stage->editedDate = ''; + $stage->deleted = 0; + return $stage; + } + + /** + * 获取新手模式阶段列表。 + * Get tutorial stages. + * + * @access public + * @return array + */ + public function getStages(): array + { + return array(3 => $this->getStage()); + } + /** * 获取新手模式执行。 * Get tutorial execution. @@ -391,6 +426,18 @@ class tutorialModel extends model $execution->multiple = ''; $execution->colWidth = '200'; + list($guide, $guideTask, $guideStepIndex) = empty($_SERVER['HTTP_X_ZIN_TUTORIAL']) ? array() : explode('-', $_SERVER['HTTP_X_ZIN_TUTORIAL']); + if($guide == 'scrumProjectManage') + { + $execution->name = 'Test Sprint'; + $execution->type = 'sprint'; + } + if($guide == 'waterfallProjectManage') + { + $execution->name = 'Test Stage'; + $execution->type = 'stage'; + } + return $execution; }