From c232ec7c7de2fc88ba3f1bc2de0278ecd31e3827 Mon Sep 17 00:00:00 2001 From: Yagami Date: Mon, 24 Oct 2022 15:43:36 +0800 Subject: [PATCH] * Code for task #73233. --- db/update18.0.sql | 1 + module/programplan/model.php | 8 +++++--- module/programplan/view/create.html.php | 2 +- module/project/control.php | 9 +++++++++ module/project/js/create.js | 4 ++++ module/project/lang/de.php | 4 ++++ module/project/lang/en.php | 4 ++++ module/project/lang/fr.php | 4 ++++ module/project/lang/vi.php | 1 + module/project/lang/zh-cn.php | 4 ++++ module/project/view/create.html.php | 4 ++++ module/project/view/edit.html.php | 6 ++++++ module/stage/model.php | 27 +++++++++++++++---------- 13 files changed, 63 insertions(+), 15 deletions(-) create mode 100644 db/update18.0.sql diff --git a/db/update18.0.sql b/db/update18.0.sql new file mode 100644 index 0000000000..61c3416fb5 --- /dev/null +++ b/db/update18.0.sql @@ -0,0 +1 @@ +ALTER TABLE `zt_project` ADD `division` enum('0','1') COLLATE 'utf8_general_ci' NOT NULL DEFAULT '1'; diff --git a/module/programplan/model.php b/module/programplan/model.php index a3d20ecfad..da8c42342c 100755 --- a/module/programplan/model.php +++ b/module/programplan/model.php @@ -727,7 +727,8 @@ class programplanModel extends model $datas[] = $plan; } - $project = $this->loadModel('project')->getByID($projectID); + $project = $this->loadModel('project')->getByID($projectID); + $productList = $this->loadModel('product')->getProductPairsByProject($projectID); $totalPercent = 0; $totalDevType = 0; @@ -928,8 +929,9 @@ class programplanModel extends model $this->setTreePath($stageID); if($data->acl != 'open') $this->user->updateUserView($stageID, 'sprint'); - - $this->post->set('products', array(0 => $productID)); + + $linkProducts = $project->division ? array(0 => $productID) : array_keys($productList); + $this->post->set('products', $linkProducts); $this->execution->updateProducts($stageID); /* Record version change information. */ diff --git a/module/programplan/view/create.html.php b/module/programplan/view/create.html.php index 9779a0db69..783ff44094 100644 --- a/module/programplan/view/create.html.php +++ b/module/programplan/view/create.html.php @@ -22,7 +22,7 @@ echo "{$title}"; ?> - + division):?>
diff --git a/module/project/control.php b/module/project/control.php index cd216bd8cf..f2a9437eee 100644 --- a/module/project/control.php +++ b/module/project/control.php @@ -2042,6 +2042,7 @@ class project extends control { $this->loadModel('product'); $this->loadModel('program'); + $this->loadModel('execution'); if(!empty($_POST)) { @@ -2058,6 +2059,14 @@ class project extends control $oldProducts = array_keys($oldProducts); $newProducts = $this->product->getProducts($projectID); $newProducts = array_keys($newProducts); + + if(!$project->division and $newProducts) + { + $stages = $this->execution->getPairs($projectID); + $this->post->set('products', $newProducts); + foreach($stages as $stageID => $name) $this->execution->updateProducts($stageID); + } + $diffProducts = array_merge(array_diff($oldProducts, $newProducts), array_diff($newProducts, $oldProducts)); if($diffProducts) $this->loadModel('action')->create('project', $projectID, 'Managed', '', !empty($_POST['products']) ? join(',', $_POST['products']) : ''); diff --git a/module/project/js/create.js b/module/project/js/create.js index fe2a8db61c..4ae6217d3e 100644 --- a/module/project/js/create.js +++ b/module/project/js/create.js @@ -253,9 +253,11 @@ function setAclList(programID) */ function loadBranches(product) { + var chosenProducts = 0; $("#productsBox select[name^='products']").each(function() { var $product = $(product); + if($(this).val() > 0) chosenProducts ++; if($product.val() != 0 && $product.val() == $(this).val() && $product.attr('id') != $(this).attr('id') && !multiBranchProducts[$product.val()]) { bootbox.alert(errorSameProducts); @@ -265,6 +267,8 @@ function loadBranches(product) } }); + chosenProducts > 1 ? $('.division').removeClass('hide') : $('.division').addClass('hide'); + if($('#productsBox .row .input-group:last select:first').val() != 0) { var length = $('#productsBox .row .input-group').size(); diff --git a/module/project/lang/de.php b/module/project/lang/de.php index b00209d457..b59dea8fb2 100644 --- a/module/project/lang/de.php +++ b/module/project/lang/de.php @@ -127,6 +127,7 @@ $lang->project->realBeganAB = 'Actual Begin'; $lang->project->realEndAB = 'Actual End'; $lang->project->realBegan = 'Actual Began'; $lang->project->realEnd = 'Actual End'; +$lang->project->division = 'Create Stages by Product'; $lang->project->bygrid = 'Kanban'; $lang->project->bylist = 'List'; $lang->project->bycard = 'Card'; @@ -177,6 +178,9 @@ $lang->project->typeList = array(); $lang->project->typeList['my'] = 'Projects Ownedbyme'; $lang->project->typeList['other'] = 'Other Projects'; +$lang->project->divisionList['0'] = 'Disable'; +$lang->project->divisionList['1'] = 'Enable'; + $lang->project->waitProjects = 'Waiting Projects'; $lang->project->doingProjects = 'Ongoing Projects'; $lang->project->doingExecutions = 'Ongoing Executions'; diff --git a/module/project/lang/en.php b/module/project/lang/en.php index 544f00918f..e2e896ec13 100644 --- a/module/project/lang/en.php +++ b/module/project/lang/en.php @@ -127,6 +127,7 @@ $lang->project->realBeganAB = 'Actual Begin'; $lang->project->realEndAB = 'Actual End'; $lang->project->realBegan = 'Actual Begin'; $lang->project->realEnd = 'Actual End'; +$lang->project->division = 'Create Stages by Product'; $lang->project->bygrid = 'Kanban'; $lang->project->bylist = 'List'; $lang->project->bycard = 'Card'; @@ -177,6 +178,9 @@ $lang->project->typeList = array(); $lang->project->typeList['my'] = 'Projects Ownedbyme'; $lang->project->typeList['other'] = 'Other Projects'; +$lang->project->divisionList['0'] = 'Disable'; +$lang->project->divisionList['1'] = 'Enable'; + $lang->project->waitProjects = 'Waiting Projects'; $lang->project->doingProjects = 'Ongoing Projects'; $lang->project->doingExecutions = 'Ongoing Executions'; diff --git a/module/project/lang/fr.php b/module/project/lang/fr.php index 7168356f4d..0f5591b24d 100644 --- a/module/project/lang/fr.php +++ b/module/project/lang/fr.php @@ -127,6 +127,7 @@ $lang->project->realBeganAB = 'Actual Begin'; $lang->project->realEndAB = 'Actual End'; $lang->project->realBegan = 'Actual Began'; $lang->project->realEnd = 'Actual End'; +$lang->project->division = 'Create Stages by Product'; $lang->project->bygrid = 'Kanban'; $lang->project->bylist = 'List'; $lang->project->bycard = 'Card'; @@ -177,6 +178,9 @@ $lang->project->typeList = array(); $lang->project->typeList['my'] = 'Projects Ownedbyme'; $lang->project->typeList['other'] = 'Other Projects'; +$lang->project->divisionList['0'] = 'Disable'; +$lang->project->divisionList['1'] = 'Enable'; + $lang->project->waitProjects = 'Waiting Projects'; $lang->project->doingProjects = 'Ongoing Projects'; $lang->project->doingExecutions = 'Ongoing Executions'; diff --git a/module/project/lang/vi.php b/module/project/lang/vi.php index 7c3bd62dcd..8b3fec9d3a 100644 --- a/module/project/lang/vi.php +++ b/module/project/lang/vi.php @@ -75,6 +75,7 @@ $lang->project->dateRange = 'Duration'; $lang->project->to = ' to '; $lang->project->realEnd = 'Actual End'; $lang->project->realBegan = 'Actual Began'; +$lang->project->division = 'Create Stages by Product'; $lang->project->bygrid = 'Kanban'; $lang->project->bylist = 'List'; $lang->project->bycard = 'Card'; diff --git a/module/project/lang/zh-cn.php b/module/project/lang/zh-cn.php index 1d0e642dd1..5965287bd9 100644 --- a/module/project/lang/zh-cn.php +++ b/module/project/lang/zh-cn.php @@ -127,6 +127,7 @@ $lang->project->realBeganAB = '实际开始'; $lang->project->realEndAB = '实际完成'; $lang->project->realBegan = '实际开始日期'; $lang->project->realEnd = '实际完成日期'; +$lang->project->division = '按产品创建阶段'; $lang->project->bygrid = '看板'; $lang->project->bylist = '列表'; $lang->project->bycard = '卡片'; @@ -177,6 +178,9 @@ $lang->project->typeList = array(); $lang->project->typeList['my'] = '我负责的项目'; $lang->project->typeList['other'] = '其他项目'; +$lang->project->divisionList['0'] = '关闭'; +$lang->project->divisionList['1'] = '开启'; + $lang->project->waitProjects = '未开始的项目'; $lang->project->doingProjects = '进行中的项目'; $lang->project->doingExecutions = '进行中的执行(最近1个)'; diff --git a/module/project/view/create.html.php b/module/project/view/create.html.php index d994c4f549..5c9a32a140 100755 --- a/module/project/view/create.html.php +++ b/module/project/view/create.html.php @@ -175,6 +175,10 @@
+ + project->division;?> + project->divisionList, '0');?> + execution->team;?> diff --git a/module/project/view/edit.html.php b/module/project/view/edit.html.php index d787c89338..00ece4458c 100755 --- a/module/project/view/edit.html.php +++ b/module/project/view/edit.html.php @@ -175,6 +175,12 @@ + division):?> + + project->division;?> + project->divisionList, $project->division);?> + + model == 'kanban'):?> execution->team;?> diff --git a/module/stage/model.php b/module/stage/model.php index 86c3fb0b88..92fca02779 100644 --- a/module/stage/model.php +++ b/module/stage/model.php @@ -123,17 +123,22 @@ class stageModel extends model */ public function getStages($orderBy = 'id_desc', $projectID = 0) { - $stages = $this->dao->select('id,name,type,percent,openedBy as createdBy,begin as createdDate,lastEditedBy as editedBy,end as editedDate,deleted') - ->from(TABLE_EXECUTION) - ->where('type')->in('sprint,stage,kanban') - ->andWhere('deleted')->eq('0') - ->andWhere('vision')->eq($this->config->vision) - ->beginIF(!$this->app->user->admin)->andWhere('id')->in($this->app->user->view->sprints)->fi() - ->beginIF($projectID)->andWhere('project')->eq($projectID)->fi() - ->orderBy($orderBy) - ->fetchAll('id'); - $stages = !empty($stages) ? $stages : $this->dao->select('*')->from(TABLE_STAGE)->where('deleted')->eq(0)->orderBy($orderBy)->fetchAll('id'); - return $stages; + if($projectID) + { + return $this->dao->select('id,name,type,percent,openedBy as createdBy,begin as createdDate,lastEditedBy as editedBy,end as editedDate,deleted') + ->from(TABLE_EXECUTION) + ->where('type')->in('sprint,stage,kanban') + ->andWhere('deleted')->eq('0') + ->andWhere('vision')->eq($this->config->vision) + ->beginIF(!$this->app->user->admin)->andWhere('id')->in($this->app->user->view->sprints)->fi() + ->andWhere('project')->eq($projectID) + ->orderBy($orderBy) + ->fetchAll('id'); + } + else + { + return $this->dao->select('*')->from(TABLE_STAGE)->where('deleted')->eq(0)->orderBy($orderBy)->fetchAll('id'); + } } /**