From 9f05692086f6636f4db4d467e602de00fbdc912e Mon Sep 17 00:00:00 2001 From: xieqiyu Date: Fri, 20 Jun 2025 07:40:23 +0000 Subject: [PATCH 1/5] * [bug#63456] Add built-in doc template type when install. --- module/doc/model.php | 38 ++++++++++++++++++++++++++++++++++++++ module/install/control.php | 10 ++++++++++ 2 files changed, 48 insertions(+) diff --git a/module/doc/model.php b/module/doc/model.php index 54dc3f50bd..b4774e0e03 100644 --- a/module/doc/model.php +++ b/module/doc/model.php @@ -4088,6 +4088,44 @@ class docModel extends model } } + /** + * 添加内置的模板分类。 + * Add built in template type. + * + * @access public + * @return void + */ + public function addBuiltInDocTemplateType() + { + $rndScopeMaps = $this->loadModel('setting')->getItem('vision=rnd&owner=system&module=doc&key=builtInScopeMaps'); + $rndScopeMaps = json_decode($rndScopeMaps, true); + $projectScopeID = zget($rndScopeMaps, 'project', 0); + $builtInTemplateTypes = $this->dao->select('*')->from(TABLE_MODULE)->where('type')->eq('docTemplate')->andWhere('root')->eq($projectScopeID)->fetchPairs(); + if(empty($builtInTemplateTypes)) return; + + $this->app->loadLang('baseline'); + $parentTemplateTypes = array_filter($this->lang->docTemplate->types, function($key){return in_array($key, array('plan', 'story', 'design', 'test'));}, ARRAY_FILTER_USE_KEY); + foreach($parentTemplateTypes as $parentKey => $parentValue) + { + /* 创建文档模板一级分类。*/ + /* Add the parent type of doc template. */ + $parentType = $this->buildTemplateModule($projectScopeID, 0, $parentValue, $parentKey, 1); + $this->dao->insert(TABLE_MODULE)->data($parentType)->exec(); + $parentTypeID = $this->dao->lastInsertID(); + $this->dao->update(TABLE_MODULE)->set('path')->eq(",{$parentTypeID},")->where('id')->eq($parentTypeID)->exec(); + + /* 创建文档模板二级分类。*/ + /* Add the child type of doc template. */ + foreach($this->config->docTemplate->builtInTypes[$parentKey] as $childKey) + { + $childType = $this->buildTemplateModule($projectScopeID, $parentTypeID, $this->lang->baseline->objectList[$childKey], $childKey, 2); + $this->dao->insert(TABLE_MODULE)->data($childType)->exec(); + $childTypeID = $this->dao->lastInsertID(); + $this->dao->update(TABLE_MODULE)->set('path')->eq(",{$parentTypeID},{$childTypeID},")->where('id')->eq($childTypeID)->exec(); + } + } + } + /** * 升级文档模板的范围和类型。 * Upgrade lib and module of template. diff --git a/module/install/control.php b/module/install/control.php index 71fabf15bc..e13e418424 100644 --- a/module/install/control.php +++ b/module/install/control.php @@ -386,6 +386,16 @@ class install extends control $this->install->enableCache(); + /* 添加内置的范围、分类、文档模板。*/ + /* Add the built-in scopes and type and doc template. */ + if($this->config->edition == 'max' || $this->config->edition == 'ipd') + { + $this->loadModel('doc'); + $this->doc->addBuiltInScopes(); + $this->doc->addBuiltInDocTemplateType(); + $this->doc->addBuiltInDocTemplateByType(); + } + return $this->send(array('result' => 'success', 'load' => inlink('step6'))); } From 51d75865640dcd78cb191d25a23028bd4fc959de Mon Sep 17 00:00:00 2001 From: xieqiyu Date: Fri, 20 Jun 2025 08:01:19 +0000 Subject: [PATCH 2/5] * [bug#63456] Add the unit test file of docModel::addBuiltInDocTemplateType. --- module/doc/model.php | 2 +- module/doc/test/lib/doc.unittest.class.php | 15 ++++ .../test/model/addbuiltindoctemplatetype.php | 81 +++++++++++++++++++ 3 files changed, 97 insertions(+), 1 deletion(-) create mode 100755 module/doc/test/model/addbuiltindoctemplatetype.php diff --git a/module/doc/model.php b/module/doc/model.php index b4774e0e03..5e9c5c124c 100644 --- a/module/doc/model.php +++ b/module/doc/model.php @@ -4101,7 +4101,7 @@ class docModel extends model $rndScopeMaps = json_decode($rndScopeMaps, true); $projectScopeID = zget($rndScopeMaps, 'project', 0); $builtInTemplateTypes = $this->dao->select('*')->from(TABLE_MODULE)->where('type')->eq('docTemplate')->andWhere('root')->eq($projectScopeID)->fetchPairs(); - if(empty($builtInTemplateTypes)) return; + if(!empty($builtInTemplateTypes)) return; $this->app->loadLang('baseline'); $parentTemplateTypes = array_filter($this->lang->docTemplate->types, function($key){return in_array($key, array('plan', 'story', 'design', 'test'));}, ARRAY_FILTER_USE_KEY); diff --git a/module/doc/test/lib/doc.unittest.class.php b/module/doc/test/lib/doc.unittest.class.php index f812c4416a..6f68e1f14c 100644 --- a/module/doc/test/lib/doc.unittest.class.php +++ b/module/doc/test/lib/doc.unittest.class.php @@ -1897,4 +1897,19 @@ class docTest { return $this->objectModel->getContent($docID, $version); } + + /** + * 添加内置的模板分类。 + * Add built in template type. + * + * @param int $moduleID + * @access public + * @return void + */ + public function addBuiltInDocTemplateTypeTest(int $moduleID) + { + $this->objectModel->addBuiltInScopes(); + $this->objectModel->addBuiltInDocTemplateType(); + return $this->objectModel->dao->select('*')->from(TABLE_MODULE)->where('id')->eq($moduleID)->fetch(); + } } diff --git a/module/doc/test/model/addbuiltindoctemplatetype.php b/module/doc/test/model/addbuiltindoctemplatetype.php new file mode 100755 index 0000000000..1c1cc5e15f --- /dev/null +++ b/module/doc/test/model/addbuiltindoctemplatetype.php @@ -0,0 +1,81 @@ +#!/usr/bin/env php +addBuiltInDocTemplateType(); +timeout=0 +cid=1 + +- 获取计划分类 + - 属性root @2 + - 属性name @计划 + - 属性path @,1, +- 获取项目计划分类 + - 属性root @2 + - 属性name @项目计划 + - 属性path @,1,2, +- 获取需求计划分类 + - 属性root @2 + - 属性name @需求 + - 属性path @,3, +- 获取软件需求规格说明书分类 + - 属性root @2 + - 属性name @软件需求规格说明书 + - 属性path @,3,4, +- 获取设计分类 + - 属性root @2 + - 属性name @设计 + - 属性path @,5, +- 获取概要设计说明书分类 + - 属性root @2 + - 属性name @概要设计说明书 + - 属性path @,5,6, +- 获取详细设计说明书分类 + - 属性root @2 + - 属性name @详细设计说明书 + - 属性path @,5,7, +- 获取数据库设计文档分类 + - 属性root @2 + - 属性name @数据库设计文档 + - 属性path @,5,8, +- 获取接口设计文档分类 + - 属性root @2 + - 属性name @接口设计文档 + - 属性path @,5,9, +- 获取测试分类 + - 属性root @2 + - 属性name @测试 + - 属性path @,10, +- 获取集成测试用例分类 + - 属性root @2 + - 属性name @集成测试用例 + - 属性path @,10,11, +- 获取系统测试用例分类 + - 属性root @2 + - 属性name @系统测试用例 + - 属性path @,10,12, + +*/ + +include dirname(__FILE__, 5) . '/test/lib/init.php'; +include dirname(__FILE__, 2) . '/lib/doc.unittest.class.php'; + +zenData('user')->gen(5); +su('admin'); + +zenData('doclib')->gen(0); +zenData('module')->gen(0); +$docTester = new docTest(); +r($docTester->addBuiltInDocTemplateTypeTest(1)) && p('root|name|path', '|') && e('2|计划|,1,'); // 获取计划分类 +r($docTester->addBuiltInDocTemplateTypeTest(2)) && p('root|name|path', '|') && e('2|项目计划|,1,2,'); // 获取项目计划分类 +r($docTester->addBuiltInDocTemplateTypeTest(3)) && p('root|name|path', '|') && e('2|需求|,3,'); // 获取需求计划分类 +r($docTester->addBuiltInDocTemplateTypeTest(4)) && p('root|name|path', '|') && e('2|软件需求规格说明书|,3,4,'); // 获取软件需求规格说明书分类 +r($docTester->addBuiltInDocTemplateTypeTest(5)) && p('root|name|path', '|') && e('2|设计|,5,'); // 获取设计分类 +r($docTester->addBuiltInDocTemplateTypeTest(6)) && p('root|name|path', '|') && e('2|概要设计说明书|,5,6,'); // 获取概要设计说明书分类 +r($docTester->addBuiltInDocTemplateTypeTest(7)) && p('root|name|path', '|') && e('2|详细设计说明书|,5,7,'); // 获取详细设计说明书分类 +r($docTester->addBuiltInDocTemplateTypeTest(8)) && p('root|name|path', '|') && e('2|数据库设计文档|,5,8,'); // 获取数据库设计文档分类 +r($docTester->addBuiltInDocTemplateTypeTest(9)) && p('root|name|path', '|') && e('2|接口设计文档|,5,9,'); // 获取接口设计文档分类 +r($docTester->addBuiltInDocTemplateTypeTest(10)) && p('root|name|path', '|') && e('2|测试|,10,'); // 获取测试分类 +r($docTester->addBuiltInDocTemplateTypeTest(11)) && p('root|name|path', '|') && e('2|集成测试用例|,10,11,'); // 获取集成测试用例分类 +r($docTester->addBuiltInDocTemplateTypeTest(12)) && p('root|name|path', '|') && e('2|系统测试用例|,10,12,'); // 获取系统测试用例分类 From 578da804032f01a6e8d6645a8ba11f956f6ea1ae Mon Sep 17 00:00:00 2001 From: xieqiyu Date: Sat, 21 Jun 2025 03:13:09 +0000 Subject: [PATCH 3/5] * [bug#63456] Modify the unit test file of docModel::addBuiltInDocTemplateType. --- module/doc/test/lib/doc.unittest.class.php | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/module/doc/test/lib/doc.unittest.class.php b/module/doc/test/lib/doc.unittest.class.php index 6f68e1f14c..7b9dd931ed 100644 --- a/module/doc/test/lib/doc.unittest.class.php +++ b/module/doc/test/lib/doc.unittest.class.php @@ -1908,6 +1908,16 @@ class docTest */ public function addBuiltInDocTemplateTypeTest(int $moduleID) { + if(!isset($this->objectModel->config->docTemplate)) $this->objectModel->config->docTemplate = new stdClass(); + if(!isset($this->objectModel->config->docTemplate->builtInTypes)) + { + $this->objectModel->config->docTemplate->builtInTypes = array(); + $this->objectModel->config->docTemplate->builtInTypes['plan'] = array('PP'); + $this->objectModel->config->docTemplate->builtInTypes['story'] = array('SRS'); + $this->objectModel->config->docTemplate->builtInTypes['design'] = array('HLDS', 'DDS', 'DBDS', 'ADS'); + $this->objectModel->config->docTemplate->builtInTypes['test'] = array('ITTC', 'STTC'); + } + $this->objectModel->addBuiltInScopes(); $this->objectModel->addBuiltInDocTemplateType(); return $this->objectModel->dao->select('*')->from(TABLE_MODULE)->where('id')->eq($moduleID)->fetch(); From bd43c70fefd25e4868f8f3b4a6c7c5e570ca7b3c Mon Sep 17 00:00:00 2001 From: xieqiyu Date: Sat, 21 Jun 2025 05:26:25 +0000 Subject: [PATCH 4/5] * [bug#63456] Modify the unit test file of docModel::addBuiltInDocTemplateType. --- module/doc/test/lib/doc.unittest.class.php | 22 ++--- .../test/model/addbuiltindoctemplatetype.php | 98 +++++++------------ 2 files changed, 49 insertions(+), 71 deletions(-) diff --git a/module/doc/test/lib/doc.unittest.class.php b/module/doc/test/lib/doc.unittest.class.php index 7b9dd931ed..7910ee41ad 100644 --- a/module/doc/test/lib/doc.unittest.class.php +++ b/module/doc/test/lib/doc.unittest.class.php @@ -1903,23 +1903,23 @@ class docTest * Add built in template type. * * @param int $moduleID + * @param array $checkFields * @access public * @return void */ - public function addBuiltInDocTemplateTypeTest(int $moduleID) + public function addBuiltInDocTemplateTypeTest(int $moduleID, array $checkFields) { - if(!isset($this->objectModel->config->docTemplate)) $this->objectModel->config->docTemplate = new stdClass(); - if(!isset($this->objectModel->config->docTemplate->builtInTypes)) - { - $this->objectModel->config->docTemplate->builtInTypes = array(); - $this->objectModel->config->docTemplate->builtInTypes['plan'] = array('PP'); - $this->objectModel->config->docTemplate->builtInTypes['story'] = array('SRS'); - $this->objectModel->config->docTemplate->builtInTypes['design'] = array('HLDS', 'DDS', 'DBDS', 'ADS'); - $this->objectModel->config->docTemplate->builtInTypes['test'] = array('ITTC', 'STTC'); - } + if($this->objectModel->config->edition != 'ipd') return true; $this->objectModel->addBuiltInScopes(); $this->objectModel->addBuiltInDocTemplateType(); - return $this->objectModel->dao->select('*')->from(TABLE_MODULE)->where('id')->eq($moduleID)->fetch(); + + $checkResult = false; + $module = $this->objectModel->dao->select('*')->from(TABLE_MODULE)->where('id')->eq($moduleID)->fetch(); + foreach($checkFields as $key => $value) + { + if($module->$key == $value) $checkResult = true; + } + return $checkResult; } } diff --git a/module/doc/test/model/addbuiltindoctemplatetype.php b/module/doc/test/model/addbuiltindoctemplatetype.php index 1c1cc5e15f..ad9bb50ac8 100755 --- a/module/doc/test/model/addbuiltindoctemplatetype.php +++ b/module/doc/test/model/addbuiltindoctemplatetype.php @@ -7,54 +7,18 @@ title=测试 docModel->addBuiltInDocTemplateType(); timeout=0 cid=1 -- 获取计划分类 - - 属性root @2 - - 属性name @计划 - - 属性path @,1, -- 获取项目计划分类 - - 属性root @2 - - 属性name @项目计划 - - 属性path @,1,2, -- 获取需求计划分类 - - 属性root @2 - - 属性name @需求 - - 属性path @,3, -- 获取软件需求规格说明书分类 - - 属性root @2 - - 属性name @软件需求规格说明书 - - 属性path @,3,4, -- 获取设计分类 - - 属性root @2 - - 属性name @设计 - - 属性path @,5, -- 获取概要设计说明书分类 - - 属性root @2 - - 属性name @概要设计说明书 - - 属性path @,5,6, -- 获取详细设计说明书分类 - - 属性root @2 - - 属性name @详细设计说明书 - - 属性path @,5,7, -- 获取数据库设计文档分类 - - 属性root @2 - - 属性name @数据库设计文档 - - 属性path @,5,8, -- 获取接口设计文档分类 - - 属性root @2 - - 属性name @接口设计文档 - - 属性path @,5,9, -- 获取测试分类 - - 属性root @2 - - 属性name @测试 - - 属性path @,10, -- 获取集成测试用例分类 - - 属性root @2 - - 属性name @集成测试用例 - - 属性path @,10,11, -- 获取系统测试用例分类 - - 属性root @2 - - 属性name @系统测试用例 - - 属性path @,10,12, +- 检查计划分类 @1 +- 检查项目计划分类 @1 +- 检查需求计划分类 @1 +- 检查软件需求规格说明书分类 @1 +- 检查设计分类 @1 +- 检查概要设计说明书分类 @1 +- 检查详细设计说明书分类 @1 +- 检查数据库设计文档分类 @1 +- 检查接口设计文档分类 @1 +- 检查测试分类 @1 +- 检查集成测试用例分类 @1 +- 检查系统测试用例分类 @1 */ @@ -67,15 +31,29 @@ su('admin'); zenData('doclib')->gen(0); zenData('module')->gen(0); $docTester = new docTest(); -r($docTester->addBuiltInDocTemplateTypeTest(1)) && p('root|name|path', '|') && e('2|计划|,1,'); // 获取计划分类 -r($docTester->addBuiltInDocTemplateTypeTest(2)) && p('root|name|path', '|') && e('2|项目计划|,1,2,'); // 获取项目计划分类 -r($docTester->addBuiltInDocTemplateTypeTest(3)) && p('root|name|path', '|') && e('2|需求|,3,'); // 获取需求计划分类 -r($docTester->addBuiltInDocTemplateTypeTest(4)) && p('root|name|path', '|') && e('2|软件需求规格说明书|,3,4,'); // 获取软件需求规格说明书分类 -r($docTester->addBuiltInDocTemplateTypeTest(5)) && p('root|name|path', '|') && e('2|设计|,5,'); // 获取设计分类 -r($docTester->addBuiltInDocTemplateTypeTest(6)) && p('root|name|path', '|') && e('2|概要设计说明书|,5,6,'); // 获取概要设计说明书分类 -r($docTester->addBuiltInDocTemplateTypeTest(7)) && p('root|name|path', '|') && e('2|详细设计说明书|,5,7,'); // 获取详细设计说明书分类 -r($docTester->addBuiltInDocTemplateTypeTest(8)) && p('root|name|path', '|') && e('2|数据库设计文档|,5,8,'); // 获取数据库设计文档分类 -r($docTester->addBuiltInDocTemplateTypeTest(9)) && p('root|name|path', '|') && e('2|接口设计文档|,5,9,'); // 获取接口设计文档分类 -r($docTester->addBuiltInDocTemplateTypeTest(10)) && p('root|name|path', '|') && e('2|测试|,10,'); // 获取测试分类 -r($docTester->addBuiltInDocTemplateTypeTest(11)) && p('root|name|path', '|') && e('2|集成测试用例|,10,11,'); // 获取集成测试用例分类 -r($docTester->addBuiltInDocTemplateTypeTest(12)) && p('root|name|path', '|') && e('2|系统测试用例|,10,12,'); // 获取系统测试用例分类 + +$checkPlan = array('root' => 2, 'name' => '计划', 'short' => 'plan', 'path' => ',1,'); +$checkPP = array('root' => 2, 'name' => '项目计划', 'short' => 'PP', 'path' => ',1,2,'); +$checkStory = array('root' => 2, 'name' => '需求', 'short' => 'story', 'path' => ',3,'); +$checkSRS = array('root' => 2, 'name' => '软件需求规格说明书', 'short' => 'SRS', 'path' => ',3,4,'); +$checkDesign = array('root' => 2, 'name' => '设计', 'short' => 'design', 'path' => ',5,'); +$checkHLDS = array('root' => 2, 'name' => '概要设计说明书', 'short' => 'HLDS', 'path' => ',5,6,'); +$checkDDS = array('root' => 2, 'name' => '详细设计说明书', 'short' => 'DDS', 'path' => ',5,7,'); +$checkDBDS = array('root' => 2, 'name' => '数据库设计文档', 'short' => 'DBDS', 'path' => ',5,8,'); +$checkADS = array('root' => 2, 'name' => '接口设计文档', 'short' => 'ADS', 'path' => ',5,9,'); +$checkTest = array('root' => 2, 'name' => '测试', 'short' => 'test', 'path' => ',10,'); +$checkITTC = array('root' => 2, 'name' => '集成测试用例', 'short' => 'ITTC', 'path' => ',10,11,'); +$checkSTTC = array('root' => 2, 'name' => '系统测试用例', 'short' => 'STTC', 'path' => ',10,12,'); + +r($docTester->addBuiltInDocTemplateTypeTest(1, $checkPlan)) && p() && e('1'); // 检查计划分类 +r($docTester->addBuiltInDocTemplateTypeTest(2, $checkPP)) && p() && e('1'); // 检查项目计划分类 +r($docTester->addBuiltInDocTemplateTypeTest(3, $checkStory)) && p() && e('1'); // 检查需求计划分类 +r($docTester->addBuiltInDocTemplateTypeTest(4, $checkSRS)) && p() && e('1'); // 检查软件需求规格说明书分类 +r($docTester->addBuiltInDocTemplateTypeTest(5, $checkDesign)) && p() && e('1'); // 检查设计分类 +r($docTester->addBuiltInDocTemplateTypeTest(6, $checkHLDS)) && p() && e('1'); // 检查概要设计说明书分类 +r($docTester->addBuiltInDocTemplateTypeTest(7, $checkDDS)) && p() && e('1'); // 检查详细设计说明书分类 +r($docTester->addBuiltInDocTemplateTypeTest(8, $checkDBDS)) && p() && e('1'); // 检查数据库设计文档分类 +r($docTester->addBuiltInDocTemplateTypeTest(9, $checkADS)) && p() && e('1'); // 检查接口设计文档分类 +r($docTester->addBuiltInDocTemplateTypeTest(10, $checkTest)) && p() && e('1'); // 检查测试分类 +r($docTester->addBuiltInDocTemplateTypeTest(11, $checkITTC)) && p() && e('1'); // 检查集成测试用例分类 +r($docTester->addBuiltInDocTemplateTypeTest(12, $checkSTTC)) && p() && e('1'); // 检查系统测试用例分类 From 085d370f94298cfdaa98b226055672c38452a1ee Mon Sep 17 00:00:00 2001 From: xieqiyu Date: Mon, 23 Jun 2025 01:35:08 +0000 Subject: [PATCH 5/5] * [bug#63456] Modify the problem of code review. --- module/doc/model.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/module/doc/model.php b/module/doc/model.php index 5e9c5c124c..8cdf87dfa6 100644 --- a/module/doc/model.php +++ b/module/doc/model.php @@ -4100,7 +4100,7 @@ class docModel extends model $rndScopeMaps = $this->loadModel('setting')->getItem('vision=rnd&owner=system&module=doc&key=builtInScopeMaps'); $rndScopeMaps = json_decode($rndScopeMaps, true); $projectScopeID = zget($rndScopeMaps, 'project', 0); - $builtInTemplateTypes = $this->dao->select('*')->from(TABLE_MODULE)->where('type')->eq('docTemplate')->andWhere('root')->eq($projectScopeID)->fetchPairs(); + $builtInTemplateTypes = $this->dao->select('id')->from(TABLE_MODULE)->where('type')->eq('docTemplate')->andWhere('root')->eq($projectScopeID)->fetchPairs(); if(!empty($builtInTemplateTypes)) return; $this->app->loadLang('baseline');