diff --git a/module/bug/zen.php b/module/bug/zen.php index f45bef2c88..3dcb8e155a 100644 --- a/module/bug/zen.php +++ b/module/bug/zen.php @@ -1178,7 +1178,7 @@ class bugZen extends bug /* 获取所属模块列表。*/ /* Get module option menu. */ $moduleOptionMenu = $this->tree->getOptionMenu($bug->product, 'bug', 0, $bug->branch); - if(!isset($moduleOptionMenu[$bug->module])) $moduleOptionMenu += $this->tree->getModulesName($bug->module); + if(!isset($moduleOptionMenu[$bug->module])) $moduleOptionMenu += $this->tree->getModulesName((array)$bug->module); /* 获取该 bug 关联产品和分支下的 bug 列表。*/ /* Get bugs of current product. */ diff --git a/module/execution/control.php b/module/execution/control.php index 90aa57cdc6..8d2dc6a623 100644 --- a/module/execution/control.php +++ b/module/execution/control.php @@ -3377,7 +3377,7 @@ class execution extends control if(!isset($modules[$story->module])) { - $storyModule = $this->tree->getModulesName($story->module); + $storyModule = $this->tree->getModulesName((array)$story->module); $productName = count($products) > 1 ? $products[$story->product]->name : ''; $modules[$story->module] = $productName . zget($storyModule, $story->module, ''); } diff --git a/module/productplan/control.php b/module/productplan/control.php index 411d0d8b17..d714c61f22 100644 --- a/module/productplan/control.php +++ b/module/productplan/control.php @@ -445,7 +445,7 @@ class productplan extends control $modulePairs = $this->loadModel('tree')->getOptionMenu($plan->product, 'story', 0, 'all'); foreach($planStories as $story) { - if(!isset($modulePairs[$story->module])) $modulePairs += $this->tree->getModulesName($story->module); + if(!isset($modulePairs[$story->module])) $modulePairs += $this->tree->getModulesName((array)$story->module); $storyIdList[] = $story->id; } diff --git a/module/story/control.php b/module/story/control.php index fb338b9009..c5826a29f6 100755 --- a/module/story/control.php +++ b/module/story/control.php @@ -376,7 +376,7 @@ class story extends control if(!$productReviewers and $product->acl != 'open') $productReviewers = $this->loadModel('user')->getProductViewListUsers($product, '', '', '', ''); /* Process the module when branch products are switched to normal products. */ - if($product->type == 'normal' and !empty($story->branch)) $this->view->moduleOptionMenu += $this->tree->getModulesName($story->module); + if($product->type == 'normal' and !empty($story->branch)) $this->view->moduleOptionMenu += $this->tree->getModulesName((array)$story->module); $storyBranch = $story->branch > 0 ? $story->branch : '0'; $branch = $product->type == 'branch' ? $storyBranch : 'all'; diff --git a/module/testcase/control.php b/module/testcase/control.php index a7de68adb8..8d7d1c1319 100644 --- a/module/testcase/control.php +++ b/module/testcase/control.php @@ -984,7 +984,7 @@ class testcase extends control } } - if(!isset($moduleOptionMenu[$case->module])) $moduleOptionMenu += $this->tree->getModulesName($case->module); + if(!isset($moduleOptionMenu[$case->module])) $moduleOptionMenu += $this->tree->getModulesName((array)$case->module); /* Get product and branches. */ if($this->app->tab == 'execution' or $this->app->tab == 'project') diff --git a/module/testtask/control.php b/module/testtask/control.php index 7ac4158083..0b37974c7e 100644 --- a/module/testtask/control.php +++ b/module/testtask/control.php @@ -1386,7 +1386,7 @@ class testtask extends control foreach($cases as $caseID => $case) { if($case->auto == 'auto' and $confirm == 'yes') unset($cases[$caseID]); - $moduleOptionMenu += $this->tree->getModulesName($case->module); + $moduleOptionMenu += $this->tree->getModulesName((array)$case->module); } if(empty($cases)) return print(js::locate($url)); diff --git a/module/tree/model.php b/module/tree/model.php index 7a8588d631..41d84aaee4 100644 --- a/module/tree/model.php +++ b/module/tree/model.php @@ -1698,18 +1698,20 @@ class treeModel extends model * @access public * @return array */ - public function getModulesName($moduleIdList, $allPath = true, $branchPath = false) + public function getModulesName(array $moduleIdList, bool $allPath = true, bool $branchPath = false): array { if(!$allPath) return $this->dao->select('id, name')->from(TABLE_MODULE)->where('id')->in($moduleIdList)->andWhere('deleted')->eq(0)->fetchPairs('id', 'name'); + /* Get modules and submodules through id list. */ $modules = $this->dao->select('id, name, path, branch')->from(TABLE_MODULE)->where('id')->in($moduleIdList)->andWhere('deleted')->eq(0)->fetchAll('path'); $allModules = $this->dao->select('id, name')->from(TABLE_MODULE)->where('id')->in(join(array_keys($modules)))->andWhere('deleted')->eq(0)->fetchPairs('id', 'name'); + /* Constructs a key-value pair for the module name:id. */ $branchIDList = array(); - $modulePairs = array(); + $modulePairs = array(); foreach($modules as $module) { - $paths = explode(',', trim($module->path, ',')); + $paths = explode(',', trim($module->path, ',')); $moduleName = ''; foreach($paths as $path) $moduleName .= '/' . $allModules[$path]; $modulePairs[$module->id] = $moduleName; @@ -1719,14 +1721,14 @@ class treeModel extends model if(!$branchPath) return $modulePairs; - $branchs = $this->dao->select('id, name')->from(TABLE_BRANCH)->where('id')->in($branchIDList)->andWhere('deleted')->eq(0)->fetchALL('id'); + /* Prefixes the module name with the branch name. */ + $branchs = $this->dao->select('id, name')->from(TABLE_BRANCH)->where('id')->in($branchIDList)->andWhere('deleted')->eq(0)->fetchALL('id'); foreach($modules as $module) { - if(isset($modulePairs[$module->id])) - { - $branchName = isset($branchs[$module->branch]) ? '/' . $branchs[$module->branch]->name : ''; - $modulePairs[$module->id] = $branchName . $modulePairs[$module->id]; - } + if(!isset($modulePairs[$module->id])) continue; + + $branchName = isset($branchs[$module->branch]) ? '/' . $branchs[$module->branch]->name : ''; + $modulePairs[$module->id] = $branchName . $modulePairs[$module->id]; } return $modulePairs; diff --git a/module/tree/test/model/getmodulesname.php b/module/tree/test/model/getmodulesname.php index 82c7d06f7c..769ea717ba 100755 --- a/module/tree/test/model/getmodulesname.php +++ b/module/tree/test/model/getmodulesname.php @@ -1,26 +1,53 @@ #!/usr/bin/env php config('module', true)->gen(10); +zdTable('branch')->config('branch', true)->gen(10); + /** title=测试 treeModel->getModulesName(); +timeout=0 cid=1 -pid=1 - -测试获取module 1821 1981 的module name >> /产品模块1;/产品模块161 -测试获取module 1982 1621 的module name >> /产品模块162;/模块1601 -测试获取module 1822 22 的module name >> /产品模块2;/模块2 -测试获取module 1622 21 的module name >> /模块1602;/模块1 */ -$moduleIDList = array(array(1821, 1981), array(1982, 1621), array(1822, 22), array(1622, 21)); -$tree = new treeTest(); +$moduleIdList[0] = array(1, 2); +$moduleIdList[1] = array(3); +$moduleIdList[2] = array(5); +$moduleIdList[3] = array(6); +$moduleIdList[4] = array(7); +$moduleIdList[5] = array(10); -r($tree->getModulesNameTest($moduleIDList[0])) && p('1821;1981') && e('/产品模块1;/产品模块161'); // 测试获取module 1821 1981 的module name -r($tree->getModulesNameTest($moduleIDList[1])) && p('1982;1621') && e('/产品模块162;/模块1601'); // 测试获取module 1982 1621 的module name -r($tree->getModulesNameTest($moduleIDList[2])) && p('1822;22') && e('/产品模块2;/模块2'); // 测试获取module 1822 22 的module name -r($tree->getModulesNameTest($moduleIDList[3])) && p('1622;21') && e('/模块1602;/模块1'); // 测试获取module 1622 21 的module name \ No newline at end of file +global $tester; +$treeModule = $tester->loadModel('tree'); + +r($treeModule->getModulesName($moduleIdList[0], false)) && p('1') && e('模块1'); // 获取父模块的名称 +r($treeModule->getModulesName($moduleIdList[1], false)) && p('3') && e('模块3'); // 获取子模块的名称 +r($treeModule->getModulesName($moduleIdList[2], false)) && p('5') && e('模块5'); // 获取普通模块的名称 +r($treeModule->getModulesName($moduleIdList[3], false)) && p('6') && e('模块6'); // 获取分支父模块的名称 +r($treeModule->getModulesName($moduleIdList[4], false)) && p('7') && e('模块7'); // 获取分支子模块的名称 +r($treeModule->getModulesName($moduleIdList[5], false)) && p('10') && e('模块10'); // 获取分支普通模块的名称 + +r($treeModule->getModulesName($moduleIdList[0], true)) && p('1') && e('/模块1'); // 获取父模块的全路径名称 +r($treeModule->getModulesName($moduleIdList[1], true)) && p('3') && e('/模块1/模块3'); // 获取子模块的全路径名称 +r($treeModule->getModulesName($moduleIdList[2], true)) && p('5') && e('/模块5'); // 获取普通模块的全路径名称 +r($treeModule->getModulesName($moduleIdList[3], true)) && p('6') && e('/模块6'); // 获取分支父模块的全路径名称 +r($treeModule->getModulesName($moduleIdList[4], true)) && p('7') && e('/模块6/模块7'); // 获取分支子模块的全路径名称 +r($treeModule->getModulesName($moduleIdList[5], true)) && p('10') && e('/模块10'); // 获取分支普通模块的全路径名称 + +r($treeModule->getModulesName($moduleIdList[0], false, true)) && p('1') && e('模块1'); // 获取父模块的以分支名为前缀的名称 +r($treeModule->getModulesName($moduleIdList[1], false, true)) && p('3') && e('模块3'); // 获取子模块的以分支名为前缀的名称 +r($treeModule->getModulesName($moduleIdList[2], false, true)) && p('5') && e('模块5'); // 获取普通模块的以分支名为前缀的名称 +r($treeModule->getModulesName($moduleIdList[3], false, true)) && p('6') && e('模块6'); // 获取分支父模块的以分支名为前缀的名称 +r($treeModule->getModulesName($moduleIdList[4], false, true)) && p('7') && e('模块7'); // 获取分支子模块的以分支名为前缀的名称 +r($treeModule->getModulesName($moduleIdList[5], false, true)) && p('10') && e('模块10'); // 获取分支普通模块的以分支名为前缀的名称 + +r($treeModule->getModulesName($moduleIdList[0], true, true)) && p('1') && e('/模块1'); // 获取父模块的以分支名为前缀的名称 +r($treeModule->getModulesName($moduleIdList[1], true, true)) && p('3') && e('/模块1/模块3'); // 获取子模块的以分支名为前缀的名称 +r($treeModule->getModulesName($moduleIdList[2], true, true)) && p('5') && e('/模块5'); // 获取普通模块的以分支名为前缀的名称 +r($treeModule->getModulesName($moduleIdList[3], true, true)) && p('6') && e('/分支1/模块6'); // 获取分支父模块的以分支名为前缀的名称 +r($treeModule->getModulesName($moduleIdList[4], true, true)) && p('7') && e('/分支1/模块6/模块7'); // 获取分支子模块的以分支名为前缀的名称 +r($treeModule->getModulesName($moduleIdList[5], true, true)) && p('10') && e('/分支1/模块10'); // 获取分支普通模块的以分支名为前缀的名称 diff --git a/module/tree/test/tree.class.php b/module/tree/test/tree.class.php index ac893f8880..ac55ebea34 100644 --- a/module/tree/test/tree.class.php +++ b/module/tree/test/tree.class.php @@ -545,24 +545,6 @@ class treeTest return $object; } - /** - * Test get modules name. - * - * @param array $moduleIdList - * @param bool $allPath - * @param bool $branchPath - * @access public - * @return array - */ - public function getModulesNameTest($moduleIdList, $allPath = true, $branchPath = false) - { - $objects = $this->objectModel->getModulesName($moduleIdList, $allPath, $branchPath); - - if(dao::isError()) return dao::getError(); - - return $objects; - } - /** * Test update modules' order. * diff --git a/module/tree/test/yaml/branch.yaml b/module/tree/test/yaml/branch.yaml new file mode 100644 index 0000000000..c820dc26e9 --- /dev/null +++ b/module/tree/test/yaml/branch.yaml @@ -0,0 +1,15 @@ +title: branch +author: Shujie Tian +version: "1.0" +fields: + - field: id + range: 1-10 + - field: product + range: 1 + - field: name + range: 1-10 + prefix: 分支 + - field: status + range: active{5},closed{5} + - field: order + range: 1-10 diff --git a/module/tree/test/yaml/module.yaml b/module/tree/test/yaml/module.yaml new file mode 100644 index 0000000000..3699a94c3d --- /dev/null +++ b/module/tree/test/yaml/module.yaml @@ -0,0 +1,23 @@ +title: zt_module +author: Shujie Tian +version: "1.0" +fields: + - field: id + range: 1-100 + - field: root + range: 1-10{10} + - field: branch + range: 0{5},1-5{5},0{70} + - field: name + range: 1-100 + prefix: 模块 + - field: parent + range: 0{2},1{1},2{1},0{2},6{3},0{91} + - field: path + range: "`,1,`,`,2,`,`,1,3,`,`,2,4,`,`,5,`,`,6,`,`,6,7,`,`,6,8,`,`,6,9,`,`,10,`,`,11,`,`,12,`,`,13,`,`,14,`,`,15,`,`,16,`,`,17,`,`,18,`,`,19,`,`,20,`" + - field: grade + range: 1{2},2{2},1{2},2{3},1{91} + - field: type + range: task{10},story{10},doc{10},bug{10} + - field: deleted + range: 0