From 32337194dde1ebabcf72ca4c2fe46f7e1c95064b Mon Sep 17 00:00:00 2001 From: daitingting Date: Mon, 14 Nov 2022 07:46:56 +0000 Subject: [PATCH 01/60] * Adjust for feature review. --- module/release/css/browse.css | 1 + module/release/model.php | 4 ++-- module/release/view/browse.html.php | 4 ++-- module/release/view/view.html.php | 2 +- 4 files changed, 6 insertions(+), 5 deletions(-) diff --git a/module/release/css/browse.css b/module/release/css/browse.css index 8c33b9fd78..dd6d856b51 100644 --- a/module/release/css/browse.css +++ b/module/release/css/browse.css @@ -1,5 +1,6 @@ #releaseList {font-size: 13px;} td {overflow: hidden; text-overflow: ellipsis; white-space: nowrap;} +#releaseList tbody>tr:hover{background-color: unset!important;} .main-table tbody>tr>td:first-child{padding: 2px 8px!important;} .c-id {width: 60px} diff --git a/module/release/model.php b/module/release/model.php index 92d8aaa8d4..db12c0f417 100644 --- a/module/release/model.php +++ b/module/release/model.php @@ -31,7 +31,7 @@ class releaseModel extends model ->fetch(); if(!$release) return false; - $release->builds = $this->dao->select('id, filePath, scmPath, name, project')->from(TABLE_BUILD)->where('id')->in($release->build)->fetchAll(); + $release->builds = $this->dao->select('id, filePath, scmPath, name, execution, project')->from(TABLE_BUILD)->where('id')->in($release->build)->fetchAll(); $this->loadModel('file'); $release = $this->file->replaceImgURL($release, 'desc'); @@ -66,7 +66,7 @@ class releaseModel extends model ->page($pager) ->fetchAll(); - $builds = $this->dao->select("t1.id, t1.name, IF(t2.name IS NOT NULL, t2.name, '') AS projectName, IF(t3.name IS NOT NULL, t3.name, '{$this->lang->trunk}') AS branchName") + $builds = $this->dao->select("t1.id, t1.name, t1.execution, IF(t2.name IS NOT NULL, t2.name, '') AS projectName, IF(t3.name IS NOT NULL, t3.name, '{$this->lang->trunk}') AS branchName") ->from(TABLE_BUILD)->alias('t1') ->leftJoin(TABLE_PROJECT)->alias('t2')->on('t1.project = t2.id') ->leftJoin(TABLE_BRANCH)->alias('t3')->on('t1.branch = t3.id') diff --git a/module/release/view/browse.html.php b/module/release/view/browse.html.php index 5552c7eb28..3162da013b 100644 --- a/module/release/view/browse.html.php +++ b/module/release/view/browse.html.php @@ -52,7 +52,7 @@ release->id;?> release->name;?> release->build;?> - release->project;?> + release->project;?> release->status;?> release->date;?> type != 'normal'):?> branchName;?> - createLink('build', 'view', "buildID=$build->id"), $build->name);?> + createLink($build->execution ? 'build' : 'projectbuild', 'view', "buildID=$build->id"), $build->name);?> projectName;?> diff --git a/module/release/view/view.html.php b/module/release/view/view.html.php index dbb2394344..67054a46e2 100644 --- a/module/release/view/view.html.php +++ b/module/release/view/view.html.php @@ -357,7 +357,7 @@ foreach($release->builds as $build) { $buildDivision = $i == count($release->builds) ? '' : $lang->comma; - echo (($build->project) ? html::a($this->createLink('build', 'view', "buildID=$build->id"), $build->name, '_blank') : $build->name) . $buildDivision; + echo (($build->project) ? html::a($this->createLink($build->execution ? 'build' : 'projectbuild', 'view', "buildID=$build->id"), $build->name, '_blank') : $build->name) . $buildDivision; $i++; } ?> From bb5b3426f61fd51dfa753a694a94f83754be79cc Mon Sep 17 00:00:00 2001 From: wangyuting <851424971@qq.com> Date: Mon, 14 Nov 2022 07:55:25 +0000 Subject: [PATCH 02/60] * Finish task #76032. --- module/bug/model.php | 37 +++++++++++++++++++++---------- module/build/control.php | 2 +- module/build/lang/de.php | 1 + module/build/lang/en.php | 1 + module/build/lang/fr.php | 1 + module/build/lang/vi.php | 1 + module/build/lang/zh-cn.php | 1 + module/build/model.php | 31 ++++++++++++++++++++++++++ module/build/view/create.html.php | 1 + 9 files changed, 63 insertions(+), 13 deletions(-) diff --git a/module/bug/model.php b/module/bug/model.php index 5d17a0c4af..093a93235f 100644 --- a/module/bug/model.php +++ b/module/bug/model.php @@ -1888,19 +1888,19 @@ class bugModel extends model /** * Get bugs of a execution. * - * @param int $executionID - * @param int $productID - * @param int $branchID - * @param int $build - * @param string $type - * @param int $param - * @param string $orderBy - * @param string $excludeBugs - * @param object $pager + * @param int $executionID + * @param int $productID + * @param int $branchID + * @param string|array $builds + * @param string $type + * @param int $param + * @param string $orderBy + * @param string $excludeBugs + * @param object $pager * @access public * @return array */ - public function getExecutionBugs($executionID, $productID = 0, $branchID = 'all', $build = 0, $type = '', $param = 0, $orderBy = 'id_desc', $excludeBugs = '', $pager = null) + public function getExecutionBugs($executionID, $productID = 0, $branchID = 'all', $builds = 0, $type = '', $param = 0, $orderBy = 'id_desc', $excludeBugs = '', $pager = null) { $type = strtolower($type); if(strpos($orderBy, 'pri_') !== false) $orderBy = str_replace('pri_', 'priOrder_', $orderBy); @@ -1935,15 +1935,28 @@ class bugModel extends model } else { + $condition = ''; + if($builds) + { + if(!is_array($builds)) $builds = explode(',', $builds); + + $conditions = array(); + foreach($builds as $build) + { + if($build) $conditions[] = "FIND_IN_SET('$build', t1.openedBuild)"; + } + $condition = join(' OR ', $conditions); + $condition = "($condition)"; + } $bugs = $this->dao->select("t1.*, IF(t1.`pri` = 0, {$this->config->maxPriValue}, t1.`pri`) as priOrder, IF(t1.`severity` = 0, {$this->config->maxPriValue}, t1.`severity`) as severityOrder")->from(TABLE_BUG)->alias('t1') ->leftJoin(TABLE_MODULE)->alias('t2')->on('t1.module=t2.id') ->where('t1.deleted')->eq(0) ->beginIF(!empty($productID) and $branchID !== 'all')->andWhere('t1.branch')->eq($branchID)->fi() - ->beginIF(empty($build))->andWhere('t1.execution')->eq($executionID)->fi() + ->beginIF(empty($builds))->andWhere('t1.execution')->eq($executionID)->fi() ->beginIF(!empty($productID))->andWhere('t1.product')->eq($productID)->fi() ->beginIF($type == 'unresolved')->andWhere('t1.status')->eq('active')->fi() ->beginIF($type == 'noclosed')->andWhere('t1.status')->ne('closed')->fi() - ->beginIF($build)->andWhere("CONCAT(',', t1.openedBuild, ',') like '%,$build,%'")->fi() + ->beginIF($condition)->andWhere("$condition")->fi() ->beginIF(!empty($param))->andWhere('t2.path')->like("%,$param,%")->andWhere('t2.deleted')->eq(0)->fi() ->beginIF($excludeBugs)->andWhere('t1.id')->notIN($excludeBugs)->fi() ->orderBy($orderBy) diff --git a/module/build/control.php b/module/build/control.php index 537ba935d0..8ccca340d5 100644 --- a/module/build/control.php +++ b/module/build/control.php @@ -292,7 +292,7 @@ class build extends control $this->view->storyPager = $storyPager; $generatedBugPager = new pager($type == 'generatedBug' ? $recTotal : 0, $recPerPage, $type == 'generatedBug' ? $pageID : 1); - $this->view->generatedBugs = $this->bug->getExecutionBugs($build->execution, $build->product, 'all', $build->id, $type, $param, $type == 'generatedBug' ? $sort : 'status_desc,id_desc', '', $generatedBugPager); + $this->view->generatedBugs = $this->bug->getExecutionBugs($build->execution, $build->product, 'all', "$build->id,{$build->builds}", $type, $param, $type == 'generatedBug' ? $sort : 'status_desc,id_desc', '', $generatedBugPager); $this->view->generatedBugPager = $generatedBugPager; $this->executeHooks($buildID); diff --git a/module/build/lang/de.php b/module/build/lang/de.php index 102f2a399f..39f5f213c7 100644 --- a/module/build/lang/de.php +++ b/module/build/lang/de.php @@ -57,6 +57,7 @@ $lang->build->notice = new stdclass(); $lang->build->notice->changeProduct = "The {$lang->SRCommon}, bug, or the version of the submitted test order has been linked, and its {$lang->productCommon} cannot be modified"; $lang->build->notice->changeExecution = "The version of the submitted test order cannot be modified {$lang->executionCommon}"; $lang->build->notice->changeBuilds = "The version of the submitted test order cannot be modified builds"; +$lang->build->notice->autoRelation = "The completed requirements, resolved bugs, and generated bugs under the relevant version will be automatically associated with the project version"; $lang->build->finishStories = " %s {$lang->SRCommon} sind abgeschlossen."; $lang->build->resolvedBugs = ' %s Bugs sind gelöst.'; diff --git a/module/build/lang/en.php b/module/build/lang/en.php index 2cad705a92..df6d81e8d1 100644 --- a/module/build/lang/en.php +++ b/module/build/lang/en.php @@ -57,6 +57,7 @@ $lang->build->notice = new stdclass(); $lang->build->notice->changeProduct = "The {$lang->SRCommon}, bug, or the version of the submitted test order has been linked, and its {$lang->productCommon} cannot be modified"; $lang->build->notice->changeExecution = "The version of the submitted test order cannot be modified {$lang->executionCommon}"; $lang->build->notice->changeBuilds = "The version of the submitted test order cannot be modified builds"; +$lang->build->notice->autoRelation = "The completed requirements, resolved bugs, and generated bugs under the relevant version will be automatically associated with the project version"; $lang->build->finishStories = " Finished {$lang->SRCommon} %s"; $lang->build->resolvedBugs = ' Resolved Bug %s'; diff --git a/module/build/lang/fr.php b/module/build/lang/fr.php index 5bf136f09b..30ed628f70 100644 --- a/module/build/lang/fr.php +++ b/module/build/lang/fr.php @@ -57,6 +57,7 @@ $lang->build->notice = new stdclass(); $lang->build->notice->changeProduct = "The {$lang->SRCommon}, bug, or the version of the submitted test order has been linked, and its {$lang->productCommon} cannot be modified"; $lang->build->notice->changeExecution = "The version of the submitted test order cannot be modified {$lang->executionCommon}"; $lang->build->notice->changeBuilds = "The version of the submitted test order cannot be modified builds"; +$lang->build->notice->autoRelation = "The completed requirements, resolved bugs, and generated bugs under the relevant version will be automatically associated with the project version"; $lang->build->finishStories = " {$lang->SRCommon} Terminées %s"; $lang->build->resolvedBugs = ' Bugs Résolus %s'; diff --git a/module/build/lang/vi.php b/module/build/lang/vi.php index c5a6f474d1..830fb9234d 100644 --- a/module/build/lang/vi.php +++ b/module/build/lang/vi.php @@ -53,6 +53,7 @@ $lang->build->notice = new stdclass(); $lang->build->notice->changeProduct = "The {$lang->SRCommon}, bug, or the version of the submitted test order has been linked, and its {$lang->productCommon} cannot be modified"; $lang->build->notice->changeExecution = "The version of the submitted test order cannot be modified {$lang->executionCommon}"; $lang->build->notice->changeBuilds = "The version of the submitted test order cannot be modified builds"; +$lang->build->notice->autoRelation = "The completed requirements, resolved bugs, and generated bugs under the relevant version will be automatically associated with the project version"; $lang->build->finishStories = " {$lang->SRCommon} đã kết thúc %s"; $lang->build->resolvedBugs = ' Bug đã giải quyết %s'; diff --git a/module/build/lang/zh-cn.php b/module/build/lang/zh-cn.php index b1bbf9d7ca..0be8d8c8b5 100644 --- a/module/build/lang/zh-cn.php +++ b/module/build/lang/zh-cn.php @@ -57,6 +57,7 @@ $lang->build->notice = new stdclass(); $lang->build->notice->changeProduct = "已经关联{$lang->SRCommon}、Bug或提交测试单的版本,不能修改其所属{$lang->productCommon}"; $lang->build->notice->changeExecution = "提交测试单的版本,不能修改其所属{$lang->executionCommon}"; $lang->build->notice->changeBuilds = "提交测试单的版本,不能修改关联版本"; +$lang->build->notice->autoRelation = "相关版本下完成的需求、解决的Bug、产生的Bug将会自动关联到项目版本中"; $lang->build->finishStories = " 本次共完成 %s 个{$lang->SRCommon}"; $lang->build->resolvedBugs = ' 本次共解决 %s 个Bug'; diff --git a/module/build/model.php b/module/build/model.php index 6a49cfb637..3aa47341da 100644 --- a/module/build/model.php +++ b/module/build/model.php @@ -336,6 +336,7 @@ class buildModel extends model ->remove('resolvedBy,allchecker,files,labels,uid') ->get(); + $build = $this->loadModel('file')->processImgURL($build, $this->config->build->editor->create['id'], $this->post->uid); $this->dao->insert(TABLE_BUILD)->data($build) ->autoCheck() @@ -347,6 +348,7 @@ class buildModel extends model if(!dao::isError()) { $buildID = $this->dao->lastInsertID(); + $this->linkChildBuilds($buildID, $build->builds); $this->file->updateObjectID($this->post->uid, $buildID, 'build'); $this->file->saveUpload('build', $buildID); $this->loadModel('score')->create('build', 'create', $buildID); @@ -386,6 +388,8 @@ class buildModel extends model if(isset($build->branch) and $oldBuild->branch != $build->branch) $this->dao->update(TABLE_RELEASE)->set('branch')->eq($build->branch)->where('build')->eq($buildID)->exec(); if(!dao::isError()) { + $addBuilds = array_diff(explode(',', $build->builds), explode(',', $oldBuild->builds)); + if($addBuilds) $this->linkChildBuilds($buildID, $addBuilds); $this->file->updateObjectID($this->post->uid, $buildID, 'build'); return common::createChanges($oldBuild, $build); } @@ -561,6 +565,33 @@ class buildModel extends model foreach($this->post->unlinkBugs as $unlinkBugID) $this->action->create('bug', $unlinkBugID, 'unlinkedfrombuild', '', $buildID); } + /** + * Bugs and stories associated with child builds. + * + * @param int $buildID + * @param string $childBuilds + * @access public + * @return void + */ + public function linkChildBuilds($buildID, $childBuilds) + { + $build = $this->dao->select('bugs, stories')->from(TABLE_BUILD)->where('id')->eq($buildID)->fetch(); + $buildList = $this->dao->select('bugs, stories')->from(TABLE_BUILD)->where('id')->in($childBuilds)->fetchAll(); + + foreach($buildList as $buildInfo) + { + if($buildInfo->bugs) $build->bugs .= ",{$buildInfo->bugs}"; + if($buildInfo->stories) $build->stories .= ",{$buildInfo->stories}"; + } + + $build->bugs = explode(',', $build->bugs); + $build->bugs = join(',', array_filter($build->bugs)); + $build->stories = explode(',', $build->stories); + $build->stories = join(',', array_filter($build->stories)); + + $this->dao->update(TABLE_BUILD)->data($build)->where('id')->eq($buildID)->exec(); + } + /** * Build action menu. * diff --git a/module/build/view/create.html.php b/module/build/view/create.html.php index 3297178af4..4d50e8e419 100644 --- a/module/build/view/create.html.php +++ b/module/build/view/create.html.php @@ -46,6 +46,7 @@ build->builds;?> + build->notice->autoRelation;?> From da374c2994837df54463dd238b34b2abd31ca71d Mon Sep 17 00:00:00 2001 From: wangyuting <851424971@qq.com> Date: Mon, 14 Nov 2022 07:56:51 +0000 Subject: [PATCH 03/60] * Optimize code. --- module/build/model.php | 1 - 1 file changed, 1 deletion(-) diff --git a/module/build/model.php b/module/build/model.php index 3aa47341da..0f98597790 100644 --- a/module/build/model.php +++ b/module/build/model.php @@ -336,7 +336,6 @@ class buildModel extends model ->remove('resolvedBy,allchecker,files,labels,uid') ->get(); - $build = $this->loadModel('file')->processImgURL($build, $this->config->build->editor->create['id'], $this->post->uid); $this->dao->insert(TABLE_BUILD)->data($build) ->autoCheck() From f16bef503e0bbce41901a0d4b4c2e9fde33b11d8 Mon Sep 17 00:00:00 2001 From: wangyuting <851424971@qq.com> Date: Mon, 14 Nov 2022 07:59:22 +0000 Subject: [PATCH 04/60] * Fix bug. --- module/build/view/create.html.php | 2 +- module/build/view/edit.html.php | 8 +++++++- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/module/build/view/create.html.php b/module/build/view/create.html.php index 4d50e8e419..6a26488df3 100644 --- a/module/build/view/create.html.php +++ b/module/build/view/create.html.php @@ -45,7 +45,7 @@ tab == 'project' && !empty($multipleProject)):?> build->builds;?> - + build->notice->autoRelation;?> diff --git a/module/build/view/edit.html.php b/module/build/view/edit.html.php index 8fc810e5aa..59e3009c6a 100644 --- a/module/build/view/edit.html.php +++ b/module/build/view/edit.html.php @@ -47,7 +47,13 @@ build->builds;?> builds, "class='form-control chosen' multiple $disabled");?> - build->notice->changeBuilds;?> + + + build->notice->changeBuilds;?> + + build->notice->autoRelation;?> + + build->execution;?> From 27086ff4a2d7701de8e090c71a5de6fedc37cc4b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E6=80=A1=E6=A0=8B?= Date: Mon, 14 Nov 2022 16:20:23 +0800 Subject: [PATCH 05/60] * fix bug. --- module/bug/model.php | 1 + 1 file changed, 1 insertion(+) diff --git a/module/bug/model.php b/module/bug/model.php index 5d17a0c4af..1b75576105 100644 --- a/module/bug/model.php +++ b/module/bug/model.php @@ -2086,6 +2086,7 @@ class bugModel extends model ->leftJoin(TABLE_BUILD)->alias('t2')->on('t1.id = t2.execution') ->where('t2.id')->in($buildID) ->fetchAll('id'); + if(empty($executions)) return array(); $condition = 'execution NOT ' . helper::dbIN(array_keys($executions)); $minBegin = ''; From 8e481418df6f06cbbe96607f8dadafad0bb7d15e Mon Sep 17 00:00:00 2001 From: Yagami Date: Mon, 14 Nov 2022 16:20:32 +0800 Subject: [PATCH 06/60] * Finish task #76107. --- module/project/css/create.css | 1 + module/project/lang/de.php | 1 + module/project/lang/en.php | 1 + module/project/lang/fr.php | 1 + module/project/lang/vi.php | 1 + module/project/lang/zh-cn.php | 1 + module/project/view/create.html.php | 5 ++++- 7 files changed, 10 insertions(+), 1 deletion(-) mode change 100644 => 100755 module/project/css/create.css diff --git a/module/project/css/create.css b/module/project/css/create.css old mode 100644 new mode 100755 index 8d3216532d..65133863d7 --- a/module/project/css/create.css +++ b/module/project/css/create.css @@ -28,3 +28,4 @@ .futureBox {vertical-align: top !important; padding-top: 13px !important;} #linkPlan {padding-top: 25px !important;} #projectType {padding-top: 7px !important;} +.division .icon-help {margin-left: 15px} diff --git a/module/project/lang/de.php b/module/project/lang/de.php index 4b8ee503f6..bd13cedc2e 100644 --- a/module/project/lang/de.php +++ b/module/project/lang/de.php @@ -358,6 +358,7 @@ $lang->project->begigLetterExecution = 'The start date of project should be ≤ $lang->project->endGreateExecution = 'The finish date of the project should be ≥ the maximum finish date of the execution: %s.'; $lang->project->childLongTime = "If a child as long-term projects, the parent should be long-term too."; $lang->project->confirmUnlinkMember = "Do you want to remove this user from project?"; +$lang->project->divisionTips = "The current project is a single set stage, click [Enable] to change to multiple sets of stages, each set of stages is only associated with one product."; $lang->project->action = new stdclass(); $lang->project->action->managed = '$date, managed by $actor. $extra' . "\n"; diff --git a/module/project/lang/en.php b/module/project/lang/en.php index 1c39189c08..7024b40b3e 100644 --- a/module/project/lang/en.php +++ b/module/project/lang/en.php @@ -365,6 +365,7 @@ $lang->project->begigLetterExecution = 'The start date of project should be ≤ $lang->project->endGreateExecution = 'The finish date of the project should be ≥ the maximum finish date of the execution: %s.'; $lang->project->childLongTime = "There are long-term projects in the child project, and the parent project should also be a long-term project."; $lang->project->confirmUnlinkMember = "Do you want to remove this user from project?"; +$lang->project->divisionTips = "The current project is a single set stage, click [Enable] to change to multiple sets of stages, each set of stages is only associated with one product."; $lang->project->action = new stdclass(); $lang->project->action->managed = '$date, managed by $actor. $extra' . "\n"; diff --git a/module/project/lang/fr.php b/module/project/lang/fr.php index cd16ce6b50..4bd82436cd 100644 --- a/module/project/lang/fr.php +++ b/module/project/lang/fr.php @@ -365,6 +365,7 @@ $lang->project->begigLetterExecution = 'La date de début du projet "%s" doit ê $lang->project->endGreateExecution = 'La date de fin du projet "%s" doit être ≥ à la date de fin maximale d\'exécution: %s.'; $lang->project->childLongTime = "If a child as long-term projects, the parent should be long-term too."; $lang->project->confirmUnlinkMember = "Do you want to remove this user from project?"; +$lang->project->divisionTips = "The current project is a single set stage, click [Enable] to change to multiple sets of stages, each set of stages is only associated with one product."; $lang->project->action = new stdclass(); $lang->project->action->managed = '$date, managed by $actor. $extra' . "\n"; diff --git a/module/project/lang/vi.php b/module/project/lang/vi.php index ec1120b68e..1996af20a1 100644 --- a/module/project/lang/vi.php +++ b/module/project/lang/vi.php @@ -244,6 +244,7 @@ $lang->project->endGreaterParent = "The end date of the parent project: %s. It $lang->project->beginGreateChild = "The minimum start date of the project set: %s. The start date of the project cannot be less than the minimum start date of the project set."; $lang->project->endLetterChild = "The maximum finish date for the project set: %s. The completion date of a project cannot be greater than the maximum completion date of the project set."; $lang->project->childLongTime = "There are long-term projects in the child project, and the parent project should also be a long-term project."; +$lang->project->divisionTips = "The current project is a single set stage, click [Enable] to change to multiple sets of stages, each set of stages is only associated with one product."; $lang->project->action = new stdclass(); $lang->project->action->managed = '$date, managed by $actor. $extra' . "\n"; diff --git a/module/project/lang/zh-cn.php b/module/project/lang/zh-cn.php index 8c079f17be..edad53d25b 100644 --- a/module/project/lang/zh-cn.php +++ b/module/project/lang/zh-cn.php @@ -365,6 +365,7 @@ $lang->project->begigLetterExecution = '项目的开始日期应小于等于执 $lang->project->endGreateExecution = '项目的完成日期应大于等于执行的最大完成日期:%s'; $lang->project->childLongTime = "子项目中有长期项目,父项目也应该是长期项目"; $lang->project->confirmUnlinkMember = "您确定从该项目中移除该用户吗?"; +$lang->project->divisionTips = "当前项目为单套阶段,点击[开启]可以变为多套阶段,每套阶段只关联一个{$lang->productCommon}。"; $lang->project->action = new stdclass(); $lang->project->action->managed = '$date, 由 $actor 维护。$extra' . "\n"; diff --git a/module/project/view/create.html.php b/module/project/view/create.html.php index 7bcc9b33ec..f80f3bea14 100755 --- a/module/project/view/create.html.php +++ b/module/project/view/create.html.php @@ -199,7 +199,10 @@ project->division;?> - project->divisionList, '0');?> + + project->divisionList, '0');?> + + From 44c503e22f2e313babe1bca515d1307690ed5eeb Mon Sep 17 00:00:00 2001 From: daitingting Date: Mon, 14 Nov 2022 08:33:47 +0000 Subject: [PATCH 07/60] * Finish task #76035,#76036. --- module/release/control.php | 62 ++++++++++++++++++++++++++------------ 1 file changed, 43 insertions(+), 19 deletions(-) diff --git a/module/release/control.php b/module/release/control.php index 6327b37398..c1fc6a7af6 100644 --- a/module/release/control.php +++ b/module/release/control.php @@ -464,7 +464,6 @@ class release extends control $this->session->set('storyList', inlink('view', "releaseID=$releaseID&type=story&link=true¶m=" . helper::safe64Encode("&browseType=$browseType&queryID=$param")), 'product'); $release = $this->release->getById($releaseID); - $build = $this->loadModel('build')->getByID($release->build); $this->commonAction($release->product); $this->loadModel('story'); $this->loadModel('tree'); @@ -475,15 +474,21 @@ class release extends control $pager = new pager($recTotal, $recPerPage, $pageID); /* Build search form. */ - $queryID = ($browseType == 'bySearch') ? (int)$param : 0; unset($this->config->product->search['fields']['product']); unset($this->config->product->search['fields']['project']); + + $queryID = ($browseType == 'bySearch') ? (int)$param : 0; $this->config->product->search['actionURL'] = $this->createLink('release', 'view', "releaseID=$releaseID&type=story&link=true¶m=" . helper::safe64Encode('&browseType=bySearch&queryID=myQueryID')); $this->config->product->search['queryID'] = $queryID; $this->config->product->search['style'] = 'simple'; $this->config->product->search['params']['plan']['values'] = $this->loadModel('productplan')->getPairsForStory($release->product, $release->branch, 'skipParent|withMainPlan'); $this->config->product->search['params']['status'] = array('operator' => '=', 'control' => 'select', 'values' => $this->lang->story->statusList); - $this->config->product->search['params']['module']['values'] = $this->loadModel('tree')->getOptionMenu($release->product, 'story', 0, $release->branch);; + + $searchModules = array(); + $moduleGroups = $this->loadModel('tree')->getOptionMenu($release->product, 'story', 0, explode(',', $release->branch));; + foreach($moduleGroups as $modules) $searchModules += $modules; + $this->config->product->search['params']['module']['values'] = $searchModules; + if($this->session->currentProductType == 'normal') { unset($this->config->product->search['fields']['branch']); @@ -491,20 +496,30 @@ class release extends control } else { - $this->config->product->search['fields']['branch'] = $this->lang->product->branch; - $branchName = $this->loadModel('branch')->getById($release->branch); - $branches = array('' => '', BRANCH_MAIN => $this->lang->branch->main, $release->branch => $branchName); + $allBranchs = $this->loadModel('branch')->getPairs($release->product); + $branches = array('' => '', BRANCH_MAIN => $this->lang->branch->main); + foreach(explode(',', trim($release->branch, ',')) as $branchID) $branches[$branchID] = zget($allBranchs, $branchID); + + $this->config->product->search['fields']['branch'] = sprintf($this->lang->product->branch, $this->lang->product->branchName[$release->productType]); $this->config->product->search['params']['branch']['values'] = $branches; } $this->loadModel('search')->setSearchParams($this->config->product->search); - if($browseType == 'bySearch' or $build->execution == 0) + $builds = $this->loadModel('build')->getByList($release->build); + $executionIdList = array(); + foreach($builds as $build) { - $allStories = $this->story->getBySearch($release->product, "0,{$release->branch}", $queryID, 'id', $build->execution ? $build->execution : '', 'story', $release->stories, $pager); + if(empty($build->execution)) continue; + $executionIdList[$build->execution] = $build->execution; + } + + if($browseType == 'bySearch') + { + $allStories = $this->story->getBySearch($release->product, $release->branch, $queryID, 'id', $executionIdList, 'story', $release->stories, $pager); } else { - $allStories = $this->story->getExecutionStories($build->execution, $build->product, 0, 't1.`order`_desc', 'byBranch', $release->branch, 'story', $release->stories, $pager); + $allStories = $this->story->getExecutionStories($executionIdList, $build->product, 0, 't1.`order`_desc', 'byBranch', $release->branch, 'story', $release->stories, $pager); } $this->view->allStories = $allStories; @@ -584,7 +599,6 @@ class release extends control $this->session->set('bugList', inlink('view', "releaseID=$releaseID&type=$type&link=true¶m=" . helper::safe64Encode("&browseType=$browseType&queryID=$param")), 'qa'); /* Set menu. */ $release = $this->release->getByID($releaseID); - $build = $this->loadModel('build')->getByID($release->build); $this->commonAction($release->product); /* Load pager. */ @@ -593,17 +607,24 @@ class release extends control /* Build the search form. */ $this->loadModel('bug'); - $queryID = ($browseType == 'bysearch') ? (int)$param : 0; unset($this->config->bug->search['fields']['product']); unset($this->config->bug->search['fields']['project']); + + $queryID = ($browseType == 'bysearch') ? (int)$param : 0; $this->config->bug->search['actionURL'] = $this->createLink('release', 'view', "releaseID=$releaseID&type=$type&link=true¶m=" . helper::safe64Encode('&browseType=bySearch&queryID=myQueryID')); $this->config->bug->search['queryID'] = $queryID; $this->config->bug->search['style'] = 'simple'; + $this->config->bug->search['params']['plan']['values'] = $this->loadModel('productplan')->getPairsForStory($release->product, $release->branch, 'skipParent|withMainPlan'); $this->config->bug->search['params']['execution']['values'] = $this->loadModel('product')->getExecutionPairsByProduct($release->product, $release->branch); $this->config->bug->search['params']['openedBuild']['values'] = $this->loadModel('build')->getBuildPairs($release->product, $branch = 'all', $params = ''); $this->config->bug->search['params']['resolvedBuild']['values'] = $this->config->bug->search['params']['openedBuild']['values']; - $this->config->bug->search['params']['module']['values'] = $this->loadModel('tree')->getOptionMenu($release->product, 'bug', 0, $release->branch); + + $searchModules = array(); + $moduleGroups = $this->loadModel('tree')->getOptionMenu($release->product, 'bug', 0, explode(',', $release->branch)); + foreach($moduleGroups as $modules) $searchModules += $modules; + $this->config->bug->search['params']['module']['values'] = $searchModules; + if($this->session->currentProductType == 'normal') { unset($this->config->bug->search['fields']['branch']); @@ -611,28 +632,31 @@ class release extends control } else { - $this->config->bug->search['fields']['branch'] = $this->lang->product->branch; - $branchName = $this->loadModel('branch')->getById($release->branch); - $branches = array('' => '', BRANCH_MAIN => $this->lang->branch->main, $release->branch => $branchName); + $allBranchs = $this->loadModel('branch')->getPairs($release->product); + $branches = array('' => '', BRANCH_MAIN => $this->lang->branch->main); + foreach(explode(',', trim($release->branch, ',')) as $branchID) $branches[$branchID] = zget($allBranchs, $branchID); + + $this->config->bug->search['fields']['branch'] = sprintf($this->lang->product->branch, $this->lang->product->branchName[$release->productType]); $this->config->bug->search['params']['branch']['values'] = $branches; } $this->loadModel('search')->setSearchParams($this->config->bug->search); + $builds = $this->loadModel('build')->getByList($release->build); $allBugs = array(); $releaseBugs = $type == 'bug' ? $release->bugs : $release->leftBugs; - if($browseType == 'bySearch' or $build->execution == 0) + if($browseType == 'bySearch') { $allBugs = $this->bug->getBySearch($release->product, $release->branch, $queryID, 'id_desc', $releaseBugs, $pager); } - elseif($build->execution) + else { if($type == 'bug') { - $allBugs = $this->bug->getReleaseBugs($build->id, $release->product, $release->branch, $releaseBugs, $pager); + $allBugs = $this->bug->getReleaseBugs(array_keys($builds), $release->product, $release->branch, $releaseBugs, $pager); } elseif($type == 'leftBug') { - $allBugs = $this->bug->getProductLeftBugs($build->id, $release->product, $release->branch, $releaseBugs, $pager); + $allBugs = $this->bug->getProductLeftBugs(array_keys($builds), $release->product, $release->branch, $releaseBugs, $pager); } } From 9627f33b3b966f32615f320354b53c26e0bea29b Mon Sep 17 00:00:00 2001 From: wangyuting <851424971@qq.com> Date: Mon, 14 Nov 2022 08:37:07 +0000 Subject: [PATCH 08/60] * Fix bug #29711. --- module/execution/view/story.html.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/module/execution/view/story.html.php b/module/execution/view/story.html.php index a43f1cba34..4d4d80de04 100644 --- a/module/execution/view/story.html.php +++ b/module/execution/view/story.html.php @@ -221,7 +221,7 @@ moduleName . ucfirst($this->methodName); $useDatatable = (isset($config->datatable->$datatableId->mode) and $config->datatable->$datatableId->mode == 'datatable'); - $vars = "executionID={$execution->id}&orderBy=%s&type=$type¶m=$param&recTotal={$pager->recTotal}&recPerPage={$pager->recPerPage}"; + $vars = "executionID={$execution->id}&storyType=$storyType&orderBy=%s&type=$type¶m=$param&recTotal={$pager->recTotal}&recPerPage={$pager->recPerPage}"; if($useDatatable) include '../../common/view/datatable.html.php'; if(!$execution->hasProduct and !$execution->multiple) From a1cb1c3556c4376cad01268746589fe44e667236 Mon Sep 17 00:00:00 2001 From: daitingting Date: Mon, 14 Nov 2022 08:37:21 +0000 Subject: [PATCH 09/60] * Get bug modules. --- module/projectrelease/control.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/module/projectrelease/control.php b/module/projectrelease/control.php index 64a5d6b9e9..f2d8398c9b 100644 --- a/module/projectrelease/control.php +++ b/module/projectrelease/control.php @@ -693,7 +693,7 @@ class projectrelease extends control $this->config->bug->search['params']['resolvedBuild']['values'] = $this->config->bug->search['params']['openedBuild']['values']; $searchModules = array(); - $moduleGroups = $this->loadModel('tree')->getOptionMenu($release->product, 'story', 0, explode(',', $release->branch)); + $moduleGroups = $this->loadModel('tree')->getOptionMenu($release->product, 'bug', 0, explode(',', $release->branch)); foreach($moduleGroups as $modules) $searchModules += $modules; $this->config->bug->search['params']['module']['values'] = $searchModules; From e3ad1649a899ea191c89bd92c5b65588abd61544 Mon Sep 17 00:00:00 2001 From: wangyuting <851424971@qq.com> Date: Mon, 14 Nov 2022 09:02:27 +0000 Subject: [PATCH 10/60] * Fix bug #29565. --- module/common/lang/menu.php | 1 + 1 file changed, 1 insertion(+) diff --git a/module/common/lang/menu.php b/module/common/lang/menu.php index fc9aae6e29..de9280d5d1 100644 --- a/module/common/lang/menu.php +++ b/module/common/lang/menu.php @@ -791,6 +791,7 @@ if(!helper::hasFeature('devops')) unset($lang->mainNav->devops, $lang->mainNav->menuOrder[35]); unset($lang->scrum->menu->devops, $lang->scrum->menuOrder[25]); unset($lang->waterfall->menu->devops, $lang->waterfall->menuOrder[35]); + unset($lang->execution->menu->devops, $lang->execution->menuOrder[45]); } if(!helper::hasFeature('kanban')) From c512ab0d730c4ac016a538b803dd43fa193e9ec6 Mon Sep 17 00:00:00 2001 From: lanzongjun Date: Mon, 14 Nov 2022 17:06:33 +0800 Subject: [PATCH 11/60] * finish task #75912 --- module/execution/control.php | 18 ++++++++++++++++++ module/story/model.php | 4 ++-- 2 files changed, 20 insertions(+), 2 deletions(-) diff --git a/module/execution/control.php b/module/execution/control.php index 6d0e3736eb..9dbd9647bb 100644 --- a/module/execution/control.php +++ b/module/execution/control.php @@ -1733,10 +1733,28 @@ class execution extends control $this->view->linkedBranches = $linkedBranches; } + if(!$project->hasProduct) + { + $shadowProduct = $this->loadModel('product')->getShadowProductByProject($project->id); + $productPlan = $this->loadModel('productplan')->getPairs($shadowProduct->id, '0,0', 'noclosed,unexpired', true); + } + if(!empty($_POST)) { if(isset($_POST['attribute']) and in_array($_POST['attribute'], array('request', 'design', 'review'))) unset($_POST['plans']); + /* No product execution link plans. */ + if(!$project->hasProduct and !empty($_POST['plans'])) + { + $plansItem = array(); + foreach($_POST['plans'] as $planItem) + { + if(empty($planItem[0][0])) continue; + $plansItem[] = $planItem[0][0]; + } + $_POST['plans'] = array($_POST['products'][0] => array(0 => $plansItem)); + } + $executionID = $this->execution->create($copyExecutionID); if(dao::isError()) return $this->send(array('result' => 'fail', 'message' => dao::getError())); diff --git a/module/story/model.php b/module/story/model.php index ce627b9b37..c7769f426f 100644 --- a/module/story/model.php +++ b/module/story/model.php @@ -4218,7 +4218,7 @@ class storyModel extends model if($action == 'batchcreate' and $story->parent > 0) return false; if($action == 'batchcreate' and $story->type == 'requirement' and $story->status != 'closed') return strpos('draft,reviewing,changing', $story->status) === false; if($action == 'batchcreate' and $config->vision == 'lite' and ($story->status == 'active' and ($story->stage == 'wait' or $story->stage == 'projected'))) return true; - /* Adjust code, hide split entry, fix bug #29432. */ + /* Adjust code, hide split entry. */ if($action == 'batchcreate' and ($story->status != 'active' or (isset($shadowProducts[$story->product])) or (!isset($shadowProducts[$story->product]) && $story->stage != 'wait') or !empty($story->plan))) return false; return true; @@ -4489,7 +4489,7 @@ class storyModel extends model $executionID = empty($execution) ? 0 : $execution->id; - /* Adjust code, hide split entry, fix bug #29432. */ + /* Adjust code, hide split entry. */ if(common::hasPriv('story', 'batchCreate') and !$execution->multiple and !$execution->hasProduct and false) { $isClick = $this->isClickable($story, 'batchcreate'); From 72ed3ae2273676800b65111b587a9b8b95cd187e Mon Sep 17 00:00:00 2001 From: mayue Date: Mon, 14 Nov 2022 17:22:03 +0800 Subject: [PATCH 12/60] * Fix bug #28832. --- module/execution/view/storykanban.html.php | 26 +++++++++++++++++----- 1 file changed, 21 insertions(+), 5 deletions(-) diff --git a/module/execution/view/storykanban.html.php b/module/execution/view/storykanban.html.php index cae4f2b63a..89bacb292c 100644 --- a/module/execution/view/storykanban.html.php +++ b/module/execution/view/storykanban.html.php @@ -12,8 +12,9 @@ execution->confirmUnlinkStory)?> app->user->account; +$cols = array('projected', 'developing', 'developed', 'testing', 'tested', 'verified', 'released'); +$account = $this->app->user->account; +$canLinkStory = $execution->hasProduct or $execution->multiple; ?>
+ model == 'waterfall'):?>
 ", '', "class='btn btn-icon text-primary switchBtn' title='{$lang->project->bylist}'");?> createLink('programplan', 'browse', "projectID=$projectID&productID=$productID&type=gantt"), "  ", '', "class='btn btn-icon switchBtn' title='{$lang->programplan->gantt}'");?>
+ " . $lang->export, '', "class='btn btn-link export'")?> createLink('programplan', 'create', "projectID=$projectID&productID=$productID"), " " . $lang->programplan->create, '', "class='btn btn-primary'");?> diff --git a/module/transfer/control.php b/module/transfer/control.php index 1f58dc5022..b9b7851107 100755 --- a/module/transfer/control.php +++ b/module/transfer/control.php @@ -159,14 +159,14 @@ class transfer extends control if($model == 'story') { - $product = $this->loadModel('product')->getByID($this->session->storyPortParams['productID']); + $product = $this->loadModel('product')->getByID($this->session->storyTransferParams['productID']); if($product->type == 'normal') unset($fields['branch']); if($this->session->storyType == 'requirement') unset($fields['plan']); } if($model == 'bug') { - $product = $this->loadModel('product')->getByID($this->session->bugPortParams['productID']); + $product = $this->loadModel('product')->getByID($this->session->bugTransferParams['productID']); if($product->type == 'normal') unset($fields['branch']); if($product->shadow and ($this->app->tab == 'execution' or $this->app->tab == 'project')) unset($fields['product']); } diff --git a/module/transfer/model.php b/module/transfer/model.php index 6ec348d984..0837f45652 100644 --- a/module/transfer/model.php +++ b/module/transfer/model.php @@ -56,16 +56,16 @@ class transferModel extends model } /** - * Check tmpFile. + * Check tmp file. * * @access public * @return void */ public function checkTmpFile() { - $file = $this->session->fileImportFileName; - $tmpPath = $this->loadModel('file')->getPathOfImportedFile(); - $tmpFile = $tmpPath . DS . md5(basename($file)); + $file = $this->session->fileImportFileName; + $tmpPath = $this->loadModel('file')->getPathOfImportedFile(); + $tmpFile = $tmpPath . DS . md5(basename($file)); if($this->maxImport and file_exists($tmpFile)) return $tmpFile; return false; @@ -196,7 +196,7 @@ class transferModel extends model $rows = $this->getRows($model, $fieldList); if($model == 'story') { - $product = $this->loadModel('product')->getByID((int)$this->session->storyPortParams['productID']); + $product = $this->loadModel('product')->getByID((int)$this->session->storyTransferParams['productID']); if($product and $product->shadow) { foreach($rows as $id => $row) From 11343aa6cc3ba9917c6cf0f603067401b617acee Mon Sep 17 00:00:00 2001 From: wangyuting <851424971@qq.com> Date: Tue, 15 Nov 2022 05:15:35 +0000 Subject: [PATCH 36/60] * Fix bug #29700. --- module/build/view/view.html.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/module/build/view/view.html.php b/module/build/view/view.html.php index 9070a25ab4..9ca7217e2d 100644 --- a/module/build/view/view.html.php +++ b/module/build/view/view.html.php @@ -343,7 +343,7 @@ tbody tr td:first-child input {display: none;} builds) as $buildID):?> - createLink('build', 'view', "buildID=$buildID") . "#app={$app->tab}", zget($buildPairs, $buildID)) . $lang->comma;?> + createLink('build', 'view', "buildID=$buildID") . "#app={$app->tab}", zget($buildPairs, $buildID)) . $lang->comma;?> comma);?> From bd06ac3570a354e579f3b444a4421a5409da1110 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E6=80=A1=E6=A0=8B?= Date: Tue, 15 Nov 2022 13:19:06 +0800 Subject: [PATCH 37/60] * fix bug #29723. --- module/message/model.php | 2 ++ module/story/js/common.js | 8 ++++---- module/story/view/create.html.php | 4 ++++ module/tutorial/lang/de.php | 3 +++ module/tutorial/lang/en.php | 3 +++ module/tutorial/lang/fr.php | 3 +++ module/tutorial/lang/zh-cn.php | 3 +++ 7 files changed, 22 insertions(+), 4 deletions(-) diff --git a/module/message/model.php b/module/message/model.php index 03cc3f6639..72ca92a564 100755 --- a/module/message/model.php +++ b/module/message/model.php @@ -66,6 +66,8 @@ class messageModel extends model */ public function send($objectType, $objectID, $actionType, $actionID, $actor = '', $extra = '') { + if(defined('TUTORIAL')) return; + $objectType = strtolower($objectType); $messageSetting = $this->config->message->setting; if(is_string($messageSetting)) $messageSetting = json_decode($messageSetting, true); diff --git a/module/story/js/common.js b/module/story/js/common.js index 6a1503c104..5be7092e6e 100644 --- a/module/story/js/common.js +++ b/module/story/js/common.js @@ -22,7 +22,7 @@ $(function() $('#saveButton').on('click', function() { - $('#saveButton').attr('disabled', true); + $('#saveButton').attr('type', 'submit').attr('disabled', true); $('#saveDraftButton').attr('disabled', true); var storyStatus = !$('#reviewer').val() || $('#needNotReview').is(':checked') ? 'active' : 'reviewing'; @@ -31,7 +31,7 @@ $(function() setTimeout(function() { - $('#saveButton').removeAttr('disabled'); + $('#saveButton').attr('type', 'button').removeAttr('disabled'); $('#saveDraftButton').removeAttr('disabled'); }, 1000); }); @@ -39,7 +39,7 @@ $(function() $('#saveDraftButton').on('click', function() { $('#saveButton').attr('disabled', true); - $('#saveDraftButton').attr('disabled', true); + $('#saveDraftButton').attr('type', 'submit').attr('disabled', true); storyStatus = 'draft'; if(typeof(page) != 'undefined' && page == 'change') storyStatus = 'changing'; @@ -50,7 +50,7 @@ $(function() setTimeout(function() { $('#saveButton').removeAttr('disabled'); - $('#saveDraftButton').removeAttr('disabled'); + $('#saveDraftButton').attr('type', 'button').removeAttr('disabled'); }, 1000); }); }) diff --git a/module/story/view/create.html.php b/module/story/view/create.html.php index 5ba9b5c1a0..462b4df12f 100644 --- a/module/story/view/create.html.php +++ b/module/story/view/create.html.php @@ -297,8 +297,12 @@ foreach(explode(',', $config->story->create->requiredFields) as $field) + + + save, "id='saveButton'", 'btn btn-primary btn-wide');?> story->saveDraft, "id='saveDraftButton'", 'btn btn-secondary btn-wide');?> + goback, '', 'class="btn btn-wide"') : html::backButton('', $source == 'bug' ? 'data-app=qa' : '');?> diff --git a/module/tutorial/lang/de.php b/module/tutorial/lang/de.php index eb42def366..581481dc40 100644 --- a/module/tutorial/lang/de.php +++ b/module/tutorial/lang/de.php @@ -74,3 +74,6 @@ $lang->tutorial->tasks['createTask']['desc'] = "

Aufgaben aufteilen:

    < $lang->tutorial->tasks['createBug'] = array('title' => 'Bug melden'); $lang->tutorial->tasks['createBug']['nav'] = array('module' => 'bug', 'method' => 'create', 'menuModule' => 'qa', 'menu' => 'bug', 'target' => '.btn-bug-create', 'form' => '#dataform', 'submit' => '#submit', 'targetPageName' => 'Bug erstellen'); $lang->tutorial->tasks['createBug']['desc'] = "

    Bug erstellen:

    • Öffnen Test Bug Einen Bug erstellen;
    • Tragen Sie die Bug Informationen ein:
    • Speichern
    "; + +global $config; +if($config->systemMode == 'light') unset($lang->tutorial->tasks['createProgram']); diff --git a/module/tutorial/lang/en.php b/module/tutorial/lang/en.php index 026fc7c429..5182e29620 100644 --- a/module/tutorial/lang/en.php +++ b/module/tutorial/lang/en.php @@ -74,3 +74,6 @@ $lang->tutorial->tasks['createTask']['desc'] = "

    Task breakdown for a story: < $lang->tutorial->tasks['createBug'] = array('title' => 'Report Bug'); $lang->tutorial->tasks['createBug']['nav'] = array('app' => 'qa', 'module' => 'bug', 'method' => 'create', 'menuModule' => 'bug', 'menu' => 'bug', 'target' => '.create-bug-btn', 'form' => '#dataform', 'submit' => '#submit', 'targetPageName' => 'Report Bug'); $lang->tutorial->tasks['createBug']['desc'] = "

    Report a Bug:

    • Open Test Bug Report Bug;
    • Fill the form with bug information:
    • Save
    "; + +global $config; +if($config->systemMode == 'light') unset($lang->tutorial->tasks['createProgram']); diff --git a/module/tutorial/lang/fr.php b/module/tutorial/lang/fr.php index b1a29b235e..54852235f1 100644 --- a/module/tutorial/lang/fr.php +++ b/module/tutorial/lang/fr.php @@ -74,3 +74,6 @@ $lang->tutorial->tasks['createTask']['desc'] = "

    Task breakdown for a story: < $lang->tutorial->tasks['createBug'] = array('title' => 'Report Bug'); $lang->tutorial->tasks['createBug']['nav'] = array('module' => 'bug', 'method' => 'create', 'menuModule' => 'qa', 'menu' => 'bug', 'target' => '.btn-bug-create', 'form' => '#dataform', 'submit' => '#submit', 'targetPageName' => 'Report Bug'); $lang->tutorial->tasks['createBug']['desc'] = "

    Report a Bug:

    • Open Test Bug Report Bug;
    • Fill the form with bug information:
    • Save
    "; + +global $config; +if($config->systemMode == 'light') unset($lang->tutorial->tasks['createProgram']); diff --git a/module/tutorial/lang/zh-cn.php b/module/tutorial/lang/zh-cn.php index 83b8f77bee..486c56f16b 100644 --- a/module/tutorial/lang/zh-cn.php +++ b/module/tutorial/lang/zh-cn.php @@ -74,3 +74,6 @@ $lang->tutorial->tasks['createTask']['desc'] = "

    将执行{$lang->SRCommon}分 $lang->tutorial->tasks['createBug'] = array('title' => '提Bug'); $lang->tutorial->tasks['createBug']['nav'] = array('app' => 'qa', 'module' => 'bug', 'method' => 'create', 'menuModule' => 'bug', 'menu' => 'bug', 'target' => '.create-bug-btn', 'vars' => 'productID=0', 'form' => '#dataform', 'submit' => '#submit', 'targetPageName' => '提Bug'); $lang->tutorial->tasks['createBug']['desc'] = "

    在系统中提交一个Bug:

    • 打开 测试 Bug 提Bug;
    • 在表单中填写Bug信息;
    • 保存Bug信息。
    "; + +global $config; +if($config->systemMode == 'light') unset($lang->tutorial->tasks['createProgram']); From 7693217115b58b9bed26fd5c5577e292469fc842 Mon Sep 17 00:00:00 2001 From: daitingting Date: Tue, 15 Nov 2022 05:20:17 +0000 Subject: [PATCH 38/60] * Fix bug #29621. --- module/project/config.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/module/project/config.php b/module/project/config.php index afbb5e6010..d3149df35e 100644 --- a/module/project/config.php +++ b/module/project/config.php @@ -11,7 +11,8 @@ $config->project->editor->activate = array('id' => 'comment', 'tools' => 'simple $config->project->editor->view = array('id' => 'lastComment', 'tools' => 'simpleTools'); $config->project->list = new stdclass(); -$config->project->list->exportFields = 'id,parent,code,name,hasProduct,linkedProducts,status,begin,end,budget,PM,end,desc'; +$config->project->list->exportFields = 'id,code,name,hasProduct,linkedProducts,status,begin,end,budget,PM,end,desc'; +if($config->systemMode == 'ALM') $config->project->list->exportFields = substr_replace($config->project->list->exportFields, ',parent', 2, 0); $config->project->create = new stdclass(); $config->project->edit = new stdclass(); From aed6871cd8effa7f16544af876bba81029e1a04e Mon Sep 17 00:00:00 2001 From: wangyuting <851424971@qq.com> Date: Tue, 15 Nov 2022 05:20:46 +0000 Subject: [PATCH 39/60] * Fix bug #29694. --- module/execution/view/build.html.php | 2 -- 1 file changed, 2 deletions(-) diff --git a/module/execution/view/build.html.php b/module/execution/view/build.html.php index e1c014cd0d..c1610c1616 100644 --- a/module/execution/view/build.html.php +++ b/module/execution/view/build.html.php @@ -51,7 +51,6 @@ build->id;?> build->product;?> build->name;?> - build->product;?> build->scmPath;?> build->filePath;?> build->date;?> @@ -69,7 +68,6 @@ branchName) echo "{$build->branchName}"?> createLink('build', 'view', "build=$build->id"), $build->name);?> - productName;?> scmPath, 'http') === 0 ? html::a($build->scmPath) : $build->scmPath;?> filePath, 'http') === 0 ? html::a($build->filePath) : $build->filePath;?> date?> From 72c38e942ec41d29baf2fb95a776e7bee81b3ba8 Mon Sep 17 00:00:00 2001 From: lanzongjun Date: Tue, 15 Nov 2022 13:39:09 +0800 Subject: [PATCH 40/60] add param --- module/story/model.php | 1 + 1 file changed, 1 insertion(+) diff --git a/module/story/model.php b/module/story/model.php index 0ed04d40b1..e0f14160fc 100644 --- a/module/story/model.php +++ b/module/story/model.php @@ -5878,6 +5878,7 @@ class storyModel extends model * * @param int $executionID * @param string $orderBy + * @param string $storyType * @access public * @return void */ From 231e210373b5b70a769c9afd8bcd219c4620b088 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E6=80=A1=E6=A0=8B?= Date: Tue, 15 Nov 2022 13:47:37 +0800 Subject: [PATCH 41/60] * code for task #29718. --- module/projectrelease/control.php | 3 --- module/projectrelease/view/view.html.php | 2 +- 2 files changed, 1 insertion(+), 4 deletions(-) diff --git a/module/projectrelease/control.php b/module/projectrelease/control.php index 2771cb306c..f39e8cc6e2 100644 --- a/module/projectrelease/control.php +++ b/module/projectrelease/control.php @@ -83,15 +83,12 @@ class projectrelease extends control $pager = new pager($recTotal, $recPerPage, $pageID); $releases = $this->projectrelease->getList($projectID, $type, $orderBy, $pager); - $productIdList = array(); - foreach($releases as $release) $productIdList[$release->product] = $release->product; $this->view->title = $objectName . $this->lang->colon . $this->lang->release->browse; $this->view->execution = $execution; $this->view->project = $project; $this->view->products = $this->loadModel('product')->getProducts($projectID); $this->view->releases = $releases; - $this->view->builds = $this->loadModel('build')->getBuildPairs($productIdList, 'all', 'notrunk,withbranch', $projectID, 'project'); $this->view->projectID = $projectID; $this->view->executionID = $executionID; $this->view->type = $type; diff --git a/module/projectrelease/view/view.html.php b/module/projectrelease/view/view.html.php index a2095e0c51..4f8b471a9c 100644 --- a/module/projectrelease/view/view.html.php +++ b/module/projectrelease/view/view.html.php @@ -358,7 +358,7 @@ { $buildHtml[] = html::a($this->createLink($buildInfo->execution ? 'build' : 'projectbuild', 'view', "buildID=$buildID"), $buildInfo->name, '', "data-app='project'"); } - echo join(', ', $buildHtml); + echo join($lang->comma, $buildHtml); ?> From 0afdea43824d0cf6f0f1a52d4944dc13d83575ac Mon Sep 17 00:00:00 2001 From: wangyuting <851424971@qq.com> Date: Tue, 15 Nov 2022 05:50:07 +0000 Subject: [PATCH 42/60] * Fix bug #29759. --- module/execution/control.php | 2 +- module/kanban/control.php | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/module/execution/control.php b/module/execution/control.php index 072219bda6..cc664c764c 100644 --- a/module/execution/control.php +++ b/module/execution/control.php @@ -1826,7 +1826,7 @@ class execution extends control $this->view->code = $code; $this->view->team = $team; $this->view->teams = array(0 => '') + $this->execution->getCanCopyObjects((int)$projectID); - $this->view->allProjects = array(0 => '') + $this->project->getPairsByModel('all', 0, 'noclosed'); + $this->view->allProjects = array(0 => '') + $this->project->getPairsByModel('all', 0, 'noclosed,multiple'); $this->view->copyProjects = $copyProjects; $this->view->copyExecutions = array('' => '') + $this->execution->getList($copyProjectID); $this->view->executionID = $executionID; diff --git a/module/kanban/control.php b/module/kanban/control.php index 4479d6883d..1070aef18e 100644 --- a/module/kanban/control.php +++ b/module/kanban/control.php @@ -1378,7 +1378,7 @@ class kanban extends control $this->app->loadClass('pager', $static = true); $pager = new pager($recTotal, $recPerPage, $pageID); - $this->view->projects = array($this->lang->kanban->allProjects) + $this->project->getPairsByProgram(); + $this->view->projects = array($this->lang->kanban->allProjects) + $this->project->getPairsByProgram('', 'all', false, '', '', '', 'multiple'); $this->view->selectedProjectID = $selectedProjectID; $this->view->lanePairs = $this->kanban->getLanePairsByGroup($groupID); $this->view->executions2Imported = $this->execution->getStatData($selectedProjectID, 'undone', 0, 0, false, '', 'id_asc', $pager); From 8bc640bd2925e42aa871d100dd1810a60be01717 Mon Sep 17 00:00:00 2001 From: xieqiyu Date: Tue, 15 Nov 2022 13:50:31 +0800 Subject: [PATCH 43/60] * Fix bug#29752. --- module/my/view/task.html.php | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/module/my/view/task.html.php b/module/my/view/task.html.php index 64caf5f5e8..950103d321 100644 --- a/module/my/view/task.html.php +++ b/module/my/view/task.html.php @@ -104,15 +104,16 @@ ' title='name?>'> team)) echo '' . $this->lang->task->multipleAB . ' ';?> executionMultiple) ? 'project' : 'execution'; if($task->parent > 0) { - echo '' . $this->lang->task->childrenAB . ' ' . html::a($this->createLink('task', 'view', "taskID=$task->id", '', '', $task->project), $task->parentName . ' / '. $task->name, '', "title='{$task->parentName} / {$task->name}'"); + echo '' . $this->lang->task->childrenAB . ' ' . html::a($this->createLink('task', 'view', "taskID=$task->id", '', '', $task->project), $task->parentName . ' / '. $task->name, '', "title='{$task->parentName} / {$task->name}' data-app='$dataApp'"); } else { $onlybody = $task->executionType == 'kanban' ? true : ''; $class = $task->executionType == 'kanban' ? 'iframe' : ''; - echo html::a($this->createLink('task', 'view', "taskID=$task->id", '', $onlybody, $task->project), $task->name, null, "class='$class' data-width='80%' style='color: $task->color'"); + echo html::a($this->createLink('task', 'view', "taskID=$task->id", '', $onlybody, $task->project), $task->name, null, "class='$class' data-width='80%' style='color: $task->color' data-app='$dataApp'"); } ?> children)) echo '';?> @@ -189,8 +190,9 @@ id);?> + executionMultiple) ? 'project' : 'execution';?> parent > 0) echo '' . $this->lang->task->childrenAB . ' ';?> - createLink('task', 'view', "taskID=$child->id", '', '', $child->project), $child->name, null, "style='color: $child->color'");?> + createLink('task', 'view', "taskID=$child->id", '', '', $child->project), $child->name, null, "style='color: $child->color' data-app='$dataApp'");?> pri;?>' title='task->priList, $child->pri);?>'>task->priList, $child->pri);?> From 4352117e4daa82864d79f071e93e478afc12f908 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E6=80=A1=E6=A0=8B?= Date: Tue, 15 Nov 2022 13:56:40 +0800 Subject: [PATCH 44/60] * fix bug #29699. --- module/my/model.php | 1 + 1 file changed, 1 insertion(+) diff --git a/module/my/model.php b/module/my/model.php index 926ec8e9a9..3a432a791d 100644 --- a/module/my/model.php +++ b/module/my/model.php @@ -1301,6 +1301,7 @@ class myModel extends model $review->time = $action->date; $review->result = strtolower($action->extra); $review->status = $objectType == 'attend' ? $object->reviewStatus : $object->status; + if(strpos($review->result, ',') !== false) list($review->result) = explode(',', $review->result); if($review->type == 'review') $review->type = 'project'; if($review->type == 'case') $review->type = 'testcase'; From 146559bc2db219403c433146d97b9e14861fe2f7 Mon Sep 17 00:00:00 2001 From: mayue Date: Tue, 15 Nov 2022 13:57:03 +0800 Subject: [PATCH 45/60] * Fix bug #29682. --- module/story/view/view.html.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/module/story/view/view.html.php b/module/story/view/view.html.php index aab887a7cf..91b29a8998 100644 --- a/module/story/view/view.html.php +++ b/module/story/view/view.html.php @@ -53,7 +53,7 @@ app->rawModule == 'projectstory') + if($this->app->rawModule == 'projectstory' or $this->app->tab == 'project') { $otherParam = "storyID=&projectID={$this->session->project}"; $tab = 'project'; From dcd256203af8fab9682089d81f71ab3bc0932fa9 Mon Sep 17 00:00:00 2001 From: wangyuting <851424971@qq.com> Date: Tue, 15 Nov 2022 06:15:10 +0000 Subject: [PATCH 46/60] * Fix bug #29735. --- module/execution/control.php | 2 ++ 1 file changed, 2 insertions(+) diff --git a/module/execution/control.php b/module/execution/control.php index dc5f1977a1..eb4576d021 100644 --- a/module/execution/control.php +++ b/module/execution/control.php @@ -657,6 +657,7 @@ class execution extends control $this->config->bug->search['module'] = 'importBug'; $this->config->bug->search['params']['confirmed']['values'] = array('' => '') + $this->lang->bug->confirmedList; + $this->loadModel('tree'); $bugModules = array(); foreach($products as $productID => $productName) @@ -685,6 +686,7 @@ class execution extends control unset($this->config->bug->search['fields']['resolvedDate']); unset($this->config->bug->search['fields']['closedDate']); unset($this->config->bug->search['fields']['branch']); + if(empty($execution->multiple) && empty($execution->hasProduct)) unset($this->config->bug->search['fields']['plan']); if(empty($project->hasProduct)) { unset($this->config->bug->search['fields']['product']); From dfdcc78206c4621d1beddefe8d6fa05925f7495d Mon Sep 17 00:00:00 2001 From: wangyuting <851424971@qq.com> Date: Tue, 15 Nov 2022 06:17:36 +0000 Subject: [PATCH 47/60] * Optimize code. --- module/execution/control.php | 2 -- 1 file changed, 2 deletions(-) diff --git a/module/execution/control.php b/module/execution/control.php index eb4576d021..e4f08545a8 100644 --- a/module/execution/control.php +++ b/module/execution/control.php @@ -657,7 +657,6 @@ class execution extends control $this->config->bug->search['module'] = 'importBug'; $this->config->bug->search['params']['confirmed']['values'] = array('' => '') + $this->lang->bug->confirmedList; - $this->loadModel('tree'); $bugModules = array(); foreach($products as $productID => $productName) @@ -692,7 +691,6 @@ class execution extends control unset($this->config->bug->search['fields']['product']); if($project->model !== 'scrum') unset($this->config->bug->search['fields']['plan']); } - unset($this->config->bug->search['params']['resolvedBy']); unset($this->config->bug->search['params']['closedBy']); unset($this->config->bug->search['params']['status']); From 4849895b696b785755788d823326fbbc8a686151 Mon Sep 17 00:00:00 2001 From: lanzongjun Date: Tue, 15 Nov 2022 14:18:36 +0800 Subject: [PATCH 48/60] * finish task #76334 --- module/common/lang/menu.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/module/common/lang/menu.php b/module/common/lang/menu.php index de9280d5d1..d5a9edadfd 100644 --- a/module/common/lang/menu.php +++ b/module/common/lang/menu.php @@ -253,7 +253,7 @@ $lang->scrum->menu->settings['subMenu']->members = array('link' => "{$lang-> $lang->scrum->menu->settings['subMenu']->whitelist = array('link' => "{$lang->whitelist}|project|whitelist|project=%s", 'subModule' => 'personnel'); $lang->scrum->menu->settings['subMenu']->stakeholder = array('link' => "{$lang->stakeholder->common}|stakeholder|browse|project=%s", 'subModule' => 'stakeholder'); $lang->scrum->menu->settings['subMenu']->group = array('link' => "{$lang->priv}|project|group|project=%s", 'alias' => 'group,manageview,managepriv'); -$lang->scrum->menu->settings['subMenu']->module = array('link' => "{$lang->module}|tree|browse|product=%s&view=story"); +$lang->scrum->menu->settings['subMenu']->module = array('link' => "{$lang->module}|tree|browse|product=%s&view=story", 'subModule' => 'tree'); $lang->scrum->menu->settings['subMenu']->managerepo = array('link' => "{$lang->repo->codeRepo}|project|managerepo|project=%s"); /* Waterfall menu. */ From c9f2e7c27f3031fd50a979ac8906e43a401117c1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E6=80=A1=E6=A0=8B?= Date: Tue, 15 Nov 2022 14:25:56 +0800 Subject: [PATCH 49/60] * fix bug #29674. --- module/misc/lang/de.php | 8 ++++---- module/misc/lang/en.php | 8 ++++---- module/misc/lang/fr.php | 6 +++--- module/misc/lang/zh-cn.php | 2 +- 4 files changed, 12 insertions(+), 12 deletions(-) diff --git a/module/misc/lang/de.php b/module/misc/lang/de.php index e892681bf2..70525fda4d 100644 --- a/module/misc/lang/de.php +++ b/module/misc/lang/de.php @@ -47,8 +47,8 @@ $lang->misc->zentao->cowin['feedback'] = "Feedback"; $lang->misc->zentao->cowin['recommend'] = "More"; $lang->misc->zentao->service['zentaotrain'] = 'ZenTao Training'; -$lang->misc->zentao->service['idc'] = 'Zentao Cloud'; -$lang->misc->zentao->service['custom'] = 'Zentao Custom'; +$lang->misc->zentao->service['idc'] = 'ZenTao Cloud'; +$lang->misc->zentao->service['custom'] = 'ZenTao Custom'; global $config; $lang->misc->zentao->others['chanzhi'] = " Zsite"; @@ -100,7 +100,7 @@ $lang->misc->feature->close = 'Close'; $lang->misc->feature->downloadFile = 'Download introduction'; $lang->misc->feature->tutorialDesc = '

    ZenTao 15.0 has new functions, and you know how to use it through the "Tutorial".

    Click your [Avatar-Theme-Young Blue] to set it.

    '; $lang->misc->feature->themeDesc = '

    ZenTao 15.0+ a new "Youth Blue" theme, the pages are more beautiful and the experience is more friendly.

    Click your [Avatar-Theme-Young Blue] to set it.

    '; -$lang->misc->feature->visionsDesc = "

    The concept of interface has been added since 16.5. Users can deal with R & D affairs in [R&D] and daily office affairs in [Lite].

    You can view the current interface on the avatar, and click the name of the interface to view and switch other interfaces.

    "; +$lang->misc->feature->visionsDesc = "

    The concept of interface has been added since 16.5. Users can deal with R&D affairs in [Full Feature Interface] and daily office affairs in [Operation Management Interface].

    You can view the current interface on the avatar, and click the name of the interface to view and switch other interfaces.

    "; $lang->misc->feature->visionsImage = 'theme/default/images/main/visions_en.png'; $lang->misc->releaseDate['17.8'] = '2022-11-02'; @@ -225,7 +225,7 @@ $lang->misc->feature->all['15.0.3'][] = array('title' => 'Fix Bug', 'desc' $lang->misc->feature->all['15.0.2'][] = array('title' => 'Fix Bug', 'desc' => ''); $lang->misc->feature->all['15.0.1'][] = array('title' => 'Fix Bug', 'desc' => ''); $lang->misc->feature->all['15.0'][] = array('title' => 'Fix Bug', 'desc' => ''); -$lang->misc->feature->all['15.0.rc3'][] = array('title' => 'Adjust details,Fix bug', 'desc' => ''); +$lang->misc->feature->all['15.0.rc3'][] = array('title' => 'Adjust details, fix bug.', 'desc' => ''); $lang->misc->feature->all['15.0.rc2'][] = array('title' => 'Fix Bug.', 'desc' => ''); $lang->misc->feature->all['15.0.rc1'][] = array('title' => 'Upgrade to 15,reframe menu, add program.', 'desc' => ''); $lang->misc->feature->all['12.5.3'][] = array('title' => 'Adjust annual data.', 'desc' => ''); diff --git a/module/misc/lang/en.php b/module/misc/lang/en.php index b63f934519..fb0e92e185 100644 --- a/module/misc/lang/en.php +++ b/module/misc/lang/en.php @@ -100,7 +100,7 @@ $lang->misc->feature->close = 'Close'; $lang->misc->feature->downloadFile = 'Download introduction'; $lang->misc->feature->tutorialDesc = '

    ZenTao 15.0 has new functions, and you know how to use it through the "Tutorial".

    Click your [Avatar-Theme-Young Blue] to set it.

    '; $lang->misc->feature->themeDesc = '

    ZenTao 15.0+ a new "Youth Blue" theme, the pages are more beautiful and the experience is more friendly.

    Click your [Avatar-Theme-Young Blue] to set it.

    '; -$lang->misc->feature->visionsDesc = "

    The concept of interface has been added since 16.5. Users can deal with R & D affairs in [R&D] and daily office affairs in [Lite].

    You can view the current interface on the avatar, and click the name of the interface to view and switch other interfaces.

    "; +$lang->misc->feature->visionsDesc = "

    The concept of interface has been added since 16.5. Users can deal with R&D affairs in [Full Feature Interface] and daily office affairs in [Operation Management Interface].

    You can view the current interface on the avatar, and click the name of the interface to view and switch other interfaces.

    "; $lang->misc->feature->visionsImage = 'theme/default/images/main/visions_en.png'; $lang->misc->releaseDate['17.8'] = '2022-11-02'; @@ -223,9 +223,9 @@ $lang->misc->feature->all['15.2'][] = array('title' => 'Optimize the new v $lang->misc->feature->all['15.0.3'][] = array('title' => 'Fix Bug', 'desc' => ''); $lang->misc->feature->all['15.0.2'][] = array('title' => 'Fix Bug', 'desc' => ''); -$lang->misc->feature->all['15.0.1'][] = array('title' => 'Fix bug', 'desc' => ''); -$lang->misc->feature->all['15.0'][] = array('title' => 'Fix bug', 'desc' => ''); -$lang->misc->feature->all['15.0.rc3'][] = array('title' => 'Adjust details,Fix bug', 'desc' => ''); +$lang->misc->feature->all['15.0.1'][] = array('title' => 'Fix Bug', 'desc' => ''); +$lang->misc->feature->all['15.0'][] = array('title' => 'Fix Bug', 'desc' => ''); +$lang->misc->feature->all['15.0.rc3'][] = array('title' => 'Adjust details, fix bug.', 'desc' => ''); $lang->misc->feature->all['15.0.rc2'][] = array('title' => 'Fix Bug.', 'desc' => ''); $lang->misc->feature->all['15.0.rc1'][] = array('title' => 'Upgrade to 15,reframe menu, add program.', 'desc' => ''); $lang->misc->feature->all['12.5.3'][] = array('title' => 'Adjust annual data.', 'desc' => ''); diff --git a/module/misc/lang/fr.php b/module/misc/lang/fr.php index 0bc2366d43..7b47d01dc1 100644 --- a/module/misc/lang/fr.php +++ b/module/misc/lang/fr.php @@ -47,8 +47,8 @@ $lang->misc->zentao->cowin['feedback'] = "Feedback"; $lang->misc->zentao->cowin['recommend'] = "Plus..."; $lang->misc->zentao->service['zentaotrain'] = 'ZenTao Training'; -$lang->misc->zentao->service['idc'] = 'Zentao Cloud'; -$lang->misc->zentao->service['custom'] = 'Zentao Custom'; +$lang->misc->zentao->service['idc'] = 'ZenTao Cloud'; +$lang->misc->zentao->service['custom'] = 'ZenTao Custom'; global $config; $lang->misc->zentao->others['chanzhi'] = " Zsite"; @@ -100,7 +100,7 @@ $lang->misc->feature->close = 'Close'; $lang->misc->feature->downloadFile = 'Download introduction'; $lang->misc->feature->tutorialDesc = '

    ZenTao 15.0 has new functions, and you know how to use it through the "Tutorial".

    Click your [Avatar-Theme-Young Blue] to set it.

    '; $lang->misc->feature->themeDesc = '

    ZenTao 15.0+ a new "Youth Blue" theme, the pages are more beautiful and the experience is more friendly.

    Click your [Avatar-Theme-Young Blue] to set it.

    '; -$lang->misc->feature->visionsDesc = "

    The concept of interface has been added since 16.5. Users can deal with R & D affairs in [R&D] and daily office affairs in [Lite].

    You can view the current interface on the avatar, and click the name of the interface to view and switch other interfaces.

    "; +$lang->misc->feature->visionsDesc = "

    The concept of interface has been added since 16.5. Users can deal with R&D affairs in [Full Feature Interface] and daily office affairs in [Operation Management Interface].

    You can view the current interface on the avatar, and click the name of the interface to view and switch other interfaces.

    "; $lang->misc->feature->visionsImage = 'theme/default/images/main/visions_en.png'; $lang->misc->releaseDate['17.8'] = '2022-11-02'; diff --git a/module/misc/lang/zh-cn.php b/module/misc/lang/zh-cn.php index d5b2ef9cc6..f9dcacc66a 100644 --- a/module/misc/lang/zh-cn.php +++ b/module/misc/lang/zh-cn.php @@ -100,7 +100,7 @@ $lang->misc->feature->close = '关闭'; $lang->misc->feature->downloadFile = '下载新版本功能介绍文档'; $lang->misc->feature->tutorialDesc = "

    禅道15系列新增了多项功能,您可以通过“新手引导教程”快速了解禅道的基本使用方法。

    通过鼠标经过 [头像-新手引导],点击新手引导,即可进入新手引导教程。

    "; $lang->misc->feature->themeDesc = "

    禅道15系列上线了全新的“青春蓝”主题,页面呈现更加美观,体验更加友好。

    通过鼠标经过 [头像-主题-青春蓝],点击青春蓝,即可设置成功。

    "; -$lang->misc->feature->visionsDesc = "

    从16.5开始增加了界面概念,用户可以在[研发综合界面]中处理研发事务、在[迅捷界面]处理日常办公事务。

    在头像右侧即可查看当前所处界面,点击当前界面名称可查看和切换其他的界面。

    "; +$lang->misc->feature->visionsDesc = "

    从16.5开始增加了界面概念,用户可以在[研发综合界面]中处理研发事务、在[运营管理界面]处理日常办公事务。

    在头像右侧即可查看当前所处界面,点击当前界面名称可查看和切换其他的界面。

    "; $lang->misc->feature->visionsImage = 'theme/default/images/main/visions.png'; $lang->misc->releaseDate['17.8'] = '2022-11-02'; From c155808a69d97a77aaba94806f05ff9fcbbaeb45 Mon Sep 17 00:00:00 2001 From: lanzongjun Date: Tue, 15 Nov 2022 14:29:27 +0800 Subject: [PATCH 50/60] fix code error --- module/execution/control.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/module/execution/control.php b/module/execution/control.php index dc5f1977a1..50b7d6892f 100644 --- a/module/execution/control.php +++ b/module/execution/control.php @@ -1733,7 +1733,7 @@ class execution extends control $this->view->linkedBranches = $linkedBranches; } - if(!$project->hasProduct) + if(!empty($project->hasProduct)) { $shadowProduct = $this->loadModel('product')->getShadowProductByProject($project->id); $productPlan = $this->loadModel('productplan')->getPairs($shadowProduct->id, '0,0', 'noclosed,unexpired', true); @@ -1744,7 +1744,7 @@ class execution extends control if(isset($_POST['attribute']) and in_array($_POST['attribute'], array('request', 'design', 'review'))) unset($_POST['plans']); /* No product execution link plans. */ - if(!$project->hasProduct and !empty($_POST['plans'])) + if(!empty($project->hasProduct) and !empty($_POST['plans'])) { $plansItem = array(); foreach($_POST['plans'] as $planItem) From 8e872c71e3b4fed78b71e1ef01f545ff0a015a5d Mon Sep 17 00:00:00 2001 From: daitingting Date: Tue, 15 Nov 2022 06:49:19 +0000 Subject: [PATCH 51/60] * Fix bug #29623. --- module/program/model.php | 55 ++++------------ module/project/control.php | 70 ++++++++++++--------- module/project/view/manageproducts.html.php | 41 ++++++++++-- 3 files changed, 89 insertions(+), 77 deletions(-) diff --git a/module/program/model.php b/module/program/model.php index 393556a4ef..9ee3ab4e0e 100644 --- a/module/program/model.php +++ b/module/program/model.php @@ -67,10 +67,11 @@ class programModel extends model * @param string $status all|noclosed * @param string|array $append * @param string|int $shadow all | 0 | 1 + * @param bool $withProgram * @access public * @return array */ - public function getProductPairs($programID = 0, $mode = 'assign', $status = 'all', $append = '', $shadow = 0) + public function getProductPairs($programID = 0, $mode = 'assign', $status = 'all', $append = '', $shadow = 0, $withProgram = false) { /* Get the top programID. */ if($programID) @@ -84,72 +85,40 @@ class programModel extends model if(!empty($append) and is_array($append)) $append = implode(',', $append); $views = empty($append) ? $this->app->user->view->products : $this->app->user->view->products . ",$append"; - return $this->dao->select('*')->from(TABLE_PRODUCT) + $dao = $this->dao->select('id, name, program')->from(TABLE_PRODUCT) ->where('deleted')->eq(0) ->andWhere('vision')->eq($this->config->vision) ->beginIF($shadow !== 'all')->andWhere('shadow')->eq((int)$shadow)->fi() ->beginIF($mode == 'assign')->andWhere('program')->eq($programID)->fi() ->beginIF(strpos($status, 'noclosed') !== false)->andWhere('status')->ne('closed')->fi() - ->beginIF(!$this->app->user->admin)->andWhere('id')->in($views)->fi() - ->fetchPairs('id', 'name'); - } + ->beginIF(!$this->app->user->admin)->andWhere('id')->in($views)->fi(); - /** - * Get product pairs which name with program. - * - * @param int $programID - * @param string $mode - * @param string $status - * @param string $append - * @param int $shadow - * @access public - * @return array - */ - public function getProductPairsWithProgram($programID = 0, $mode = 'assign', $status = 'all', $append = '', $shadow = 0) - { - /* Get the top programID. */ - if($programID) - { - $program = $this->getByID($programID); - $path = array_filter(explode(',', $program->path)); - $programID = current($path); - } + if(!$withProgram) return $dao->fetchPairs('id', 'name'); - /* When mode equals assign and programID equals 0, you can query the standalone product. */ - if(!empty($append) and is_array($append)) $append = implode(',', $append); - $views = empty($append) ? $this->app->user->view->products : $this->app->user->view->products . ",$append"; - - $products = $this->dao->select("t1.id, t1.program, CONCAT(IF(t2.name IS NOT NULL, t2.name, ''), '/', t1.name) AS name")->from(TABLE_PRODUCT)->alias('t1') - ->leftJoin(TABLE_PROJECT)->alias('t2')->on('t1.program = t2.id') - ->where('t1.deleted')->eq('0') - ->andWhere('t1.vision')->eq($this->config->vision) - ->beginIF($shadow !== 'all')->andWhere('t1.shadow')->eq((int)$shadow)->fi() - ->beginIF($mode == 'assign')->andWhere('t1.program')->eq($programID)->fi() - ->beginIF(strpos($status, 'noclosed') !== false)->andWhere('t1.status')->ne('closed')->fi() - ->beginIF(!$this->app->user->admin)->andWhere('t1.id')->in($views)->fi() - ->orderBy('t1.program, t1.order_asc') - ->fetchGroup('program'); + $products = $dao->orderBy('program,order')->fetchGroup('program'); + $productPrograms = $this->dao->select('id, name')->from(TABLE_PROJECT)->where('type')->eq('program')->andWhere('deleted')->eq('0')->fetchPairs(); /* Put products of current program first.*/ if($mode != 'assign' && $programID) { $currentProgramProducts = $products[$programID]; - unset($products[$programID]); - array_unshift($products, $currentProgramProducts); } $productPairs = array(); foreach($products as $programProducts) { - foreach($programProducts as $product) $productPairs[$product->id] = $product->name; + foreach($programProducts as $product) + { + $programName = zget($productPrograms, $product->program, '') . '/'; + $productPairs[$product->id] = $programName . $product->name; + } } return $productPairs; } - /** * Get program by id. * diff --git a/module/project/control.php b/module/project/control.php index 0d712bdd9a..b3869cf63e 100755 --- a/module/project/control.php +++ b/module/project/control.php @@ -283,7 +283,8 @@ class project extends control if($objectType == 'program') { - $allProducts = array(0 => '') + $this->program->getProductPairsWithProgram($selectedProgramID, 'all', 'noclosed'); + $withProgram = $this->config->systemMode == 'ALM' ? true : false; + $allProducts = array(0 => '') + $this->program->getProductPairs($selectedProgramID, 'all', 'noclosed', '', 0, $withProgram); $data['allProducts'] = html::select("products[]", $allProducts, '', "class='form-control chosen' onchange='loadBranches(this)'"); $data['plans'] = html::select('plans[][][]', '', '', 'class=\'form-control chosen\' multiple'); } @@ -603,13 +604,16 @@ class project extends control $this->config->executionCommonList[$this->app->getClientLang()][0] : $this->config->executionCommonList[$this->app->getClientLang()][1]; + $withProgram = $this->config->systemMode == 'ALM' ? true : false; + $allProducts = array('0' => '') + $this->program->getProductPairs(0, 'all', 'noclosed', '', $shadow, $withProgram); + $this->view->title = $this->lang->project->create; $this->view->gobackLink = (isset($output['from']) and $output['from'] == 'global') ? $this->createLink('project', 'browse') : ''; $this->view->pmUsers = $this->loadModel('user')->getPairs('noclosed|nodeleted|pmfirst'); $this->view->users = $this->user->getPairs('noclosed|nodeleted'); $this->view->copyProjects = $this->project->getPairsByModel($model); $this->view->products = $products; - $this->view->allProducts = array('0' => '') + $this->program->getProductPairsWithProgram(0, 'all', 'noclosed', '', $shadow); + $this->view->allProducts = $allProducts; $this->view->productPlans = array('0' => '') + $productPlans; $this->view->branchGroups = $this->loadModel('branch')->getByProducts(array_keys($products), 'noclosed'); $this->view->programID = $programID; @@ -713,12 +717,14 @@ class project extends control return $this->send(array('result' => 'success', 'message' => $this->lang->saveSuccess, 'locate' => $locateLink)); } + $withProgram = $this->config->systemMode == 'ALM' ? true : false; + $linkedBranches = array(); $linkedBranchList = array(); $productPlans = array(0 => ''); $branches = $this->project->getBranchesByProject($projectID); $linkedProductIdList = empty($branches) ? '' : array_keys($branches); - $allProducts = $this->program->getProductPairsWithProgram($project->parent, 'all', 'noclosed'); + $allProducts = $this->program->getProductPairs($project->parent, 'all', 'noclosed', '', 0, $withProgram); $linkedProducts = $this->loadModel('product')->getProducts($projectID, 'all', '', true, $linkedProductIdList); $parentProject = $this->program->getByID($project->parent); $plans = $this->productplan->getGroupByProduct(array_keys($linkedProducts), 'skipParent|unexpired'); @@ -2228,43 +2234,48 @@ class project extends control } } - $branchGroups = $this->loadModel('branch')->getByProducts(array_keys($allProducts), 'ignoreNormal|noclosed'); - $productsGroupByProgram = $this->product->getProductsGroupByProgram(); - - $currentProducts = array(); - $otherProducts = array(); - foreach($productsGroupByProgram as $programID => $programProducts) + $branchGroups = $this->loadModel('branch')->getByProducts(array_keys($allProducts), 'ignoreNormal|noclosed'); + if($this->config->systemMode == 'ALM') { - if($programID != $project->parent) - { - foreach($programProducts as $productID => $productName) - { - if(!empty($branchGroups[$productID])) - { - foreach($branchGroups[$productID] as $branchID => $branchName) - { - if(isset($linkedProducts[$productID]) and isset($linkedBranches[$productID][$branchID])) continue; + $productsGroupByProgram = $this->product->getProductsGroupByProgram(); - $otherProducts["{$productID}_{$branchID}"] = $productName . '_' . $branchName; + $currentProducts = array(); + $otherProducts = array(); + foreach($productsGroupByProgram as $programID => $programProducts) + { + if($programID != $project->parent) + { + foreach($programProducts as $productID => $productName) + { + if(!empty($branchGroups[$productID])) + { + foreach($branchGroups[$productID] as $branchID => $branchName) + { + if(isset($linkedProducts[$productID]) and isset($linkedBranches[$productID][$branchID])) continue; + + $otherProducts["{$productID}_{$branchID}"] = $productName . '_' . $branchName; + } + } + else + { + if(isset($linkedProducts[$productID])) continue; + $otherProducts[$productID] = $productName; } } - else - { - if(isset($linkedProducts[$productID])) continue; - $otherProducts[$productID] = $productName; - } + } + else + { + $currentProducts += $programProducts; } } - else - { - $currentProducts += $programProducts; - } + + $this->view->currentProducts = $currentProducts; + $this->view->otherProducts = $otherProducts; } /* Assign. */ $this->view->title = $this->lang->project->manageProducts . $this->lang->colon . $project->name; $this->view->project = $project; - $this->view->currentProducts = $currentProducts; $this->view->linkedProducts = $linkedProducts; $this->view->linkedBranches = $linkedBranches; $this->view->branches = $branches; @@ -2275,7 +2286,6 @@ class project extends control $this->view->branchGroups = $branchGroups; $this->view->allBranches = $this->branch->getByProducts(array_keys($allProducts), 'ignoreNormal'); $this->view->allProducts = $allProducts; - $this->view->otherProducts = $otherProducts; $this->display(); } diff --git a/module/project/view/manageproducts.html.php b/module/project/view/manageproducts.html.php index ca1c6fe424..5bac169764 100644 --- a/module/project/view/manageproducts.html.php +++ b/module/project/view/manageproducts.html.php @@ -23,9 +23,11 @@ project->manageProducts;?>
+ config->systemMode == 'ALM'):?>
+
@@ -46,9 +48,34 @@
- - - + + config->systemMode == 'ALM') + { + unset($currentProducts[$productID]); + } + else + { + unset($allProducts[$productID]); + } + } + + if(isset($branchGroups[$productID][$branchID])) unset($branchGroups[$productID][$branchID]); + + if(isset($branchGroups[$productID]) and empty($branchGroups[$productID])) + { + if($this->config->systemMode == 'ALM') + { + unset($currentProducts[$productID]); + } + else + { + unset($allProducts[$productID]); + } + } + ?> @@ -57,7 +84,10 @@
project->unlinkedProducts;?>
- $productName):?> + config->systemMode == 'ALM' ? $currentProducts : $allProducts; + foreach($unlinkedProducts as $productID => $productName): + ?>
'>
@@ -75,6 +105,8 @@
+ + config->systemMode == 'ALM'):?> +
From 37caf8646179c0ba87ac747d76a0b22eb816edc6 Mon Sep 17 00:00:00 2001 From: daitingting Date: Tue, 15 Nov 2022 06:58:54 +0000 Subject: [PATCH 52/60] * Fix bug #29665. --- module/project/control.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/module/project/control.php b/module/project/control.php index b3869cf63e..a316d3233c 100755 --- a/module/project/control.php +++ b/module/project/control.php @@ -605,7 +605,7 @@ class project extends control $this->config->executionCommonList[$this->app->getClientLang()][1]; $withProgram = $this->config->systemMode == 'ALM' ? true : false; - $allProducts = array('0' => '') + $this->program->getProductPairs(0, 'all', 'noclosed', '', $shadow, $withProgram); + $allProducts = array('0' => '') + $this->program->getProductPairs($programID, 'all', 'noclosed', '', $shadow, $withProgram); $this->view->title = $this->lang->project->create; $this->view->gobackLink = (isset($output['from']) and $output['from'] == 'global') ? $this->createLink('project', 'browse') : ''; From f950d1fa826534b7b994c1ed8f897d375de8f5ef Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E6=80=A1=E6=A0=8B?= Date: Tue, 15 Nov 2022 15:03:32 +0800 Subject: [PATCH 53/60] * fix bug #76334. --- module/common/lang/menu.php | 4 ++-- module/project/model.php | 11 +++++++++++ 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/module/common/lang/menu.php b/module/common/lang/menu.php index d5a9edadfd..524e31a066 100644 --- a/module/common/lang/menu.php +++ b/module/common/lang/menu.php @@ -215,7 +215,7 @@ $lang->scrum->menu->devops = array('link' => "{$lang->repo->common}|repo|br $lang->scrum->menu->build = array('link' => "{$lang->build->common}|project|build|project=%s", 'subModule' => 'projectbuild'); $lang->scrum->menu->release = array('link' => "{$lang->release->common}|projectrelease|browse|project=%s", 'subModule' => 'projectrelease'); $lang->scrum->menu->dynamic = array('link' => "$lang->dynamic|project|dynamic|project=%s"); -$lang->scrum->menu->settings = array('link' => "$lang->settings|project|view|project=%s", 'subModule' => 'tree,stakeholder', 'alias' => 'edit,manageproducts,group,managemembers,manageview,managepriv,whitelist,addwhitelist,team,managerepo'); +$lang->scrum->menu->settings = array('link' => "$lang->settings|project|view|project=%s", 'subModule' => 'tree,stakeholder', 'alias' => 'edit,manageproducts,group,managemembers,manageview,managepriv,whitelist,addwhitelist,team,managerepo', 'exclude' => 'tree-browsetask'); $lang->scrum->menu->storyGroup['dropMenu'] = new stdclass(); $lang->scrum->menu->storyGroup['dropMenu']->story = array('link' => "{$lang->SRCommon}|projectstory|story|projectID=%s&productID=%s", 'subModule' => 'projectstory,tree'); @@ -253,7 +253,7 @@ $lang->scrum->menu->settings['subMenu']->members = array('link' => "{$lang-> $lang->scrum->menu->settings['subMenu']->whitelist = array('link' => "{$lang->whitelist}|project|whitelist|project=%s", 'subModule' => 'personnel'); $lang->scrum->menu->settings['subMenu']->stakeholder = array('link' => "{$lang->stakeholder->common}|stakeholder|browse|project=%s", 'subModule' => 'stakeholder'); $lang->scrum->menu->settings['subMenu']->group = array('link' => "{$lang->priv}|project|group|project=%s", 'alias' => 'group,manageview,managepriv'); -$lang->scrum->menu->settings['subMenu']->module = array('link' => "{$lang->module}|tree|browse|product=%s&view=story", 'subModule' => 'tree'); +$lang->scrum->menu->settings['subMenu']->module = array('link' => "{$lang->module}|tree|browse|product=%s&view=story"); $lang->scrum->menu->settings['subMenu']->managerepo = array('link' => "{$lang->repo->codeRepo}|project|managerepo|project=%s"); /* Waterfall menu. */ diff --git a/module/project/model.php b/module/project/model.php index 58f2142c85..472a23d353 100644 --- a/module/project/model.php +++ b/module/project/model.php @@ -2849,6 +2849,17 @@ class projectModel extends model $this->lang->project->menuOrder = $this->lang->$navGroup->menuOrder; $this->lang->project->dividerMenu = $this->lang->$navGroup->dividerMenu; + if(empty($project->hasProduct)) + { + unset($this->lang->project->menu->settings['subMenu']->products); + } + else + { + unset($this->lang->project->menu->settings['subMenu']->module); + unset($this->lang->project->menu->settings['subMenu']->managerepo); + unset($this->lang->project->menu->projectplan); + } + $this->loadModel('common')->resetProjectPriv($projectID); } From 69bd73c271391558687d7030b0baafc261ed638e Mon Sep 17 00:00:00 2001 From: lanzongjun Date: Tue, 15 Nov 2022 15:04:22 +0800 Subject: [PATCH 54/60] * finish task #76338 --- module/bug/view/view.html.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/module/bug/view/view.html.php b/module/bug/view/view.html.php index 932f64e203..77767bbee6 100644 --- a/module/bug/view/view.html.php +++ b/module/bug/view/view.html.php @@ -9,6 +9,7 @@ * @version $Id: view.html.php 4728 2013-05-03 06:14:34Z chencongzhi520@gmail.com $ * @link http://www.zentao.net */ + ?> @@ -161,7 +162,7 @@ bug->fromCase;?> case) echo html::a(helper::createLink('testcase', 'view', "caseID=$bug->case&version=$bug->caseVersion", '', true), " {$lang->bug->fromCase}$lang->colon$bug->case", '', isonlybody() ? '' : "data-toggle='modal' data-type='iframe' data-width='80%'");?> - '> + multiple)) echo 'hide'?>'> bug->productplan;?> plan or !common::printLink('productplan', 'view', "planID=$bug->plan&type=bug", $bug->planName)) echo $bug->planName;?> From cd7a5fd3906135e2287122d39e41eebbb689a395 Mon Sep 17 00:00:00 2001 From: mayue Date: Tue, 15 Nov 2022 15:12:15 +0800 Subject: [PATCH 55/60] * Fix bug #29725. --- module/execution/control.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/module/execution/control.php b/module/execution/control.php index 50b7d6892f..6d5f75f0c4 100644 --- a/module/execution/control.php +++ b/module/execution/control.php @@ -180,7 +180,7 @@ class execution extends control /* Save to session. */ $uri = $this->app->getURI(true); - $this->app->session->set('taskList', $uri, 'execution'); + $this->app->session->set('taskList', $uri . "#app={$this->app->tab}", 'execution'); /* Process the order by field. */ if(!$orderBy) $orderBy = $this->cookie->executionTaskOrder ? $this->cookie->executionTaskOrder : 'status,id_desc'; From 0e6c9a88d3e4686577688a2b3e4e3997414fd974 Mon Sep 17 00:00:00 2001 From: lanzongjun Date: Tue, 15 Nov 2022 15:23:49 +0800 Subject: [PATCH 56/60] * finish task #76330 --- module/execution/control.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/module/execution/control.php b/module/execution/control.php index 50b7d6892f..7e5db92d26 100644 --- a/module/execution/control.php +++ b/module/execution/control.php @@ -1844,7 +1844,7 @@ class execution extends control $this->view->code = $code; $this->view->team = $team; $this->view->teams = array(0 => '') + $this->execution->getCanCopyObjects((int)$projectID); - $this->view->allProjects = array(0 => '') + $this->project->getPairsByModel('all', 0, 'noclosed'); + $this->view->allProjects = array(0 => '') + $this->project->getPairsByModel('all', 0, 'noclosed|multiple'); $this->view->copyProjects = $copyProjects; $this->view->copyExecutions = array('' => '') + $this->execution->getList($copyProjectID); $this->view->executionID = $executionID; From df7841c7b7455d4089797d166bb4ba6f82a76fef Mon Sep 17 00:00:00 2001 From: lanzongjun Date: Tue, 15 Nov 2022 15:50:05 +0800 Subject: [PATCH 57/60] * finish task #75920 --- module/execution/view/story.html.php | 3 +++ 1 file changed, 3 insertions(+) diff --git a/module/execution/view/story.html.php b/module/execution/view/story.html.php index cbab8e4866..88c6ecc9d7 100644 --- a/module/execution/view/story.html.php +++ b/module/execution/view/story.html.php @@ -254,6 +254,7 @@ { if(!$execution->hasProduct and !$execution->multiple and $value->id == 'plan') continue; if(!$execution->hasProduct and !$execution->multiple and $value->id == 'stage') continue; + if(!$execution->hasProduct and !$execution->multiple and $storyType == 'requirement' and $value->id == 'taskCount') continue; if($value->show) { $this->datatable->printHead($value, $orderBy, $vars, $canBatchAction); @@ -273,6 +274,7 @@ { if(!$execution->hasProduct and !$execution->multiple and $value->id == 'plan') continue; if(!$execution->hasProduct and !$execution->multiple and $value->id == 'stage') continue; + if(!$execution->hasProduct and !$execution->multiple and $storyType == 'requirement' and $value->id == 'taskCount') continue; $this->story->printCell($value, $story, $users, $branchOption, $storyStages, $modulePairs, $storyTasks, $storyBugs, $storyCases, $useDatatable ? 'datatable' : 'table', $storyType, $execution, $showBranch); } ?> @@ -288,6 +290,7 @@ { if(!$execution->hasProduct and !$execution->multiple and $value->id == 'plan') continue; if(!$execution->hasProduct and !$execution->multiple and $value->id == 'stage') continue; + if(!$execution->hasProduct and !$execution->multiple and $storyType == 'requirement' and $value->id == 'taskCount') continue; $this->story->printCell($value, $child, $users, $branchOption, $storyStages, $modulePairs, $storyTasks, $storyBugs, $storyCases, $useDatatable ? 'datatable' : 'table', $storyType, $execution); }?> From 85c8e84c7910c30f535a45ce0d47e26df6fe8c2f Mon Sep 17 00:00:00 2001 From: xieqiyu Date: Tue, 15 Nov 2022 15:56:34 +0800 Subject: [PATCH 58/60] * Fix bug#29808. --- module/tree/control.php | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/module/tree/control.php b/module/tree/control.php index 769bc0a4f6..1041211554 100644 --- a/module/tree/control.php +++ b/module/tree/control.php @@ -400,15 +400,16 @@ class tree extends control $this->view->branch = $branch; $this->view->users = $this->loadModel('user')->getPairs('noclosed|nodeleted', $module->owner); - $showProduct = strpos('story|bug|case', $type) !== false ? true : false; - $this->view->showProduct = $showProduct; + $showProduct = strpos('story|bug|case', $type) !== false ? true : false; if($showProduct) { $product = $this->loadModel('product')->getById($module->root); if($product->type != 'normal') $this->view->branches = $this->loadModel('branch')->getPairs($module->root, 'withClosed'); $this->view->product = $product; $this->view->products = $this->product->getPairs('', $product->program); + if($product->shadow) $showProduct = false; } + $this->view->showProduct = $showProduct; /* Remove self and childs from the $optionMenu. Because it's parent can't be self or childs. */ $childs = $this->tree->getAllChildId($moduleID); From 13c945cd073cc28af10bfb195334863e3136c2bc Mon Sep 17 00:00:00 2001 From: liuhong Date: Tue, 15 Nov 2022 08:26:11 +0000 Subject: [PATCH 59/60] * Adjust code feedback #1422. --- module/branch/model.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/module/branch/model.php b/module/branch/model.php index 47bbc4f4ed..5c62d826d8 100644 --- a/module/branch/model.php +++ b/module/branch/model.php @@ -126,7 +126,7 @@ class branchModel extends model if($executionID) { - $branches = array('0' => $this->lang->branch->main, 'all' => $this->lang->branch->all) + $branches; + $branches = array('all' => $this->lang->branch->all, '0' => $this->lang->branch->main) + $branches; return $branches; } From cc12e457555fda0eb52c217292062c48bca9f010 Mon Sep 17 00:00:00 2001 From: daitingting Date: Tue, 15 Nov 2022 08:26:43 +0000 Subject: [PATCH 60/60] g * Adjust import release list. --- module/kanban/css/importrelease.css | 2 ++ module/kanban/view/importrelease.html.php | 32 ++++++++++++++--------- module/release/lang/de.php | 2 ++ module/release/lang/en.php | 2 ++ module/release/lang/fr.php | 2 ++ module/release/lang/zh-cn.php | 2 ++ module/release/view/browse.html.php | 4 +-- 7 files changed, 32 insertions(+), 14 deletions(-) create mode 100644 module/kanban/css/importrelease.css diff --git a/module/kanban/css/importrelease.css b/module/kanban/css/importrelease.css new file mode 100644 index 0000000000..d0ac33b985 --- /dev/null +++ b/module/kanban/css/importrelease.css @@ -0,0 +1,2 @@ +#releaseList > tbody > tr:hover{background-color: unset!important;} +#product_chosen {width: 45% !important} diff --git a/module/kanban/view/importrelease.html.php b/module/kanban/view/importrelease.html.php index c8e5bf342a..16f838c13f 100644 --- a/module/kanban/view/importrelease.html.php +++ b/module/kanban/view/importrelease.html.php @@ -33,7 +33,7 @@
- +
- - + + + + builds);?> + builds as $build):?> - - - - - - - - + + + + + + + @@ -83,5 +92,4 @@
noData;?>
- diff --git a/module/release/lang/de.php b/module/release/lang/de.php index 5b9df0f6a5..81723c68b5 100644 --- a/module/release/lang/de.php +++ b/module/release/lang/de.php @@ -38,6 +38,8 @@ $lang->release->product = $lang->productCommon; $lang->release->branch = 'Platform/Branch'; $lang->release->project = 'Project'; $lang->release->build = 'Build'; +$lang->release->includedBuild = 'Included Build'; +$lang->release->relatedProject = 'Related Project'; $lang->release->name = 'Name'; $lang->release->marker = 'Meilensteine'; $lang->release->date = 'Datum'; diff --git a/module/release/lang/en.php b/module/release/lang/en.php index 14f54db539..c480cbd021 100644 --- a/module/release/lang/en.php +++ b/module/release/lang/en.php @@ -39,6 +39,8 @@ $lang->release->product = $lang->productCommon; $lang->release->branch = 'Platform/Branch'; $lang->release->project = 'Project'; $lang->release->build = 'Build'; +$lang->release->includedBuild = 'Included Build'; +$lang->release->relatedProject = 'Related Project'; $lang->release->name = 'Name'; $lang->release->marker = 'Milestone'; $lang->release->date = 'Release Date'; diff --git a/module/release/lang/fr.php b/module/release/lang/fr.php index 1f5dbdf9e1..c27bfe6121 100644 --- a/module/release/lang/fr.php +++ b/module/release/lang/fr.php @@ -38,6 +38,8 @@ $lang->release->product = $lang->productCommon; $lang->release->branch = 'Plateforme/Branche'; $lang->release->project = 'Project'; $lang->release->build = 'Build'; +$lang->release->includedBuild = 'Included Build'; +$lang->release->relatedProject = 'Related Project'; $lang->release->name = 'Nom'; $lang->release->marker = 'Etape Importante'; $lang->release->date = 'Date Release'; diff --git a/module/release/lang/zh-cn.php b/module/release/lang/zh-cn.php index 6689db4489..57af6338f2 100644 --- a/module/release/lang/zh-cn.php +++ b/module/release/lang/zh-cn.php @@ -39,6 +39,8 @@ $lang->release->product = $lang->productCommon; $lang->release->branch = '平台/分支'; $lang->release->project = '所属项目'; $lang->release->build = '版本'; +$lang->release->includedBuild = '包含版本'; +$lang->release->relatedProject = '对应项目'; $lang->release->name = '发布名称'; $lang->release->marker = '里程碑'; $lang->release->date = '发布日期'; diff --git a/module/release/view/browse.html.php b/module/release/view/browse.html.php index 3162da013b..b78e2b51fc 100644 --- a/module/release/view/browse.html.php +++ b/module/release/view/browse.html.php @@ -51,8 +51,8 @@ - - + +
@@ -43,32 +43,41 @@ idAB;?> release->name;?>release->project;?>release->build;?>release->includedBuild;?>release->relatedProject;?> release->date;?>
+ +
id);?>
+ + name;?> + + name;?> + name;?> projectName;?>buildName;?>date;?>name;?>projectName;?>date;?>
release->id;?> release->name;?>release->build;?>release->project;?>release->includedBuild;?>release->relatedProject;?> release->status;?> release->date;?>