From ea1b23178373cc3d3e123b5ef899dc945697f8fa Mon Sep 17 00:00:00 2001 From: lanzongjun Date: Wed, 30 Nov 2022 13:14:27 +0800 Subject: [PATCH 1/3] * Finish Task #77799 --- module/execution/control.php | 19 ++++++++++++++++--- module/execution/lang/de.php | 5 +++-- module/execution/lang/en.php | 5 +++-- module/execution/lang/fr.php | 5 +++-- module/execution/lang/zh-cn.php | 5 +++-- module/execution/model.php | 17 +++++++++-------- 6 files changed, 37 insertions(+), 19 deletions(-) diff --git a/module/execution/control.php b/module/execution/control.php index eed8523a97..931b219099 100644 --- a/module/execution/control.php +++ b/module/execution/control.php @@ -898,7 +898,7 @@ class execution extends control $storyBugs = $this->loadModel('bug')->getStoryBugCounts($storyIdList, $executionID); $storyCases = $this->loadModel('testcase')->getStoryCaseCounts($storyIdList); - $plans = $this->execution->getPlans($products, 'skipParent|withMainPlan'); + $plans = $this->execution->getPlans($products, 'skipParent|withMainPlan', $executionID); $allPlans = array('' => ''); if(!empty($plans)) { @@ -1645,7 +1645,20 @@ class execution extends control } else { - return print(js::confirm($this->lang->execution->importPlanStory, inlink('create', "projectID=$projectID&executionID=$executionID©ExecutionID=&planID=$planID&confirm=yes"), inlink('create', "projectID=$projectID&executionID=$executionID"))); + $executionProductList = $this->loadModel('product')->getProducts($executionID); + $hasMultiBranchProduct = false; + foreach($executionProductList as $executionProduct) + { + if($executionProduct->type != 'normal') + { + $hasMultiBranchProduct = true; + break; + } + } + $replaceString = $hasMultiBranchProduct ? $this->lang->execution->importPlanStoryEx : ''; + $importPlanStoryTips = sprintf($this->lang->execution->importPlanStory, $replaceString); + + return print(js::confirm($importPlanStoryTips, inlink('create', "projectID=$projectID&executionID=$executionID©ExecutionID=&planID=$planID&confirm=yes"), inlink('create', "projectID=$projectID&executionID=$executionID"))); } } @@ -4122,10 +4135,10 @@ class execution extends control if(!empty($planStory)) { $projectProducts = $this->loadModel('project')->getBranchesByProject($executionID); - $projectProducts = zget($projectProducts, $productID, array()); foreach($planStory as $id => $story) { + $projectProducts = zget($projectProducts, $story->product, array()); if($story->status == 'draft' or $story->status == 'reviewing' or (!empty($projectProducts) and !isset($projectProducts[$story->branch]))) { $count++; diff --git a/module/execution/lang/de.php b/module/execution/lang/de.php index 560dce5505..89813a0404 100644 --- a/module/execution/lang/de.php +++ b/module/execution/lang/de.php @@ -276,8 +276,9 @@ $lang->execution->treeViewTask = 'Tree View Task'; $lang->execution->treeViewStory = 'Tree View Story'; $lang->execution->storyKanban = 'Story Kanban'; $lang->execution->storySort = 'Story sortieren'; -$lang->execution->importPlanStory = '' . $lang->executionCommon . ' wurde erstellt!\nMöchten Sie Storys aus dem Plan importieren?'; -$lang->execution->importEditPlanStory = $lang->executionCommon . ' is edited!\nDo you want to import stories that have been linked to the plan? The stories in the draft will be automatically filtered out when imported.'; +$lang->execution->importPlanStory = $lang->executionCommon . ' is created!\nDo you want to import stories that have been linked to the plan? The stories in the draft will be automatically filtered %s out when imported.'; +$lang->execution->importEditPlanStory = $lang->executionCommon . ' is edited!\nDo you want to import stories that have been linked to the plan? The stories in the draft will be automatically filtered %s out when imported.'; +$lang->execution->importPlanStoryEx = "and only the activation story for the branch associated with this {$lang->executionCommon}"; $lang->execution->needLinkProducts = 'The execution has not been linked with any product, and the related functions cannot be used. Please link the product first and try again.'; $lang->execution->iteration = 'Iteration'; $lang->execution->iterationInfo = '%s Iterationen'; diff --git a/module/execution/lang/en.php b/module/execution/lang/en.php index 94134d1aca..13337372b9 100644 --- a/module/execution/lang/en.php +++ b/module/execution/lang/en.php @@ -276,8 +276,9 @@ $lang->execution->treeViewTask = 'Tree View Task'; $lang->execution->treeViewStory = 'Tree View Story'; $lang->execution->storyKanban = 'Story Kanban'; $lang->execution->storySort = 'Rank Story'; -$lang->execution->importPlanStory = $lang->executionCommon . ' is created!\nDo you want to import stories that have been linked to the plan? The stories in the draft will be automatically filtered out when imported.'; -$lang->execution->importEditPlanStory = $lang->executionCommon . ' is edited!\nDo you want to import stories that have been linked to the plan? The stories in the draft will be automatically filtered out when imported.'; +$lang->execution->importPlanStory = $lang->executionCommon . ' is created!\nDo you want to import stories that have been linked to the plan? The stories in the draft will be automatically filtered %s out when imported.'; +$lang->execution->importEditPlanStory = $lang->executionCommon . ' is edited!\nDo you want to import stories that have been linked to the plan? The stories in the draft will be automatically filtered %s out when imported.'; +$lang->execution->importPlanStoryEx = "and only the activation story for the branch associated with this {$lang->executionCommon}"; $lang->execution->needLinkProducts = 'The execution has not been linked with any product, and the related functions cannot be used. Please link the product first and try again.'; $lang->execution->iteration = 'Iterations'; $lang->execution->iterationInfo = '%s Iterations'; diff --git a/module/execution/lang/fr.php b/module/execution/lang/fr.php index e791859819..4e33841cac 100644 --- a/module/execution/lang/fr.php +++ b/module/execution/lang/fr.php @@ -276,8 +276,9 @@ $lang->execution->treeViewTask = 'Seulement les Tâches'; $lang->execution->treeViewStory = 'Seulement les Stories'; $lang->execution->storyKanban = 'Story Kanban'; $lang->execution->storySort = 'Rang Story'; -$lang->execution->importPlanStory = $lang->executionCommon . ' est créé!\nVoulez-vous importer des stories qui ont été ajoutées au Plan ?'; -$lang->execution->importEditPlanStory = $lang->executionCommon . ' is edited!\nDo you want to import stories that have been linked to the plan? The stories in the draft will be automatically filtered out when imported.'; +$lang->execution->importPlanStory = $lang->executionCommon . ' is created!\nDo you want to import stories that have been linked to the plan? The stories in the draft will be automatically filtered %s out when imported.'; +$lang->execution->importEditPlanStory = $lang->executionCommon . ' is edited!\nDo you want to import stories that have been linked to the plan? The stories in the draft will be automatically filtered %s out when imported.'; +$lang->execution->importPlanStoryEx = "and only the activation story for the branch associated with this {$lang->executionCommon}"; $lang->execution->needLinkProducts = 'The execution has not been linked with any product, and the related functions cannot be used. Please link the product first and try again.'; $lang->execution->iteration = 'Itérations'; $lang->execution->iterationInfo = '%s Itérations'; diff --git a/module/execution/lang/zh-cn.php b/module/execution/lang/zh-cn.php index d8ade41c5e..a77b5f5fea 100644 --- a/module/execution/lang/zh-cn.php +++ b/module/execution/lang/zh-cn.php @@ -276,8 +276,9 @@ $lang->execution->treeViewTask = '树状图查看任务'; $lang->execution->treeViewStory = "树状图查看{$lang->SRCommon}"; $lang->execution->storyKanban = "{$lang->SRCommon}看板"; $lang->execution->storySort = "{$lang->SRCommon}排序"; -$lang->execution->importPlanStory = '创建' . $lang->executionCommon . '成功!\n是否导入计划关联的相关' . $lang->SRCommon . '?导入时将自动过滤掉草稿状态的' . $lang->SRCommon . '。'; -$lang->execution->importEditPlanStory = '编辑' . $lang->executionCommon . '成功!\n是否导入计划关联的相关' . $lang->SRCommon . '?导入时将自动过滤掉草稿状态的' . $lang->SRCommon . '。'; +$lang->execution->importPlanStory = '创建' . $lang->executionCommon . '成功!\n是否导入计划关联的相关' . $lang->SRCommon . '?导入时将%s自动过滤掉草稿状态的' . $lang->SRCommon . '。'; +$lang->execution->importEditPlanStory = '编辑' . $lang->executionCommon . '成功!\n是否导入计划关联的相关' . $lang->SRCommon . '?导入时将%s自动过滤掉草稿状态的' . $lang->SRCommon . '。'; +$lang->execution->importPlanStoryEx = "只关联本{$lang->executionCommon}所关联分支的激活需求和"; $lang->execution->needLinkProducts = '该执行还未关联任何产品,相关功能无法使用,请先关联产品后再试。'; $lang->execution->iteration = '版本迭代'; $lang->execution->iterationInfo = '迭代%s次'; diff --git a/module/execution/model.php b/module/execution/model.php index 4a202a0bed..171b9b1700 100755 --- a/module/execution/model.php +++ b/module/execution/model.php @@ -2882,19 +2882,21 @@ class executionModel extends model */ public function linkStories($executionID) { - $plans = $this->dao->select('plan')->from(TABLE_PROJECTPRODUCT) + $plans = $this->dao->select('product, plan')->from(TABLE_PROJECTPRODUCT) ->where('project')->eq($executionID) - ->fetchPairs('plan'); + ->fetchPairs('product', 'plan'); $planStories = array(); $planProducts = array(); $this->loadModel('story'); if(!empty($plans)) { - foreach($plans as $planIdList) + $executionProducts = $this->loadModel('project')->getBranchesByProject($executionID); + foreach($plans as $productID => $planIdList) { if(empty($planIdList)) continue; $planIdList = explode(',', $planIdList); + $executionProducts = zget($executionProducts, $productID, array()); foreach($planIdList as $planID) { $planStory = $this->story->getPlanStories($planID); @@ -2902,7 +2904,7 @@ class executionModel extends model { foreach($planStory as $id => $story) { - if($story->status == 'draft' or $story->status == 'reviewing') + if($story->status == 'draft' or $story->status == 'reviewing' or (!empty($executionProducts) and !isset($executionProducts[$story->branch]))) { unset($planStory[$id]); continue; @@ -4623,14 +4625,13 @@ class executionModel extends model $branchGroups = $this->getBranchByProduct(array_keys($products), $executionID, 'noclosed'); foreach($branchGroups as $branches) { - foreach($branches as $branchID => $branchName) $branchIdList[$branchID] = $branchID; + foreach($branches as $branchID => $branchName) $branchIdList[] = $branchID; } - $branchQuery = ''; + $branchQuery = '('; if(!empty($branchIdList)) { - $branchQuery .= '('; - $branchCount = count($branchIdList); + $branchCount = count($branchIdList); foreach($branchIdList as $index => $branchID) { $branchQuery .= "FIND_IN_SET('$branchID', branch)"; From 9eebd0051dcec705e39a57600e3b883313323c75 Mon Sep 17 00:00:00 2001 From: lanzongjun Date: Wed, 30 Nov 2022 13:44:25 +0800 Subject: [PATCH 2/3] * Finish Task #77799 --- module/execution/control.php | 19 +++- module/execution/lang/de.php | 155 ++++++++++++++++---------------- module/execution/lang/en.php | 155 ++++++++++++++++---------------- module/execution/lang/fr.php | 155 ++++++++++++++++---------------- module/execution/lang/zh-cn.php | 155 ++++++++++++++++---------------- module/productplan/model.php | 5 +- 6 files changed, 332 insertions(+), 312 deletions(-) diff --git a/module/execution/control.php b/module/execution/control.php index 931b219099..388e4ede85 100644 --- a/module/execution/control.php +++ b/module/execution/control.php @@ -1655,8 +1655,8 @@ class execution extends control break; } } - $replaceString = $hasMultiBranchProduct ? $this->lang->execution->importPlanStoryEx : ''; - $importPlanStoryTips = sprintf($this->lang->execution->importPlanStory, $replaceString); + + $importPlanStoryTips = $hasMultiBranchProduct ? $this->lang->execution->importBranchPlanStory : $this->lang->execution->importPlanStory; return print(js::confirm($importPlanStoryTips, inlink('create', "projectID=$projectID&executionID=$executionID©ExecutionID=&planID=$planID&confirm=yes"), inlink('create', "projectID=$projectID&executionID=$executionID"))); } @@ -1917,7 +1917,20 @@ class execution extends control } elseif(!empty($newPlans)) { - return print(js::confirm($this->lang->execution->importEditPlanStory, inlink('edit', "executionID=$executionID&action=edit&extra=&newPlans=$newPlans&confirm=yes"), inlink('view', "executionID=$executionID"))); + $executionProductList = $this->loadModel('product')->getProducts($executionID); + $hasMultiBranchProduct = false; + foreach($executionProductList as $executionProduct) + { + if($executionProduct->type != 'normal') + { + $hasMultiBranchProduct = true; + break; + } + } + + $importEditPlanStoryTips = $hasMultiBranchProduct ? $this->lang->execution->importBranchEditPlanStory : $this->lang->execution->importEditPlanStory; + + return print(js::confirm($importEditPlanStoryTips, inlink('edit', "executionID=$executionID&action=edit&extra=&newPlans=$newPlans&confirm=yes"), inlink('view', "executionID=$executionID"))); } /* Set menu. */ diff --git a/module/execution/lang/de.php b/module/execution/lang/de.php index 89813a0404..4059d58d1f 100644 --- a/module/execution/lang/de.php +++ b/module/execution/lang/de.php @@ -209,83 +209,84 @@ $lang->execution->burnByList['estimate'] = "View by plan hours"; $lang->execution->burnByList['storyPoint'] = 'View by story point'; /* Method list. */ -$lang->execution->index = "Home"; -$lang->execution->task = 'Aufgaben'; -$lang->execution->groupTask = 'Nach Gruppen'; -$lang->execution->story = 'Storys'; -$lang->execution->qa = 'QA'; -$lang->execution->bug = 'Bugs'; -$lang->execution->testcase = 'Testcase List'; -$lang->execution->dynamic = 'Verlauf'; -$lang->execution->latestDynamic = 'Letzter Verlauf'; -$lang->execution->build = 'Builds'; -$lang->execution->testtask = 'Testaufgaben'; -$lang->execution->burn = 'Burndown'; -$lang->execution->computeBurn = 'Aktualisieren'; -$lang->execution->CFD = 'Cumulative Flow diagrams'; -$lang->execution->computeCFD = 'Compute Cumulative Flow diagrams'; -$lang->execution->burnData = 'Burndown Daten'; -$lang->execution->fixFirst = 'Bearbeite Mannstunden des ersten Tags'; -$lang->execution->team = 'Teammitglieder'; -$lang->execution->doc = 'Dok'; -$lang->execution->doclib = 'Dok Bibliothek'; -$lang->execution->manageProducts = 'Verküpfe ' . $lang->productCommon; -$lang->execution->linkStory = 'Link Stories'; -$lang->execution->linkStoryByPlan = 'Verküpfe Story aus Plan'; -$lang->execution->linkPlan = 'Verküpfe Plan'; -$lang->execution->unlinkStoryTasks = 'Verknüpfung aufheben'; -$lang->execution->linkedProducts = 'Verküpfte Produkte'; -$lang->execution->unlinkedProducts = 'Produkt verknüpfung aufheben'; -$lang->execution->view = "Übersicht"; -$lang->execution->startAction = "Start Execution"; -$lang->execution->activateAction = "Activate Execution"; -$lang->execution->delayAction = "Delay Execution"; -$lang->execution->suspendAction = "Suspend Execution"; -$lang->execution->closeAction = "Close Execution"; -$lang->execution->testtaskAction = "Execution Request"; -$lang->execution->teamAction = "Execution Members"; -$lang->execution->kanbanAction = "Execution Kanban"; -$lang->execution->printKanbanAction = "Print Kanban"; -$lang->execution->treeAction = "Execution Tree View"; -$lang->execution->exportAction = "Export Execution"; -$lang->execution->computeBurnAction = "Compute Burn"; -$lang->execution->create = "Erstelle Projekt"; -$lang->execution->createExec = "Create Execution"; -$lang->execution->createAction = "Create {$lang->execution->common}"; -$lang->execution->copyExec = "Copy Execution"; -$lang->execution->copy = "Kopiere {$lang->executionCommon}"; -$lang->execution->delete = "Lösche"; -$lang->execution->deleteAB = "Lösche Execution"; -$lang->execution->browse = "Durchsuchen"; -$lang->execution->edit = "Bearbeiten"; -$lang->execution->editAction = "Edit Execution"; -$lang->execution->batchEdit = "Mehere bearbeiten"; -$lang->execution->batchEditAction = "Batch Edit"; -$lang->execution->manageMembers = 'Teams verwalten'; -$lang->execution->unlinkMember = 'Mitgliefer entfernen'; -$lang->execution->unlinkStory = 'Story entfernen'; -$lang->execution->unlinkStoryAB = 'Unlink'; -$lang->execution->batchUnlinkStory = 'Mehere Storys entfernen'; -$lang->execution->importTask = 'Importiere Aufgaben'; -$lang->execution->importPlanStories = 'Verknüpfe Story aus Plan'; -$lang->execution->importBug = 'Importiere Bugs'; -$lang->execution->tree = 'Baum'; -$lang->execution->treeTask = 'Aufgabe anzeigen'; -$lang->execution->treeStory = 'Story anzeigen'; -$lang->execution->treeViewTask = 'Tree View Task'; -$lang->execution->treeViewStory = 'Tree View Story'; -$lang->execution->storyKanban = 'Story Kanban'; -$lang->execution->storySort = 'Story sortieren'; -$lang->execution->importPlanStory = $lang->executionCommon . ' is created!\nDo you want to import stories that have been linked to the plan? The stories in the draft will be automatically filtered %s out when imported.'; -$lang->execution->importEditPlanStory = $lang->executionCommon . ' is edited!\nDo you want to import stories that have been linked to the plan? The stories in the draft will be automatically filtered %s out when imported.'; -$lang->execution->importPlanStoryEx = "and only the activation story for the branch associated with this {$lang->executionCommon}"; -$lang->execution->needLinkProducts = 'The execution has not been linked with any product, and the related functions cannot be used. Please link the product first and try again.'; -$lang->execution->iteration = 'Iteration'; -$lang->execution->iterationInfo = '%s Iterationen'; -$lang->execution->viewAll = 'Alle anzeigen'; -$lang->execution->testreport = 'Test Report'; -$lang->execution->taskKanban = 'Task Kanban'; -$lang->execution->RDKanban = 'Research & Development Kanban'; +$lang->execution->index = "Home"; +$lang->execution->task = 'Aufgaben'; +$lang->execution->groupTask = 'Nach Gruppen'; +$lang->execution->story = 'Storys'; +$lang->execution->qa = 'QA'; +$lang->execution->bug = 'Bugs'; +$lang->execution->testcase = 'Testcase List'; +$lang->execution->dynamic = 'Verlauf'; +$lang->execution->latestDynamic = 'Letzter Verlauf'; +$lang->execution->build = 'Builds'; +$lang->execution->testtask = 'Testaufgaben'; +$lang->execution->burn = 'Burndown'; +$lang->execution->computeBurn = 'Aktualisieren'; +$lang->execution->CFD = 'Cumulative Flow diagrams'; +$lang->execution->computeCFD = 'Compute Cumulative Flow diagrams'; +$lang->execution->burnData = 'Burndown Daten'; +$lang->execution->fixFirst = 'Bearbeite Mannstunden des ersten Tags'; +$lang->execution->team = 'Teammitglieder'; +$lang->execution->doc = 'Dok'; +$lang->execution->doclib = 'Dok Bibliothek'; +$lang->execution->manageProducts = 'Verküpfe ' . $lang->productCommon; +$lang->execution->linkStory = 'Link Stories'; +$lang->execution->linkStoryByPlan = 'Verküpfe Story aus Plan'; +$lang->execution->linkPlan = 'Verküpfe Plan'; +$lang->execution->unlinkStoryTasks = 'Verknüpfung aufheben'; +$lang->execution->linkedProducts = 'Verküpfte Produkte'; +$lang->execution->unlinkedProducts = 'Produkt verknüpfung aufheben'; +$lang->execution->view = "Übersicht"; +$lang->execution->startAction = "Start Execution"; +$lang->execution->activateAction = "Activate Execution"; +$lang->execution->delayAction = "Delay Execution"; +$lang->execution->suspendAction = "Suspend Execution"; +$lang->execution->closeAction = "Close Execution"; +$lang->execution->testtaskAction = "Execution Request"; +$lang->execution->teamAction = "Execution Members"; +$lang->execution->kanbanAction = "Execution Kanban"; +$lang->execution->printKanbanAction = "Print Kanban"; +$lang->execution->treeAction = "Execution Tree View"; +$lang->execution->exportAction = "Export Execution"; +$lang->execution->computeBurnAction = "Compute Burn"; +$lang->execution->create = "Erstelle Projekt"; +$lang->execution->createExec = "Create Execution"; +$lang->execution->createAction = "Create {$lang->execution->common}"; +$lang->execution->copyExec = "Copy Execution"; +$lang->execution->copy = "Kopiere {$lang->executionCommon}"; +$lang->execution->delete = "Lösche"; +$lang->execution->deleteAB = "Lösche Execution"; +$lang->execution->browse = "Durchsuchen"; +$lang->execution->edit = "Bearbeiten"; +$lang->execution->editAction = "Edit Execution"; +$lang->execution->batchEdit = "Mehere bearbeiten"; +$lang->execution->batchEditAction = "Batch Edit"; +$lang->execution->manageMembers = 'Teams verwalten'; +$lang->execution->unlinkMember = 'Mitgliefer entfernen'; +$lang->execution->unlinkStory = 'Story entfernen'; +$lang->execution->unlinkStoryAB = 'Unlink'; +$lang->execution->batchUnlinkStory = 'Mehere Storys entfernen'; +$lang->execution->importTask = 'Importiere Aufgaben'; +$lang->execution->importPlanStories = 'Verknüpfe Story aus Plan'; +$lang->execution->importBug = 'Importiere Bugs'; +$lang->execution->tree = 'Baum'; +$lang->execution->treeTask = 'Aufgabe anzeigen'; +$lang->execution->treeStory = 'Story anzeigen'; +$lang->execution->treeViewTask = 'Tree View Task'; +$lang->execution->treeViewStory = 'Tree View Story'; +$lang->execution->storyKanban = 'Story Kanban'; +$lang->execution->storySort = 'Story sortieren'; +$lang->execution->importPlanStory = $lang->executionCommon . ' is created!\nDo you want to import stories that have been linked to the plan? The stories in the draft will be automatically filtered out when imported.'; +$lang->execution->importEditPlanStory = $lang->executionCommon . ' is edited!\nDo you want to import stories that have been linked to the plan? The stories in the draft will be automatically filtered out when imported.'; +$lang->execution->importBranchPlanStory = $lang->executionCommon . ' is created!\nDo you want to import stories that have been linked to the plan? Only the activation stories of the branch associated with this ' .$lang->executionCommon. ' will be associated with the import'; +$lang->execution->importBranchEditPlanStory = $lang->executionCommon . ' is edited!\nDo you want to import stories that have been linked to the plan? Only the activation stories of the branch associated with this ' .$lang->executionCommon. ' will be associated with the import'; +$lang->execution->needLinkProducts = 'The execution has not been linked with any product, and the related functions cannot be used. Please link the product first and try again.'; +$lang->execution->iteration = 'Iteration'; +$lang->execution->iterationInfo = '%s Iterationen'; +$lang->execution->viewAll = 'Alle anzeigen'; +$lang->execution->testreport = 'Test Report'; +$lang->execution->taskKanban = 'Task Kanban'; +$lang->execution->RDKanban = 'Research & Development Kanban'; /* Group browsing. */ $lang->execution->allTasks = 'Alle'; diff --git a/module/execution/lang/en.php b/module/execution/lang/en.php index 13337372b9..29b107ad9b 100644 --- a/module/execution/lang/en.php +++ b/module/execution/lang/en.php @@ -209,83 +209,84 @@ $lang->execution->burnByList['estimate'] = "View by plan hours"; $lang->execution->burnByList['storyPoint'] = 'View by story point'; /* Method list. */ -$lang->execution->index = "{$lang->executionCommon} Home"; -$lang->execution->task = 'Task List'; -$lang->execution->groupTask = 'Group View'; -$lang->execution->story = 'Story List'; -$lang->execution->qa = 'QA'; -$lang->execution->bug = 'Bug List'; -$lang->execution->testcase = 'Testcase List'; -$lang->execution->dynamic = 'Dynamics'; -$lang->execution->latestDynamic = 'Dynamics'; -$lang->execution->build = 'Build List'; -$lang->execution->testtask = 'Request'; -$lang->execution->burn = 'Burndown'; -$lang->execution->computeBurn = 'Update'; -$lang->execution->CFD = 'Cumulative Flow diagrams'; -$lang->execution->computeCFD = 'Compute Cumulative Flow diagrams'; -$lang->execution->burnData = 'Burndown Data'; -$lang->execution->fixFirst = 'Edit 1st-Day Estimates'; -$lang->execution->team = 'Members'; -$lang->execution->doc = 'Document'; -$lang->execution->doclib = 'Docoment Library'; -$lang->execution->manageProducts = 'Linked ' . $lang->productCommon . 's'; -$lang->execution->linkStory = 'Link Stories'; -$lang->execution->linkStoryByPlan = 'Link Stories By Plan'; -$lang->execution->linkPlan = 'Linked Plan'; -$lang->execution->unlinkStoryTasks = 'Unlink'; -$lang->execution->linkedProducts = "Linked {$lang->productCommon}s"; -$lang->execution->unlinkedProducts = "Unlinked {$lang->productCommon}s"; -$lang->execution->view = "Execution Detail"; -$lang->execution->startAction = "Start Execution"; -$lang->execution->activateAction = "Activate Execution"; -$lang->execution->delayAction = "Delay Execution"; -$lang->execution->suspendAction = "Suspend Execution"; -$lang->execution->closeAction = "Close Execution"; -$lang->execution->testtaskAction = "Execution Request"; -$lang->execution->teamAction = "Execution Members"; -$lang->execution->kanbanAction = "Execution Kanban"; -$lang->execution->printKanbanAction = "Print Kanban"; -$lang->execution->treeAction = "Execution Tree View"; -$lang->execution->exportAction = "Export Execution"; -$lang->execution->computeBurnAction = "Update Burndown"; -$lang->execution->create = "Create {$lang->executionCommon}"; -$lang->execution->createExec = "Create {$lang->execution->common}"; -$lang->execution->createAction = "Create {$lang->execution->common}"; -$lang->execution->copyExec = "Copy {$lang->execution->common}"; -$lang->execution->copy = "Copy {$lang->executionCommon}"; -$lang->execution->delete = "Delete {$lang->executionCommon}"; -$lang->execution->deleteAB = "Delete Execution"; -$lang->execution->browse = "{$lang->executionCommon} List"; -$lang->execution->edit = "Edit {$lang->executionCommon}"; -$lang->execution->editAction = "Edit Execution"; -$lang->execution->batchEdit = "Edit"; -$lang->execution->batchEditAction = "Batch Edit"; -$lang->execution->manageMembers = 'Manage Team'; -$lang->execution->unlinkMember = 'Remove Member'; -$lang->execution->unlinkStory = 'Unlink Story'; -$lang->execution->unlinkStoryAB = 'Unlink'; -$lang->execution->batchUnlinkStory = 'Batch Unlink Stories'; -$lang->execution->importTask = 'Transfer Task'; -$lang->execution->importPlanStories = 'Link Stories By Plan'; -$lang->execution->importBug = 'Import Bug'; -$lang->execution->tree = 'Tree'; -$lang->execution->treeTask = 'Show Task Only'; -$lang->execution->treeStory = 'Show Story Only'; -$lang->execution->treeViewTask = 'Tree View Task'; -$lang->execution->treeViewStory = 'Tree View Story'; -$lang->execution->storyKanban = 'Story Kanban'; -$lang->execution->storySort = 'Rank Story'; -$lang->execution->importPlanStory = $lang->executionCommon . ' is created!\nDo you want to import stories that have been linked to the plan? The stories in the draft will be automatically filtered %s out when imported.'; -$lang->execution->importEditPlanStory = $lang->executionCommon . ' is edited!\nDo you want to import stories that have been linked to the plan? The stories in the draft will be automatically filtered %s out when imported.'; -$lang->execution->importPlanStoryEx = "and only the activation story for the branch associated with this {$lang->executionCommon}"; -$lang->execution->needLinkProducts = 'The execution has not been linked with any product, and the related functions cannot be used. Please link the product first and try again.'; -$lang->execution->iteration = 'Iterations'; -$lang->execution->iterationInfo = '%s Iterations'; -$lang->execution->viewAll = 'View All'; -$lang->execution->testreport = 'Test Report'; -$lang->execution->taskKanban = 'Task Kanban'; -$lang->execution->RDKanban = 'Research & Development Kanban'; +$lang->execution->index = "{$lang->executionCommon} Home"; +$lang->execution->task = 'Task List'; +$lang->execution->groupTask = 'Group View'; +$lang->execution->story = 'Story List'; +$lang->execution->qa = 'QA'; +$lang->execution->bug = 'Bug List'; +$lang->execution->testcase = 'Testcase List'; +$lang->execution->dynamic = 'Dynamics'; +$lang->execution->latestDynamic = 'Dynamics'; +$lang->execution->build = 'Build List'; +$lang->execution->testtask = 'Request'; +$lang->execution->burn = 'Burndown'; +$lang->execution->computeBurn = 'Update'; +$lang->execution->CFD = 'Cumulative Flow diagrams'; +$lang->execution->computeCFD = 'Compute Cumulative Flow diagrams'; +$lang->execution->burnData = 'Burndown Data'; +$lang->execution->fixFirst = 'Edit 1st-Day Estimates'; +$lang->execution->team = 'Members'; +$lang->execution->doc = 'Document'; +$lang->execution->doclib = 'Docoment Library'; +$lang->execution->manageProducts = 'Linked ' . $lang->productCommon . 's'; +$lang->execution->linkStory = 'Link Stories'; +$lang->execution->linkStoryByPlan = 'Link Stories By Plan'; +$lang->execution->linkPlan = 'Linked Plan'; +$lang->execution->unlinkStoryTasks = 'Unlink'; +$lang->execution->linkedProducts = "Linked {$lang->productCommon}s"; +$lang->execution->unlinkedProducts = "Unlinked {$lang->productCommon}s"; +$lang->execution->view = "Execution Detail"; +$lang->execution->startAction = "Start Execution"; +$lang->execution->activateAction = "Activate Execution"; +$lang->execution->delayAction = "Delay Execution"; +$lang->execution->suspendAction = "Suspend Execution"; +$lang->execution->closeAction = "Close Execution"; +$lang->execution->testtaskAction = "Execution Request"; +$lang->execution->teamAction = "Execution Members"; +$lang->execution->kanbanAction = "Execution Kanban"; +$lang->execution->printKanbanAction = "Print Kanban"; +$lang->execution->treeAction = "Execution Tree View"; +$lang->execution->exportAction = "Export Execution"; +$lang->execution->computeBurnAction = "Update Burndown"; +$lang->execution->create = "Create {$lang->executionCommon}"; +$lang->execution->createExec = "Create {$lang->execution->common}"; +$lang->execution->createAction = "Create {$lang->execution->common}"; +$lang->execution->copyExec = "Copy {$lang->execution->common}"; +$lang->execution->copy = "Copy {$lang->executionCommon}"; +$lang->execution->delete = "Delete {$lang->executionCommon}"; +$lang->execution->deleteAB = "Delete Execution"; +$lang->execution->browse = "{$lang->executionCommon} List"; +$lang->execution->edit = "Edit {$lang->executionCommon}"; +$lang->execution->editAction = "Edit Execution"; +$lang->execution->batchEdit = "Edit"; +$lang->execution->batchEditAction = "Batch Edit"; +$lang->execution->manageMembers = 'Manage Team'; +$lang->execution->unlinkMember = 'Remove Member'; +$lang->execution->unlinkStory = 'Unlink Story'; +$lang->execution->unlinkStoryAB = 'Unlink'; +$lang->execution->batchUnlinkStory = 'Batch Unlink Stories'; +$lang->execution->importTask = 'Transfer Task'; +$lang->execution->importPlanStories = 'Link Stories By Plan'; +$lang->execution->importBug = 'Import Bug'; +$lang->execution->tree = 'Tree'; +$lang->execution->treeTask = 'Show Task Only'; +$lang->execution->treeStory = 'Show Story Only'; +$lang->execution->treeViewTask = 'Tree View Task'; +$lang->execution->treeViewStory = 'Tree View Story'; +$lang->execution->storyKanban = 'Story Kanban'; +$lang->execution->storySort = 'Rank Story'; +$lang->execution->importPlanStory = $lang->executionCommon . ' is created!\nDo you want to import stories that have been linked to the plan? The stories in the draft will be automatically filtered out when imported.'; +$lang->execution->importEditPlanStory = $lang->executionCommon . ' is edited!\nDo you want to import stories that have been linked to the plan? The stories in the draft will be automatically filtered out when imported.'; +$lang->execution->importBranchPlanStory = $lang->executionCommon . ' is created!\nDo you want to import stories that have been linked to the plan? Only the activation stories of the branch associated with this ' .$lang->executionCommon. ' will be associated with the import'; +$lang->execution->importBranchEditPlanStory = $lang->executionCommon . ' is edited!\nDo you want to import stories that have been linked to the plan? Only the activation stories of the branch associated with this ' .$lang->executionCommon. ' will be associated with the import'; +$lang->execution->needLinkProducts = 'The execution has not been linked with any product, and the related functions cannot be used. Please link the product first and try again.'; +$lang->execution->iteration = 'Iterations'; +$lang->execution->iterationInfo = '%s Iterations'; +$lang->execution->viewAll = 'View All'; +$lang->execution->testreport = 'Test Report'; +$lang->execution->taskKanban = 'Task Kanban'; +$lang->execution->RDKanban = 'Research & Development Kanban'; /* Group browsing. */ $lang->execution->allTasks = 'All'; diff --git a/module/execution/lang/fr.php b/module/execution/lang/fr.php index 4e33841cac..68b2aa3155 100644 --- a/module/execution/lang/fr.php +++ b/module/execution/lang/fr.php @@ -209,83 +209,84 @@ $lang->execution->burnByList['estimate'] = "View by plan hours"; $lang->execution->burnByList['storyPoint'] = 'View by story point'; /* Method list. */ -$lang->execution->index = "Accueil {$lang->executionCommon}"; -$lang->execution->task = 'Liste Tâches'; -$lang->execution->groupTask = 'Vision Groupée'; -$lang->execution->story = 'Liste Stories'; -$lang->execution->qa = 'QA'; -$lang->execution->bug = 'Liste Bugs'; -$lang->execution->testcase = 'Testcase List'; -$lang->execution->dynamic = 'Historique'; -$lang->execution->latestDynamic = 'Historique'; -$lang->execution->build = 'Liste Builds'; -$lang->execution->testtask = 'Recette'; -$lang->execution->burn = ' Atterrissage'; -$lang->execution->computeBurn = 'Calculer'; -$lang->execution->CFD = 'Cumulative Flow diagrams'; -$lang->execution->computeCFD = 'Compute Cumulative Flow diagrams'; -$lang->execution->burnData = "Données d'atterrissage"; -$lang->execution->fixFirst = 'Fixer 1er-Jour Estimation'; -$lang->execution->team = 'Membres'; -$lang->execution->doc = 'Documents'; -$lang->execution->doclib = 'Répertoire de Documents'; -$lang->execution->manageProducts = 'Liaisons du ' . $lang->executionCommon . ' avec les ' . $lang->productCommon . 's'; -$lang->execution->linkStory = 'Stories liées'; -$lang->execution->linkStoryByPlan = 'Stories liées par Plan'; -$lang->execution->linkPlan = 'Plans liés'; -$lang->execution->unlinkStoryTasks = 'Dissocier'; -$lang->execution->linkedProducts = "{$lang->productCommon}s liés à ce {$lang->executionCommon}"; -$lang->execution->unlinkedProducts = "{$lang->productCommon}s dissociés de ce {$lang->executionCommon}"; -$lang->execution->view = "Détail du Execution"; -$lang->execution->startAction = "Start Execution"; -$lang->execution->activateAction = "Activer le Execution"; -$lang->execution->delayAction = "Ajourner le Execution"; -$lang->execution->suspendAction = "Suspendre le Execution"; -$lang->execution->closeAction = "Fermer le Execution"; -$lang->execution->testtaskAction = "Recettes du Execution"; -$lang->execution->teamAction = "Membres du Execution"; -$lang->execution->kanbanAction = "Kaban Execution"; -$lang->execution->printKanbanAction = "Imprimer le Kanban"; -$lang->execution->treeAction = "Arborescence Execution"; -$lang->execution->exportAction = "Exporter Execution"; -$lang->execution->computeBurnAction = "Calculer Atterrissage"; -$lang->execution->create = "Créer {$lang->executionCommon}"; -$lang->execution->createExec = "Create Execution"; -$lang->execution->createAction = "Create {$lang->execution->common}"; -$lang->execution->copyExec = "Copy Execution"; -$lang->execution->copy = "Copier {$lang->executionCommon}"; -$lang->execution->delete = "Supprimer {$lang->executionCommon}"; -$lang->execution->deleteAB = "Delete Execution"; -$lang->execution->browse = "Liste du {$lang->executionCommon}"; -$lang->execution->edit = "Editer {$lang->executionCommon}"; -$lang->execution->editAction = "Edit Execution"; -$lang->execution->batchEdit = "Edition par lot"; -$lang->execution->batchEditAction = "Batch Edit"; -$lang->execution->manageMembers = 'Organiser Equipe'; -$lang->execution->unlinkMember = 'Retirer le membre'; -$lang->execution->unlinkStory = 'Dissocier Story'; -$lang->execution->unlinkStoryAB = 'Dissocier'; -$lang->execution->batchUnlinkStory = 'Dissocier Stories par lot'; -$lang->execution->importTask = 'Transfert Tâche'; -$lang->execution->importPlanStories = 'Lier Stories Par Plan'; -$lang->execution->importBug = 'Importer Bug'; -$lang->execution->tree = 'Arboressence'; -$lang->execution->treeTask = 'Seulement les Tâches'; -$lang->execution->treeStory = 'Seulement les Stories'; -$lang->execution->treeViewTask = 'Seulement les Tâches'; -$lang->execution->treeViewStory = 'Seulement les Stories'; -$lang->execution->storyKanban = 'Story Kanban'; -$lang->execution->storySort = 'Rang Story'; -$lang->execution->importPlanStory = $lang->executionCommon . ' is created!\nDo you want to import stories that have been linked to the plan? The stories in the draft will be automatically filtered %s out when imported.'; -$lang->execution->importEditPlanStory = $lang->executionCommon . ' is edited!\nDo you want to import stories that have been linked to the plan? The stories in the draft will be automatically filtered %s out when imported.'; -$lang->execution->importPlanStoryEx = "and only the activation story for the branch associated with this {$lang->executionCommon}"; -$lang->execution->needLinkProducts = 'The execution has not been linked with any product, and the related functions cannot be used. Please link the product first and try again.'; -$lang->execution->iteration = 'Itérations'; -$lang->execution->iterationInfo = '%s Itérations'; -$lang->execution->viewAll = 'Voir Tout'; -$lang->execution->testreport = 'Test Report'; -$lang->execution->taskKanban = 'Task Kanban'; -$lang->execution->RDKanban = 'Research & Development Kanban'; +$lang->execution->index = "{$lang->executionCommon} Home"; +$lang->execution->task = 'Task List'; +$lang->execution->groupTask = 'Group View'; +$lang->execution->story = 'Story List'; +$lang->execution->qa = 'QA'; +$lang->execution->bug = 'Bug List'; +$lang->execution->testcase = 'Testcase List'; +$lang->execution->dynamic = 'Dynamics'; +$lang->execution->latestDynamic = 'Dynamics'; +$lang->execution->build = 'Build List'; +$lang->execution->testtask = 'Request'; +$lang->execution->burn = 'Burndown'; +$lang->execution->computeBurn = 'Update'; +$lang->execution->CFD = 'Cumulative Flow diagrams'; +$lang->execution->computeCFD = 'Compute Cumulative Flow diagrams'; +$lang->execution->burnData = 'Burndown Data'; +$lang->execution->fixFirst = 'Edit 1st-Day Estimates'; +$lang->execution->team = 'Members'; +$lang->execution->doc = 'Document'; +$lang->execution->doclib = 'Docoment Library'; +$lang->execution->manageProducts = 'Linked ' . $lang->productCommon . 's'; +$lang->execution->linkStory = 'Link Stories'; +$lang->execution->linkStoryByPlan = 'Link Stories By Plan'; +$lang->execution->linkPlan = 'Linked Plan'; +$lang->execution->unlinkStoryTasks = 'Unlink'; +$lang->execution->linkedProducts = "Linked {$lang->productCommon}s"; +$lang->execution->unlinkedProducts = "Unlinked {$lang->productCommon}s"; +$lang->execution->view = "Execution Detail"; +$lang->execution->startAction = "Start Execution"; +$lang->execution->activateAction = "Activate Execution"; +$lang->execution->delayAction = "Delay Execution"; +$lang->execution->suspendAction = "Suspend Execution"; +$lang->execution->closeAction = "Close Execution"; +$lang->execution->testtaskAction = "Execution Request"; +$lang->execution->teamAction = "Execution Members"; +$lang->execution->kanbanAction = "Execution Kanban"; +$lang->execution->printKanbanAction = "Print Kanban"; +$lang->execution->treeAction = "Execution Tree View"; +$lang->execution->exportAction = "Export Execution"; +$lang->execution->computeBurnAction = "Update Burndown"; +$lang->execution->create = "Create {$lang->executionCommon}"; +$lang->execution->createExec = "Create {$lang->execution->common}"; +$lang->execution->createAction = "Create {$lang->execution->common}"; +$lang->execution->copyExec = "Copy {$lang->execution->common}"; +$lang->execution->copy = "Copy {$lang->executionCommon}"; +$lang->execution->delete = "Delete {$lang->executionCommon}"; +$lang->execution->deleteAB = "Delete Execution"; +$lang->execution->browse = "{$lang->executionCommon} List"; +$lang->execution->edit = "Edit {$lang->executionCommon}"; +$lang->execution->editAction = "Edit Execution"; +$lang->execution->batchEdit = "Edit"; +$lang->execution->batchEditAction = "Batch Edit"; +$lang->execution->manageMembers = 'Manage Team'; +$lang->execution->unlinkMember = 'Remove Member'; +$lang->execution->unlinkStory = 'Unlink Story'; +$lang->execution->unlinkStoryAB = 'Unlink'; +$lang->execution->batchUnlinkStory = 'Batch Unlink Stories'; +$lang->execution->importTask = 'Transfer Task'; +$lang->execution->importPlanStories = 'Link Stories By Plan'; +$lang->execution->importBug = 'Import Bug'; +$lang->execution->tree = 'Tree'; +$lang->execution->treeTask = 'Show Task Only'; +$lang->execution->treeStory = 'Show Story Only'; +$lang->execution->treeViewTask = 'Tree View Task'; +$lang->execution->treeViewStory = 'Tree View Story'; +$lang->execution->storyKanban = 'Story Kanban'; +$lang->execution->storySort = 'Rank Story'; +$lang->execution->importPlanStory = $lang->executionCommon . ' is created!\nDo you want to import stories that have been linked to the plan? The stories in the draft will be automatically filtered out when imported.'; +$lang->execution->importEditPlanStory = $lang->executionCommon . ' is edited!\nDo you want to import stories that have been linked to the plan? The stories in the draft will be automatically filtered out when imported.'; +$lang->execution->importBranchPlanStory = $lang->executionCommon . ' is created!\nDo you want to import stories that have been linked to the plan? Only the activation stories of the branch associated with this ' .$lang->executionCommon. ' will be associated with the import'; +$lang->execution->importBranchEditPlanStory = $lang->executionCommon . ' is edited!\nDo you want to import stories that have been linked to the plan? Only the activation stories of the branch associated with this ' .$lang->executionCommon. ' will be associated with the import'; +$lang->execution->needLinkProducts = 'The execution has not been linked with any product, and the related functions cannot be used. Please link the product first and try again.'; +$lang->execution->iteration = 'Iterations'; +$lang->execution->iterationInfo = '%s Iterations'; +$lang->execution->viewAll = 'View All'; +$lang->execution->testreport = 'Test Report'; +$lang->execution->taskKanban = 'Task Kanban'; +$lang->execution->RDKanban = 'Research & Development Kanban'; /* Group browsing. */ $lang->execution->allTasks = 'Toutes'; diff --git a/module/execution/lang/zh-cn.php b/module/execution/lang/zh-cn.php index a77b5f5fea..d74f4d3dd9 100644 --- a/module/execution/lang/zh-cn.php +++ b/module/execution/lang/zh-cn.php @@ -209,83 +209,84 @@ $lang->execution->burnByList['estimate'] = "按计划工时查看"; $lang->execution->burnByList['storyPoint'] = '按故事点查看'; /* 方法列表。*/ -$lang->execution->index = "{$lang->execution->common}主页"; -$lang->execution->task = '任务列表'; -$lang->execution->groupTask = '分组浏览任务'; -$lang->execution->story = "{$lang->SRCommon}列表"; -$lang->execution->qa = '测试仪表盘'; -$lang->execution->bug = 'Bug列表'; -$lang->execution->testcase = '用例列表'; -$lang->execution->dynamic = '动态'; -$lang->execution->latestDynamic = '最新动态'; -$lang->execution->build = '所有版本'; -$lang->execution->testtask = '测试单'; -$lang->execution->burn = '燃尽图'; -$lang->execution->computeBurn = '更新燃尽图'; -$lang->execution->CFD = '累积流图'; -$lang->execution->computeCFD = '更新累积流图'; -$lang->execution->burnData = '燃尽图数据'; -$lang->execution->fixFirst = '修改首天工时'; -$lang->execution->team = '团队成员'; -$lang->execution->doc = '文档列表'; -$lang->execution->doclib = '文档库列表'; -$lang->execution->manageProducts = '关联' . $lang->productCommon; -$lang->execution->linkStory = "关联{$lang->SRCommon}"; -$lang->execution->linkStoryByPlan = "按照计划关联"; -$lang->execution->linkPlan = "关联计划"; -$lang->execution->unlinkStoryTasks = "未关联{$lang->SRCommon}任务"; -$lang->execution->linkedProducts = '已关联'; -$lang->execution->unlinkedProducts = '未关联'; -$lang->execution->view = "{$lang->execution->common}概况"; -$lang->execution->startAction = "开始{$lang->execution->common}"; -$lang->execution->activateAction = "激活{$lang->execution->common}"; -$lang->execution->delayAction = "延期{$lang->execution->common}"; -$lang->execution->suspendAction = "挂起{$lang->execution->common}"; -$lang->execution->closeAction = "关闭{$lang->execution->common}"; -$lang->execution->testtaskAction = "{$lang->execution->common}测试单"; -$lang->execution->teamAction = "{$lang->execution->common}团队"; -$lang->execution->kanbanAction = "{$lang->execution->common}看板"; -$lang->execution->printKanbanAction = "打印看板"; -$lang->execution->treeAction = "{$lang->execution->common}树状图"; -$lang->execution->exportAction = "导出{$lang->execution->common}"; -$lang->execution->computeBurnAction = "计算燃尽图"; -$lang->execution->create = "添加{$lang->executionCommon}"; -$lang->execution->createExec = "添加{$lang->execution->common}"; -$lang->execution->createAction = "添加{$lang->execution->common}"; -$lang->execution->copyExec = "复制{$lang->execution->common}"; -$lang->execution->copy = "复制{$lang->executionCommon}"; -$lang->execution->delete = "删除{$lang->executionCommon}"; -$lang->execution->deleteAB = "删除{$lang->execution->common}"; -$lang->execution->browse = "浏览{$lang->execution->common}"; -$lang->execution->edit = "设置{$lang->executionCommon}"; -$lang->execution->editAction = "编辑{$lang->execution->common}"; -$lang->execution->batchEdit = "编辑"; -$lang->execution->batchEditAction = "批量编辑"; -$lang->execution->manageMembers = '团队管理'; -$lang->execution->unlinkMember = '移除成员'; -$lang->execution->unlinkStory = "移除{$lang->SRCommon}"; -$lang->execution->unlinkStoryAB = "移除{$lang->SRCommon}"; -$lang->execution->batchUnlinkStory = "批量移除{$lang->SRCommon}"; -$lang->execution->importTask = '转入任务'; -$lang->execution->importPlanStories = "按计划关联{$lang->SRCommon}"; -$lang->execution->importBug = '导入Bug'; -$lang->execution->tree = '树状图'; -$lang->execution->treeTask = '只看任务'; -$lang->execution->treeStory = "只看{$lang->SRCommon}"; -$lang->execution->treeViewTask = '树状图查看任务'; -$lang->execution->treeViewStory = "树状图查看{$lang->SRCommon}"; -$lang->execution->storyKanban = "{$lang->SRCommon}看板"; -$lang->execution->storySort = "{$lang->SRCommon}排序"; -$lang->execution->importPlanStory = '创建' . $lang->executionCommon . '成功!\n是否导入计划关联的相关' . $lang->SRCommon . '?导入时将%s自动过滤掉草稿状态的' . $lang->SRCommon . '。'; -$lang->execution->importEditPlanStory = '编辑' . $lang->executionCommon . '成功!\n是否导入计划关联的相关' . $lang->SRCommon . '?导入时将%s自动过滤掉草稿状态的' . $lang->SRCommon . '。'; -$lang->execution->importPlanStoryEx = "只关联本{$lang->executionCommon}所关联分支的激活需求和"; -$lang->execution->needLinkProducts = '该执行还未关联任何产品,相关功能无法使用,请先关联产品后再试。'; -$lang->execution->iteration = '版本迭代'; -$lang->execution->iterationInfo = '迭代%s次'; -$lang->execution->viewAll = '查看所有'; -$lang->execution->testreport = '测试报告'; -$lang->execution->taskKanban = '任务看板'; -$lang->execution->RDKanban = '研发看板'; +$lang->execution->index = "{$lang->execution->common}主页"; +$lang->execution->task = '任务列表'; +$lang->execution->groupTask = '分组浏览任务'; +$lang->execution->story = "{$lang->SRCommon}列表"; +$lang->execution->qa = '测试仪表盘'; +$lang->execution->bug = 'Bug列表'; +$lang->execution->testcase = '用例列表'; +$lang->execution->dynamic = '动态'; +$lang->execution->latestDynamic = '最新动态'; +$lang->execution->build = '所有版本'; +$lang->execution->testtask = '测试单'; +$lang->execution->burn = '燃尽图'; +$lang->execution->computeBurn = '更新燃尽图'; +$lang->execution->CFD = '累积流图'; +$lang->execution->computeCFD = '更新累积流图'; +$lang->execution->burnData = '燃尽图数据'; +$lang->execution->fixFirst = '修改首天工时'; +$lang->execution->team = '团队成员'; +$lang->execution->doc = '文档列表'; +$lang->execution->doclib = '文档库列表'; +$lang->execution->manageProducts = '关联' . $lang->productCommon; +$lang->execution->linkStory = "关联{$lang->SRCommon}"; +$lang->execution->linkStoryByPlan = "按照计划关联"; +$lang->execution->linkPlan = "关联计划"; +$lang->execution->unlinkStoryTasks = "未关联{$lang->SRCommon}任务"; +$lang->execution->linkedProducts = '已关联'; +$lang->execution->unlinkedProducts = '未关联'; +$lang->execution->view = "{$lang->execution->common}概况"; +$lang->execution->startAction = "开始{$lang->execution->common}"; +$lang->execution->activateAction = "激活{$lang->execution->common}"; +$lang->execution->delayAction = "延期{$lang->execution->common}"; +$lang->execution->suspendAction = "挂起{$lang->execution->common}"; +$lang->execution->closeAction = "关闭{$lang->execution->common}"; +$lang->execution->testtaskAction = "{$lang->execution->common}测试单"; +$lang->execution->teamAction = "{$lang->execution->common}团队"; +$lang->execution->kanbanAction = "{$lang->execution->common}看板"; +$lang->execution->printKanbanAction = "打印看板"; +$lang->execution->treeAction = "{$lang->execution->common}树状图"; +$lang->execution->exportAction = "导出{$lang->execution->common}"; +$lang->execution->computeBurnAction = "计算燃尽图"; +$lang->execution->create = "添加{$lang->executionCommon}"; +$lang->execution->createExec = "添加{$lang->execution->common}"; +$lang->execution->createAction = "添加{$lang->execution->common}"; +$lang->execution->copyExec = "复制{$lang->execution->common}"; +$lang->execution->copy = "复制{$lang->executionCommon}"; +$lang->execution->delete = "删除{$lang->executionCommon}"; +$lang->execution->deleteAB = "删除{$lang->execution->common}"; +$lang->execution->browse = "浏览{$lang->execution->common}"; +$lang->execution->edit = "设置{$lang->executionCommon}"; +$lang->execution->editAction = "编辑{$lang->execution->common}"; +$lang->execution->batchEdit = "编辑"; +$lang->execution->batchEditAction = "批量编辑"; +$lang->execution->manageMembers = '团队管理'; +$lang->execution->unlinkMember = '移除成员'; +$lang->execution->unlinkStory = "移除{$lang->SRCommon}"; +$lang->execution->unlinkStoryAB = "移除{$lang->SRCommon}"; +$lang->execution->batchUnlinkStory = "批量移除{$lang->SRCommon}"; +$lang->execution->importTask = '转入任务'; +$lang->execution->importPlanStories = "按计划关联{$lang->SRCommon}"; +$lang->execution->importBug = '导入Bug'; +$lang->execution->tree = '树状图'; +$lang->execution->treeTask = '只看任务'; +$lang->execution->treeStory = "只看{$lang->SRCommon}"; +$lang->execution->treeViewTask = '树状图查看任务'; +$lang->execution->treeViewStory = "树状图查看{$lang->SRCommon}"; +$lang->execution->storyKanban = "{$lang->SRCommon}看板"; +$lang->execution->storySort = "{$lang->SRCommon}排序"; +$lang->execution->importPlanStory = '创建' . $lang->executionCommon . '成功!\n是否导入计划关联的相关' . $lang->SRCommon . '?导入时将自动过滤掉草稿状态的' . $lang->SRCommon . '。'; +$lang->execution->importEditPlanStory = '编辑' . $lang->executionCommon . '成功!\n是否导入计划关联的相关' . $lang->SRCommon . '?导入时将自动过滤掉草稿状态的' . $lang->SRCommon . '。'; +$lang->execution->importBranchPlanStory = '创建' . $lang->executionCommon . '成功!\n是否导入计划关联的相关' . $lang->SRCommon . '?导入时将只关联本' . $lang->executionCommon . '所关联分支的激活需求。'; +$lang->execution->importBranchEditPlanStory = '编辑' . $lang->executionCommon . '成功!\n是否导入计划关联的相关' . $lang->SRCommon . '?导入时将只关联本' . $lang->executionCommon . '所关联分支的激活需求。'; +$lang->execution->needLinkProducts = '该执行还未关联任何产品,相关功能无法使用,请先关联产品后再试。'; +$lang->execution->iteration = '版本迭代'; +$lang->execution->iterationInfo = '迭代%s次'; +$lang->execution->viewAll = '查看所有'; +$lang->execution->testreport = '测试报告'; +$lang->execution->taskKanban = '任务看板'; +$lang->execution->RDKanban = '研发看板'; /* 分组浏览。*/ $lang->execution->allTasks = '所有'; diff --git a/module/productplan/model.php b/module/productplan/model.php index 181582e47f..4f97735c41 100644 --- a/module/productplan/model.php +++ b/module/productplan/model.php @@ -1099,9 +1099,12 @@ class productplanModel extends model $planStory = $this->loadModel('story')->getPlanStories($planID); if(!empty($planStory)) { + $projectProducts = $this->loadModel('project')->getBranchesByProject($projectID); + foreach($planStory as $id => $story) { - if($story->status == 'draft' or $story->status == 'reviewing') + $projectProducts = zget($projectProducts, $story->product, array()); + if($story->status == 'draft' or $story->status == 'reviewing' or (!empty($projectProducts) and !isset($projectProducts[$story->branch]))) { unset($planStory[$id]); continue; From b1831623e5116e563b1ff6862fe23884afa8059a Mon Sep 17 00:00:00 2001 From: lanzongjun Date: Wed, 30 Nov 2022 15:16:44 +0800 Subject: [PATCH 3/3] * Finish Task #77806 --- module/productplan/model.php | 22 ++-------------------- module/story/lang/de.php | 1 + module/story/lang/en.php | 1 + module/story/lang/fr.php | 1 + module/story/lang/zh-cn.php | 1 + module/story/model.php | 11 +++++++++++ module/story/view/edit.html.php | 2 +- 7 files changed, 18 insertions(+), 21 deletions(-) diff --git a/module/productplan/model.php b/module/productplan/model.php index 4f97735c41..bf7c2870a9 100644 --- a/module/productplan/model.php +++ b/module/productplan/model.php @@ -991,27 +991,9 @@ class productplanModel extends model if(strpos(",$story->plan,", ",{$planID},") !== false) continue; /* Update the plan linked with the story and the order of the story in the plan. */ - if($this->session->currentProductType == 'normal' or $story->branch != 0 or empty($story->plan)) - { - $this->dao->update(TABLE_STORY)->set("plan")->eq($planID)->where('id')->eq((int)$storyID)->exec(); + $this->dao->update(TABLE_STORY)->set("plan")->eq($planID)->where('id')->eq((int)$storyID)->exec(); - $this->story->updateStoryOrderOfPlan($storyID, $planID, $story->plan); - } - else - { - $branchPlanPairs = $this->dao->select('branch, id as plan')->from(TABLE_PRODUCTPLAN) - ->where('product')->eq($story->product) - ->andWhere('id')->in($story->plan) - ->fetchPairs(); - if(isset($branchPlanPairs[$plan->branch])) $branchPlanPairs[$plan->branch] = $planID; - - $plansOfStory = implode(',', $branchPlanPairs); - $plansOfStory = trim($plansOfStory, ','); - - $this->dao->update(TABLE_STORY)->set("plan")->eq($plansOfStory)->where('id')->eq((int)$storyID)->exec(); - - $this->story->updateStoryOrderOfPlan($storyID, $planID); - } + $this->story->updateStoryOrderOfPlan($storyID, $planID, $story->plan); $this->action->create('story', $storyID, 'linked2plan', '', $planID); $this->story->setStage($storyID); diff --git a/module/story/lang/de.php b/module/story/lang/de.php index c696c9d780..a102071878 100644 --- a/module/story/lang/de.php +++ b/module/story/lang/de.php @@ -444,6 +444,7 @@ $lang->story->chosen->reviewedBy = 'Prüfer wählen'; $lang->story->notice = new stdClass(); $lang->story->notice->closed = 'Die ausgewählten Storys wurden bereits geschlossen!'; $lang->story->notice->reviewerNotEmpty = 'This requirement needs to be reviewed, and the reviewedby is required.'; +$lang->story->notice->changePlan = 'The plan can be changed to only one item.'; $lang->story->convertToTask = new stdClass(); $lang->story->convertToTask->fieldList = array(); diff --git a/module/story/lang/en.php b/module/story/lang/en.php index 5096794e76..17ae16c93a 100644 --- a/module/story/lang/en.php +++ b/module/story/lang/en.php @@ -444,6 +444,7 @@ $lang->story->chosen->reviewedBy = 'Choose ReviewedBy'; $lang->story->notice = new stdClass(); $lang->story->notice->closed = 'Story that you select is closed!'; $lang->story->notice->reviewerNotEmpty = 'This requirement needs to be reviewed, and the reviewedby is required.'; +$lang->story->notice->changePlan = 'The plan can be changed to only one item.'; $lang->story->convertToTask = new stdClass(); $lang->story->convertToTask->fieldList = array(); diff --git a/module/story/lang/fr.php b/module/story/lang/fr.php index 095fdb30d6..b05c47cf17 100644 --- a/module/story/lang/fr.php +++ b/module/story/lang/fr.php @@ -444,6 +444,7 @@ $lang->story->chosen->reviewedBy = 'Choisir valideur'; $lang->story->notice = new stdClass(); $lang->story->notice->closed = 'La Story que vous avez sélectionnée est malheureusement fermée !'; $lang->story->notice->reviewerNotEmpty = 'This requirement needs to be reviewed, and the reviewedby is required.'; +$lang->story->notice->changePlan = 'The plan can be changed to only one item.'; $lang->story->convertToTask = new stdClass(); $lang->story->convertToTask->fieldList = array(); diff --git a/module/story/lang/zh-cn.php b/module/story/lang/zh-cn.php index 3d1fca479b..048756a3f8 100644 --- a/module/story/lang/zh-cn.php +++ b/module/story/lang/zh-cn.php @@ -444,6 +444,7 @@ $lang->story->chosen->reviewedBy = '选择评审人...'; $lang->story->notice = new stdClass(); $lang->story->notice->closed = "您选择的{$lang->SRCommon}已经被关闭了!"; $lang->story->notice->reviewerNotEmpty = '该需求需要评审,评审人员不能为空。'; +$lang->story->notice->changePlan = '所属计划只能改为一条,修改后才能保存成功。'; $lang->story->convertToTask = new stdClass(); $lang->story->convertToTask->fieldList = array(); diff --git a/module/story/model.php b/module/story/model.php index 34f9be200a..bb95eea787 100644 --- a/module/story/model.php +++ b/module/story/model.php @@ -889,6 +889,17 @@ class storyModel extends model return false; } + $storyPlan = !empty($_POST['plan']) ? $_POST['plan'] : array(); + if(count($storyPlan) > 1) + { + $oldStoryPlan = !empty($oldStory->planTitle) ? array_keys($oldStory->planTitle) : array(); + if(!empty(array_diff($storyPlan,$oldStoryPlan)) or !empty(array_diff($oldStoryPlan,$storyPlan))) + { + dao::$errors[] = $this->lang->story->notice->changePlan; + return false; + } + } + $story = fixer::input('post') ->cleanInt('product,module,pri,duplicateStory') ->cleanFloat('estimate') diff --git a/module/story/view/edit.html.php b/module/story/view/edit.html.php index 1cb174f32d..2d511c25cf 100644 --- a/module/story/view/edit.html.php +++ b/module/story/view/edit.html.php @@ -192,7 +192,7 @@ story->plan;?>
- session->currentProductType != 'normal' and empty($story->branch)) ? true : false;?> + session->currentProductType != 'normal' and empty($story->branch) and count($story->planTitle) > 1) ? true : false;?> plan, "class='form-control chosen'" . ($multiple ? ' multiple' : '')); if(count($plans) == 1) {