From 5f17eee996b216776e3398d011ec47796cb9b255 Mon Sep 17 00:00:00 2001 From: liugang Date: Wed, 14 Sep 2022 08:48:41 +0800 Subject: [PATCH 001/712] * Add sql to update 17.6.1. --- db/update17.6.1.sql | 2 ++ db/zentao.sql | 2 ++ 2 files changed, 4 insertions(+) create mode 100644 db/update17.6.1.sql diff --git a/db/update17.6.1.sql b/db/update17.6.1.sql new file mode 100644 index 0000000000..6c2f458e73 --- /dev/null +++ b/db/update17.6.1.sql @@ -0,0 +1,2 @@ +ALTER TABLE `zt_product` ADD `shadow` tinyint(1) unsigned NOT NULL AFTER `code`; +ALTER TABLE `zt_project` ADD `hasProduct` tinyint(1) unsigned NOT NULL AFTER `code`; diff --git a/db/zentao.sql b/db/zentao.sql index d5266fc5e3..b39793fd2a 100755 --- a/db/zentao.sql +++ b/db/zentao.sql @@ -1098,6 +1098,7 @@ CREATE TABLE IF NOT EXISTS `zt_product` ( `program` mediumint(8) unsigned NOT NULL, `name` varchar(90) NOT NULL, `code` varchar(45) NOT NULL, + `shadow` tinyint(1) unsigned NOT NULL, `bind` enum('0','1') NOT NULL DEFAULT '0', `line` mediumint(8) NOT NULL, `type` varchar(30) NOT NULL default 'normal', @@ -1146,6 +1147,7 @@ CREATE TABLE IF NOT EXISTS `zt_project` ( `project` mediumint(8) NOT NULL DEFAULT 0, `model` char(30) NOT NULL, `type` char(30) NOT NULL DEFAULT 'sprint', + `hasProduct` tinyint(1) unsigned NOT NULL DEFAULT 1, `lifetime` char(30) NOT NULL DEFAULT '', `budget` varchar(30) NOT NULL DEFAULT '0', `budgetUnit` char(30) NOT NULL DEFAULT 'CNY', From fd873696f5e239de0a17c5ddcdb616730bbf7610 Mon Sep 17 00:00:00 2001 From: liugang Date: Wed, 14 Sep 2022 10:40:40 +0800 Subject: [PATCH 002/712] * Add lang items for the shadow field. --- module/product/lang/de.php | 1 + module/product/lang/en.php | 1 + module/product/lang/fr.php | 1 + module/product/lang/vi.php | 1 + module/product/lang/zh-cn.php | 1 + 5 files changed, 5 insertions(+) diff --git a/module/product/lang/de.php b/module/product/lang/de.php index a9adf7e665..98ca33b15b 100644 --- a/module/product/lang/de.php +++ b/module/product/lang/de.php @@ -102,6 +102,7 @@ $lang->product->id = 'ID'; $lang->product->program = "Program"; $lang->product->name = 'Name'; $lang->product->code = 'Alias'; +$lang->product->shadow = "Shadow {$lang->productCommon}"; $lang->product->line = "{$lang->productCommon} Line"; $lang->product->lineName = "{$lang->productCommon} Line Name"; $lang->product->order = 'Sortierung'; diff --git a/module/product/lang/en.php b/module/product/lang/en.php index 5f07eb8736..547f85150f 100644 --- a/module/product/lang/en.php +++ b/module/product/lang/en.php @@ -102,6 +102,7 @@ $lang->product->id = 'ID'; $lang->product->program = "Program"; $lang->product->name = "{$lang->productCommon} Name"; $lang->product->code = 'Code'; +$lang->product->shadow = "Shadow {$lang->productCommon}"; $lang->product->line = "{$lang->productCommon} Line"; $lang->product->lineName = "{$lang->productCommon} Line Name"; $lang->product->order = 'Rank'; diff --git a/module/product/lang/fr.php b/module/product/lang/fr.php index fc9b29549d..9b05c3ca37 100644 --- a/module/product/lang/fr.php +++ b/module/product/lang/fr.php @@ -102,6 +102,7 @@ $lang->product->id = 'ID'; $lang->product->program = "Program"; $lang->product->name = "Nom du {$lang->productCommon}"; $lang->product->code = 'Code'; +$lang->product->shadow = "Shadow {$lang->productCommon}"; $lang->product->line = "{$lang->productCommon} Line"; $lang->product->lineName = "{$lang->productCommon} Line Name"; $lang->product->order = 'Rang'; diff --git a/module/product/lang/vi.php b/module/product/lang/vi.php index 718c9a68a6..40fa78b39a 100644 --- a/module/product/lang/vi.php +++ b/module/product/lang/vi.php @@ -86,6 +86,7 @@ $lang->product->id = 'ID'; $lang->product->program = "Program"; $lang->product->name = "Tên {$lang->productCommon}"; $lang->product->code = 'Mã'; +$lang->product->shadow = "Shadow {$lang->productCommon}"; $lang->product->line = "{$lang->productCommon} Line"; $lang->product->lineName = "{$lang->productCommon} Line Name"; $lang->product->order = 'Đánh giá'; diff --git a/module/product/lang/zh-cn.php b/module/product/lang/zh-cn.php index e5c1184c44..38cf03874f 100644 --- a/module/product/lang/zh-cn.php +++ b/module/product/lang/zh-cn.php @@ -102,6 +102,7 @@ $lang->product->id = '编号'; $lang->product->program = "所属项目集"; $lang->product->name = "{$lang->productCommon}名称"; $lang->product->code = "{$lang->productCommon}代号"; +$lang->product->shadow = "是否影子{$lang->productCommon}"; $lang->product->line = "{$lang->productCommon}线"; $lang->product->lineName = "{$lang->productCommon}线名称"; $lang->product->order = '排序'; From 4a7986fa00ba77974b9e02f7c8a098af46347358 Mon Sep 17 00:00:00 2001 From: liugang Date: Wed, 14 Sep 2022 10:57:51 +0800 Subject: [PATCH 003/712] * Add lang items of the hasProduct field of project. --- module/project/lang/de.php | 6 ++++++ module/project/lang/en.php | 6 ++++++ module/project/lang/fr.php | 6 ++++++ module/project/lang/vi.php | 6 ++++++ module/project/lang/zh-cn.php | 6 ++++++ 5 files changed, 30 insertions(+) diff --git a/module/project/lang/de.php b/module/project/lang/de.php index 9f5a4f4173..2b4f15db07 100644 --- a/module/project/lang/de.php +++ b/module/project/lang/de.php @@ -79,6 +79,7 @@ $lang->project->name = 'Name'; $lang->project->category = 'Category'; $lang->project->desc = 'Description'; $lang->project->code = 'Code'; +$lang->project->hasProduct = 'Has Product'; $lang->project->copy = 'Copy'; $lang->project->begin = 'Begin'; $lang->project->end = 'End'; @@ -172,6 +173,11 @@ $lang->project->plan = 'Plan'; $lang->project->createKanban = 'Create Kanban'; $lang->project->kanban = 'Kanban'; +/* Project Kanban. */ +$lang->project->projectTypeList = array(); +$lang->project->projectTypeList[1] = 'Has Product'; +$lang->project->projectTypeList[0] = 'No Product'; + /* Project Kanban. */ $lang->project->typeList = array(); $lang->project->typeList['my'] = 'Projects Ownedbyme'; diff --git a/module/project/lang/en.php b/module/project/lang/en.php index 09edd1ef37..45db2db3bd 100644 --- a/module/project/lang/en.php +++ b/module/project/lang/en.php @@ -79,6 +79,7 @@ $lang->project->name = 'Name'; $lang->project->category = 'Category'; $lang->project->desc = 'Description'; $lang->project->code = 'Code'; +$lang->project->hasProduct = 'Has Product'; $lang->project->copy = 'Copy'; $lang->project->begin = 'Planned Begin'; $lang->project->end = 'Planned End'; @@ -172,6 +173,11 @@ $lang->project->plan = 'Plan'; $lang->project->createKanban = 'Create Kanban'; $lang->project->kanban = 'Kanban'; +/* Project Kanban. */ +$lang->project->projectTypeList = array(); +$lang->project->projectTypeList[1] = 'Has Product'; +$lang->project->projectTypeList[0] = 'No Product'; + /* Project Kanban. */ $lang->project->typeList = array(); $lang->project->typeList['my'] = 'Projects Ownedbyme'; diff --git a/module/project/lang/fr.php b/module/project/lang/fr.php index 6a23ce3d6a..96d872c13d 100644 --- a/module/project/lang/fr.php +++ b/module/project/lang/fr.php @@ -79,6 +79,7 @@ $lang->project->name = 'Name'; $lang->project->category = 'Category'; $lang->project->desc = 'Description'; $lang->project->code = 'Code'; +$lang->project->hasProduct = 'Has Product'; $lang->project->copy = 'Copy'; $lang->project->begin = 'Begin'; $lang->project->end = 'End'; @@ -172,6 +173,11 @@ $lang->project->plan = 'Plan'; $lang->project->createKanban = 'Create Kanban'; $lang->project->kanban = 'Kanban'; +/* Project Kanban. */ +$lang->project->projectTypeList = array(); +$lang->project->projectTypeList[1] = 'Has Product'; +$lang->project->projectTypeList[0] = 'No Product'; + /* Project Kanban. */ $lang->project->typeList = array(); $lang->project->typeList['my'] = 'Projects Ownedbyme'; diff --git a/module/project/lang/vi.php b/module/project/lang/vi.php index 7c3bd62dcd..162e4ca1fe 100644 --- a/module/project/lang/vi.php +++ b/module/project/lang/vi.php @@ -60,6 +60,7 @@ $lang->project->name = 'Name'; $lang->project->category = 'Category'; $lang->project->desc = 'Description'; $lang->project->code = 'Code'; +$lang->project->hasProduct = 'Has Product'; $lang->project->copy = 'Copy'; $lang->project->begin = 'Begin'; $lang->project->end = 'End'; @@ -109,6 +110,11 @@ $lang->project->future = 'TBD'; $lang->project->moreProject = 'More Project'; $lang->project->days = 'Available Days'; +/* Project Kanban. */ +$lang->project->projectTypeList = array(); +$lang->project->projectTypeList[1] = 'Has Product'; +$lang->project->projectTypeList[0] = 'No Product'; + $lang->project->productNotEmpty = 'Please link products or create products.'; $lang->project->existProductName = 'Product name already exists.'; $lang->project->changeProgram = '%s > Change project'; diff --git a/module/project/lang/zh-cn.php b/module/project/lang/zh-cn.php index 5e4b4bd225..3dc85712a6 100644 --- a/module/project/lang/zh-cn.php +++ b/module/project/lang/zh-cn.php @@ -79,6 +79,7 @@ $lang->project->name = '项目名称'; $lang->project->category = '项目类型'; $lang->project->desc = '项目描述'; $lang->project->code = '项目代号'; +$lang->project->hasProduct = '是否关联产品'; $lang->project->copy = '复制项目'; $lang->project->begin = '计划开始'; $lang->project->end = '计划完成'; @@ -172,6 +173,11 @@ $lang->project->plan = '所属计划'; $lang->project->createKanban = '添加看板'; $lang->project->kanban = '看板'; +/* Project Kanban. */ +$lang->project->projectTypeList = array(); +$lang->project->projectTypeList[1] = '产品型项目'; +$lang->project->projectTypeList[0] = '无产品项目'; + /* Project Kanban. */ $lang->project->typeList = array(); $lang->project->typeList['my'] = '我负责的项目'; From b45b3e3661022ded82de2ad2b2899f13cafbae15 Mon Sep 17 00:00:00 2001 From: liugang Date: Wed, 14 Sep 2022 14:07:00 +0800 Subject: [PATCH 004/712] * Finish task #68999. --- module/product/model.php | 2 ++ module/project/control.php | 2 +- module/project/js/create.js | 7 +++++++ module/project/model.php | 32 ++++++++++++++++------------- module/project/view/create.html.php | 4 ++++ 5 files changed, 32 insertions(+), 15 deletions(-) diff --git a/module/product/model.php b/module/product/model.php index 95766d7eea..cd622a11e0 100644 --- a/module/product/model.php +++ b/module/product/model.php @@ -267,6 +267,7 @@ class productModel extends model return $this->dao->select('t1.id as id,t1.*')->from(TABLE_PRODUCT)->alias('t1') ->leftJoin(TABLE_PROGRAM)->alias('t2')->on('t1.program = t2.id') ->where('t1.deleted')->eq(0) + ->andWhere('t1.shadow')->eq(0) ->beginIF($programID)->andWhere('t1.program')->eq($programID)->fi() ->beginIF($line > 0)->andWhere('t1.line')->eq($line)->fi() ->beginIF(!$this->app->user->admin)->andWhere('t1.id')->in($this->app->user->view->products)->fi() @@ -323,6 +324,7 @@ class productModel extends model ->leftJoin(TABLE_PROGRAM)->alias('t2')->on('t1.program = t2.id') ->where($productQuery) ->andWhere('t1.deleted')->eq(0) + ->andWhere('t1.shadow')->eq(0) ->beginIF(!$this->app->user->admin)->andWhere('t1.id')->in($this->app->user->view->products)->fi() ->andWhere('t1.vision')->eq($this->config->vision)->fi() ->orderBy('t1.order_asc') diff --git a/module/project/control.php b/module/project/control.php index 56282a0926..f34939be19 100644 --- a/module/project/control.php +++ b/module/project/control.php @@ -447,7 +447,7 @@ class project extends control $this->loadModel('action')->create('project', $projectID, 'opened'); /* Link the plan stories. */ - if(!empty($_POST['plans'])) + if(!empty($_POST['hasProduct']) && !empty($_POST['plans'])) { $planIdList = array(); foreach($_POST['plans'] as $plans) diff --git a/module/project/js/create.js b/module/project/js/create.js index 795cbd72aa..9f0033e7bf 100644 --- a/module/project/js/create.js +++ b/module/project/js/create.js @@ -1,5 +1,12 @@ $(function() { + $('[name=hasProduct]').change(function() + { + const hasProduct = $('[name=hasProduct]:checked').val(); + + $('#productTitle, #linkPlan').closest('tr').toggle(hasProduct == 1); + }); + $('#copyProjects a').click(function() { setCopyProject($(this).data('id')); diff --git a/module/project/model.php b/module/project/model.php index 64e107c2ab..eebdb9223d 100644 --- a/module/project/model.php +++ b/module/project/model.php @@ -1112,7 +1112,7 @@ class projectModel extends model if(isset($this->config->setCode) and $this->config->setCode == 0) unset($project->code); $linkedProductsCount = 0; - if(isset($_POST['products'])) + if($project->hasProduct && isset($_POST['products'])) { foreach($_POST['products'] as $product) { @@ -1126,7 +1126,7 @@ class projectModel extends model $program = $this->dao->select('*')->from(TABLE_PROGRAM)->where('id')->eq($project->parent)->fetch(); /* Judge products not empty. */ - if(empty($linkedProductsCount) and !isset($_POST['newProduct'])) + if($project->hasProduct && empty($linkedProductsCount) and !isset($_POST['newProduct'])) { dao::$errors['products0'] = $this->lang->project->productNotEmpty; return false; @@ -1160,7 +1160,7 @@ class projectModel extends model } /* When select create new product, product name cannot be empty and duplicate. */ - if(isset($_POST['newProduct'])) + if($project->hasProduct && isset($_POST['newProduct'])) { if(empty($_POST['productName'])) { @@ -1265,11 +1265,12 @@ class projectModel extends model $this->updateProducts($projectID); - if(isset($_POST['newProduct']) or (!$project->parent and empty($linkedProductsCount))) + if(!$project->hasProduct or isset($_POST['newProduct']) or (!$project->parent and empty($linkedProductsCount))) { /* If parent not empty, link products or create products. */ $product = new stdclass(); - $product->name = $this->post->productName ? $this->post->productName : $project->name; + $product->name = !$project->hasProduct ? "{$project->name}_{$projectID}" : ($this->post->productName ? $this->post->productName : $project->name); + $product->shadow = (int)empty($project->hasProduct); $product->bind = $this->post->parent ? 0 : 1; $product->program = $project->parent ? current(array_filter(explode(',', $program->path))) : 0; $product->acl = $project->acl == 'open' ? 'open' : 'private'; @@ -1292,15 +1293,18 @@ class projectModel extends model $this->dao->insert(TABLE_PROJECTPRODUCT)->data($projectProduct)->exec(); - /* Create doc lib. */ - $this->app->loadLang('doc'); - $lib = new stdclass(); - $lib->product = $productID; - $lib->name = $this->lang->doclib->main['product']; - $lib->type = 'product'; - $lib->main = '1'; - $lib->acl = 'default'; - $this->dao->insert(TABLE_DOCLIB)->data($lib)->exec(); + if($project->hasProduct) + { + /* Create doc lib. */ + $this->app->loadLang('doc'); + $lib = new stdclass(); + $lib->product = $productID; + $lib->name = $this->lang->doclib->main['product']; + $lib->type = 'product'; + $lib->main = '1'; + $lib->acl = 'default'; + $this->dao->insert(TABLE_DOCLIB)->data($lib)->exec(); + } } /* Save order. */ diff --git a/module/project/view/create.html.php b/module/project/view/create.html.php index d994c4f549..6a984bc8a8 100755 --- a/module/project/view/create.html.php +++ b/module/project/view/create.html.php @@ -72,6 +72,10 @@ + + project->type;?> + project->projectTypeList, 1);?> + project->PM;?> From e3c1cd99c88b1b52a64bc90cadc54e19dd6ad041 Mon Sep 17 00:00:00 2001 From: liugang Date: Wed, 14 Sep 2022 14:43:01 +0800 Subject: [PATCH 005/712] * The project hasn't product don't related with the normal products. --- module/project/model.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/module/project/model.php b/module/project/model.php index eebdb9223d..a700ab4eca 100644 --- a/module/project/model.php +++ b/module/project/model.php @@ -1263,7 +1263,7 @@ class projectModel extends model $lib->vision = zget($project, 'vision', 'rnd'); $this->dao->insert(TABLE_DOCLIB)->data($lib)->exec(); - $this->updateProducts($projectID); + if($project->hasProduct) $this->updateProducts($projectID); if(!$project->hasProduct or isset($_POST['newProduct']) or (!$project->parent and empty($linkedProductsCount))) { From e885261255791f5688e5a081ba20172d53a0161b Mon Sep 17 00:00:00 2001 From: liugang Date: Wed, 14 Sep 2022 14:52:45 +0800 Subject: [PATCH 006/712] * Don't display the shadow products when create a project, see task #68999. --- module/program/model.php | 1 + 1 file changed, 1 insertion(+) diff --git a/module/program/model.php b/module/program/model.php index c2d23738b1..5c3c36218c 100644 --- a/module/program/model.php +++ b/module/program/model.php @@ -86,6 +86,7 @@ class programModel extends model $views = empty($append) ? $this->app->user->view->products : $this->app->user->view->products . ",$append"; $products = $this->dao->select('*')->from(TABLE_PRODUCT) ->where('deleted')->eq(0) + ->andWhere('shadow')->eq(0) ->andWhere('vision')->eq($this->config->vision) ->beginIF($mode == 'assign')->andWhere('program')->eq($programID)->fi() ->beginIF(strpos($status, 'noclosed') !== false)->andWhere('status')->ne('closed')->fi() From e9ce915eec2e9012a0f05bb789bf0798f3fa63b2 Mon Sep 17 00:00:00 2001 From: liugang Date: Wed, 14 Sep 2022 16:01:26 +0800 Subject: [PATCH 007/712] * Finish task #68998. --- module/project/config.php | 7 +++++++ module/project/model.php | 3 +++ 2 files changed, 10 insertions(+) diff --git a/module/project/config.php b/module/project/config.php index db2d222cdb..5596ff251f 100644 --- a/module/project/config.php +++ b/module/project/config.php @@ -74,6 +74,13 @@ $config->project->datatable->fieldList['status']['required'] = 'no'; $config->project->datatable->fieldList['status']['sort'] = 'yes'; $config->project->datatable->fieldList['status']['pri'] = '2'; +$config->project->datatable->fieldList['hasProduct']['title'] = 'type'; +$config->project->datatable->fieldList['hasProduct']['fixed'] = 'left'; +$config->project->datatable->fieldList['hasProduct']['width'] = '100'; +$config->project->datatable->fieldList['hasProduct']['required'] = 'no'; +$config->project->datatable->fieldList['hasProduct']['sort'] = 'yes'; +$config->project->datatable->fieldList['hasProduct']['pri'] = '2'; + $config->project->datatable->fieldList['begin']['title'] = 'begin'; $config->project->datatable->fieldList['begin']['fixed'] = 'no'; $config->project->datatable->fieldList['begin']['width'] = '115'; diff --git a/module/project/model.php b/module/project/model.php index a700ab4eca..8aaa6a4bf7 100644 --- a/module/project/model.php +++ b/module/project/model.php @@ -2051,6 +2051,9 @@ class projectModel extends model case 'status': echo " " . zget($this->lang->project->statusList, $project->status) . ""; break; + case 'hasProduct': + echo zget($this->lang->project->projectTypeList, $project->hasProduct); + break; case 'budget': echo $budgetTitle; break; From 8045b87d5dbf0198bcf7e06767375c58aa83a948 Mon Sep 17 00:00:00 2001 From: tanghucheng Date: Wed, 14 Sep 2022 16:11:51 +0800 Subject: [PATCH 008/712] * Finish task #69000. --- module/project/config.php | 2 ++ 1 file changed, 2 insertions(+) diff --git a/module/project/config.php b/module/project/config.php index db2d222cdb..678d2de600 100644 --- a/module/project/config.php +++ b/module/project/config.php @@ -140,6 +140,7 @@ $config->project->search['fields']['name'] = $lang->project->name; if(!isset($config->setCode) or $config->setCode == 1) $config->project->search['fields']['code'] = $lang->project->code; $config->project->search['fields']['id'] = $lang->project->id; $config->project->search['fields']['model'] = $lang->project->model; +$config->project->search['fields']['hasProduct'] = $lang->project->type; $config->project->search['fields']['parent'] = $lang->project->parent; $config->project->search['fields']['status'] = $lang->project->status; $config->project->search['fields']['desc'] = $lang->project->desc; @@ -158,6 +159,7 @@ $config->project->search['params']['name'] = array('operator' => 'incl if(!isset($config->setCode) or $config->setCode == 1) $config->project->search['params']['code'] = array('operator' => '=', 'control' => 'input' , 'values' => ''); $config->project->search['params']['id'] = array('operator' => '=' , 'control' => 'input' , 'values' => ''); $config->project->search['params']['model'] = array('operator' => '=' , 'control' => 'select', 'values' => $lang->project->modelList); +$config->project->search['params']['hasProduct'] = array('operator' => '=' , 'control' => 'select', 'values' => array('' => '') + $lang->project->projectTypeList); $config->project->search['params']['parent'] = array('operator' => '=' , 'control' => 'select', 'values' => ''); $config->project->search['params']['status'] = array('operator' => '=' , 'control' => 'select', 'values' => $lang->project->statusList); $config->project->search['params']['desc'] = array('operator' => 'include', 'control' => 'input' , 'values' => ''); From d6c8e4d1d928d279e2acf988eaabc35cac3ee744 Mon Sep 17 00:00:00 2001 From: liuruogu Date: Wed, 14 Sep 2022 08:37:20 +0000 Subject: [PATCH 009/712] * Finish task #69012. --- module/weekly/model.php | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/module/weekly/model.php b/module/weekly/model.php index 44f683f754..d0e75ee0f8 100755 --- a/module/weekly/model.php +++ b/module/weekly/model.php @@ -46,9 +46,15 @@ class weeklyModel extends model $weeks = $this->getWeekPairs($begin, $end); $current = zget($weeks, $date, current($weeks)); - $selectHtml = "
"; - $selectHtml .= html::a('###', $this->lang->weekly->common . $this->lang->colon . $project->name, '', "class='btn'"); - $selectHtml .= '
'; + + $selectHtml = ''; + + if($project->hasProduct === '1') + { + $selectHtml .= "
"; + $selectHtml .= html::a('###', $this->lang->weekly->common . $this->lang->colon . $project->name, '', "class='btn'"); + $selectHtml .= '
'; + } $selectHtml .= "
"; $selectHtml .= "
"; From 6d750abaf0e8edb08c795e699f79db51f322dbe1 Mon Sep 17 00:00:00 2001 From: liugang Date: Wed, 14 Sep 2022 16:37:27 +0800 Subject: [PATCH 010/712] * Finish task #68996. --- module/product/control.php | 1 + module/product/view/browse.html.php | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/module/product/control.php b/module/product/control.php index ee3d3e1427..72c732df21 100644 --- a/module/product/control.php +++ b/module/product/control.php @@ -347,6 +347,7 @@ class product extends control $this->view->storyType = $storyType; $this->view->from = $this->app->tab; $this->view->modulePairs = $showModule ? $this->tree->getModulePairs($productID, 'story', $showModule) : array(); + $this->view->project = $this->loadModel('project')->getByID($projectID); $this->display(); } diff --git a/module/product/view/browse.html.php b/module/product/view/browse.html.php index 67099b3ebe..e99aeab382 100644 --- a/module/product/view/browse.html.php +++ b/module/product/view/browse.html.php @@ -208,7 +208,7 @@ $projectIDParam = $isProjectStory ? "projectID=$projectID&" : ''; $buttonTitle = $lang->execution->linkStoryByPlan; $dataToggle = 'data-toggle="modal"'; } - if(common::hasPriv('projectstory', 'linkStory')) + if(!empty($project->hasProduct) && common::hasPriv('projectstory', 'linkStory')) { $buttonLink = $this->createLink('projectstory', 'linkStory', "project=$projectID"); $buttonTitle = $lang->execution->linkStory; From 41fad5460c24f749798798c0fb8f74ffbc08a709 Mon Sep 17 00:00:00 2001 From: liuruogu Date: Wed, 14 Sep 2022 08:41:29 +0000 Subject: [PATCH 011/712] * Finish task #69012. --- module/weekly/model.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/module/weekly/model.php b/module/weekly/model.php index d0e75ee0f8..657588810b 100755 --- a/module/weekly/model.php +++ b/module/weekly/model.php @@ -49,7 +49,7 @@ class weeklyModel extends model $selectHtml = ''; - if($project->hasProduct === '1') + if($project->model !== 'waterfall') { $selectHtml .= "
"; $selectHtml .= html::a('###', $this->lang->weekly->common . $this->lang->colon . $project->name, '', "class='btn'"); From d1fbc1068b83bc854a3d4d62b196bc392181554f Mon Sep 17 00:00:00 2001 From: liuruogu Date: Wed, 14 Sep 2022 08:51:17 +0000 Subject: [PATCH 012/712] * Finish task #69012. --- module/weekly/model.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/module/weekly/model.php b/module/weekly/model.php index 657588810b..c9238409f4 100755 --- a/module/weekly/model.php +++ b/module/weekly/model.php @@ -49,7 +49,7 @@ class weeklyModel extends model $selectHtml = ''; - if($project->model !== 'waterfall') + if(!($project->hasProduct === '0' && $project->model === 'waterfall')) { $selectHtml .= "
"; $selectHtml .= html::a('###', $this->lang->weekly->common . $this->lang->colon . $project->name, '', "class='btn'"); From 7d02ac1f96c5ffa0ab9191be5ff62013e40d1e2d Mon Sep 17 00:00:00 2001 From: liuruogu Date: Wed, 14 Sep 2022 08:59:36 +0000 Subject: [PATCH 013/712] * Finish task #69012. --- module/weekly/model.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/module/weekly/model.php b/module/weekly/model.php index c9238409f4..400c59ac5d 100755 --- a/module/weekly/model.php +++ b/module/weekly/model.php @@ -49,7 +49,7 @@ class weeklyModel extends model $selectHtml = ''; - if(!($project->hasProduct === '0' && $project->model === 'waterfall')) + if(!empty($project->hasProduct)) { $selectHtml .= "
"; $selectHtml .= html::a('###', $this->lang->weekly->common . $this->lang->colon . $project->name, '', "class='btn'"); From f521bbb5a689fbebb717bd09687e0f0a6ffe6f08 Mon Sep 17 00:00:00 2001 From: lanzongjun Date: Wed, 14 Sep 2022 17:09:41 +0800 Subject: [PATCH 014/712] * finish task #69244 --- module/custom/control.php | 2 +- module/custom/view/mode.html.php | 2 +- module/install/lang/de.php | 6 +++--- module/install/lang/en.php | 6 +++--- module/install/lang/fr.php | 6 +++--- module/install/lang/zh-cn.php | 6 +++--- module/upgrade/lang/zh-cn.php | 4 ++-- 7 files changed, 16 insertions(+), 16 deletions(-) diff --git a/module/custom/control.php b/module/custom/control.php index a770c7b2e6..5f46e7eb59 100644 --- a/module/custom/control.php +++ b/module/custom/control.php @@ -627,7 +627,7 @@ class custom extends control */ public function mode() { - $mode = zget($this->config->global, 'mode', 'classic'); + $mode = zget($this->config->global, 'mode', 'lite'); if($this->post->mode and $this->post->mode != $mode) // If mode value change. { $mode = fixer::input('post')->get('mode'); diff --git a/module/custom/view/mode.html.php b/module/custom/view/mode.html.php index 2d480ed65c..554321244b 100644 --- a/module/custom/view/mode.html.php +++ b/module/custom/view/mode.html.php @@ -24,7 +24,7 @@

- +

upgrade->selectedModeTips['new'];?>

diff --git a/module/install/lang/de.php b/module/install/lang/de.php index d6d35450bc..ce1ae7502b 100644 --- a/module/install/lang/de.php +++ b/module/install/lang/de.php @@ -46,7 +46,7 @@ $lang->install->guideVideo = 'https://dl.cnezsoft.com/vedio/zentaoconce $lang->install->introductionContent = <<

Dear users,

-

Welcome to ZenTao project management system. ZenTao has two managment modes in version 15.0 and up. One is the classic management mode, providing two core features, Product and Project; the other is a new project management mode, with Program and Execution added. The following is an introduction to the new mode:

+

Welcome to ZenTao project management system. ZenTao has two managment modes in version 15.0 and up. One is the lite management mode, providing two core features, Product and Project; the other is a new project management mode, with Program and Execution added. The following is an introduction to the new mode:

Program

Program is used to manage a group of products and projects, and the company executives or PMO can use it for strategic planning.

@@ -292,8 +292,8 @@ EOT; $lang->install->product = array('chanzhi', 'zdoo'); -$lang->install->modeList['classic'] = 'Classic mode'; -$lang->install->modeList['new'] = 'Program mode'; +$lang->install->modeList['lite'] = 'Lite mode'; +$lang->install->modeList['new'] = 'Program mode'; $lang->install->promotion = "Produkte von Nature Easy Soft:"; diff --git a/module/install/lang/en.php b/module/install/lang/en.php index b29a9b7c49..0873b7351c 100644 --- a/module/install/lang/en.php +++ b/module/install/lang/en.php @@ -46,7 +46,7 @@ $lang->install->guideVideo = 'https://dl.cnezsoft.com/vedio/zentaoconce $lang->install->introductionContent = <<

Dear users,

-

Welcome to ZenTao project management system. ZenTao has two managment modes in version 15.0 and up. One is the classic management mode, providing two core features, Product and Project; the other is a new project management mode, with Program and Execution added. The following is an introduction to the new mode:

+

Welcome to ZenTao project management system. ZenTao has two managment modes in version 15.0 and up. One is the lite management mode, providing two core features, Product and Project; the other is a new project management mode, with Program and Execution added. The following is an introduction to the new mode:

Program

Program is used to manage a group of products and projects, and the company executives or PMO can use it for strategic planning.

@@ -292,8 +292,8 @@ EOT; $lang->install->product = array('chanzhi', 'zdoo', 'ydisk', 'meshiot'); -$lang->install->modeList['classic'] = 'Classic mode'; -$lang->install->modeList['new'] = 'Program mode'; +$lang->install->modeList['lite'] = 'Lite mode'; +$lang->install->modeList['new'] = 'Program mode'; $lang->install->promotion = "Products also from EasyCorp:"; diff --git a/module/install/lang/fr.php b/module/install/lang/fr.php index 02547f7a3b..6e8b3ae374 100644 --- a/module/install/lang/fr.php +++ b/module/install/lang/fr.php @@ -46,7 +46,7 @@ $lang->install->guideVideo = 'https://dl.cnezsoft.com/vedio/zentaoconce $lang->install->introductionContent = <<

Dear users,

-

Welcome to ZenTao project management system. ZenTao has two managment modes in version 15.0 and up. One is the classic management mode, providing two core features, Product and Project; the other is a new project management mode, with Program and Execution added. The following is an introduction to the new mode:

+

Welcome to ZenTao project management system. ZenTao has two managment modes in version 15.0 and up. One is the lite management mode, providing two core features, Product and Project; the other is a new project management mode, with Program and Execution added. The following is an introduction to the new mode:

Program

Program is used to manage a group of products and projects, and the company executives or PMO can use it for strategic planning.

@@ -292,8 +292,8 @@ EOT; $lang->install->product = array('chanzhi', 'zdoo'); -$lang->install->modeList['classic'] = 'Classic mode'; -$lang->install->modeList['new'] = 'Program mode'; +$lang->install->modeList['lite'] = 'Lite mode'; +$lang->install->modeList['new'] = 'Program mode'; $lang->install->promotion = "Autres produits de l'équipe Nature Easy Soft :"; diff --git a/module/install/lang/zh-cn.php b/module/install/lang/zh-cn.php index 2d88ec7133..02f9db9690 100644 --- a/module/install/lang/zh-cn.php +++ b/module/install/lang/zh-cn.php @@ -46,7 +46,7 @@ $lang->install->guideVideo = 'https://dl.cnezsoft.com/vedio/program0716 $lang->install->introductionContent = <<

尊敬的用户您好,欢迎您使用禅道项目管理系统。

-

禅道自15系列开始提供了两种使用模式,一种是经典管理模式,功能较为精简,主要提供了产品和项目两个核心功能;另一种是全新项目集管理模式,增加了项目集和执行的概念。下面是全新项目集管理模式的介绍:

+

禅道自15系列开始提供了两种使用模式,一种是迅捷模式,功能较为精简,主要提供了产品和项目两个核心功能;另一种是综合模式,增加了项目集和执行的概念。下面是综合模式的介绍:

项目集

项目集用来管理一组相关的产品和项目,公司高层或者PMO可以用来做战略规划。

@@ -292,8 +292,8 @@ EOT; $lang->install->product = array('chanzhi', 'zdoo', 'xuanxuan', 'ydisk', 'meshiot'); -$lang->install->modeList['classic'] = '经典管理模式'; -$lang->install->modeList['new'] = '全新项目集管理模式'; +$lang->install->modeList['lite'] = '迅捷模式'; +$lang->install->modeList['new'] = '综合模式'; $lang->install->promotion = "为您推荐易软天创旗下其他产品:"; diff --git a/module/upgrade/lang/zh-cn.php b/module/upgrade/lang/zh-cn.php index 97450262e1..c912d22c2f 100644 --- a/module/upgrade/lang/zh-cn.php +++ b/module/upgrade/lang/zh-cn.php @@ -93,8 +93,8 @@ $lang->upgrade->mergeProgramDesc = <<选择历史{$lang->projectCommon}作为迭代升级后,用户可以选择这个执行所属的项目集、项目或新建项目集、项目。

EOD; -$lang->upgrade->to15Mode['classic'] = '经典管理模式'; -$lang->upgrade->to15Mode['new'] = '全新项目集管理模式'; +$lang->upgrade->to15Mode['lite'] = '迅捷模式'; +$lang->upgrade->to15Mode['new'] = '综合模式'; $lang->upgrade->selectedModeTips['classic'] = '后续您还可以在后台-自定义里面切换为全新项目集管理的模式。'; $lang->upgrade->selectedModeTips['new'] = '切换为项目集管理模式需要对之前的数据进行归并处理,系统会引导您完成这个操作。'; From 710b11ff0ca39c5b99de510341596210363cf315 Mon Sep 17 00:00:00 2001 From: tanghucheng Date: Wed, 14 Sep 2022 17:16:53 +0800 Subject: [PATCH 015/712] * Finish task #69001. --- extension/lite/project/ext/view/create.html.php | 1 + module/project/config.php | 2 +- module/project/control.php | 17 ++++++++++++----- 3 files changed, 14 insertions(+), 6 deletions(-) diff --git a/extension/lite/project/ext/view/create.html.php b/extension/lite/project/ext/view/create.html.php index a105f7a5b7..6f14f207fe 100644 --- a/extension/lite/project/ext/view/create.html.php +++ b/extension/lite/project/ext/view/create.html.php @@ -87,6 +87,7 @@ goback, '', 'class="btn btn-wide"') : html::backButton(); diff --git a/module/project/config.php b/module/project/config.php index 678d2de600..8fe5f26605 100644 --- a/module/project/config.php +++ b/module/project/config.php @@ -11,7 +11,7 @@ $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,linkedProducts,status,begin,end,budget,PM,end,desc'; +$config->project->list->exportFields = 'id,parent,code,name,hasProduct,linkedProducts,status,begin,end,budget,PM,end,desc'; $config->project->create = new stdclass(); $config->project->edit = new stdclass(); diff --git a/module/project/control.php b/module/project/control.php index f34939be19..c104de1407 100644 --- a/module/project/control.php +++ b/module/project/control.php @@ -46,6 +46,7 @@ class project extends control /* Create field lists. */ $fields = $this->post->exportFields ? $this->post->exportFields : explode(',', $projectConfig->list->exportFields); + foreach($fields as $key => $fieldName) { $fieldName = trim($fieldName); @@ -53,6 +54,8 @@ class project extends control unset($fields[$key]); } + if(isset($fields['hasProduct'])) $fields['hasProduct'] = $projectLang->type; + $involved = $this->cookie->involved ? $this->cookie->involved : 0; $projects = $this->project->getInfoList($status, $orderBy, '', $involved); $users = $this->loadModel('user')->getPairs('noletter'); @@ -60,15 +63,19 @@ class project extends control $this->loadModel('product'); foreach($projects as $i => $project) { - $project->PM = zget($users, $project->PM); - $project->status = $this->processStatus('project', $project); - $project->model = zget($projectLang->modelList, $project->model); - $project->budget = $project->budget . zget($projectLang->unitList, $project->budgetUnit); - $project->parent = $project->parentName; + $hasProduct = $project->hasProduct; + + $project->PM = zget($users, $project->PM); + $project->status = $this->processStatus('project', $project); + $project->model = zget($projectLang->modelList, $project->model); + $project->budget = $project->budget . zget($projectLang->unitList, $project->budgetUnit); + $project->parent = $project->parentName; + $project->hasProduct = zget($projectLang->projectTypeList, $project->hasProduct); $linkedProducts = $this->product->getProducts($project->id, 'all', '', false); $project->linkedProducts = implode(',', $linkedProducts); + if(!$hasProduct) $project->linkedProducts = ''; if($this->post->exportType == 'selected') { $checkedItem = $this->cookie->checkedItem; From eb0265df2e4f84af5e53da9b36bad8a15f65e6f0 Mon Sep 17 00:00:00 2001 From: liuruogu Date: Thu, 15 Sep 2022 00:46:51 +0000 Subject: [PATCH 016/712] * Do task #69018. --- module/product/control.php | 7 ++++++- module/product/view/browse.html.php | 2 ++ 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/module/product/control.php b/module/product/control.php index 72c732df21..5e1c8290de 100644 --- a/module/product/control.php +++ b/module/product/control.php @@ -309,6 +309,11 @@ class product extends control $productName = ($this->app->rawModule == 'projectstory' and empty($productID)) ? $this->lang->product->all : $this->products[$productID]; + $project = $this->loadModel('project')->getByID($projectID); + + if(empty($project->hasProduct)) unset($this->config->product->search['fields']['product']); + var_dump(empty($project->hasProduct)); + /* Assign. */ $this->view->title = $productName . $this->lang->colon . $this->lang->product->browse; $this->view->position[] = $productName; @@ -347,7 +352,7 @@ class product extends control $this->view->storyType = $storyType; $this->view->from = $this->app->tab; $this->view->modulePairs = $showModule ? $this->tree->getModulePairs($productID, 'story', $showModule) : array(); - $this->view->project = $this->loadModel('project')->getByID($projectID); + $this->view->project = $project; $this->display(); } diff --git a/module/product/view/browse.html.php b/module/product/view/browse.html.php index e99aeab382..0e88c43143 100644 --- a/module/product/view/browse.html.php +++ b/module/product/view/browse.html.php @@ -59,6 +59,7 @@ $projectIDParam = $isProjectStory ? "projectID=$projectID&" : '';
+ hasProduct)):?>
+
Date: Thu, 15 Sep 2022 00:48:26 +0000 Subject: [PATCH 017/712] * Do task #69012. --- module/weekly/model.php | 11 +++-------- 1 file changed, 3 insertions(+), 8 deletions(-) diff --git a/module/weekly/model.php b/module/weekly/model.php index 400c59ac5d..d45302657b 100755 --- a/module/weekly/model.php +++ b/module/weekly/model.php @@ -47,14 +47,9 @@ class weeklyModel extends model $weeks = $this->getWeekPairs($begin, $end); $current = zget($weeks, $date, current($weeks)); - $selectHtml = ''; - - if(!empty($project->hasProduct)) - { - $selectHtml .= "
"; - $selectHtml .= html::a('###', $this->lang->weekly->common . $this->lang->colon . $project->name, '', "class='btn'"); - $selectHtml .= '
'; - } + $selectHtml = "
"; + $selectHtml .= html::a('###', $this->lang->weekly->common . $this->lang->colon . $project->name, '', "class='btn'"); + $selectHtml .= '
'; $selectHtml .= "
"; $selectHtml .= "
"; From 4eaf187aab5ed02f1973f3660b119358c6610630 Mon Sep 17 00:00:00 2001 From: tanghucheng Date: Thu, 15 Sep 2022 08:58:12 +0800 Subject: [PATCH 018/712] * Finish task #69010. --- module/execution/model.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/module/execution/model.php b/module/execution/model.php index 32b6aaa4e0..a86ab95200 100644 --- a/module/execution/model.php +++ b/module/execution/model.php @@ -1604,7 +1604,7 @@ class executionModel extends model ->beginIF($limit)->limit($limit)->fi() ->fetchAll('id'); - if(isset($project->model) and $project->model == 'waterfall') + if(isset($project->model) and $project->model == 'waterfall' and $project->hasProduct) { $executionList = array(); $executionProducts = $this->dao->select('t1.project,t1.product')->from(TABLE_PROJECTPRODUCT)->alias('t1') From c1300115e711c30881ff8d3ecda1e2d74f478440 Mon Sep 17 00:00:00 2001 From: sunguangming Date: Thu, 15 Sep 2022 09:29:17 +0800 Subject: [PATCH 019/712] * Code for task #69026/69027. --- db/update17.6.1.sql | 2 +- module/block/control.php | 1 + module/block/view/scrumtestblock.html.php | 4 ++-- module/execution/control.php | 9 +++++++-- 4 files changed, 11 insertions(+), 5 deletions(-) diff --git a/db/update17.6.1.sql b/db/update17.6.1.sql index 6c2f458e73..9846b7562f 100644 --- a/db/update17.6.1.sql +++ b/db/update17.6.1.sql @@ -1,2 +1,2 @@ ALTER TABLE `zt_product` ADD `shadow` tinyint(1) unsigned NOT NULL AFTER `code`; -ALTER TABLE `zt_project` ADD `hasProduct` tinyint(1) unsigned NOT NULL AFTER `code`; +ALTER TABLE `zt_project` ADD `hasProduct` tinyint(1) unsigned NOT NULL DEFAULT 1 AFTER `code`; diff --git a/module/block/control.php b/module/block/control.php index 668d64ac3a..5d49b33c6d 100755 --- a/module/block/control.php +++ b/module/block/control.php @@ -1503,6 +1503,7 @@ class block extends control $count = zget($this->params, 'count', 10); $status = isset($this->params->type) ? $this->params->type : 'wait'; + $this->view->project = $this->loadModel('project')->getByID($this->session->project); $this->view->testtasks = $this->dao->select('t1.*,t2.name as productName,t3.name as buildName,t4.name as projectName') ->from(TABLE_TESTTASK)->alias('t1') ->leftJoin(TABLE_PRODUCT)->alias('t2')->on('t1.product=t2.id') diff --git a/module/block/view/scrumtestblock.html.php b/module/block/view/scrumtestblock.html.php index 4f28fd1c7f..6224d739e0 100644 --- a/module/block/view/scrumtestblock.html.php +++ b/module/block/view/scrumtestblock.html.php @@ -18,7 +18,7 @@ testtask->name;?> - + hasProduct):?> testtask->product;?> @@ -39,7 +39,7 @@ ?> > name);?> - + hasProduct):?> productName);?> diff --git a/module/execution/control.php b/module/execution/control.php index dea8b3e57b..6eeeddbe7e 100644 --- a/module/execution/control.php +++ b/module/execution/control.php @@ -630,7 +630,10 @@ class execution extends control $bugs = $this->execution->getSearchBugs($products, $executionID, $bugQuery, $pager, 'id_desc'); } - /* Build the search form. */ + $execution = $this->execution->getByID($executionID); + $project = $this->loadModel('project')->getByID($execution->project); + + /* Build the search form. */ $this->config->bug->search['actionURL'] = $this->createLink('execution', 'importBug', "executionID=$executionID&browseType=bySearch¶m=myQueryID"); $this->config->bug->search['queryID'] = $queryID; if(!empty($products)) @@ -674,6 +677,8 @@ 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(!$project->hasProduct) unset($this->config->bug->search['fields']['product']); + unset($this->config->bug->search['params']['resolvedBy']); unset($this->config->bug->search['params']['closedBy']); unset($this->config->bug->search['params']['status']); @@ -697,7 +702,7 @@ class execution extends control $this->view->browseType = $browseType; $this->view->param = $param; $this->view->users = $users; - $this->view->execution = $this->execution->getByID($executionID); + $this->view->execution = $execution; $this->view->executionID = $executionID; $this->view->requiredFields = explode(',', $this->config->task->create->requiredFields); $this->display(); From 3b97ed9213fec8f845492e73e62ec2010f83deb8 Mon Sep 17 00:00:00 2001 From: liugang Date: Thu, 15 Sep 2022 09:30:46 +0800 Subject: [PATCH 020/712] * Fix bug of upgrade the exist projects. --- db/update17.6.1.sql | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/db/update17.6.1.sql b/db/update17.6.1.sql index 6c2f458e73..9846b7562f 100644 --- a/db/update17.6.1.sql +++ b/db/update17.6.1.sql @@ -1,2 +1,2 @@ ALTER TABLE `zt_product` ADD `shadow` tinyint(1) unsigned NOT NULL AFTER `code`; -ALTER TABLE `zt_project` ADD `hasProduct` tinyint(1) unsigned NOT NULL AFTER `code`; +ALTER TABLE `zt_project` ADD `hasProduct` tinyint(1) unsigned NOT NULL DEFAULT 1 AFTER `code`; From ea6264562239f96a264590cb6c759b2b64c05cb1 Mon Sep 17 00:00:00 2001 From: liuruogu Date: Thu, 15 Sep 2022 01:43:27 +0000 Subject: [PATCH 021/712] * Do task #69018. --- module/product/control.php | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/module/product/control.php b/module/product/control.php index 5e1c8290de..b78a354694 100644 --- a/module/product/control.php +++ b/module/product/control.php @@ -295,6 +295,9 @@ class product extends control unset($this->config->product->search['fields']['stage']); } + $project = $this->loadModel('project')->getByID($projectID); + if(empty($project->hasProduct)) unset($this->config->product->search['fields']['product']); + /* Build search form. */ $rawModule = $this->app->rawModule; $rawMethod = $this->app->rawMethod; @@ -309,11 +312,6 @@ class product extends control $productName = ($this->app->rawModule == 'projectstory' and empty($productID)) ? $this->lang->product->all : $this->products[$productID]; - $project = $this->loadModel('project')->getByID($projectID); - - if(empty($project->hasProduct)) unset($this->config->product->search['fields']['product']); - var_dump(empty($project->hasProduct)); - /* Assign. */ $this->view->title = $productName . $this->lang->colon . $this->lang->product->browse; $this->view->position[] = $productName; From 8d46cc5019d7e26850f10a276f26594658f143c6 Mon Sep 17 00:00:00 2001 From: liuruogu Date: Thu, 15 Sep 2022 02:01:00 +0000 Subject: [PATCH 022/712] * Do task #69018. --- module/execution/control.php | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/module/execution/control.php b/module/execution/control.php index dea8b3e57b..34e0e6c9cb 100644 --- a/module/execution/control.php +++ b/module/execution/control.php @@ -842,6 +842,10 @@ class execution extends control $branchOption[$branchID] = $name; } } + + $projectID = $execution->project; + $project = $this->loadModel('project')->getByID($projectID); + if(empty($project->hasProduct)) unset($this->config->product->search['fields']['product']); $this->execution->buildStorySearchForm($products, $branchGroups, $modules, $queryID, $actionURL, 'executionStory', $executionID); /* Header and position. */ From 04cd8275fedd39d2af0f34bba04278ac1533a95d Mon Sep 17 00:00:00 2001 From: liuruogu Date: Thu, 15 Sep 2022 02:42:40 +0000 Subject: [PATCH 023/712] * Finish task #69016. --- module/project/control.php | 8 ++++++++ module/project/lang/de.php | 2 ++ module/project/lang/en.php | 2 ++ module/project/lang/fr.php | 2 ++ module/project/lang/vi.php | 2 ++ module/project/lang/zh-cn.php | 2 ++ module/project/view/view.html.php | 2 ++ 7 files changed, 20 insertions(+) diff --git a/module/project/control.php b/module/project/control.php index c104de1407..f9600dee6d 100644 --- a/module/project/control.php +++ b/module/project/control.php @@ -851,6 +851,14 @@ class project extends control $this->executeHooks($projectID); + if(empty($project->hasProduct)) + { + $projectProduct = $this->dao->select('product')->from(TABLE_PROJECTPRODUCT)->where('project')->eq($projectID)->fetch()->product; + $this->lang->project->moduleMenu['link'] = sprintf($this->lang->project->moduleMenu['link'], $projectProduct); + $this->lang->project->menu->settings['subMenu']->tree = $this->lang->project->moduleMenu; + unset($this->lang->project->menu->settings['subMenu']->products); + } + $this->view->title = $this->lang->project->view; $this->view->position = $this->lang->project->view; $this->view->projectID = $projectID; diff --git a/module/project/lang/de.php b/module/project/lang/de.php index 2b4f15db07..011cacffef 100644 --- a/module/project/lang/de.php +++ b/module/project/lang/de.php @@ -341,3 +341,5 @@ $lang->project->confirmUnlinkMember = "Do you want to remove this user from pro $lang->project->action = new stdclass(); $lang->project->action->managed = '$date, managed by $actor. $extra' . "\n"; + +$lang->project->moduleMenu = array('link' => 'Module|tree|browse|product=%s&view=story'); diff --git a/module/project/lang/en.php b/module/project/lang/en.php index 45db2db3bd..1532a58fb9 100644 --- a/module/project/lang/en.php +++ b/module/project/lang/en.php @@ -341,3 +341,5 @@ $lang->project->confirmUnlinkMember = "Do you want to remove this user from proj $lang->project->action = new stdclass(); $lang->project->action->managed = '$date, managed by $actor. $extra' . "\n"; + +$lang->project->moduleMenu = array('link' => 'Module|tree|browse|product=%s&view=story'); diff --git a/module/project/lang/fr.php b/module/project/lang/fr.php index 96d872c13d..6ae69a832f 100644 --- a/module/project/lang/fr.php +++ b/module/project/lang/fr.php @@ -341,3 +341,5 @@ $lang->project->confirmUnlinkMember = "Do you want to remove this user from pro $lang->project->action = new stdclass(); $lang->project->action->managed = '$date, managed by $actor. $extra' . "\n"; + +$lang->project->moduleMenu = array('link' => 'Module|tree|browse|product=%s&view=story'); diff --git a/module/project/lang/vi.php b/module/project/lang/vi.php index 162e4ca1fe..968c5d2417 100644 --- a/module/project/lang/vi.php +++ b/module/project/lang/vi.php @@ -241,3 +241,5 @@ $lang->project->childLongTime = "There are long-term projects in the child p $lang->project->action = new stdclass(); $lang->project->action->managed = '$date, managed by $actor. $extra' . "\n"; + +$lang->project->moduleMenu = array('link' => 'Module|tree|browse|product=%s&view=story'); diff --git a/module/project/lang/zh-cn.php b/module/project/lang/zh-cn.php index 3dc85712a6..1d776a176c 100644 --- a/module/project/lang/zh-cn.php +++ b/module/project/lang/zh-cn.php @@ -341,3 +341,5 @@ $lang->project->confirmUnlinkMember = "您确定从该项目中移除该用户 $lang->project->action = new stdclass(); $lang->project->action->managed = '$date, 由 $actor 维护。$extra' . "\n"; + +$lang->project->moduleMenu = array('link' => '模块|tree|browse|product=%s&view=story'); diff --git a/module/project/view/view.html.php b/module/project/view/view.html.php index 2ae7484bee..74cf8a203d 100644 --- a/module/project/view/view.html.php +++ b/module/project/view/view.html.php @@ -152,6 +152,7 @@
+ hasProduct)):?>
project->manageProducts;?> @@ -187,6 +188,7 @@
+
execution->lblStats;?>
From 2578a14d631ea891884d14ac4e1dac4b30547844 Mon Sep 17 00:00:00 2001 From: lanzongjun Date: Thu, 15 Sep 2022 10:45:05 +0800 Subject: [PATCH 024/712] * task #69250 --- module/install/control.php | 11 +++++++++-- module/install/lang/de.php | 1 + module/install/lang/en.php | 1 + module/install/lang/fr.php | 1 + module/install/lang/zh-cn.php | 1 + module/project/lang/de.php | 2 ++ module/project/lang/en.php | 2 ++ module/project/lang/fr.php | 2 ++ module/project/lang/zh-cn.php | 2 ++ module/project/model.php | 25 +++++++++++++++++++++++++ 10 files changed, 46 insertions(+), 2 deletions(-) diff --git a/module/install/control.php b/module/install/control.php index 9c50c5b46a..774598d96b 100644 --- a/module/install/control.php +++ b/module/install/control.php @@ -205,6 +205,14 @@ class install extends control if(!empty($_POST)) { $this->loadModel('setting')->setItem('system.common.global.mode', $this->post->mode); // Update mode. + + if($this->post->mode == 'lite') + { + /* lite mode create default program. */ + $programID = $this->loadModel('project')->createDefaultProgram(); + /* set default program config. */ + $this->loadModel('setting')->setItem('system.common.global.defaultProgram', $programID); + } return print(js::locate(inlink('step5'), 'parent')); } @@ -216,8 +224,7 @@ class install extends control else { $this->app->loadLang('upgrade'); - - $this->view->title = $this->lang->install->introduction; + $this->view->title = $this->lang->install->selectMode; $this->display(); } } diff --git a/module/install/lang/de.php b/module/install/lang/de.php index ce1ae7502b..3e04ca06fa 100644 --- a/module/install/lang/de.php +++ b/module/install/lang/de.php @@ -40,6 +40,7 @@ Twitter: ZenTao ALM You are installing ZenTao %s. EOT; +$lang->install->selectMode = "Select mode"; $lang->install->introduction = "ZenTao 15.0+ Feature Introduction"; $lang->install->howToUse = "How do you like to use ZenTao?"; $lang->install->guideVideo = 'https://dl.cnezsoft.com/vedio/zentaoconcepteng0716.mp4'; diff --git a/module/install/lang/en.php b/module/install/lang/en.php index 0873b7351c..208823236a 100644 --- a/module/install/lang/en.php +++ b/module/install/lang/en.php @@ -40,6 +40,7 @@ Twitter: ZenTao ALM You are installing ZenTao %s. EOT; +$lang->install->selectMode = "Select mode"; $lang->install->introduction = "ZenTao 15.0+ Feature Introduction"; $lang->install->howToUse = "How do you like to use ZenTao?"; $lang->install->guideVideo = 'https://dl.cnezsoft.com/vedio/zentaoconcepteng0716.mp4'; diff --git a/module/install/lang/fr.php b/module/install/lang/fr.php index 6e8b3ae374..9c6eeb1342 100644 --- a/module/install/lang/fr.php +++ b/module/install/lang/fr.php @@ -40,6 +40,7 @@ Twitter: ZenTao ALM You are installing ZenTao %s. EOT; +$lang->install->selectMode = "Select mode"; $lang->install->introduction = "ZenTao 15.0+ Feature Introduction"; $lang->install->howToUse = "How do you like to use ZenTao?"; $lang->install->guideVideo = 'https://dl.cnezsoft.com/vedio/zentaoconcepteng0716.mp4'; diff --git a/module/install/lang/zh-cn.php b/module/install/lang/zh-cn.php index 02f9db9690..c86e39506b 100644 --- a/module/install/lang/zh-cn.php +++ b/module/install/lang/zh-cn.php @@ -40,6 +40,7 @@ $lang->install->links = <<%s。 EOT; +$lang->install->selectMode = "请选择使用模式"; $lang->install->introduction = "禅道15系列功能介绍"; $lang->install->howToUse = "请问您计划如何使用禅道的新版本呢"; $lang->install->guideVideo = 'https://dl.cnezsoft.com/vedio/program0716.mp4'; diff --git a/module/project/lang/de.php b/module/project/lang/de.php index 9f5a4f4173..98c7cb7b5c 100644 --- a/module/project/lang/de.php +++ b/module/project/lang/de.php @@ -335,3 +335,5 @@ $lang->project->confirmUnlinkMember = "Do you want to remove this user from pro $lang->project->action = new stdclass(); $lang->project->action->managed = '$date, managed by $actor. $extra' . "\n"; + +$lang->project->defaultProgram = 'Default program'; \ No newline at end of file diff --git a/module/project/lang/en.php b/module/project/lang/en.php index 09edd1ef37..59c1cb8be4 100644 --- a/module/project/lang/en.php +++ b/module/project/lang/en.php @@ -335,3 +335,5 @@ $lang->project->confirmUnlinkMember = "Do you want to remove this user from proj $lang->project->action = new stdclass(); $lang->project->action->managed = '$date, managed by $actor. $extra' . "\n"; + +$lang->project->defaultProgram = 'Default program'; \ No newline at end of file diff --git a/module/project/lang/fr.php b/module/project/lang/fr.php index 6a23ce3d6a..4432563cda 100644 --- a/module/project/lang/fr.php +++ b/module/project/lang/fr.php @@ -335,3 +335,5 @@ $lang->project->confirmUnlinkMember = "Do you want to remove this user from pro $lang->project->action = new stdclass(); $lang->project->action->managed = '$date, managed by $actor. $extra' . "\n"; + +$lang->project->defaultProgram = 'Default program'; \ No newline at end of file diff --git a/module/project/lang/zh-cn.php b/module/project/lang/zh-cn.php index 5e4b4bd225..929d26209d 100644 --- a/module/project/lang/zh-cn.php +++ b/module/project/lang/zh-cn.php @@ -335,3 +335,5 @@ $lang->project->confirmUnlinkMember = "您确定从该项目中移除该用户 $lang->project->action = new stdclass(); $lang->project->action->managed = '$date, 由 $actor 维护。$extra' . "\n"; + +$lang->project->defaultProgram = '默认项目集'; \ No newline at end of file diff --git a/module/project/model.php b/module/project/model.php index 64e107c2ab..40ec259bcc 100644 --- a/module/project/model.php +++ b/module/project/model.php @@ -2630,4 +2630,29 @@ class projectModel extends model return $menu; } + + /** + * Create default program. + * + * @access public + * @return int + */ + public function createDefaultProgram() + { + $program = new stdClass(); + + $program->type = 'program'; + $program->name = $this->lang->project->defaultProgram; + $program->budgetUnit = 'CNY'; + $program->openedBy = $this->app->user->account; + $program->whitelist = ''; + $program->status = 'doing'; + $program->openedDate = helper::now(); + $program->begin = helper::today(); + $program->end = LONG_TIME; + + $this->dao->insert(TABLE_PROGRAM)->data($program)->exec(); + + return $this->dao->lastInsertId(); + } } From 392aa32c007983ea6e50826c157b0ad51749d2d9 Mon Sep 17 00:00:00 2001 From: wangyuting2 <851424971@qq.com> Date: Thu, 15 Sep 2022 03:11:09 +0000 Subject: [PATCH 025/712] * Add selectmergemode page. --- module/upgrade/control.php | 22 ++++++++ module/upgrade/css/selectmergemode.css | 7 +++ module/upgrade/lang/zh-cn.php | 53 ++++++++++++-------- module/upgrade/view/selectmergemode.html.php | 50 ++++++++++++++++++ 4 files changed, 112 insertions(+), 20 deletions(-) create mode 100644 module/upgrade/css/selectmergemode.css create mode 100644 module/upgrade/view/selectmergemode.html.php diff --git a/module/upgrade/control.php b/module/upgrade/control.php index fe176ea746..5eb47396e3 100644 --- a/module/upgrade/control.php +++ b/module/upgrade/control.php @@ -631,6 +631,28 @@ class upgrade extends control $this->display(); } + /** + * Select the merge mode when upgrading to zentaopms 18.0. + * + * @param string $fromVersion + * @access public + * @return void + */ + public function selectMergeMode($fromVersion) + { + if($_POST) + { + $mode = $this->post->mode; + if($mode == 'project') echo 'execute mergeData method'; + if($mode == 'execution') echo 'execute mergeData method'; + if($mode == 'manual') $this->locate(inlink('mergeProgram')); + + $this->locate(inlink('afterExec', "fromVersion=$fromVersion")); + } + $this->view->title = $this->lang->upgrade->selectMergeMode; + $this->display(); + } + /** * Rename object in upgrade. * diff --git a/module/upgrade/css/selectmergemode.css b/module/upgrade/css/selectmergemode.css new file mode 100644 index 0000000000..6a37cafcf0 --- /dev/null +++ b/module/upgrade/css/selectmergemode.css @@ -0,0 +1,7 @@ +table {margin: auto;} +.modal-dialog {width: 1000px} +.panel-body {padding: 40px 40px 20px 40px} +.panel-footer {padding-bottom: 20px;} +.checkbox, .radio {margin-top: 0px; margin-bottom: 20px;} +.tips {padding-top: 5px} +.btn-secondary {margin-right: 20px} diff --git a/module/upgrade/lang/zh-cn.php b/module/upgrade/lang/zh-cn.php index 97450262e1..4223a44f32 100644 --- a/module/upgrade/lang/zh-cn.php +++ b/module/upgrade/lang/zh-cn.php @@ -99,26 +99,29 @@ $lang->upgrade->to15Mode['new'] = '全新项目集管理模式'; $lang->upgrade->selectedModeTips['classic'] = '后续您还可以在后台-自定义里面切换为全新项目集管理的模式。'; $lang->upgrade->selectedModeTips['new'] = '切换为项目集管理模式需要对之前的数据进行归并处理,系统会引导您完成这个操作。'; -$lang->upgrade->line = '产品线'; -$lang->upgrade->allLines = "所有{$lang->productCommon}线"; -$lang->upgrade->program = '目标项目集和项目'; -$lang->upgrade->existProgram = '已有项目集'; -$lang->upgrade->existProject = '已有项目'; -$lang->upgrade->existLine = '已有' . $lang->productCommon . '线'; -$lang->upgrade->product = $lang->productCommon; -$lang->upgrade->project = '迭代'; -$lang->upgrade->repo = '版本库'; -$lang->upgrade->mergeRepo = '归并版本库'; -$lang->upgrade->setProgram = '设置项目所属项目集'; -$lang->upgrade->dataMethod = '数据迁移方式'; -$lang->upgrade->begin = '开始日期'; -$lang->upgrade->end = '结束日期'; -$lang->upgrade->selectProject = '目标项目'; -$lang->upgrade->programName = '项目集名称'; -$lang->upgrade->projectName = '项目名称'; -$lang->upgrade->compatibleEXT = '扩展机制兼容'; -$lang->upgrade->fileName = '文件名称'; -$lang->upgrade->next = '下一步'; +$lang->upgrade->line = '产品线'; +$lang->upgrade->allLines = "所有{$lang->productCommon}线"; +$lang->upgrade->program = '目标项目集和项目'; +$lang->upgrade->existProgram = '已有项目集'; +$lang->upgrade->existProject = '已有项目'; +$lang->upgrade->existLine = '已有' . $lang->productCommon . '线'; +$lang->upgrade->product = $lang->productCommon; +$lang->upgrade->project = '迭代'; +$lang->upgrade->repo = '版本库'; +$lang->upgrade->mergeRepo = '归并版本库'; +$lang->upgrade->setProgram = '设置项目所属项目集'; +$lang->upgrade->dataMethod = '数据迁移方式'; +$lang->upgrade->selectMergeMode = '请选择数据归并方式'; +$lang->upgrade->mergeMode = '数据归并方式:'; +$lang->upgrade->begin = '开始日期'; +$lang->upgrade->end = '结束日期'; +$lang->upgrade->selectProject = '目标项目'; +$lang->upgrade->programName = '项目集名称'; +$lang->upgrade->projectName = '项目名称'; +$lang->upgrade->compatibleEXT = '扩展机制兼容'; +$lang->upgrade->fileName = '文件名称'; +$lang->upgrade->next = '下一步'; +$lang->upgrade->back = '上一步'; $lang->upgrade->newProgram = '新建'; $lang->upgrade->editedName = '调整后名称'; @@ -146,6 +149,7 @@ EOT; $lang->upgrade->projectType['project'] = "把历史的{$lang->projectCommon}作为项目升级"; $lang->upgrade->projectType['execution'] = "把历史的{$lang->projectCommon}作为执行升级"; + $lang->upgrade->createProjectTip = <<升级后历史的{$lang->projectCommon}一一对应新版本中的项目。

系统会根据历史{$lang->projectCommon}分别创建一个与该{$lang->projectCommon}同名的执行,并将之前{$lang->projectCommon}的任务、需求、Bug等数据迁移至执行中。

@@ -156,6 +160,15 @@ $lang->upgrade->createExecutionTip = <<升级后历史的{$lang->projectCommon}数据将对应新版本中项目下的执行。

EOT; +$lang->upgrade->mergeModes = array(); +$lang->upgrade->mergeModes['project'] = '自动归并数据,将历史的项目作为项目升级'; +$lang->upgrade->mergeModes['execution'] = '自动归并数据,将历史的项目作为迭代升级'; +$lang->upgrade->mergeModes['manual'] = '手工归并数据'; + +$lang->upgrade->mergeProjectTip = '历史的项目将直接同步到新版本的项目中,同时系统将会根据历史项目分别创建一个与该项目同名的迭代,并将之前项目下的任务、需求、Bug等数据迁移至迭代中。'; +$lang->upgrade->mergeExecutionTip = '系统将自动按年创建项目,将历史的迭代数据按照年份归并到对应的项目下。'; +$lang->upgrade->mergeManualTip = '可以手工选择数据归并的方式'; + include dirname(__FILE__) . '/version.php'; $lang->upgrade->recoveryActions = new stdclass(); diff --git a/module/upgrade/view/selectmergemode.html.php b/module/upgrade/view/selectmergemode.html.php new file mode 100644 index 0000000000..98c9b6f464 --- /dev/null +++ b/module/upgrade/view/selectmergemode.html.php @@ -0,0 +1,50 @@ + + * @package upgrade + * @version $Id$ + * @link http://www.zentao.net + */ +?> + +
+ +
+ From 74a5adef7d0b87fb0fa4d39116354e535ce83361 Mon Sep 17 00:00:00 2001 From: wangyuting2 <851424971@qq.com> Date: Thu, 15 Sep 2022 03:22:36 +0000 Subject: [PATCH 026/712] * Optimize code. --- module/upgrade/control.php | 2 +- module/upgrade/lang/de.php | 52 ++++++++++++-------- module/upgrade/lang/en.php | 52 ++++++++++++-------- module/upgrade/lang/fr.php | 52 ++++++++++++-------- module/upgrade/lang/vi.php | 49 +++++++++++------- module/upgrade/lang/zh-cn.php | 5 +- module/upgrade/view/selectmergemode.html.php | 2 +- 7 files changed, 132 insertions(+), 82 deletions(-) diff --git a/module/upgrade/control.php b/module/upgrade/control.php index 5eb47396e3..22c0fef9f2 100644 --- a/module/upgrade/control.php +++ b/module/upgrade/control.php @@ -645,7 +645,7 @@ class upgrade extends control $mode = $this->post->mode; if($mode == 'project') echo 'execute mergeData method'; if($mode == 'execution') echo 'execute mergeData method'; - if($mode == 'manual') $this->locate(inlink('mergeProgram')); + if($mode == 'manually') $this->locate(inlink('mergeProgram')); $this->locate(inlink('afterExec', "fromVersion=$fromVersion")); } diff --git a/module/upgrade/lang/de.php b/module/upgrade/lang/de.php index dfd5dffaf6..1e0920a538 100644 --- a/module/upgrade/lang/de.php +++ b/module/upgrade/lang/de.php @@ -99,26 +99,29 @@ $lang->upgrade->to15Mode['new'] = 'Use the program mode'; $lang->upgrade->selectedModeTips['classic'] = 'You can also switch to the Program mode in the Admin-Custom-Custom later.'; $lang->upgrade->selectedModeTips['new'] = 'Switching to the program management mode requires merging the previous data, and the system will guide you to complete this operation.'; -$lang->upgrade->line = 'Product Line'; -$lang->upgrade->allLines = "All Product Lines"; -$lang->upgrade->program = 'Merge Project'; -$lang->upgrade->existProgram = 'Existing programs'; -$lang->upgrade->existProject = 'Existing projects'; -$lang->upgrade->existLine = 'Existing' . $lang->productCommon . ' lines'; -$lang->upgrade->product = $lang->productCommon; -$lang->upgrade->project = 'Iteration'; -$lang->upgrade->repo = 'Repo'; -$lang->upgrade->mergeRepo = 'Merge Repo'; -$lang->upgrade->setProgram = 'Set the project to which the program belongs'; -$lang->upgrade->dataMethod = 'Data migration method'; -$lang->upgrade->begin = 'Begin Date'; -$lang->upgrade->end = 'End Date'; -$lang->upgrade->selectProject = 'The target project'; -$lang->upgrade->programName = 'Program Name'; -$lang->upgrade->projectName = 'Project Name'; -$lang->upgrade->compatibleEXT = 'Extension mechanism compatible'; -$lang->upgrade->fileName = 'File Name'; -$lang->upgrade->next = 'Next'; +$lang->upgrade->line = 'Product Line'; +$lang->upgrade->allLines = "All Product Lines"; +$lang->upgrade->program = 'Merge Project'; +$lang->upgrade->existProgram = 'Existing programs'; +$lang->upgrade->existProject = 'Existing projects'; +$lang->upgrade->existLine = 'Existing' . $lang->productCommon . ' lines'; +$lang->upgrade->product = $lang->productCommon; +$lang->upgrade->project = 'Iteration'; +$lang->upgrade->repo = 'Repo'; +$lang->upgrade->mergeRepo = 'Merge Repo'; +$lang->upgrade->setProgram = 'Set the project to which the program belongs'; +$lang->upgrade->dataMethod = 'Data migration method'; +$lang->upgrade->selectMergeMode = 'Please select the data merging method'; +$lang->upgrade->mergeMode = 'Data consolidation method : '; +$lang->upgrade->begin = 'Begin Date'; +$lang->upgrade->end = 'End Date'; +$lang->upgrade->selectProject = 'The target project'; +$lang->upgrade->programName = 'Program Name'; +$lang->upgrade->projectName = 'Project Name'; +$lang->upgrade->compatibleEXT = 'Extension mechanism compatible'; +$lang->upgrade->fileName = 'File Name'; +$lang->upgrade->next = 'Next'; +$lang->upgrade->back = 'Back'; $lang->upgrade->newProgram = 'Create'; $lang->upgrade->editedName = 'New Name'; @@ -156,6 +159,15 @@ $lang->upgrade->createExecutionTip = <<After the upgrade, the data of existing {$lang->projectCommon} will be in a Project - Execute of the new version .

EOT; +$lang->upgrade->mergeModes = array(); +$lang->upgrade->mergeModes['project'] = 'Automatically merge data and upgrade historical projects as projects'; +$lang->upgrade->mergeModes['execution'] = 'Automatically merge data and upgrade historical projects as executions'; +$lang->upgrade->mergeModes['manually'] = 'Manually merge data'; + +$lang->upgrade->mergeProjectTip = 'The historical project will be synchronized directly to the new version of the project. At the same time, the system will create an iteration with the same name as the project according to the historical project, and migrate the tasks, requirements, bugs and other data under the previous project to the iteration.'; +$lang->upgrade->mergeExecutionTip = 'The system will automatically create projects by year, and merge the historical iteration data into the corresponding projects by year.'; +$lang->upgrade->mergeManuallyTip = 'You can manually select the data merging method.'; + include dirname(__FILE__) . '/version.php'; $lang->upgrade->recoveryActions = new stdclass(); diff --git a/module/upgrade/lang/en.php b/module/upgrade/lang/en.php index ed38f78dd2..882f75a2ac 100644 --- a/module/upgrade/lang/en.php +++ b/module/upgrade/lang/en.php @@ -99,26 +99,29 @@ $lang->upgrade->to15Mode['new'] = 'Use the program mode'; $lang->upgrade->selectedModeTips['classic'] = 'You can also switch to the Program mode in the Admin-Custom-Custom later.'; $lang->upgrade->selectedModeTips['new'] = 'Switching to the program management mode requires merging the previous data, and the system will guide you to complete this operation.'; -$lang->upgrade->line = 'Product Line'; -$lang->upgrade->allLines = "All Product Lines"; -$lang->upgrade->program = 'Merge Project'; -$lang->upgrade->existProgram = 'Existing programs'; -$lang->upgrade->existProject = 'Existing projects'; -$lang->upgrade->existLine = 'Existing' . $lang->productCommon . ' lines'; -$lang->upgrade->product = $lang->productCommon; -$lang->upgrade->project = 'Iteration'; -$lang->upgrade->repo = 'Repo'; -$lang->upgrade->mergeRepo = 'Merge Repo'; -$lang->upgrade->setProgram = 'Set the project to which the program belongs'; -$lang->upgrade->dataMethod = 'Data migration method'; -$lang->upgrade->begin = 'Begin Date'; -$lang->upgrade->end = 'End Date'; -$lang->upgrade->selectProject = 'The target project'; -$lang->upgrade->programName = 'Program Name'; -$lang->upgrade->projectName = 'Project Name'; -$lang->upgrade->compatibleEXT = 'Extension mechanism compatible'; -$lang->upgrade->fileName = 'File Name'; -$lang->upgrade->next = 'Next'; +$lang->upgrade->line = 'Product Line'; +$lang->upgrade->allLines = "All Product Lines"; +$lang->upgrade->program = 'Merge Project'; +$lang->upgrade->existProgram = 'Existing programs'; +$lang->upgrade->existProject = 'Existing projects'; +$lang->upgrade->existLine = 'Existing' . $lang->productCommon . ' lines'; +$lang->upgrade->product = $lang->productCommon; +$lang->upgrade->project = 'Iteration'; +$lang->upgrade->repo = 'Repo'; +$lang->upgrade->mergeRepo = 'Merge Repo'; +$lang->upgrade->setProgram = 'Set the project to which the program belongs'; +$lang->upgrade->dataMethod = 'Data migration method'; +$lang->upgrade->selectMergeMode = 'Please select the data merging method'; +$lang->upgrade->mergeMode = 'Data consolidation method : '; +$lang->upgrade->begin = 'Begin Date'; +$lang->upgrade->end = 'End Date'; +$lang->upgrade->selectProject = 'The target project'; +$lang->upgrade->programName = 'Program Name'; +$lang->upgrade->projectName = 'Project Name'; +$lang->upgrade->compatibleEXT = 'Extension mechanism compatible'; +$lang->upgrade->fileName = 'File Name'; +$lang->upgrade->next = 'Next'; +$lang->upgrade->back = 'Back'; $lang->upgrade->newProgram = 'Create'; $lang->upgrade->editedName = 'New Name'; @@ -156,6 +159,15 @@ $lang->upgrade->createExecutionTip = <<After the upgrade, the data of existing {$lang->projectCommon} will be in a Project - Execute of the new version .

EOT; +$lang->upgrade->mergeModes = array(); +$lang->upgrade->mergeModes['project'] = 'Automatically merge data and upgrade historical projects as projects'; +$lang->upgrade->mergeModes['execution'] = 'Automatically merge data and upgrade historical projects as executions'; +$lang->upgrade->mergeModes['manually'] = 'Manually merge data'; + +$lang->upgrade->mergeProjectTip = 'The historical project will be synchronized directly to the new version of the project. At the same time, the system will create an iteration with the same name as the project according to the historical project, and migrate the tasks, requirements, bugs and other data under the previous project to the iteration.'; +$lang->upgrade->mergeExecutionTip = 'The system will automatically create projects by year, and merge the historical iteration data into the corresponding projects by year.'; +$lang->upgrade->mergeManuallyTip = 'You can manually select the data merging method.'; + include dirname(__FILE__) . '/version.php'; $lang->upgrade->recoveryActions = new stdclass(); diff --git a/module/upgrade/lang/fr.php b/module/upgrade/lang/fr.php index ac63434bce..02e766e464 100644 --- a/module/upgrade/lang/fr.php +++ b/module/upgrade/lang/fr.php @@ -99,26 +99,29 @@ $lang->upgrade->to15Mode['new'] = 'Use the program mode'; $lang->upgrade->selectedModeTips['classic'] = 'You can also switch to the Program mode in the Admin-Custom-Custom later.'; $lang->upgrade->selectedModeTips['new'] = 'Switching to the program management mode requires merging the previous data, and the system will guide you to complete this operation.'; -$lang->upgrade->line = 'Product Line'; -$lang->upgrade->allLines = "All Product Lines"; -$lang->upgrade->program = 'Merge Project'; -$lang->upgrade->existProgram = 'Existing programs'; -$lang->upgrade->existProject = 'Existing projects'; -$lang->upgrade->existLine = 'Existing' . $lang->productCommon . ' lines'; -$lang->upgrade->product = $lang->productCommon; -$lang->upgrade->project = 'Iteration'; -$lang->upgrade->repo = 'Repo'; -$lang->upgrade->mergeRepo = 'Merge Repo'; -$lang->upgrade->setProgram = 'Set the project to which the program belongs'; -$lang->upgrade->dataMethod = 'Data migration method'; -$lang->upgrade->begin = 'Begin Date'; -$lang->upgrade->end = 'End Date'; -$lang->upgrade->selectProject = 'The target project'; -$lang->upgrade->programName = 'Program Name'; -$lang->upgrade->projectName = 'Project Name'; -$lang->upgrade->compatibleEXT = 'Extension mechanism compatible'; -$lang->upgrade->fileName = 'File Name'; -$lang->upgrade->next = 'Next'; +$lang->upgrade->line = 'Product Line'; +$lang->upgrade->allLines = "All Product Lines"; +$lang->upgrade->program = 'Merge Project'; +$lang->upgrade->existProgram = 'Existing programs'; +$lang->upgrade->existProject = 'Existing projects'; +$lang->upgrade->existLine = 'Existing' . $lang->productCommon . ' lines'; +$lang->upgrade->product = $lang->productCommon; +$lang->upgrade->project = 'Iteration'; +$lang->upgrade->repo = 'Repo'; +$lang->upgrade->mergeRepo = 'Merge Repo'; +$lang->upgrade->setProgram = 'Set the project to which the program belongs'; +$lang->upgrade->dataMethod = 'Data migration method'; +$lang->upgrade->selectMergeMode = 'Please select the data merging method'; +$lang->upgrade->mergeMode = 'Data consolidation method : '; +$lang->upgrade->begin = 'Begin Date'; +$lang->upgrade->end = 'End Date'; +$lang->upgrade->selectProject = 'The target project'; +$lang->upgrade->programName = 'Program Name'; +$lang->upgrade->projectName = 'Project Name'; +$lang->upgrade->compatibleEXT = 'Extension mechanism compatible'; +$lang->upgrade->fileName = 'File Name'; +$lang->upgrade->next = 'Next'; +$lang->upgrade->back = 'Back'; $lang->upgrade->newProgram = 'Create'; $lang->upgrade->editedName = 'New Name'; @@ -156,6 +159,15 @@ $lang->upgrade->createExecutionTip = <<After the upgrade, the data of existing {$lang->projectCommon} will be in a Project - Execute of the new version .

EOT; +$lang->upgrade->mergeModes = array(); +$lang->upgrade->mergeModes['project'] = 'Automatically merge data and upgrade historical projects as projects'; +$lang->upgrade->mergeModes['execution'] = 'Automatically merge data and upgrade historical projects as executions'; +$lang->upgrade->mergeModes['manually'] = 'Manually merge data'; + +$lang->upgrade->mergeProjectTip = 'The historical project will be synchronized directly to the new version of the project. At the same time, the system will create an iteration with the same name as the project according to the historical project, and migrate the tasks, requirements, bugs and other data under the previous project to the iteration.'; +$lang->upgrade->mergeExecutionTip = 'The system will automatically create projects by year, and merge the historical iteration data into the corresponding projects by year.'; +$lang->upgrade->mergeManuallyTip = 'You can manually select the data merging method.'; + include dirname(__FILE__) . '/version.php'; $lang->upgrade->recoveryActions = new stdclass(); diff --git a/module/upgrade/lang/vi.php b/module/upgrade/lang/vi.php index 6adc54d318..e3f454e7c2 100644 --- a/module/upgrade/lang/vi.php +++ b/module/upgrade/lang/vi.php @@ -96,23 +96,29 @@ $lang->upgrade->to15Mode['new'] = 'Use the program mode'; $lang->upgrade->selectedModeTips['classic'] = 'You can also switch to the Program mode in the Admin-Custom-Custom later.'; $lang->upgrade->selectedModeTips['new'] = 'Switching to the program management mode requires merging the previous data, and the system will guide you to complete this operation.'; -$lang->upgrade->line = 'Product Line'; -$lang->upgrade->allLines = "All Product Lines"; -$lang->upgrade->program = 'Merge Project'; -$lang->upgrade->existProgram = 'Existing programs'; -$lang->upgrade->existProject = 'Existing projects'; -$lang->upgrade->existLine = 'Existing' . $lang->productCommon . ' lines'; -$lang->upgrade->product = $lang->productCommon; -$lang->upgrade->project = 'Iteration'; -$lang->upgrade->repo = 'Repo'; -$lang->upgrade->mergeRepo = 'Merge Repo'; -$lang->upgrade->setProgram = 'Set the project to which the program belongs'; -$lang->upgrade->dataMethod = 'Data migration method'; -$lang->upgrade->begin = 'Begin Date'; -$lang->upgrade->end = 'End Date'; -$lang->upgrade->selectProject = 'The target project'; -$lang->upgrade->programName = 'Program Name'; -$lang->upgrade->projectName = 'Project Name'; +$lang->upgrade->line = 'Product Line'; +$lang->upgrade->allLines = "All Product Lines"; +$lang->upgrade->program = 'Merge Project'; +$lang->upgrade->existProgram = 'Existing programs'; +$lang->upgrade->existProject = 'Existing projects'; +$lang->upgrade->existLine = 'Existing' . $lang->productCommon . ' lines'; +$lang->upgrade->product = $lang->productCommon; +$lang->upgrade->project = 'Iteration'; +$lang->upgrade->repo = 'Repo'; +$lang->upgrade->mergeRepo = 'Merge Repo'; +$lang->upgrade->setProgram = 'Set the project to which the program belongs'; +$lang->upgrade->dataMethod = 'Data migration method'; +$lang->upgrade->selectMergeMode = 'Please select the data merging method'; +$lang->upgrade->mergeMode = 'Data consolidation method : '; +$lang->upgrade->begin = 'Begin Date'; +$lang->upgrade->end = 'End Date'; +$lang->upgrade->selectProject = 'The target project'; +$lang->upgrade->programName = 'Program Name'; +$lang->upgrade->projectName = 'Project Name'; +$lang->upgrade->compatibleEXT = 'Extension mechanism compatible'; +$lang->upgrade->fileName = 'File Name'; +$lang->upgrade->next = 'Next'; +$lang->upgrade->back = 'Back'; $lang->upgrade->newProgram = 'Create'; $lang->upgrade->editedName = 'New Name'; @@ -140,4 +146,13 @@ $lang->upgrade->createExecutionTip = <<After the upgrade, the data of existing {$lang->projectCommon} will be in a Project - Execute of the new version .

EOT; +$lang->upgrade->mergeModes = array(); +$lang->upgrade->mergeModes['project'] = 'Automatically merge data and upgrade historical projects as projects'; +$lang->upgrade->mergeModes['execution'] = 'Automatically merge data and upgrade historical projects as executions'; +$lang->upgrade->mergeModes['manually'] = 'Manually merge data'; + +$lang->upgrade->mergeProjectTip = 'The historical project will be synchronized directly to the new version of the project. At the same time, the system will create an iteration with the same name as the project according to the historical project, and migrate the tasks, requirements, bugs and other data under the previous project to the iteration.'; +$lang->upgrade->mergeExecutionTip = 'The system will automatically create projects by year, and merge the historical iteration data into the corresponding projects by year.'; +$lang->upgrade->mergeManuallyTip = 'You can manually select the data merging method.'; + include dirname(__FILE__) . '/version.php'; diff --git a/module/upgrade/lang/zh-cn.php b/module/upgrade/lang/zh-cn.php index 4223a44f32..cc919f92ef 100644 --- a/module/upgrade/lang/zh-cn.php +++ b/module/upgrade/lang/zh-cn.php @@ -149,7 +149,6 @@ EOT; $lang->upgrade->projectType['project'] = "把历史的{$lang->projectCommon}作为项目升级"; $lang->upgrade->projectType['execution'] = "把历史的{$lang->projectCommon}作为执行升级"; - $lang->upgrade->createProjectTip = <<升级后历史的{$lang->projectCommon}一一对应新版本中的项目。

系统会根据历史{$lang->projectCommon}分别创建一个与该{$lang->projectCommon}同名的执行,并将之前{$lang->projectCommon}的任务、需求、Bug等数据迁移至执行中。

@@ -163,11 +162,11 @@ EOT; $lang->upgrade->mergeModes = array(); $lang->upgrade->mergeModes['project'] = '自动归并数据,将历史的项目作为项目升级'; $lang->upgrade->mergeModes['execution'] = '自动归并数据,将历史的项目作为迭代升级'; -$lang->upgrade->mergeModes['manual'] = '手工归并数据'; +$lang->upgrade->mergeModes['manually'] = '手工归并数据'; $lang->upgrade->mergeProjectTip = '历史的项目将直接同步到新版本的项目中,同时系统将会根据历史项目分别创建一个与该项目同名的迭代,并将之前项目下的任务、需求、Bug等数据迁移至迭代中。'; $lang->upgrade->mergeExecutionTip = '系统将自动按年创建项目,将历史的迭代数据按照年份归并到对应的项目下。'; -$lang->upgrade->mergeManualTip = '可以手工选择数据归并的方式'; +$lang->upgrade->mergeManuallyTip = '可以手工选择数据归并的方式。'; include dirname(__FILE__) . '/version.php'; diff --git a/module/upgrade/view/selectmergemode.html.php b/module/upgrade/view/selectmergemode.html.php index 98c9b6f464..4dbcd69461 100644 --- a/module/upgrade/view/selectmergemode.html.php +++ b/module/upgrade/view/selectmergemode.html.php @@ -40,7 +40,7 @@
From 042a9a97c323fea5b3f4934856f507a39a684f3e Mon Sep 17 00:00:00 2001 From: liugang Date: Thu, 15 Sep 2022 13:05:14 +0800 Subject: [PATCH 027/712] * Display the project type on the edit page of the project module. --- module/project/view/edit.html.php | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/module/project/view/edit.html.php b/module/project/view/edit.html.php index 3e149cddab..72fd514b16 100755 --- a/module/project/view/edit.html.php +++ b/module/project/view/edit.html.php @@ -74,6 +74,13 @@ code, "class='form-control' required");?> + + project->type;?> + + project->projectTypeList, $project->hasProduct);?> + hasProduct);?> + + project->PM;?> PM, "class='form-control chosen'" . (strpos($requiredFields, 'PM') !== false ? ' required' : ''));?> From 93b221c6a69aa30647ec8ee188b9be70abc404e8 Mon Sep 17 00:00:00 2001 From: liugang Date: Thu, 15 Sep 2022 13:06:23 +0800 Subject: [PATCH 028/712] * Display the products and the plans on the edit page of the project module if the project has product. --- module/project/view/edit.html.php | 2 ++ 1 file changed, 2 insertions(+) diff --git a/module/project/view/edit.html.php b/module/project/view/edit.html.php index 72fd514b16..553c93c3a4 100755 --- a/module/project/view/edit.html.php +++ b/module/project/view/edit.html.php @@ -132,6 +132,7 @@ + hasProduct):?> project->manageProducts;?> @@ -182,6 +183,7 @@
+ model == 'kanban'):?> execution->team;?> From fefdfe5b4956a18361308026cb93e13ca6c47c22 Mon Sep 17 00:00:00 2001 From: liugang Date: Thu, 15 Sep 2022 13:07:43 +0800 Subject: [PATCH 029/712] * Adjust the vertical align. --- module/project/css/create.css | 1 + module/project/css/edit.css | 1 + module/project/view/create.html.php | 2 +- module/project/view/edit.html.php | 2 +- 4 files changed, 4 insertions(+), 2 deletions(-) diff --git a/module/project/css/create.css b/module/project/css/create.css index 0c06d2fff2..26fcedbac7 100644 --- a/module/project/css/create.css +++ b/module/project/css/create.css @@ -28,3 +28,4 @@ #dataform th {vertical-align: top; padding-top: 13px;} .futureBox {vertical-align: top !important; padding-top: 13px !important;} #linkPlan {padding-top: 25px !important;} +#projectType {padding-top: 7px !important;} diff --git a/module/project/css/edit.css b/module/project/css/edit.css index 57332fa1c0..d04f70ba45 100644 --- a/module/project/css/edit.css +++ b/module/project/css/edit.css @@ -7,3 +7,4 @@ #dataform th {vertical-align: top; padding-top: 13px;} #linkPlan {padding-top: 25px !important;} #productsBox .row .col-sm-4.required::after {right: -5px;} +#projectType {padding-top: 7px !important;} diff --git a/module/project/view/create.html.php b/module/project/view/create.html.php index 6a984bc8a8..61b5c47d72 100755 --- a/module/project/view/create.html.php +++ b/module/project/view/create.html.php @@ -73,7 +73,7 @@ - project->type;?> + project->type;?> project->projectTypeList, 1);?> diff --git a/module/project/view/edit.html.php b/module/project/view/edit.html.php index 553c93c3a4..30c80ce565 100755 --- a/module/project/view/edit.html.php +++ b/module/project/view/edit.html.php @@ -75,7 +75,7 @@ - project->type;?> + project->type;?> project->projectTypeList, $project->hasProduct);?> hasProduct);?> From 04824e964b59ec287c29e46fbd583711cd060e0f Mon Sep 17 00:00:00 2001 From: liuruogu Date: Thu, 15 Sep 2022 05:12:30 +0000 Subject: [PATCH 030/712] * Finish task #69016. --- module/common/lang/menu.php | 6 ++++-- module/project/control.php | 9 +-------- module/project/lang/de.php | 2 -- module/project/lang/en.php | 2 -- module/project/lang/fr.php | 2 -- module/project/lang/vi.php | 2 -- module/project/lang/zh-cn.php | 2 -- module/project/model.php | 12 ++++++++++++ 8 files changed, 17 insertions(+), 20 deletions(-) diff --git a/module/common/lang/menu.php b/module/common/lang/menu.php index 856fe405a8..c6f2c848eb 100644 --- a/module/common/lang/menu.php +++ b/module/common/lang/menu.php @@ -209,7 +209,7 @@ $lang->scrum->menu->devops = array('link' => "{$lang->repo->common}|repo|brow $lang->scrum->menu->build = array('link' => "{$lang->build->common}|project|build|project=%s"); $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' => 'stakeholder', 'alias' => 'edit,manageproducts,group,managemembers,manageview,managepriv,whitelist,addwhitelist,team'); +$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'); $lang->scrum->dividerMenu = ',execution,programplan,doc,settings,'; @@ -241,6 +241,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"); /* Waterfall menu. */ $lang->waterfall->menu = new stdclass(); @@ -295,7 +296,7 @@ $lang->kanbanProject = new stdclass(); $lang->kanbanProject->menu = new stdclass(); $lang->kanbanProject->menu->index = array('link' => "{$lang->kanban->common}|project|index|project=%s"); $lang->kanbanProject->menu->build = array('link' => "{$lang->build->common}|project|build|project=%s"); -$lang->kanbanProject->menu->settings = array('link' => "$lang->settings|project|view|project=%s", 'subModule' => 'stakeholder', 'alias' => 'edit,manageproducts,group,managemembers,manageview,managepriv,whitelist,addwhitelist,team'); +$lang->kanbanProject->menu->settings = array('link' => "$lang->settings|project|view|project=%s", 'subModule' => 'tree,stakeholder', 'alias' => 'edit,manageproducts,group,managemembers,manageview,managepriv,whitelist,addwhitelist,team'); $lang->kanbanProject->dividerMenu = ''; @@ -309,6 +310,7 @@ $lang->kanbanProject->menu->settings['subMenu']->view = array('link' => " $lang->kanbanProject->menu->settings['subMenu']->products = array('link' => "{$lang->product->common}|project|manageProducts|project=%s", 'alias' => 'manageproducts'); $lang->kanbanProject->menu->settings['subMenu']->members = array('link' => "{$lang->team->common}|project|team|project=%s", 'alias' => 'managemembers,team'); $lang->kanbanProject->menu->settings['subMenu']->whitelist = array('link' => "{$lang->whitelist}|project|whitelist|project=%s", 'subModule' => 'personnel'); +$lang->kanbanProject->menu->settings['subMenu']->module = array('link' => "{$lang->module}|tree|browse|product=%s&view=story"); /* Execution menu. */ $lang->execution->homeMenu = new stdclass(); diff --git a/module/project/control.php b/module/project/control.php index f9600dee6d..0b0159be81 100644 --- a/module/project/control.php +++ b/module/project/control.php @@ -851,14 +851,6 @@ class project extends control $this->executeHooks($projectID); - if(empty($project->hasProduct)) - { - $projectProduct = $this->dao->select('product')->from(TABLE_PROJECTPRODUCT)->where('project')->eq($projectID)->fetch()->product; - $this->lang->project->moduleMenu['link'] = sprintf($this->lang->project->moduleMenu['link'], $projectProduct); - $this->lang->project->menu->settings['subMenu']->tree = $this->lang->project->moduleMenu; - unset($this->lang->project->menu->settings['subMenu']->products); - } - $this->view->title = $this->lang->project->view; $this->view->position = $this->lang->project->view; $this->view->projectID = $projectID; @@ -1992,6 +1984,7 @@ class project extends control { $projectID = $this->project->setMenu($projectID); $project = $this->project->getById($projectID); + if(isset($project->acl) and $project->acl == 'open') $this->locate($this->createLink('project', 'index', "projectID=$projectID")); echo $this->fetch('personnel', 'whitelist', "objectID=$projectID&module=$module&browseType=$objectType&orderBy=$orderBy&recTotal=$recTotal&recPerPage=$recPerPage&pageID=$pageID&projectID=$projectID&from=$from"); diff --git a/module/project/lang/de.php b/module/project/lang/de.php index 011cacffef..2b4f15db07 100644 --- a/module/project/lang/de.php +++ b/module/project/lang/de.php @@ -341,5 +341,3 @@ $lang->project->confirmUnlinkMember = "Do you want to remove this user from pro $lang->project->action = new stdclass(); $lang->project->action->managed = '$date, managed by $actor. $extra' . "\n"; - -$lang->project->moduleMenu = array('link' => 'Module|tree|browse|product=%s&view=story'); diff --git a/module/project/lang/en.php b/module/project/lang/en.php index 1532a58fb9..45db2db3bd 100644 --- a/module/project/lang/en.php +++ b/module/project/lang/en.php @@ -341,5 +341,3 @@ $lang->project->confirmUnlinkMember = "Do you want to remove this user from proj $lang->project->action = new stdclass(); $lang->project->action->managed = '$date, managed by $actor. $extra' . "\n"; - -$lang->project->moduleMenu = array('link' => 'Module|tree|browse|product=%s&view=story'); diff --git a/module/project/lang/fr.php b/module/project/lang/fr.php index 6ae69a832f..96d872c13d 100644 --- a/module/project/lang/fr.php +++ b/module/project/lang/fr.php @@ -341,5 +341,3 @@ $lang->project->confirmUnlinkMember = "Do you want to remove this user from pro $lang->project->action = new stdclass(); $lang->project->action->managed = '$date, managed by $actor. $extra' . "\n"; - -$lang->project->moduleMenu = array('link' => 'Module|tree|browse|product=%s&view=story'); diff --git a/module/project/lang/vi.php b/module/project/lang/vi.php index 968c5d2417..162e4ca1fe 100644 --- a/module/project/lang/vi.php +++ b/module/project/lang/vi.php @@ -241,5 +241,3 @@ $lang->project->childLongTime = "There are long-term projects in the child p $lang->project->action = new stdclass(); $lang->project->action->managed = '$date, managed by $actor. $extra' . "\n"; - -$lang->project->moduleMenu = array('link' => 'Module|tree|browse|product=%s&view=story'); diff --git a/module/project/lang/zh-cn.php b/module/project/lang/zh-cn.php index 1d776a176c..3dc85712a6 100644 --- a/module/project/lang/zh-cn.php +++ b/module/project/lang/zh-cn.php @@ -341,5 +341,3 @@ $lang->project->confirmUnlinkMember = "您确定从该项目中移除该用户 $lang->project->action = new stdclass(); $lang->project->action->managed = '$date, 由 $actor 维护。$extra' . "\n"; - -$lang->project->moduleMenu = array('link' => '模块|tree|browse|product=%s&view=story'); diff --git a/module/project/model.php b/module/project/model.php index 8aaa6a4bf7..683afe62ca 100644 --- a/module/project/model.php +++ b/module/project/model.php @@ -2436,6 +2436,7 @@ class projectModel extends model $model = 'scrum'; $objectID = (empty($objectID) and $this->session->project) ? $this->session->project : $objectID; $project = $this->getByID($objectID); + if($project and $project->model == 'waterfall') $model = $project->model; if($project and $project->model == 'kanban') { @@ -2451,6 +2452,17 @@ class projectModel extends model $lang->project->dividerMenu = $lang->{$model}->dividerMenu; } + if(empty($project->hasProduct)) + { + unset($this->lang->project->menu->settings['subMenu']->products); + $projectProduct = $this->dao->select('product')->from(TABLE_PROJECTPRODUCT)->where('project')->eq($objectID)->fetch()->product; + $this->lang->project->menu->settings['subMenu']->module['link'] = sprintf($this->lang->project->menu->settings['subMenu']->module['link'], $projectProduct); + } + else + { + unset($this->lang->project->menu->settings['subMenu']->module); + } + /* Reset project priv. */ $moduleName = $this->app->rawModule; $methodName = $this->app->rawMethod; From bd1a50c1124f31947fa6c3ab5550adffd445b903 Mon Sep 17 00:00:00 2001 From: lanzongjun Date: Thu, 15 Sep 2022 13:13:19 +0800 Subject: [PATCH 031/712] * task #69250 --- module/install/control.php | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/module/install/control.php b/module/install/control.php index 774598d96b..e9df85988e 100644 --- a/module/install/control.php +++ b/module/install/control.php @@ -205,14 +205,6 @@ class install extends control if(!empty($_POST)) { $this->loadModel('setting')->setItem('system.common.global.mode', $this->post->mode); // Update mode. - - if($this->post->mode == 'lite') - { - /* lite mode create default program. */ - $programID = $this->loadModel('project')->createDefaultProgram(); - /* set default program config. */ - $this->loadModel('setting')->setItem('system.common.global.defaultProgram', $programID); - } return print(js::locate(inlink('step5'), 'parent')); } @@ -246,6 +238,15 @@ class install extends control if(dao::isError()) return print(js::error(dao::getError())); if($this->post->importDemoData) $this->install->importDemoData(); + + if($this->config->systemMode == 'lite') + { + /* lite mode create default program. */ + $programID = $this->loadModel('project')->createDefaultProgram(); + /* set default program config. */ + $this->loadModel('setting')->setItem('system.common.global.defaultProgram', $programID); + } + if(dao::isError()) return print(js::alert($this->lang->install->errorImportDemoData)); $this->loadModel('setting'); From cc80ff7209d51a2c622894e949034e78f3e4ae91 Mon Sep 17 00:00:00 2001 From: liuruogu Date: Thu, 15 Sep 2022 05:14:16 +0000 Subject: [PATCH 032/712] * Finish task #69016. --- module/project/control.php | 1 - 1 file changed, 1 deletion(-) diff --git a/module/project/control.php b/module/project/control.php index 0b0159be81..c104de1407 100644 --- a/module/project/control.php +++ b/module/project/control.php @@ -1984,7 +1984,6 @@ class project extends control { $projectID = $this->project->setMenu($projectID); $project = $this->project->getById($projectID); - if(isset($project->acl) and $project->acl == 'open') $this->locate($this->createLink('project', 'index', "projectID=$projectID")); echo $this->fetch('personnel', 'whitelist', "objectID=$projectID&module=$module&browseType=$objectType&orderBy=$orderBy&recTotal=$recTotal&recPerPage=$recPerPage&pageID=$pageID&projectID=$projectID&from=$from"); From 3a6bc7c7688b40df621f411932ba58515c660839 Mon Sep 17 00:00:00 2001 From: liugang Date: Thu, 15 Sep 2022 13:44:54 +0800 Subject: [PATCH 033/712] * Finish task #68994. --- module/projectrelease/control.php | 2 ++ module/projectrelease/view/browse.html.php | 4 ++++ module/projectrelease/view/create.html.php | 2 +- module/projectrelease/view/view.html.php | 16 +++++++++------- 4 files changed, 16 insertions(+), 8 deletions(-) diff --git a/module/projectrelease/control.php b/module/projectrelease/control.php index 993f8fab5c..35ec467923 100644 --- a/module/projectrelease/control.php +++ b/module/projectrelease/control.php @@ -530,6 +530,7 @@ class projectrelease extends control $branches = array('' => '', BRANCH_MAIN => $this->lang->branch->main, $release->branch => $branchName); $this->config->product->search['params']['branch']['values'] = $branches; } + if($this->view->project->model == 'waterfall' && empty($this->view->project->hasProduct)) unset($this->config->product->search['fields']['plan']); $this->loadModel('search')->setSearchParams($this->config->product->search); if($browseType == 'bySearch') @@ -651,6 +652,7 @@ class projectrelease extends control $branches = array('' => '', BRANCH_MAIN => $this->lang->branch->main, $release->branch => $branchName); $this->config->bug->search['params']['branch']['values'] = $branches; } + if($this->view->project->model == 'waterfall' && empty($this->view->project->hasProduct)) unset($this->config->bug->search['fields']['plan']); $this->loadModel('search')->setSearchParams($this->config->bug->search); $allBugs = array(); diff --git a/module/projectrelease/view/browse.html.php b/module/projectrelease/view/browse.html.php index f748053199..9dfc502561 100644 --- a/module/projectrelease/view/browse.html.php +++ b/module/projectrelease/view/browse.html.php @@ -46,7 +46,9 @@ release->id;?> release->name;?> + hasProduct):?> release->product;?> + executionCommon;?> release->build;?> release->date;?> @@ -68,7 +70,9 @@ echo html::a(inlink('view', "release=$release->id"), $release->name, '', "data-app='$from'") . $flagIcon; ?> + hasProduct):?> productName?> + executionName?> execution) ? $release->buildName : html::a($this->createLink('build', 'view', "buildID=$release->buildID"), $release->buildName);?> date;?> diff --git a/module/projectrelease/view/create.html.php b/module/projectrelease/view/create.html.php index 84426ac700..ceca9ba631 100644 --- a/module/projectrelease/view/create.html.php +++ b/module/projectrelease/view/create.html.php @@ -37,7 +37,7 @@ release->build;?> - + hasProduct) echo "class='hide'";?> > release->product;?>
diff --git a/module/projectrelease/view/view.html.php b/module/projectrelease/view/view.html.php index 70378c16b2..d59bada8f3 100644 --- a/module/projectrelease/view/view.html.php +++ b/module/projectrelease/view/view.html.php @@ -333,18 +333,20 @@
release->basicInfo?>
+ hasProduct):?> - productType != 'normal'):?> - - - - - + productType != 'normal'):?> - + + + + + + + From 00857783d71c41271e8afcb39cf5c6239858c0bf Mon Sep 17 00:00:00 2001 From: liugang Date: Thu, 15 Sep 2022 13:52:12 +0800 Subject: [PATCH 034/712] * Change the rule to create the shadow product's name. --- db/update17.6.1.sql | 2 ++ db/zentao.sql | 2 +- module/project/model.php | 2 +- 3 files changed, 4 insertions(+), 2 deletions(-) diff --git a/db/update17.6.1.sql b/db/update17.6.1.sql index 9846b7562f..05a415e445 100644 --- a/db/update17.6.1.sql +++ b/db/update17.6.1.sql @@ -1,2 +1,4 @@ ALTER TABLE `zt_product` ADD `shadow` tinyint(1) unsigned NOT NULL AFTER `code`; ALTER TABLE `zt_project` ADD `hasProduct` tinyint(1) unsigned NOT NULL DEFAULT 1 AFTER `code`; + +ALTER TABLE `zt_product` MODIFY `name` varchar(110) NOT NULL; diff --git a/db/zentao.sql b/db/zentao.sql index b39793fd2a..e92a6e2223 100755 --- a/db/zentao.sql +++ b/db/zentao.sql @@ -1096,7 +1096,7 @@ CREATE TABLE IF NOT EXISTS `zt_planstory` ( CREATE TABLE IF NOT EXISTS `zt_product` ( `id` mediumint(8) unsigned NOT NULL auto_increment, `program` mediumint(8) unsigned NOT NULL, - `name` varchar(90) NOT NULL, + `name` varchar(110) NOT NULL, `code` varchar(45) NOT NULL, `shadow` tinyint(1) unsigned NOT NULL, `bind` enum('0','1') NOT NULL DEFAULT '0', diff --git a/module/project/model.php b/module/project/model.php index 683afe62ca..4b1e6e31c9 100644 --- a/module/project/model.php +++ b/module/project/model.php @@ -1269,7 +1269,7 @@ class projectModel extends model { /* If parent not empty, link products or create products. */ $product = new stdclass(); - $product->name = !$project->hasProduct ? "{$project->name}_{$projectID}" : ($this->post->productName ? $this->post->productName : $project->name); + $product->name = !$project->hasProduct ? "SHADOW_{$project->name}_{$projectID}" : ($this->post->productName ? $this->post->productName : $project->name); $product->shadow = (int)empty($project->hasProduct); $product->bind = $this->post->parent ? 0 : 1; $product->program = $project->parent ? current(array_filter(explode(',', $program->path))) : 0; From 9b6274739668f7f951accdbb3407678b0cbc9de7 Mon Sep 17 00:00:00 2001 From: tanghucheng Date: Thu, 15 Sep 2022 14:24:08 +0800 Subject: [PATCH 035/712] * Finish task #69009. --- module/datatable/config.php | 2 ++ module/datatable/model.php | 6 ++++++ 2 files changed, 8 insertions(+) diff --git a/module/datatable/config.php b/module/datatable/config.php index 0c2c0fdbb0..3909fefff3 100644 --- a/module/datatable/config.php +++ b/module/datatable/config.php @@ -6,3 +6,5 @@ $config->datatable->moduleAlias['testtask-cases'] = 'testcase'; $config->datatable->moduleAlias['program-project'] = 'project'; $config->datatable->moduleAlias['project-bug'] = 'bug'; $config->datatable->moduleAlias['execution-bug'] = 'bug'; + +$config->datatable->noProductModule = ',review,'; diff --git a/module/datatable/model.php b/module/datatable/model.php index e69834e266..49267b9bf6 100644 --- a/module/datatable/model.php +++ b/module/datatable/model.php @@ -23,6 +23,12 @@ class datatableModel extends model public function getFieldList($module) { if(!isset($this->config->$module)) $this->loadModel($module); + if($this->session->hasProduct == 0 and (strpos($this->config->datatable->noProductModule, ",$module,") !== false)) + { + $productIndex = array_search('product', $this->config->$module->datatable->defaultField); + if($productIndex) unset($this->config->$module->datatable->defaultField[$productIndex]); + if(isset($this->config->$module->datatable->fieldList['product'])) unset($this->config->$module->datatable->fieldList['product']); + } if($this->session->currentProductType === 'normal') unset($this->config->$module->datatable->fieldList['branch']); foreach($this->config->$module->datatable->fieldList as $field => $items) { From f76ecb489766b4c425465c5b9a2c7f27303ea35a Mon Sep 17 00:00:00 2001 From: liugang Date: Thu, 15 Sep 2022 14:37:25 +0800 Subject: [PATCH 036/712] * Fix bug #27489. --- module/story/control.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/module/story/control.php b/module/story/control.php index 16b4b7158b..986b2afe38 100644 --- a/module/story/control.php +++ b/module/story/control.php @@ -258,7 +258,7 @@ class story extends control setcookie('storyModuleParam', 0, 0, $this->config->webRoot, '', $this->config->cookieSecure, true); $execution = $this->dao->findById((int)$objectID)->from(TABLE_EXECUTION)->fetch(); $moduleName = $execution->type == 'project' ? 'projectstory' : 'execution'; - $param = $execution->type == 'project' ? "projectID=$objectID&productID=$productID" : "executionID=$objectID&orderBy=order_desc&browseType=unclosed"; + $param = $execution->type == 'project' ? "projectID=$objectID" : "executionID=$objectID&orderBy=order_desc&browseType=unclosed"; $response['locate'] = $this->createLink($moduleName, 'story', $param); } if($this->app->getViewType() == 'xhtml') $response['locate'] = $this->createLink('story', 'view', "storyID=$storyID", 'html'); From dcadbc9b34ec58d84b15322fcb58320bdf2c327e Mon Sep 17 00:00:00 2001 From: tanghucheng Date: Thu, 15 Sep 2022 14:51:38 +0800 Subject: [PATCH 037/712] * Finish task #69008. --- module/product/view/track.html.php | 2 +- module/projectstory/control.php | 3 +++ 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/module/product/view/track.html.php b/module/product/view/track.html.php index 7a515e738e..bc8829587a 100644 --- a/module/product/view/track.html.php +++ b/module/product/view/track.html.php @@ -28,7 +28,7 @@ URAndSR):?> diff --git a/module/install/lang/de.php b/module/install/lang/de.php index 3e04ca06fa..40cbfc8f97 100644 --- a/module/install/lang/de.php +++ b/module/install/lang/de.php @@ -293,7 +293,7 @@ EOT; $lang->install->product = array('chanzhi', 'zdoo'); -$lang->install->modeList['lite'] = 'Lite mode'; +$lang->install->modeList['lean'] = 'Lean mode'; $lang->install->modeList['new'] = 'Program mode'; $lang->install->promotion = "Produkte von Nature Easy Soft:"; diff --git a/module/install/lang/en.php b/module/install/lang/en.php index 208823236a..a328c9a4f2 100644 --- a/module/install/lang/en.php +++ b/module/install/lang/en.php @@ -293,7 +293,7 @@ EOT; $lang->install->product = array('chanzhi', 'zdoo', 'ydisk', 'meshiot'); -$lang->install->modeList['lite'] = 'Lite mode'; +$lang->install->modeList['lean'] = 'Lean mode'; $lang->install->modeList['new'] = 'Program mode'; $lang->install->promotion = "Products also from EasyCorp:"; diff --git a/module/install/lang/fr.php b/module/install/lang/fr.php index 9c6eeb1342..9c2c6bb6fa 100644 --- a/module/install/lang/fr.php +++ b/module/install/lang/fr.php @@ -293,7 +293,7 @@ EOT; $lang->install->product = array('chanzhi', 'zdoo'); -$lang->install->modeList['lite'] = 'Lite mode'; +$lang->install->modeList['lean'] = 'Lean mode'; $lang->install->modeList['new'] = 'Program mode'; $lang->install->promotion = "Autres produits de l'équipe Nature Easy Soft :"; diff --git a/module/install/lang/zh-cn.php b/module/install/lang/zh-cn.php index c86e39506b..57624113eb 100644 --- a/module/install/lang/zh-cn.php +++ b/module/install/lang/zh-cn.php @@ -293,7 +293,7 @@ EOT; $lang->install->product = array('chanzhi', 'zdoo', 'xuanxuan', 'ydisk', 'meshiot'); -$lang->install->modeList['lite'] = '迅捷模式'; +$lang->install->modeList['lean'] = '迅捷模式'; $lang->install->modeList['new'] = '综合模式'; $lang->install->promotion = "为您推荐易软天创旗下其他产品:"; diff --git a/module/project/model.php b/module/project/model.php index 40ec259bcc..89bc950641 100644 --- a/module/project/model.php +++ b/module/project/model.php @@ -2644,9 +2644,9 @@ class projectModel extends model $program->type = 'program'; $program->name = $this->lang->project->defaultProgram; $program->budgetUnit = 'CNY'; - $program->openedBy = $this->app->user->account; $program->whitelist = ''; $program->status = 'doing'; + $program->grade = 1; $program->openedDate = helper::now(); $program->begin = helper::today(); $program->end = LONG_TIME; diff --git a/module/upgrade/control.php b/module/upgrade/control.php index fe176ea746..5e3ac8760b 100644 --- a/module/upgrade/control.php +++ b/module/upgrade/control.php @@ -157,11 +157,16 @@ class upgrade extends control /* Delete all patch actions if upgrade success. */ $this->loadModel('action')->deleteByType('patch'); - if((empty($systemMode) && !isset($this->config->qcVersion) && strpos($fromVersion, 'max') === false) or - ($systemMode != 'new' && strpos($fromVersion, 'max') === false && strpos($this->config->version, 'max') !== false)) + $openVersion = $this->upgrade->getOpenVersion(str_replace('.', '_', $fromVersion)); + $selectMode = true; + if(version_compare($openVersion, '15_0', '>=') and version_compare($openVersion, '18_0', '<=') and $systemMode == 'classic') $selectMode = false; + if(version_compare($openVersion, '18_0', '>')) $selectMode = false; + + if($selectMode) { - $this->locate(inlink('to15Guide', "fromVersion=$fromVersion")); + $this->locate(inlink('to18Guide', "fromVersion=$fromVersion")); } + $this->locate(inlink('afterExec', "fromVersion=$fromVersion")); } @@ -218,6 +223,55 @@ class upgrade extends control $this->display(); } + /** + * Guide to 18 version. + * + * @param string $fromVersion + * @access public + * @return void + */ + public function to18Guide($fromVersion) + { + if($_POST) + { + $mode = fixer::input('post')->get('mode'); + $this->loadModel('setting')->setItem('system.common.global.mode', $mode); + + /* Update sprint concept. */ + $sprintConcept = 0; + if(isset($this->config->custom->sprintConcept)) + { + if($this->config->custom->sprintConcept == 2 and $mode == 'new') $sprintConcept = 1; + } + elseif(isset($this->config->custom->productProject)) + { + list($productConcept, $projectConcept) = explode('_', $this->config->custom->productProject); + if($mode == 'classic') $sprintConcept = $projectConcept; + if($mode == 'new' and $projectConcept == 2) $sprintConcept = 1; + } + $this->setting->setItem('system.custom.sprintConcept', $sprintConcept); + + if($mode == 'lean') + { + /* lite mode create default program. */ + $programID = $this->loadModel('project')->createDefaultProgram(); + /* set default program config. */ + $this->loadModel('setting')->setItem('system.common.global.defaultProgram', $programID); + + /* 只有没有关联项目集的产品和项目关联到默认项目集下. */ + $this->upgrade->relationDefaultProgram($programID); + + $this->locate(inlink('afterExec', "fromVersion=$fromVersion")); + } + if($mode == 'new') $this->locate(inlink('mergeTips')); + } + + $title = $this->lang->upgrade->selectMode; + + $this->view->title = $title; + $this->display(); + } + /** * Merge program tips. * diff --git a/module/upgrade/css/to18guide.css b/module/upgrade/css/to18guide.css index bf99563720..1d12295a52 100644 --- a/module/upgrade/css/to18guide.css +++ b/module/upgrade/css/to18guide.css @@ -1,9 +1,10 @@ -#mainContent tr td .icon-close {font-weight: bold; color: brown;} -#mainContent tr td .icon-check {font-weight: bold; color: green;} +#mainContent tr td .icon-close {font-weight: bold; color: #ea644a;} +#mainContent tr td .icon-check {font-weight: bold; color: #329d38;} #mainContent tr th {background-color: rgb(241, 241, 241);} #mainContent tr td {background-color: rgb(255, 255, 255); border-bottom: 1px solid rgb(238, 238, 238); border-right: 1px solid rgb(238, 238, 238);} +#useLean {background-color: #ddd!important; padding: 6px 85px;} +#useNew {background-color: #ddd!important; padding: 6px 85px;} -#useLean {background-color: #BDBBBE!important;} -#useNew {background-color: #BDBBBE!important;} \ No newline at end of file +#mainContent .datatable {cursor: default;} \ No newline at end of file diff --git a/module/upgrade/lang/de.php b/module/upgrade/lang/de.php index a6710d329c..32cdb7b41c 100644 --- a/module/upgrade/lang/de.php +++ b/module/upgrade/lang/de.php @@ -162,6 +162,7 @@ $lang->upgrade->recoveryActions = new stdclass(); $lang->upgrade->recoveryActions->cancel = 'Cancel'; $lang->upgrade->recoveryActions->review = 'Review'; +$lang->upgrade->selectMode = 'Select Mode'; $lang->upgrade->mode = 'Mode'; $lang->upgrade->usage = 'Usage scenarios'; $lang->upgrade->leanUsage = 'The concept is simpler, the functionality is simpler, and it is suitable for small R&D teams'; diff --git a/module/upgrade/lang/en.php b/module/upgrade/lang/en.php index 123ed755bd..2867c2baca 100644 --- a/module/upgrade/lang/en.php +++ b/module/upgrade/lang/en.php @@ -162,6 +162,7 @@ $lang->upgrade->recoveryActions = new stdclass(); $lang->upgrade->recoveryActions->cancel = 'Cancel'; $lang->upgrade->recoveryActions->review = 'Review'; +$lang->upgrade->selectMode = 'Select Mode'; $lang->upgrade->mode = 'Mode'; $lang->upgrade->usage = 'Usage scenarios'; $lang->upgrade->leanUsage = 'The concept is simpler, the functionality is simpler, and it is suitable for small R&D teams'; diff --git a/module/upgrade/lang/fr.php b/module/upgrade/lang/fr.php index 41438e30c9..e6c5c626fd 100644 --- a/module/upgrade/lang/fr.php +++ b/module/upgrade/lang/fr.php @@ -162,6 +162,7 @@ $lang->upgrade->recoveryActions = new stdclass(); $lang->upgrade->recoveryActions->cancel = 'Cancel'; $lang->upgrade->recoveryActions->review = 'Review'; +$lang->upgrade->selectMode = 'Select Mode'; $lang->upgrade->mode = 'Mode'; $lang->upgrade->usage = 'Usage scenarios'; $lang->upgrade->leanUsage = 'The concept is simpler, the functionality is simpler, and it is suitable for small R&D teams'; diff --git a/module/upgrade/lang/zh-cn.php b/module/upgrade/lang/zh-cn.php index a8ba2f1c9f..013ccce08d 100644 --- a/module/upgrade/lang/zh-cn.php +++ b/module/upgrade/lang/zh-cn.php @@ -93,8 +93,8 @@ $lang->upgrade->mergeProgramDesc = <<选择历史{$lang->projectCommon}作为迭代升级后,用户可以选择这个执行所属的项目集、项目或新建项目集、项目。

EOD; -$lang->upgrade->to15Mode['lite'] = '迅捷模式'; -$lang->upgrade->to15Mode['new'] = '综合模式'; +$lang->upgrade->to15Mode['classic'] = '经典管理模式'; +$lang->upgrade->to15Mode['new'] = '全新项目集管理模式'; $lang->upgrade->selectedModeTips['classic'] = '后续您还可以在后台-自定义里面切换为全新项目集管理的模式。'; $lang->upgrade->selectedModeTips['new'] = '切换为项目集管理模式需要对之前的数据进行归并处理,系统会引导您完成这个操作。'; @@ -162,6 +162,7 @@ $lang->upgrade->recoveryActions = new stdclass(); $lang->upgrade->recoveryActions->cancel = '取消'; $lang->upgrade->recoveryActions->review = '评审'; +$lang->upgrade->selectMode = '请选择使用模式'; $lang->upgrade->mode = '模式'; $lang->upgrade->usage = '使用场景'; $lang->upgrade->leanUsage = '概念更简单,功能也更简洁,适用于小型研发团队'; @@ -182,5 +183,5 @@ $lang->upgrade->useNew = '使用综合模式'; $lang->upgrade->remark = '备注'; $lang->upgrade->remarkDesc = '后续您还可以在系统的后台自定义中进行切换'; -$lang->upgrade->to18Mode['lite'] = '迅捷模式'; +$lang->upgrade->to18Mode['lean'] = '迅捷模式'; $lang->upgrade->to18Mode['new'] = '综合模式'; \ No newline at end of file diff --git a/module/upgrade/model.php b/module/upgrade/model.php index c0fd3dd323..c1aa63d386 100644 --- a/module/upgrade/model.php +++ b/module/upgrade/model.php @@ -1009,7 +1009,7 @@ class upgradeModel extends model case '17_0_beta2': $confirmContent .= file_get_contents($this->getUpgradeFile('17.0.beta2')); case '17_0': $confirmContent .= file_get_contents($this->getUpgradeFile('17.0')); case '17_1': - $confirmContent .= file_get_contents($this->getUpgradeFile('17.1')); + $confirmContent .= file_get_contents($this->getUpgradeFile('17.1')); $xuanxuanSql = $this->app->getAppRoot() . 'db' . DS . 'upgradexuanxuan5.6.sql'; $confirmContent .= file_get_contents($xuanxuanSql); case '17_2': @@ -7528,4 +7528,47 @@ class upgradeModel extends model } return true; } + + /** + * Relation default program. + * + * @access public + * @return bool + */ + public function relationDefaultProgram($programID) + { + /* product */ + $noRelationProduct = $this->dao->select('id')->from(TABLE_PRODUCT)->where('program')->eq(0)->fetchPairs('id'); + if(!empty($noRelationProduct)) + { + foreach($noRelationProduct as $productID) + { + $this->dao->update(TABLE_PRODUCT)->set('program')->eq($programID)->where('id')->eq($productID)->exec(); + } + } + + /* project */ + $noRelationProject = $this->dao->select('id,path')->from(TABLE_PROJECT)->where('type')->eq('project')->andWhere('parent')->eq(0)->andWhere('grade')->eq(1)->fetchAll(); + if(!empty($noRelationProject)) + { + foreach($noRelationProject as $project) + { + $path = ",{$programID}" . $project->path; + $this->dao->update(TABLE_PROJECT) + ->set('parent')->eq($programID) + ->set('path')->eq($path) + ->set('grade = grade+1') + ->where('id')->eq($project->id)->exec(); + + /* Update children. */ + $this->dao->update(TABLE_PROJECT) + ->set("path = CONCAT(',{$programID}', path)") + ->set('grade = grade+1') + ->where('path')->like(",$project->id,%") + ->exec(); + } + } + + return true; + } } diff --git a/module/upgrade/view/to18guide.html.php b/module/upgrade/view/to18guide.html.php index de4a1f077a..e9859cf6ff 100644 --- a/module/upgrade/view/to18guide.html.php +++ b/module/upgrade/view/to18guide.html.php @@ -14,7 +14,7 @@
-

+

release->product;?> productName;?>
product->branch, $lang->product->branchName[$product->type]);?>
release->name;?>product->branch, $lang->product->branchName[$product->type]);?>
release->name;?> name;?>
> - app->rawModule == 'projectstory'): ?> + app->rawModule == 'projectstory' and $this->session->hasProduct): ?> + execution->featureBar['all'] as $key => $label):?> $label";?> From 17392ef1acdd081dd87a2db89474a93958e86c66 Mon Sep 17 00:00:00 2001 From: liuruogu Date: Thu, 15 Sep 2022 08:45:57 +0000 Subject: [PATCH 040/712] * Finsih task #69013. --- module/common/lang/menu.php | 52 +++++++++++++++++++++--------------- module/common/lang/zh-cn.php | 1 + module/common/model.php | 7 +++-- module/product/control.php | 2 +- module/product/js/browse.js | 10 ++++--- module/project/model.php | 9 +++++++ 6 files changed, 54 insertions(+), 27 deletions(-) diff --git a/module/common/lang/menu.php b/module/common/lang/menu.php index c6f2c848eb..7dd8ac6692 100644 --- a/module/common/lang/menu.php +++ b/module/common/lang/menu.php @@ -199,17 +199,22 @@ $lang->project->homeMenu->browse = array('link' => ($config->systemMode == 'new' if($config->systemMode == 'new') $lang->project->homeMenu->kanban = array('link' => "{$lang->project->kanban}|project|kanban|"); /* Scrum menu. */ -$lang->scrum->menu = new stdclass(); -$lang->scrum->menu->index = array('link' => "{$lang->dashboard}|project|index|project=%s"); -$lang->scrum->menu->execution = array('link' => "$lang->executionCommon|project|execution|status=all&projectID=%s", 'exclude' => 'execution-testreport', 'subModule' => 'task'); -$lang->scrum->menu->story = array('link' => "$lang->SRCommon|projectstory|story|projectID=%s", 'subModule' => 'projectstory,tree', 'alias' => 'story,track'); -$lang->scrum->menu->doc = array('link' => "{$lang->doc->common}|doc|tableContents|type=project&objectID=%s", 'subModule' => 'doc'); -$lang->scrum->menu->qa = array('link' => "{$lang->qa->common}|project|bug|projectID=%s", 'subModule' => 'testcase,testtask,bug,testreport,execution', 'alias' => 'bug,testtask,testcase,testreport', 'exclude' => 'execution-create,execution-batchedit'); -$lang->scrum->menu->devops = array('link' => "{$lang->repo->common}|repo|browse|repoID=0&branchID=&objectID=%s", 'subModule' => 'repo'); -$lang->scrum->menu->build = array('link' => "{$lang->build->common}|project|build|project=%s"); -$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'); +$lang->scrum->menu = new stdclass(); +$lang->scrum->menu->index = array('link' => "{$lang->dashboard}|project|index|project=%s"); +$lang->scrum->menu->execution = array('link' => "$lang->executionCommon|project|execution|status=all&projectID=%s", 'exclude' => 'execution-testreport', 'subModule' => 'task'); +$lang->scrum->menu->storyGroup = array('link' => "{$lang->story->story}|projectstory|story|projectID=%s&product=%s",'class' => 'dropdown dropdown-hover'); +$lang->scrum->menu->story = array('link' => "$lang->SRCommon|projectstory|story|projectID=%s|story", 'subModule' => 'projectstory,tree', 'alias' => 'story,track'); +$lang->scrum->menu->doc = array('link' => "{$lang->doc->common}|doc|tableContents|type=project&objectID=%s", 'subModule' => 'doc'); +$lang->scrum->menu->qa = array('link' => "{$lang->qa->common}|project|bug|projectID=%s", 'subModule' => 'testcase,testtask,bug,testreport,execution', 'alias' => 'bug,testtask,testcase,testreport', 'exclude' => 'execution-create,execution-batchedit'); +$lang->scrum->menu->devops = array('link' => "{$lang->repo->common}|repo|browse|repoID=0&branchID=&objectID=%s", 'subModule' => 'repo'); +$lang->scrum->menu->build = array('link' => "{$lang->build->common}|project|build|project=%s"); +$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'); + +$lang->scrum->menu->storyGroup['dropMenu'] = new stdclass(); +$lang->scrum->menu->storyGroup['dropMenu']->SRStory = array('link' => "{$lang->SRCommon}|projectstory|story|projectID=%s&productID=%s|story", 'subModule' => 'projectstory,tree', 'alias' => 'story,track'); +$lang->scrum->menu->storyGroup['dropMenu']->URStory = array('link' => "{$lang->URCommon}|projectstory|story|projectID=%s&productID=%s&branch=0&browseType=¶m=0&storyType=requirement|requirement", 'subModule' => 'projectstory,tree', 'alias' => 'story,track'); $lang->scrum->dividerMenu = ',execution,programplan,doc,settings,'; @@ -217,6 +222,7 @@ $lang->scrum->dividerMenu = ',execution,programplan,doc,settings,'; $lang->scrum->menuOrder[5] = 'index'; $lang->scrum->menuOrder[10] = 'execution'; $lang->scrum->menuOrder[15] = 'story'; +$lang->scrum->menuOrder[16] = 'storyGroup'; $lang->scrum->menuOrder[20] = 'qa'; $lang->scrum->menuOrder[25] = 'devops'; $lang->scrum->menuOrder[30] = 'doc'; @@ -245,25 +251,29 @@ $lang->scrum->menu->settings['subMenu']->module = array('link' => "{$lang-> /* Waterfall menu. */ $lang->waterfall->menu = new stdclass(); -$lang->waterfall->menu->index = array('link' => "$lang->dashboard|project|index|project=%s"); -$lang->waterfall->menu->execution = array('link' => "{$lang->stage->common}|project|execution|status=all&projectID=%s", 'subModule' => 'programplan,task'); -$lang->waterfall->menu->story = array('link' => "$lang->SRCommon|projectstory|story|project=%s", 'subModule' => 'projectstory,tree', 'exclude' => 'projectstory-track'); -$lang->waterfall->menu->design = array('link' => "{$lang->design->common}|design|browse|project=%s"); -$lang->waterfall->menu->qa = array('link' => "{$lang->qa->common}|project|bug|projectID=%s", 'subModule' => 'testcase,testtask,bug,testreport', 'alias' => 'bug,testtask,testcase,testreport'); -$lang->waterfall->menu->doc = array('link' => "{$lang->doc->common}|doc|tableContents|type=project&objectID=%s"); -$lang->waterfall->menu->devops = array('link' => "{$lang->repo->common}|repo|browse|repoID=0&branchID=&objectID=%s", 'subModule' => 'repo'); -$lang->waterfall->menu->build = array('link' => "{$lang->build->common}|project|build|project=%s"); -$lang->waterfall->menu->release = array('link' => "{$lang->release->common}|projectrelease|browse|project=%s", 'subModule' => 'projectrelease'); -$lang->waterfall->menu->dynamic = array('link' => "$lang->dynamic|project|dynamic|project=%s"); +$lang->waterfall->menu->index = array('link' => "$lang->dashboard|project|index|project=%s"); +$lang->waterfall->menu->execution = array('link' => "{$lang->stage->common}|project|execution|status=all&projectID=%s", 'subModule' => 'programplan,task'); +$lang->waterfall->menu->storyGroup = array('link' => "{$lang->story->story}|projectstory|story|projectID=%s",'class' => 'dropdown dropdown-hover'); +$lang->waterfall->menu->story = array('link' => "$lang->SRCommon|projectstory|story|projectID=%s", 'subModule' => 'projectstory,tree', 'alias' => 'story,track'); +$lang->waterfall->menu->design = array('link' => "{$lang->design->common}|design|browse|project=%s"); +$lang->waterfall->menu->qa = array('link' => "{$lang->qa->common}|project|bug|projectID=%s", 'subModule' => 'testcase,testtask,bug,testreport', 'alias' => 'bug,testtask,testcase,testreport'); +$lang->waterfall->menu->doc = array('link' => "{$lang->doc->common}|doc|tableContents|type=project&objectID=%s"); +$lang->waterfall->menu->devops = array('link' => "{$lang->repo->common}|repo|browse|repoID=0&branchID=&objectID=%s", 'subModule' => 'repo'); +$lang->waterfall->menu->build = array('link' => "{$lang->build->common}|project|build|project=%s"); +$lang->waterfall->menu->release = array('link' => "{$lang->release->common}|projectrelease|browse|project=%s", 'subModule' => 'projectrelease'); +$lang->waterfall->menu->dynamic = array('link' => "$lang->dynamic|project|dynamic|project=%s"); $lang->waterfall->menu->settings = $lang->scrum->menu->settings; $lang->waterfall->dividerMenu = ',programplan,build,dynamic,'; +$lang->waterfall->menu->storyGroup['dropMenu'] = $lang->scrum->menu->storyGroup['dropMenu']; + /* Waterfall menu order. */ $lang->waterfall->menuOrder[5] = 'index'; $lang->waterfall->menuOrder[15] = 'programplan'; $lang->waterfall->menuOrder[20] = 'execution'; $lang->waterfall->menuOrder[25] = 'story'; +$lang->waterfall->menuOrder[26] = 'storyGoup'; $lang->waterfall->menuOrder[30] = 'design'; $lang->waterfall->menuOrder[35] = 'devops'; $lang->waterfall->menuOrder[55] = 'qa'; diff --git a/module/common/lang/zh-cn.php b/module/common/lang/zh-cn.php index a27488d59e..9ebbc58379 100644 --- a/module/common/lang/zh-cn.php +++ b/module/common/lang/zh-cn.php @@ -170,6 +170,7 @@ $lang->report->common = '统计'; $lang->system->common = '组织'; $lang->admin->common = '后台'; $lang->story->common = $lang->SRCommon; +$lang->story->story = '需求'; $lang->task->common = '任务'; $lang->bug->common = 'Bug'; $lang->testcase->common = '用例'; diff --git a/module/common/model.php b/module/common/model.php index 5bcbd38c37..b5ba80d527 100644 --- a/module/common/model.php +++ b/module/common/model.php @@ -1180,8 +1180,11 @@ class commonModel extends model $dropMenuLink = $dropMenuItem; if(is_array($dropMenuItem) and isset($dropMenuItem['link'])) $dropMenuLink = $dropMenuLink['link']; - list($subLabel, $subModule, $subMethod, $subParams) = explode('|', $dropMenuLink); + $dropMenuLinks = explode('|', $dropMenuLink); + list($subLabel, $subModule, $subMethod, $subParams) = $dropMenuLinks; if(!common::hasPriv($subModule, $subMethod)) continue; + $labelID = $subLabel; + if(isset($dropMenuLinks[4])) $labelID = $dropMenuLinks[4]; $subLink = helper::createLink($subModule, $subMethod, $subParams); @@ -1204,7 +1207,7 @@ class commonModel extends model $subActive = 'active'; $label = $subLabel; } - $dropMenu .= "
  • " . html::a($subLink, $subLabel, '', "data-app='$tab'") . '
  • '; + $dropMenu .= "
  • " . html::a($subLink, $subLabel, '', "data-app='$tab'") . '
  • '; } if(empty($dropMenu)) continue; diff --git a/module/product/control.php b/module/product/control.php index b78a354694..facc091eb8 100644 --- a/module/product/control.php +++ b/module/product/control.php @@ -245,7 +245,7 @@ class product extends control $productPlans = $this->execution->getPlans($projectProducts, 'skipParent'); if($browseType == 'bybranch') $param = $branchID; - $stories = $this->story->getExecutionStories($projectID, $productID, $branchID, $sort, $browseType, $param, 'story', '', $pager); + $stories = $this->story->getExecutionStories($projectID, $productID, $branchID, $sort, $browseType, $param, $storyType, '', $pager); } else { diff --git a/module/product/js/browse.js b/module/product/js/browse.js index cbbc03ed83..47ea4452c4 100644 --- a/module/product/js/browse.js +++ b/module/product/js/browse.js @@ -1,10 +1,14 @@ $(function() { if(typeof(rawModule) == 'undefined') rawModule = 'product'; - if(rawModule != 'projectstory') + + $('#navbar .nav li').removeClass('active'); + $("#navbar .nav li[data-id=" + storyType + ']').addClass('active'); + + if(rawModule == 'projectstory') { - $('#navbar .nav li').removeClass('active'); - $("#navbar .nav li[data-id=" + storyType + ']').addClass('active'); + $('#navbar .nav li[data-id=storyGroup]').addClass('active'); + $('#navbar .nav li[data-id=storyGroup]>a').html($('.active [data-id=' + storyType + ']').text() + ''); } $(document).ready(function(){ diff --git a/module/project/model.php b/module/project/model.php index 4b1e6e31c9..34a3f5a789 100644 --- a/module/project/model.php +++ b/module/project/model.php @@ -2454,13 +2454,22 @@ class projectModel extends model if(empty($project->hasProduct)) { + if(isset($this->lang->project->menu->story)) unset($this->lang->project->menu->story); unset($this->lang->project->menu->settings['subMenu']->products); $projectProduct = $this->dao->select('product')->from(TABLE_PROJECTPRODUCT)->where('project')->eq($objectID)->fetch()->product; $this->lang->project->menu->settings['subMenu']->module['link'] = sprintf($this->lang->project->menu->settings['subMenu']->module['link'], $projectProduct); + + if($model !== 'kanbanProject') + { + $this->lang->project->menu->storyGroup['link'] = sprintf($this->lang->project->menu->storyGroup['link'], '%s', $projectProduct); + $this->lang->project->menu->storyGroup['dropMenu']->SRStory['link'] = sprintf($this->lang->project->menu->storyGroup['dropMenu']->SRStory['link'], '%s', $projectProduct); + $this->lang->project->menu->storyGroup['dropMenu']->URStory['link'] = sprintf($this->lang->project->menu->storyGroup['dropMenu']->URStory['link'], '%s', $projectProduct); + } } else { unset($this->lang->project->menu->settings['subMenu']->module); + if(isset($this->lang->project->menu->storyGroup)) unset($this->lang->project->menu->storyGroup); } /* Reset project priv. */ From 8296ebbb9f8e48c7123160e0fce34d03e83794e7 Mon Sep 17 00:00:00 2001 From: liuruogu Date: Thu, 15 Sep 2022 08:49:10 +0000 Subject: [PATCH 041/712] * Finsih task #69013. --- module/common/lang/de.php | 1 + module/common/lang/en.php | 1 + module/common/lang/fr.php | 1 + 3 files changed, 3 insertions(+) diff --git a/module/common/lang/de.php b/module/common/lang/de.php index 91ed8d50d1..6518dd9646 100644 --- a/module/common/lang/de.php +++ b/module/common/lang/de.php @@ -170,6 +170,7 @@ $lang->report->common = 'Statistic'; $lang->system->common = 'System'; $lang->admin->common = 'Admin'; $lang->story->common = 'Story'; +$lang->story->story = 'Story' $lang->task->common = 'Task'; $lang->bug->common = 'Bug'; $lang->testcase->common = 'Testcase'; diff --git a/module/common/lang/en.php b/module/common/lang/en.php index 4dac83fa31..c72a009bf2 100644 --- a/module/common/lang/en.php +++ b/module/common/lang/en.php @@ -170,6 +170,7 @@ $lang->report->common = 'Statistic'; $lang->system->common = 'System'; $lang->admin->common = 'Admin'; $lang->story->common = 'Story'; +$lang->story->story = 'Story' $lang->task->common = 'Task'; $lang->bug->common = 'Bug'; $lang->testcase->common = 'Testcase'; diff --git a/module/common/lang/fr.php b/module/common/lang/fr.php index 67caf6b5fd..5c94767774 100644 --- a/module/common/lang/fr.php +++ b/module/common/lang/fr.php @@ -170,6 +170,7 @@ $lang->report->common = 'Statistic'; $lang->system->common = 'System'; $lang->admin->common = 'Admin'; $lang->story->common = 'Story'; +$lang->story->story = 'Story' $lang->task->common = 'Task'; $lang->bug->common = 'Bug'; $lang->testcase->common = 'Testcase'; From 78107e92dcb554481c65e38ac86ea553919b0e1c Mon Sep 17 00:00:00 2001 From: lanzongjun Date: Thu, 15 Sep 2022 17:31:47 +0800 Subject: [PATCH 042/712] * task #69250 --- module/upgrade/css/to18guide.css | 9 +++ module/upgrade/js/to18guide.js | 12 +++ module/upgrade/lang/de.php | 23 ++++++ module/upgrade/lang/en.php | 23 ++++++ module/upgrade/lang/fr.php | 23 ++++++ module/upgrade/lang/zh-cn.php | 23 ++++++ module/upgrade/view/to18guide.html.php | 101 +++++++++++++++++++++++++ 7 files changed, 214 insertions(+) create mode 100644 module/upgrade/css/to18guide.css create mode 100644 module/upgrade/js/to18guide.js create mode 100644 module/upgrade/view/to18guide.html.php diff --git a/module/upgrade/css/to18guide.css b/module/upgrade/css/to18guide.css new file mode 100644 index 0000000000..bf99563720 --- /dev/null +++ b/module/upgrade/css/to18guide.css @@ -0,0 +1,9 @@ +#mainContent tr td .icon-close {font-weight: bold; color: brown;} +#mainContent tr td .icon-check {font-weight: bold; color: green;} + +#mainContent tr th {background-color: rgb(241, 241, 241);} +#mainContent tr td {background-color: rgb(255, 255, 255); border-bottom: 1px solid rgb(238, 238, 238); border-right: 1px solid rgb(238, 238, 238);} + + +#useLean {background-color: #BDBBBE!important;} +#useNew {background-color: #BDBBBE!important;} \ No newline at end of file diff --git a/module/upgrade/js/to18guide.js b/module/upgrade/js/to18guide.js new file mode 100644 index 0000000000..4f141b1662 --- /dev/null +++ b/module/upgrade/js/to18guide.js @@ -0,0 +1,12 @@ +$(function() +{ + $("#useLean").click(function(){ + $('#mode').val('lean'); + $('form').submit(); + }) + + $("#useNew").click(function(){ + $('#mode').val('new'); + $('form').submit(); + }) +}); diff --git a/module/upgrade/lang/de.php b/module/upgrade/lang/de.php index dfd5dffaf6..a6710d329c 100644 --- a/module/upgrade/lang/de.php +++ b/module/upgrade/lang/de.php @@ -161,3 +161,26 @@ include dirname(__FILE__) . '/version.php'; $lang->upgrade->recoveryActions = new stdclass(); $lang->upgrade->recoveryActions->cancel = 'Cancel'; $lang->upgrade->recoveryActions->review = 'Review'; + +$lang->upgrade->mode = 'Mode'; +$lang->upgrade->usage = 'Usage scenarios'; +$lang->upgrade->leanUsage = 'The concept is simpler, the functionality is simpler, and it is suitable for small R&D teams'; +$lang->upgrade->newUsage = 'More concepts, more rich functions, suitable for large and medium R & D teams'; +$lang->upgrade->program = 'Program'; +$lang->upgrade->productRR = 'Product - R&D requirements'; +$lang->upgrade->productUR = 'Product - User requirements'; +$lang->upgrade->productLine = 'Product - Product Line'; +$lang->upgrade->projectScrum = 'Project - Issues, risks, opportunities, processes, QA, meetings in Scrum model'; +$lang->upgrade->projectWaterfull = 'Project - Waterfall model'; +$lang->upgrade->projectKanban = 'Project - Kanban model'; +$lang->upgrade->execution = 'Execute, test, DevOps, Kanban, document, statistics, organize'; +$lang->upgrade->assetlib = 'Assetlib'; +$lang->upgrade->oa = 'OA, operation and maintenance, feedback, school, workflow, background'; +$lang->upgrade->selectUsage = 'Select a scenario'; +$lang->upgrade->useLean = 'Use Lean mode'; +$lang->upgrade->useNew = 'User New mode'; +$lang->upgrade->remark = 'Remark'; +$lang->upgrade->remarkDesc = 'You can also switch between the background customization of the system later'; + +$lang->upgrade->to18Mode['Lean'] = 'Lean'; +$lang->upgrade->to18Mode['new'] = 'New'; \ No newline at end of file diff --git a/module/upgrade/lang/en.php b/module/upgrade/lang/en.php index ed38f78dd2..123ed755bd 100644 --- a/module/upgrade/lang/en.php +++ b/module/upgrade/lang/en.php @@ -161,3 +161,26 @@ include dirname(__FILE__) . '/version.php'; $lang->upgrade->recoveryActions = new stdclass(); $lang->upgrade->recoveryActions->cancel = 'Cancel'; $lang->upgrade->recoveryActions->review = 'Review'; + +$lang->upgrade->mode = 'Mode'; +$lang->upgrade->usage = 'Usage scenarios'; +$lang->upgrade->leanUsage = 'The concept is simpler, the functionality is simpler, and it is suitable for small R&D teams'; +$lang->upgrade->newUsage = 'More concepts, more rich functions, suitable for large and medium R & D teams'; +$lang->upgrade->program = 'Program'; +$lang->upgrade->productRR = 'Product - R&D requirements'; +$lang->upgrade->productUR = 'Product - User requirements'; +$lang->upgrade->productLine = 'Product - Product Line'; +$lang->upgrade->projectScrum = 'Project - Issues, risks, opportunities, processes, QA, meetings in Scrum model'; +$lang->upgrade->projectWaterfull = 'Project - Waterfall model'; +$lang->upgrade->projectKanban = 'Project - Kanban model'; +$lang->upgrade->execution = 'Execute, test, DevOps, Kanban, document, statistics, organize'; +$lang->upgrade->assetlib = 'Assetlib'; +$lang->upgrade->oa = 'OA, operation and maintenance, feedback, school, workflow, background'; +$lang->upgrade->selectUsage = 'Select a scenario'; +$lang->upgrade->useLean = 'Use Lean mode'; +$lang->upgrade->useNew = 'User New mode'; +$lang->upgrade->remark = 'Remark'; +$lang->upgrade->remarkDesc = 'You can also switch between the background customization of the system later'; + +$lang->upgrade->to18Mode['Lean'] = 'Lean'; +$lang->upgrade->to18Mode['new'] = 'New'; \ No newline at end of file diff --git a/module/upgrade/lang/fr.php b/module/upgrade/lang/fr.php index ac63434bce..41438e30c9 100644 --- a/module/upgrade/lang/fr.php +++ b/module/upgrade/lang/fr.php @@ -161,3 +161,26 @@ include dirname(__FILE__) . '/version.php'; $lang->upgrade->recoveryActions = new stdclass(); $lang->upgrade->recoveryActions->cancel = 'Cancel'; $lang->upgrade->recoveryActions->review = 'Review'; + +$lang->upgrade->mode = 'Mode'; +$lang->upgrade->usage = 'Usage scenarios'; +$lang->upgrade->leanUsage = 'The concept is simpler, the functionality is simpler, and it is suitable for small R&D teams'; +$lang->upgrade->newUsage = 'More concepts, more rich functions, suitable for large and medium R & D teams'; +$lang->upgrade->program = 'Program'; +$lang->upgrade->productRR = 'Product - R&D requirements'; +$lang->upgrade->productUR = 'Product - User requirements'; +$lang->upgrade->productLine = 'Product - Product Line'; +$lang->upgrade->projectScrum = 'Project - Issues, risks, opportunities, processes, QA, meetings in Scrum model'; +$lang->upgrade->projectWaterfull = 'Project - Waterfall model'; +$lang->upgrade->projectKanban = 'Project - Kanban model'; +$lang->upgrade->execution = 'Execute, test, DevOps, Kanban, document, statistics, organize'; +$lang->upgrade->assetlib = 'Assetlib'; +$lang->upgrade->oa = 'OA, operation and maintenance, feedback, school, workflow, background'; +$lang->upgrade->selectUsage = 'Select a scenario'; +$lang->upgrade->useLean = 'Use Lean mode'; +$lang->upgrade->useNew = 'User New mode'; +$lang->upgrade->remark = 'Remark'; +$lang->upgrade->remarkDesc = 'You can also switch between the background customization of the system later'; + +$lang->upgrade->to18Mode['Lean'] = 'Lean'; +$lang->upgrade->to18Mode['new'] = 'New'; \ No newline at end of file diff --git a/module/upgrade/lang/zh-cn.php b/module/upgrade/lang/zh-cn.php index c912d22c2f..a8ba2f1c9f 100644 --- a/module/upgrade/lang/zh-cn.php +++ b/module/upgrade/lang/zh-cn.php @@ -161,3 +161,26 @@ include dirname(__FILE__) . '/version.php'; $lang->upgrade->recoveryActions = new stdclass(); $lang->upgrade->recoveryActions->cancel = '取消'; $lang->upgrade->recoveryActions->review = '评审'; + +$lang->upgrade->mode = '模式'; +$lang->upgrade->usage = '使用场景'; +$lang->upgrade->leanUsage = '概念更简单,功能也更简洁,适用于小型研发团队'; +$lang->upgrade->newUsage = '概念较多,功能也更丰富,适用于中大型研发团队'; +$lang->upgrade->program = '项目集'; +$lang->upgrade->productRR = '产品-研发需求'; +$lang->upgrade->productUR = '产品-用户需求'; +$lang->upgrade->productLine = '产品-产品线'; +$lang->upgrade->projectScrum = '项目-敏捷模型中的问题、风险、机会、过程、QA、会议'; +$lang->upgrade->projectWaterfull = '项目-瀑布模型'; +$lang->upgrade->projectKanban = '项目-看板模型'; +$lang->upgrade->execution = '执行、测试DevOps、看板、文档、统计、组织'; +$lang->upgrade->assetlib = '资产库'; +$lang->upgrade->oa = '办公、运维、反馈、学堂、工作流、后台'; +$lang->upgrade->selectUsage = '请选择使用场景'; +$lang->upgrade->useLean = '使用迅捷模式'; +$lang->upgrade->useNew = '使用综合模式'; +$lang->upgrade->remark = '备注'; +$lang->upgrade->remarkDesc = '后续您还可以在系统的后台自定义中进行切换'; + +$lang->upgrade->to18Mode['lite'] = '迅捷模式'; +$lang->upgrade->to18Mode['new'] = '综合模式'; \ No newline at end of file diff --git a/module/upgrade/view/to18guide.html.php b/module/upgrade/view/to18guide.html.php new file mode 100644 index 0000000000..de4a1f077a --- /dev/null +++ b/module/upgrade/view/to18guide.html.php @@ -0,0 +1,101 @@ + + * @package upgrade + * @version $Id$ + * @link http://www.zentao.net + */ +?> + +
    +
    +
    +

    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    lang->upgrade->mode;?>lang->upgrade->to18Mode['lite'];?>lang->upgrade->to18Mode['new'];?>
    lang->upgrade->mode;?>lang->upgrade->leanUsage;?>lang->upgrade->newUsage;?>
    lang->upgrade->program;?>
    lang->upgrade->productRR;?>
    lang->upgrade->productUR;?>
    lang->upgrade->productLine;?>
    lang->upgrade->projectScrum;?>
    lang->upgrade->projectWaterfull;?>
    lang->upgrade->projectKanban;?>
    lang->upgrade->execution;?>
    lang->upgrade->assetlib;?>
    lang->upgrade->oa;?>
    lang->upgrade->selectUsage;?>lang->upgrade->useLean;?>lang->upgrade->useNew;?>
    lang->upgrade->remark;?>lang->upgrade->remarkDesc;?>
    +
    +
    +
    +
    +
    + \ No newline at end of file From fe13c4de38d8247985acb5d42c084a4636765052 Mon Sep 17 00:00:00 2001 From: daitingting Date: Fri, 16 Sep 2022 01:02:13 +0000 Subject: [PATCH 043/712] * Doing task #69253. --- framework/router.class.php | 17 ++-- module/block/lang/zh-cn.php | 42 ++++---- module/block/model.php | 5 +- module/common/lang/menu.php | 192 ++++++++++++++++------------------- module/common/lang/zh-cn.php | 2 +- module/common/model.php | 9 +- module/custom/lang/zh-cn.php | 4 +- module/upgrade/model.php | 42 ++++++++ 8 files changed, 167 insertions(+), 146 deletions(-) diff --git a/framework/router.class.php b/framework/router.class.php index 2ce88d9cd5..1efaa3d059 100755 --- a/framework/router.class.php +++ b/framework/router.class.php @@ -171,7 +171,7 @@ class router extends baseRouter try { - $commonSettings = $this->dbh->query('SELECT section, `key`, value FROM' . TABLE_CONFIG . "WHERE `owner`='system' AND (`module`='custom' or `module`='common') and `key` in ('sprintConcept', 'hourPoint', 'URSR', 'mode', 'URAndSR', 'scoreStatus')")->fetchAll(); + $commonSettings = $this->dbh->query('SELECT section, `key`, value FROM' . TABLE_CONFIG . "WHERE `owner`='system' AND (`module`='custom' or `module`='common') and `key` in ('sprintConcept', 'hourPoint', 'URSR', 'mode', 'URAndSR', 'scoreStatus', 'projectMode')")->fetchAll(); } catch (PDOException $exception) { @@ -187,12 +187,14 @@ class router extends baseRouter foreach($commonSettings as $setting) { - if($setting->key == 'sprintConcept') $projectKey = $setting->value; - if($setting->key == 'hourPoint') $hourKey = $setting->value; - if($setting->key == 'URSR') $URSR = $setting->value; - if($setting->key == 'URAndSR') $URAndSR = $setting->value; - if($setting->key == 'mode' and $setting->section == 'global') $mode = $setting->value; - if($setting->key == 'scoreStatus' and $setting->section == 'global') $score = $setting->value; + if($setting->key == 'sprintConcept') $projectKey = $setting->value; + if($setting->key == 'hourPoint') $hourKey = $setting->value; + if($setting->key == 'URSR') $URSR = $setting->value; + if($setting->key == 'URAndSR') $URAndSR = $setting->value; + if($setting->key == 'mode' and $setting->section == 'global') $mode = $setting->value; + if($setting->key == 'scoreStatus' and $setting->section == 'global') $score = $setting->value; + + if($setting->key == 'projectMode' && $setting->section == 'global') $config->projectMode = $setting->value; } /* Lite Version is compatible with classic modes */ @@ -200,7 +202,6 @@ class router extends baseRouter /* Record system mode. */ $config->systemMode = $mode; - if($config->systemMode == 'classic') $this->config->executionCommonList = $this->config->projectCommonList; /* Record system score.*/ $config->systemScore = $score; diff --git a/module/block/lang/zh-cn.php b/module/block/lang/zh-cn.php index adcf517d1d..4b564ba80f 100644 --- a/module/block/lang/zh-cn.php +++ b/module/block/lang/zh-cn.php @@ -284,14 +284,11 @@ $lang->block->default['full']['my']['4']['grid'] = 4; $lang->block->default['full']['my']['4']['source'] = 'todo'; $lang->block->default['full']['my']['4']['params']['count'] = '20'; -if($config->systemMode == 'new') -{ - $lang->block->default['full']['my']['5']['title'] = '项目统计'; - $lang->block->default['full']['my']['5']['block'] = 'statistic'; - $lang->block->default['full']['my']['5']['source'] = 'project'; - $lang->block->default['full']['my']['5']['grid'] = 8; - $lang->block->default['full']['my']['5']['params']['count'] = '20'; -} +$lang->block->default['full']['my']['5']['title'] = '项目统计'; +$lang->block->default['full']['my']['5']['block'] = 'statistic'; +$lang->block->default['full']['my']['5']['source'] = 'project'; +$lang->block->default['full']['my']['5']['grid'] = 8; +$lang->block->default['full']['my']['5']['params']['count'] = '20'; $lang->block->default['full']['my']['6']['title'] = '我的贡献'; $lang->block->default['full']['my']['6']['block'] = 'contribute'; @@ -316,19 +313,16 @@ $lang->block->default['full']['my']['8']['params']['issueCount'] = '20'; $lang->block->default['full']['my']['8']['params']['storyCount'] = '20'; $lang->block->default['full']['my']['8']['params']['meetingCount'] = '20'; -if($config->systemMode == 'new') -{ - $lang->block->default['full']['my']['9']['title'] = '项目人力投入'; - $lang->block->default['full']['my']['9']['block'] = 'projectteam'; - $lang->block->default['full']['my']['9']['source'] = 'project'; - $lang->block->default['full']['my']['9']['grid'] = 8; -} +$lang->block->default['full']['my']['9']['title'] = '项目人力投入'; +$lang->block->default['full']['my']['9']['block'] = 'projectteam'; +$lang->block->default['full']['my']['9']['source'] = 'project'; +$lang->block->default['full']['my']['9']['grid'] = 8; $lang->block->default['full']['my']['10']['title'] = '项目列表'; $lang->block->default['full']['my']['10']['block'] = 'project'; $lang->block->default['full']['my']['10']['source'] = 'project'; $lang->block->default['full']['my']['10']['grid'] = 8; -if($config->systemMode == 'classic') +if(!isset($config->projectMode) || $config->projectMode != 'noExecution') { $lang->block->default['full']['my']['10']['block'] = 'execution'; $lang->block->default['full']['my']['10']['source'] = 'execution'; @@ -359,18 +353,18 @@ $lang->block->availableBlocks->issue = '问题'; $lang->block->availableBlocks->meeting = '会议'; $lang->block->availableBlocks->feedback = '反馈'; -if($config->systemMode == 'new') $lang->block->moduleList['project'] = '项目'; -$lang->block->moduleList['product'] = $lang->productCommon; -$lang->block->moduleList['execution'] = $lang->execution->common; -$lang->block->moduleList['qa'] = '测试'; -$lang->block->moduleList['todo'] = '待办'; +$lang->block->moduleList['product'] = $lang->productCommon; +$lang->block->moduleList['project'] = '项目'; +if(!isset($config->projectMode) || $config->projectMode != 'noExecution') $lang->block->moduleList['execution'] = $lang->execution->common; +$lang->block->moduleList['qa'] = '测试'; +$lang->block->moduleList['todo'] = '待办'; $lang->block->modules['project'] = new stdclass(); $lang->block->modules['project']->availableBlocks = new stdclass(); $lang->block->modules['project']->availableBlocks->project = '项目列表'; $lang->block->modules['project']->availableBlocks->recentproject = '近期项目'; $lang->block->modules['project']->availableBlocks->statistic = '项目统计'; -if($config->systemMode == 'new') $lang->block->modules['project']->availableBlocks->projectteam = '项目人力投入'; +$lang->block->modules['project']->availableBlocks->projectteam = '项目人力投入'; $lang->block->modules['scrum']['index'] = new stdclass(); $lang->block->modules['scrum']['index']->availableBlocks = new stdclass(); @@ -527,7 +521,7 @@ $lang->block->typeList->testtask['done'] = '已测版本'; $lang->block->typeList->testtask['all'] = '全部'; $lang->block->modules['project']->moreLinkList = new stdclass(); -$lang->block->modules['project']->moreLinkList->recentproject = $config->systemMode == 'new' ? 'project|browse|' : 'execution|all|'; +$lang->block->modules['project']->moreLinkList->recentproject = 'project|browse|'; $lang->block->modules['project']->moreLinkList->statistic = 'project|browse|'; $lang->block->modules['project']->moreLinkList->project = 'project|browse|'; $lang->block->modules['project']->moreLinkList->cmmireport = 'weekly|index|'; @@ -573,7 +567,7 @@ $lang->block->flowchart['admin'] = array('管理员', '维护公司', '添加 if($config->systemMode == 'new') $lang->block->flowchart['program'] = array('项目集负责人', '创建项目集', '关联产品', "创建项目", "制定预算和规划", '添加干系人'); $lang->block->flowchart['product'] = array($lang->productCommon . '经理', '创建' . $lang->productCommon, '维护模块', "维护计划", "维护需求", '创建发布'); $lang->block->flowchart['project'] = array('项目经理', '创建' . $lang->executionCommon, '维护团队', "关联需求", '分解任务', '跟踪进度'); -if($config->systemMode == 'new') $lang->block->flowchart['project'] = array('项目经理', '创建项目、' . $lang->executionCommon, '维护团队', "关联需求", '分解任务', '跟踪进度'); +$lang->block->flowchart['project'] = array('项目经理', '创建项目、' . $lang->executionCommon, '维护团队', "关联需求", '分解任务', '跟踪进度'); $lang->block->flowchart['dev'] = array('研发人员', '领取任务和Bug', '设计实现方案', '更新状态', '完成任务和Bug', '提交代码'); $lang->block->flowchart['tester'] = array('测试人员', '撰写用例', '执行用例', '提交Bug', '验证Bug', '关闭Bug'); diff --git a/module/block/model.php b/module/block/model.php index 97d52b15b3..3d3f6aeaff 100644 --- a/module/block/model.php +++ b/module/block/model.php @@ -132,15 +132,14 @@ class blockModel extends model */ public function getBlockList($module = 'my', $type = '') { - $blocks = $this->dao->select('*')->from(TABLE_BLOCK)->where('account')->eq($this->app->user->account) + return $this->dao->select('*')->from(TABLE_BLOCK)->where('account')->eq($this->app->user->account) ->andWhere('module')->eq($module) ->andWhere('vision')->eq($this->config->vision) ->andWhere('hidden')->eq(0) ->beginIF($type)->andWhere('type')->eq($type)->fi() + ->beginIF(isset($this->config->projectMode) && $this->config->projectMode == 'noExecution')->andWhere('source')->ne('execution')->fi() ->orderBy('`order`') ->fetchAll('id'); - - return $blocks; } /** diff --git a/module/common/lang/menu.php b/module/common/lang/menu.php index 856fe405a8..932706646a 100644 --- a/module/common/lang/menu.php +++ b/module/common/lang/menu.php @@ -14,9 +14,9 @@ $lang->navIcons['system'] = ""; $lang->navIcons['admin'] = ""; global $config; -list($programModule, $programMethod) = explode('-', $config->programLink); -list($productModule, $productMethod) = explode('-', $config->productLink); -list($projectModule, $projectMethod) = explode('-', $config->projectLink); +list($programModule, $programMethod) = explode('-', $config->programLink); +list($productModule, $productMethod) = explode('-', $config->productLink); +list($projectModule, $projectMethod) = explode('-', $config->projectLink); list($executionModule, $executionMethod) = explode('-', $config->executionLink); if(defined('TUTORIAL')) @@ -32,34 +32,25 @@ if(defined('TUTORIAL')) } /* Main Navigation. */ -$lang->mainNav = new stdclass(); -$lang->mainNav->my = "{$lang->navIcons['my']} {$lang->my->shortCommon}|my|index|"; -if($config->systemMode == 'new') $lang->mainNav->program = "{$lang->navIcons['program']} {$lang->program->common}|$programModule|$programMethod|"; +$lang->mainNav = new stdclass(); +$lang->mainNav->my = "{$lang->navIcons['my']} {$lang->my->shortCommon}|my|index|"; $lang->mainNav->product = "{$lang->navIcons['product']} {$lang->product->common}|$productModule|$productMethod|"; -if($config->systemMode == 'new') $lang->mainNav->project = "{$lang->navIcons['project']} {$lang->project->common}|$projectModule|$projectMethod|"; +$lang->mainNav->project = "{$lang->navIcons['project']} {$lang->project->common}|$projectModule|$projectMethod|"; +$lang->mainNav->qa = "{$lang->navIcons['qa']} {$lang->qa->common}|qa|index|"; +$lang->mainNav->devops = "{$lang->navIcons['devops']} DevOps|repo|browse|"; +$lang->mainNav->kanban = "{$lang->navIcons['kanban']} {$lang->kanban->common}|kanban|space|"; +$lang->mainNav->doc = "{$lang->navIcons['doc']} {$lang->doc->common}|doc|index|"; +$lang->mainNav->report = "{$lang->navIcons['report']} {$lang->report->common}|report|productSummary|"; +$lang->mainNav->system = "{$lang->navIcons['system']} {$lang->system->common}|my|team|"; +$lang->mainNav->admin = "{$lang->navIcons['admin']} {$lang->admin->common}|admin|index|"; +if($config->systemMode == 'new') $lang->mainNav->program = "{$lang->navIcons['program']} {$lang->program->common}|$programModule|$programMethod|"; +if(!isset($config->projectMode) || $config->projectMode != 'noExecution') $lang->mainNav->execution = "{$lang->navIcons['execution']} {$lang->execution->common}|$executionModule|$executionMethod|"; -if($config->systemMode == 'new') -{ - $lang->mainNav->execution = "{$lang->navIcons['execution']} {$lang->execution->common}|$executionModule|$executionMethod|"; -} -else -{ - $lang->mainNav->execution = "{$lang->navIcons['project']} {$lang->execution->common}|$executionModule|$executionMethod|"; -} -$lang->mainNav->qa = "{$lang->navIcons['qa']} {$lang->qa->common}|qa|index|"; -$lang->mainNav->devops = "{$lang->navIcons['devops']} DevOps|repo|browse|"; -$lang->mainNav->kanban = "{$lang->navIcons['kanban']} {$lang->kanban->common}|kanban|space|"; -$lang->mainNav->doc = "{$lang->navIcons['doc']} {$lang->doc->common}|doc|index|"; -$lang->mainNav->report = "{$lang->navIcons['report']} {$lang->report->common}|report|productSummary|"; -$lang->mainNav->system = "{$lang->navIcons['system']} {$lang->system->common}|my|team|"; -$lang->mainNav->admin = "{$lang->navIcons['admin']} {$lang->admin->common}|admin|index|"; +$lang->dividerMenu = ',kanban,oa,admin,'; -$lang->dividerMenu = ',kanban,oa,admin,'; -$lang->mainNav->menuOrder[5] = 'my'; -if($config->systemMode == 'new') $lang->mainNav->menuOrder[10] = 'program'; +$lang->mainNav->menuOrder[5] = 'my'; $lang->mainNav->menuOrder[15] = 'product'; -if($config->systemMode == 'new') $lang->mainNav->menuOrder[20] = 'project'; -$lang->mainNav->menuOrder[21] = 'execution'; +$lang->mainNav->menuOrder[20] = 'project'; $lang->mainNav->menuOrder[23] = 'qa'; $lang->mainNav->menuOrder[25] = 'devops'; $lang->mainNav->menuOrder[30] = 'kanban'; @@ -67,18 +58,20 @@ $lang->mainNav->menuOrder[35] = 'doc'; $lang->mainNav->menuOrder[40] = 'report'; $lang->mainNav->menuOrder[45] = 'system'; $lang->mainNav->menuOrder[65] = 'admin'; +if($config->systemMode == 'new') $lang->mainNav->menuOrder[10] = 'program'; +if(!isset($config->projectMode) || $config->projectMode != 'noExecution') $lang->mainNav->menuOrder[21] = 'execution'; /* My menu. */ -$lang->my->menu = new stdclass(); -$lang->my->menu->index = array('link' => "$lang->dashboard|my|index"); -$lang->my->menu->calendar = array('link' => "$lang->calendar|my|calendar|", 'subModule' => 'todo', 'alias' => 'todo'); -$lang->my->menu->work = array('link' => "{$lang->my->work}|my|work|mode=task", 'subModule' => 'task'); -if($config->systemMode == 'new') $lang->my->menu->project = array('link' => "{$lang->project->common}|my|project|"); -$lang->my->menu->execution = array('link' => "{$lang->execution->common}|my|execution|type=undone"); +$lang->my->menu = new stdclass(); +$lang->my->menu->index = array('link' => "$lang->dashboard|my|index"); +$lang->my->menu->calendar = array('link' => "$lang->calendar|my|calendar|", 'subModule' => 'todo', 'alias' => 'todo'); +$lang->my->menu->work = array('link' => "{$lang->my->work}|my|work|mode=task", 'subModule' => 'task'); +$lang->my->menu->project = array('link' => "{$lang->project->common}|my|project|"); $lang->my->menu->contribute = array('link' => "$lang->contribute|my|contribute|mode=task"); $lang->my->menu->dynamic = array('link' => "$lang->dynamic|my|dynamic|"); +$lang->my->menu->contacts = array('link' => "$lang->contact|my|managecontacts|"); if($config->systemScore) $lang->my->menu->score = array('link' => "{$lang->score->shortCommon}|my|score|", 'subModule' => 'score'); -$lang->my->menu->contacts = array('link' => "$lang->contact|my|managecontacts|"); +if(!isset($config->projectMode) || $config->projectMode != 'noExecution') $lang->my->menu->execution = array('link' => "{$lang->execution->common}|my|execution|type=undone"); /* My menu order. */ $lang->my->menuOrder[5] = 'index'; @@ -92,13 +85,13 @@ $lang->my->menuOrder[40] = 'dynamic'; $lang->my->menuOrder[45] = 'score'; $lang->my->menuOrder[50] = 'contacts'; -$lang->my->menu->work['subMenu'] = new stdclass(); -$lang->my->menu->work['subMenu']->task = array('link' => "{$lang->task->common}|my|work|mode=task", 'subModule' => 'task'); -if($config->URAndSR) $lang->my->menu->work['subMenu']->requirement = "$lang->URCommon|my|work|mode=requirement"; +$lang->my->menu->work['subMenu'] = new stdclass(); +$lang->my->menu->work['subMenu']->task = array('link' => "{$lang->task->common}|my|work|mode=task", 'subModule' => 'task'); $lang->my->menu->work['subMenu']->story = "$lang->SRCommon|my|work|mode=story"; $lang->my->menu->work['subMenu']->bug = "{$lang->bug->common}|my|work|mode=bug"; $lang->my->menu->work['subMenu']->testcase = array('link' => "{$lang->testcase->common}|my|work|mode=testcase&type=assigntome", 'subModule' => 'testtask'); $lang->my->menu->work['subMenu']->testtask = "{$lang->testtask->common}|my|work|mode=testtask&type=wait"; +if($config->URAndSR) $lang->my->menu->work['subMenu']->requirement = "$lang->URCommon|my|work|mode=requirement"; $lang->my->menu->work['menuOrder'][5] = 'task'; $lang->my->menu->work['menuOrder'][10] = 'requirement'; @@ -107,14 +100,14 @@ $lang->my->menu->work['menuOrder'][20] = 'bug'; $lang->my->menu->work['menuOrder'][25] = 'testcase'; $lang->my->menu->work['menuOrder'][30] = 'testtask'; -$lang->my->menu->contribute['subMenu'] = new stdclass(); -$lang->my->menu->contribute['subMenu']->task = "{$lang->task->common}|my|contribute|mode=task"; -if($config->URAndSR) $lang->my->menu->contribute['subMenu']->requirement = "$lang->URCommon|my|contribute|mode=requirement"; +$lang->my->menu->contribute['subMenu'] = new stdclass(); +$lang->my->menu->contribute['subMenu']->task = "{$lang->task->common}|my|contribute|mode=task"; $lang->my->menu->contribute['subMenu']->story = "$lang->SRCommon|my|contribute|mode=story"; $lang->my->menu->contribute['subMenu']->bug = "{$lang->bug->common}|my|contribute|mode=bug"; $lang->my->menu->contribute['subMenu']->testcase = "{$lang->testcase->shortCommon}|my|contribute|mode=testcase&type=openedbyme"; $lang->my->menu->contribute['subMenu']->testtask = "{$lang->testtask->common}|my|contribute|mode=testtask&type=done"; $lang->my->menu->contribute['subMenu']->doc = "{$lang->doc->common}|my|contribute|mode=doc&type=openedbyme"; +if($config->URAndSR) $lang->my->menu->contribute['subMenu']->requirement = "$lang->URCommon|my|contribute|mode=requirement"; $lang->my->menu->contribute['menuOrder'][5] = 'task'; $lang->my->menu->contribute['menuOrder'][10] = 'requirement'; @@ -127,11 +120,11 @@ $lang->my->menu->contribute['menuOrder'][35] = 'doc'; $lang->my->dividerMenu = ',work,dynamic,'; /* Program menu. */ -$lang->program->homeMenu = new stdclass(); +$lang->program->homeMenu = new stdclass(); $lang->program->homeMenu->browse = array('link' => "{$lang->program->list}|program|browse|", 'alias' => 'create,edit', 'subModule' => 'project'); $lang->program->homeMenu->kanban = array('link' => "{$lang->program->kanban}|program|kanban|"); -$lang->program->menu = new stdclass(); +$lang->program->menu = new stdclass(); $lang->program->menu->product = array('link' => "{$lang->product->common}|program|product|programID=%s", 'alias' => 'view'); $lang->program->menu->project = array('link' => "{$lang->project->common}|program|project|programID=%s"); $lang->program->menu->personnel = array('link' => "{$lang->personnel->common}|personnel|invest|programID=%s"); @@ -143,30 +136,29 @@ $lang->program->menuOrder[10] = 'project'; $lang->program->menuOrder[15] = 'personnel'; $lang->program->menuOrder[20] = 'stakeholder'; -$lang->program->menu->personnel['subMenu'] = new stdClass(); +$lang->program->menu->personnel['subMenu'] = new stdClass(); $lang->program->menu->personnel['subMenu']->invest = array('link' => "{$lang->personnel->invest}|personnel|invest|programID=%s"); $lang->program->menu->personnel['subMenu']->accessible = array('link' => "{$lang->personnel->accessible}|personnel|accessible|programID=%s"); $lang->program->menu->personnel['subMenu']->whitelist = array('link' => "{$lang->whitelist}|personnel|whitelist|objectID=%s", 'alias' => 'addwhitelist'); /* Product menu. */ -$lang->product->homeMenu = new stdclass(); +$lang->product->homeMenu = new stdclass(); $lang->product->homeMenu->home = array('link' => "{$lang->dashboard}|product|index|"); $lang->product->homeMenu->list = array('link' => $lang->product->list . '|product|all|', 'alias' => 'create,batchedit,manageline'); $lang->product->homeMenu->kanban = array('link' => "{$lang->product->kanban}|product|kanban|"); -$lang->product->menu = new stdclass(); +$lang->product->menu = new stdclass(); $lang->product->menu->dashboard = array('link' => "{$lang->dashboard}|product|dashboard|productID=%s"); +$lang->product->menu->story = array('link' => "$lang->SRCommon|product|browse|productID=%s", 'alias' => 'batchedit', 'subModule' => 'story'); +$lang->product->menu->plan = array('link' => "{$lang->productplan->shortCommon}|productplan|browse|productID=%s", 'subModule' => 'productplan,bug'); +$lang->product->menu->project = array('link' => "{$lang->project->common}|product|project|status=all&productID=%s"); +$lang->product->menu->release = array('link' => "{$lang->release->common}|release|browse|productID=%s", 'subModule' => 'release'); +$lang->product->menu->roadmap = array('link' => "{$lang->roadmap}|product|roadmap|productID=%s"); +$lang->product->menu->track = array('link' => "{$lang->track}|product|track|productID=%s"); +$lang->product->menu->doc = array('link' => "{$lang->doc->common}|doc|tableContents|type=product&objectID=%s", 'subModule' => 'doc'); +$lang->product->menu->dynamic = array('link' => "{$lang->dynamic}|product|dynamic|productID=%s"); +$lang->product->menu->settings = array('link' => "{$lang->settings}|product|view|productID=%s", 'subModule' => 'tree,branch', 'alias' => 'edit,whitelist,addwhitelist'); if($config->URAndSR) $lang->product->menu->requirement = array('link' => "$lang->URCommon|product|browse|productID=%s&branch=&browseType=unclosed¶m=0&storyType=requirement", 'alias' => 'batchedit', 'subModule' => 'story'); -$lang->product->menu->story = array('link' => "$lang->SRCommon|product|browse|productID=%s", 'alias' => 'batchedit', 'subModule' => 'story'); -$lang->product->menu->plan = array('link' => "{$lang->productplan->shortCommon}|productplan|browse|productID=%s", 'subModule' => 'productplan,bug'); -$lang->product->menu->release = array('link' => "{$lang->release->common}|release|browse|productID=%s", 'subModule' => 'release'); -$lang->product->menu->roadmap = array('link' => "{$lang->roadmap}|product|roadmap|productID=%s"); -if($config->systemMode == 'new') $lang->product->menu->project = array('link' => "{$lang->project->common}|product|project|status=all&productID=%s"); -if($config->systemMode == 'classic') $lang->product->menu->project = array('link' => "{$lang->execution->common}|product|project|status=all&productID=%s"); -$lang->product->menu->track = array('link' => "{$lang->track}|product|track|productID=%s"); -$lang->product->menu->doc = array('link' => "{$lang->doc->common}|doc|tableContents|type=product&objectID=%s", 'subModule' => 'doc'); -$lang->product->menu->dynamic = array('link' => "{$lang->dynamic}|product|dynamic|productID=%s"); -$lang->product->menu->settings = array('link' => "{$lang->settings}|product|view|productID=%s", 'subModule' => 'tree,branch', 'alias' => 'edit,whitelist,addwhitelist'); /* Product menu order. */ $lang->product->menuOrder[5] = 'dashboard'; @@ -185,7 +177,7 @@ $lang->product->menuOrder[65] = 'all'; $lang->product->menu->doc['subMenu'] = new stdclass(); -$lang->product->menu->settings['subMenu'] = new stdclass(); +$lang->product->menu->settings['subMenu'] = new stdclass(); $lang->product->menu->settings['subMenu']->view = array('link' => "{$lang->overview}|product|view|productID=%s", 'alias' => 'edit'); $lang->product->menu->settings['subMenu']->module = array('link' => "{$lang->module}|tree|browse|product=%s&view=story", 'subModule' => 'tree'); $lang->product->menu->settings['subMenu']->branch = array('link' => "@branch@|branch|manage|product=%s", 'subModule' => 'branch'); @@ -194,12 +186,12 @@ $lang->product->menu->settings['subMenu']->whitelist = array('link' => "{$lang-> $lang->product->dividerMenu = $config->URAndSR ? ',story,requirement,settings,' : ',story,track,settings,'; /* Project menu. */ -$lang->project->homeMenu = new stdclass(); +$lang->project->homeMenu = new stdclass(); $lang->project->homeMenu->browse = array('link' => ($config->systemMode == 'new' ? $lang->project->list : $lang->executionCommon) . '|project|browse|', 'alias' => 'batchedit,create'); if($config->systemMode == 'new') $lang->project->homeMenu->kanban = array('link' => "{$lang->project->kanban}|project|kanban|"); /* Scrum menu. */ -$lang->scrum->menu = new stdclass(); +$lang->scrum->menu = new stdclass(); $lang->scrum->menu->index = array('link' => "{$lang->dashboard}|project|index|project=%s"); $lang->scrum->menu->execution = array('link' => "$lang->executionCommon|project|execution|status=all&projectID=%s", 'exclude' => 'execution-testreport', 'subModule' => 'task'); $lang->scrum->menu->story = array('link' => "$lang->SRCommon|projectstory|story|projectID=%s", 'subModule' => 'projectstory,tree', 'alias' => 'story,track'); @@ -244,19 +236,19 @@ $lang->scrum->menu->settings['subMenu']->group = array('link' => "{$lang-> /* Waterfall menu. */ $lang->waterfall->menu = new stdclass(); -$lang->waterfall->menu->index = array('link' => "$lang->dashboard|project|index|project=%s"); -$lang->waterfall->menu->execution = array('link' => "{$lang->stage->common}|project|execution|status=all&projectID=%s", 'subModule' => 'programplan,task'); -$lang->waterfall->menu->story = array('link' => "$lang->SRCommon|projectstory|story|project=%s", 'subModule' => 'projectstory,tree', 'exclude' => 'projectstory-track'); -$lang->waterfall->menu->design = array('link' => "{$lang->design->common}|design|browse|project=%s"); -$lang->waterfall->menu->qa = array('link' => "{$lang->qa->common}|project|bug|projectID=%s", 'subModule' => 'testcase,testtask,bug,testreport', 'alias' => 'bug,testtask,testcase,testreport'); -$lang->waterfall->menu->doc = array('link' => "{$lang->doc->common}|doc|tableContents|type=project&objectID=%s"); -$lang->waterfall->menu->devops = array('link' => "{$lang->repo->common}|repo|browse|repoID=0&branchID=&objectID=%s", 'subModule' => 'repo'); -$lang->waterfall->menu->build = array('link' => "{$lang->build->common}|project|build|project=%s"); -$lang->waterfall->menu->release = array('link' => "{$lang->release->common}|projectrelease|browse|project=%s", 'subModule' => 'projectrelease'); -$lang->waterfall->menu->dynamic = array('link' => "$lang->dynamic|project|dynamic|project=%s"); +$lang->waterfall->menu->index = array('link' => "$lang->dashboard|project|index|project=%s"); +$lang->waterfall->menu->execution = array('link' => "{$lang->stage->common}|project|execution|status=all&projectID=%s", 'subModule' => 'programplan,task'); +$lang->waterfall->menu->story = array('link' => "$lang->SRCommon|projectstory|story|project=%s", 'subModule' => 'projectstory,tree', 'exclude' => 'projectstory-track'); +$lang->waterfall->menu->design = array('link' => "{$lang->design->common}|design|browse|project=%s"); +$lang->waterfall->menu->qa = array('link' => "{$lang->qa->common}|project|bug|projectID=%s", 'subModule' => 'testcase,testtask,bug,testreport', 'alias' => 'bug,testtask,testcase,testreport'); +$lang->waterfall->menu->doc = array('link' => "{$lang->doc->common}|doc|tableContents|type=project&objectID=%s"); +$lang->waterfall->menu->devops = array('link' => "{$lang->repo->common}|repo|browse|repoID=0&branchID=&objectID=%s", 'subModule' => 'repo'); +$lang->waterfall->menu->build = array('link' => "{$lang->build->common}|project|build|project=%s"); +$lang->waterfall->menu->release = array('link' => "{$lang->release->common}|projectrelease|browse|project=%s", 'subModule' => 'projectrelease'); +$lang->waterfall->menu->dynamic = array('link' => "$lang->dynamic|project|dynamic|project=%s"); +$lang->waterfall->menu->settings = $lang->scrum->menu->settings; -$lang->waterfall->menu->settings = $lang->scrum->menu->settings; -$lang->waterfall->dividerMenu = ',programplan,build,dynamic,'; +$lang->waterfall->dividerMenu = ',programplan,build,dynamic,'; /* Waterfall menu order. */ $lang->waterfall->menuOrder[5] = 'index'; @@ -291,8 +283,8 @@ $lang->waterfall->menu->design['subMenu']->ads = array('link' => "{$lang->d $lang->waterfall->menu->design['subMenu']->bysearch = array('link' => ' ' . $lang->searchAB . ''); /* Kanban project menu. */ -$lang->kanbanProject = new stdclass(); -$lang->kanbanProject->menu = new stdclass(); +$lang->kanbanProject = new stdclass(); +$lang->kanbanProject->menu = new stdclass(); $lang->kanbanProject->menu->index = array('link' => "{$lang->kanban->common}|project|index|project=%s"); $lang->kanbanProject->menu->build = array('link' => "{$lang->build->common}|project|build|project=%s"); $lang->kanbanProject->menu->settings = array('link' => "$lang->settings|project|view|project=%s", 'subModule' => 'stakeholder', 'alias' => 'edit,manageproducts,group,managemembers,manageview,managepriv,whitelist,addwhitelist,team'); @@ -304,23 +296,22 @@ $lang->kanbanProject->menuOrder[5] = 'index'; $lang->kanbanProject->menuOrder[10] = 'build'; $lang->kanbanProject->menuOrder[15] = 'settings'; -$lang->kanbanProject->menu->settings['subMenu'] = new stdclass(); -$lang->kanbanProject->menu->settings['subMenu']->view = array('link' => "$lang->overview|project|view|project=%s", 'alias' => 'edit'); -$lang->kanbanProject->menu->settings['subMenu']->products = array('link' => "{$lang->product->common}|project|manageProducts|project=%s", 'alias' => 'manageproducts'); -$lang->kanbanProject->menu->settings['subMenu']->members = array('link' => "{$lang->team->common}|project|team|project=%s", 'alias' => 'managemembers,team'); -$lang->kanbanProject->menu->settings['subMenu']->whitelist = array('link' => "{$lang->whitelist}|project|whitelist|project=%s", 'subModule' => 'personnel'); +$lang->kanbanProject->menu->settings['subMenu'] = new stdclass(); +$lang->kanbanProject->menu->settings['subMenu']->view = array('link' => "$lang->overview|project|view|project=%s", 'alias' => 'edit'); +$lang->kanbanProject->menu->settings['subMenu']->products = array('link' => "{$lang->product->common}|project|manageProducts|project=%s", 'alias' => 'manageproducts'); +$lang->kanbanProject->menu->settings['subMenu']->members = array('link' => "{$lang->team->common}|project|team|project=%s", 'alias' => 'managemembers,team'); +$lang->kanbanProject->menu->settings['subMenu']->whitelist = array('link' => "{$lang->whitelist}|project|whitelist|project=%s", 'subModule' => 'personnel'); /* Execution menu. */ -$lang->execution->homeMenu = new stdclass(); -$lang->execution->homeMenu->all = array('link' => "{$lang->execution->all}|execution|all|", 'alias' => 'create,batchedit'); -if($config->systemMode == 'new') $lang->execution->homeMenu->executionkanban = array('link' => "{$lang->execution->executionKanban}|execution|executionkanban|"); - -$lang->execution->menu = new stdclass(); -$lang->execution->menu->task = array('link' => "{$lang->task->common}|execution|task|executionID=%s", 'subModule' => 'task,tree', 'alias' => 'importtask,importbug'); -$lang->execution->menu->kanban = array('link' => "$lang->executionKanban|execution|taskkanban|executionID=%s"); -$lang->execution->menu->burn = array('link' => "$lang->burn|execution|burn|executionID=%s"); -$lang->execution->menu->view = array('link' => "$lang->view|execution|grouptask|executionID=%s", 'alias' => 'grouptask,tree,taskeffort,gantt,calendar,relation,maintainrelation'); +$lang->execution->homeMenu = new stdclass(); +$lang->execution->homeMenu->all = array('link' => "{$lang->execution->all}|execution|all|", 'alias' => 'create,batchedit'); +$lang->execution->homeMenu->executionkanban = array('link' => "{$lang->execution->executionKanban}|execution|executionkanban|"); +$lang->execution->menu = new stdclass(); +$lang->execution->menu->task = array('link' => "{$lang->task->common}|execution|task|executionID=%s", 'subModule' => 'task,tree', 'alias' => 'importtask,importbug'); +$lang->execution->menu->kanban = array('link' => "$lang->executionKanban|execution|taskkanban|executionID=%s"); +$lang->execution->menu->burn = array('link' => "$lang->burn|execution|burn|executionID=%s"); +$lang->execution->menu->view = array('link' => "$lang->view|execution|grouptask|executionID=%s", 'alias' => 'grouptask,tree,taskeffort,gantt,calendar,relation,maintainrelation'); if($config->edition != 'open') $lang->execution->menu->view = array('link' => "$lang->view|execution|gantt|executionID=%s", 'alias' => 'grouptask,tree,taskeffort,gantt,calendar,relation,maintainrelation'); $lang->execution->menu->story = array('link' => "$lang->SRCommon|execution|story|executionID=%s", 'subModule' => 'story', 'alias' => 'batchcreate,linkstory,storykanban,batchtotask'); @@ -330,7 +321,7 @@ $lang->execution->menu->doc = array('link' => "{$lang->doc->common}|doc|tab $lang->execution->menu->build = array('link' => "{$lang->build->common}|execution|build|executionID=%s", 'subModule' => 'build'); $lang->execution->menu->action = array('link' => "$lang->dynamic|execution|dynamic|executionID=%s"); $lang->execution->menu->settings = array('link' => "$lang->settings|execution|view|executionID=%s", 'subModule' => 'personnel', 'alias' => 'edit,manageproducts,team,whitelist,addwhitelist,managemembers', 'class' => 'dropdown dropdown-hover'); -if($config->systemMode == 'new') $lang->execution->menu->more = array('link' => "$lang->more|execution|more|%s"); +$lang->execution->menu->more = array('link' => "$lang->more|execution|more|%s"); /* Execution menu order. */ $lang->execution->menuOrder[5] = 'task'; @@ -366,7 +357,7 @@ $lang->execution->menu->qa['menuOrder'][10] = 'bug'; $lang->execution->menu->qa['menuOrder'][15] = 'testcase'; $lang->execution->menu->qa['menuOrder'][20] = 'testtask'; -$lang->execution->menu->settings['subMenu'] = new stdclass(); +$lang->execution->menu->settings['subMenu'] = new stdclass(); $lang->execution->menu->settings['subMenu']->view = array('link' => "$lang->overview|execution|view|executionID=%s", 'subModule' => 'view', 'alias' => 'edit,start,suspend,putoff,close'); $lang->execution->menu->settings['subMenu']->products = array('link' => "$lang->productCommon|execution|manageproducts|executionID=%s"); $lang->execution->menu->settings['subMenu']->team = array('link' => "{$lang->team->common}|execution|team|executionID=%s", 'alias' => 'managemembers'); @@ -375,7 +366,7 @@ $lang->execution->menu->settings['subMenu']->whitelist = array('link' => "$lang- $lang->execution->dividerMenu = ',story,build,'; /* QA menu.*/ -$lang->qa->menu = new stdclass(); +$lang->qa->menu = new stdclass(); $lang->qa->menu->index = array('link' => "$lang->dashboard|qa|index"); $lang->qa->menu->bug = array('link' => "{$lang->bug->common}|bug|browse|productID=%s", 'subModule' => 'bug'); $lang->qa->menu->testcase = array('link' => "{$lang->testcase->shortCommon}|testcase|browse|productID=%s", 'subModule' => 'testcase,story'); @@ -406,7 +397,7 @@ $lang->qa->menuOrder[45] = 'automation'; $lang->qa->dividerMenu = ',bug,testtask,caselib,'; /* DevOps menu. */ -$lang->devops->menu = new stdclass(); +$lang->devops->menu = new stdclass(); $lang->devops->menu->code = array('link' => "{$lang->repo->common}|repo|browse|repoID=%s", 'alias' => 'diff,view,revision,log,blame,showsynccommit'); $lang->devops->menu->mr = array('link' => "{$lang->devops->mr}|mr|browse|repoID=%s"); $lang->devops->menu->compile = array('link' => "{$lang->devops->compile}|job|browse|repoID=%s", 'subModule' => 'compile,job'); @@ -434,16 +425,16 @@ $lang->devops->menu->set['subMenu']->setrules = array('link' => "{$lang->devops $lang->kanban->menu = new stdclass(); /* Doc menu. */ -$lang->doc->menu = new stdclass(); +$lang->doc->menu = new stdclass(); $lang->doc->menu->dashboard = array('link' => "{$lang->dashboard}|doc|index"); $lang->doc->menu->recent = array('link' => "{$lang->doc->recent}|doc|browse|browseTyp=byediteddate", 'alias' => 'recent'); $lang->doc->menu->my = array('link' => "{$lang->doc->my}|doc|browse|browseTyp=openedbyme", 'alias' => 'my'); $lang->doc->menu->collect = array('link' => "{$lang->doc->favorite}|doc|browse|browseTyp=collectedbyme", 'alias' => 'collect'); $lang->doc->menu->product = array('link' => "{$lang->doc->product}|doc|tableContents|type=product", 'alias' => 'showfiles,product'); $lang->doc->menu->api = array('link' => "{$lang->doc->api}|api|index", 'alias' => 'api'); -if($config->systemMode == 'new') $lang->doc->menu->project = array('link' => "{$lang->doc->project}|doc|tableContents|type=project", 'alias' => 'showfiles,project'); -$lang->doc->menu->execution = array('link' => "{$lang->doc->execution}|doc|tableContents|type=execution", 'alias' => 'showfiles,execution'); +$lang->doc->menu->project = array('link' => "{$lang->doc->project}|doc|tableContents|type=project", 'alias' => 'showfiles,project'); $lang->doc->menu->custom = array('link' => "{$lang->doc->custom}|doc|tableContents|type=custom", 'alias' => 'custom'); +if(!isset($config->projectMode) || $config->projectMode != 'noExecution') $lang->doc->menu->execution = array('link' => "{$lang->doc->execution}|doc|tableContents|type=execution", 'alias' => 'showfiles,execution'); $lang->doc->dividerMenu = ',product,'; @@ -453,15 +444,15 @@ $lang->doc->menuOrder[10] = 'recent'; $lang->doc->menuOrder[15] = 'my'; $lang->doc->menuOrder[20] = 'collect'; $lang->doc->menuOrder[25] = 'product'; -if($config->systemMode == 'new') $lang->doc->menuOrder[30] = 'project'; -$lang->doc->menuOrder[35] = 'execution'; +$lang->doc->menuOrder[30] = 'project'; $lang->doc->menuOrder[36] = 'api'; $lang->doc->menuOrder[40] = 'custom'; +if(!isset($config->projectMode) || $config->projectMode != 'noExecution') $lang->doc->menuOrder[35] = 'execution'; $lang->doc->menu->product['subMenu'] = new stdclass(); -if($config->systemMode == 'new') $lang->doc->menu->project['subMenu'] = new stdclass(); -$lang->doc->menu->execution['subMenu'] = new stdclass(); -$lang->doc->menu->custom['subMenu'] = new stdclass(); +$lang->doc->menu->project['subMenu'] = new stdclass(); +$lang->doc->menu->custom['subMenu'] = new stdclass(); +if(!isset($config->projectMode) || $config->projectMode != 'noExecution') $lang->doc->menu->execution['subMenu'] = new stdclass(); $lang->doc->menu->api['subMenu'] = new stdclass(); $lang->doc->menu->api['subMenu']->index = array('link' => "{$lang->doc->apiDoc}|api|index|libID=%s", 'alias' => 'create,edit'); @@ -512,10 +503,7 @@ $lang->admin->menu->model['dropMenu']->allModel = array('link' => "{$lang->globa if($config->edition == 'max') $lang->admin->menu->model['dropMenu']->scrum = array('link' => "{$lang->scrumModel}|auditcl|scrumbrowse|processID=0&browseType=scrum", 'subModule' => 'auditcl,process,activity,zoutput,classify,'); -if($config->systemMode == 'new') -{ - $lang->admin->menu->model['dropMenu']->waterfall = array('link' => "{$lang->waterfallModel}|stage|setType|", 'subModule' => 'stage,auditcl,cmcl,process,activity,zoutput,classify,reviewcl,reviewsetting,design'); -} +$lang->admin->menu->model['dropMenu']->waterfall = array('link' => "{$lang->waterfallModel}|stage|setType|", 'subModule' => 'stage,auditcl,cmcl,process,activity,zoutput,classify,reviewcl,reviewsetting,design'); $lang->admin->menu->allModel['subMenu'] = new stdclass(); $lang->admin->menu->allModel['subMenu']->storyConcept = array('link' => "{$lang->storyConcept}|custom|browsestoryconcept|"); diff --git a/module/common/lang/zh-cn.php b/module/common/lang/zh-cn.php index a27488d59e..dd93f2b400 100644 --- a/module/common/lang/zh-cn.php +++ b/module/common/lang/zh-cn.php @@ -160,7 +160,7 @@ $lang->my->common = '地盘'; $lang->program->common = '项目集'; $lang->product->common = '产品'; $lang->project->common = '项目'; -$lang->execution->common = $config->systemMode == 'new' ? '执行' : $lang->executionCommon; +$lang->execution->common = '执行'; $lang->kanban->common = '看板'; $lang->qa->common = '测试'; $lang->devops->common = 'DevOps'; diff --git a/module/common/model.php b/module/common/model.php index 7532ce25be..fe83b77fde 100644 --- a/module/common/model.php +++ b/module/common/model.php @@ -619,15 +619,14 @@ class commonModel extends model if(empty($object)) unset($lang->createIcons['story'], $lang->createIcons['task'], $lang->createIcons['execution']); } - if($config->edition == 'open') unset($lang->createIcons['effort']); - if($config->systemMode == 'classic') unset($lang->createIcons['project'], $lang->createIcons['program']); + if($config->edition == 'open') unset($lang->createIcons['effort']); + if($config->systemMode != 'new') unset($lang->createIcons['program']); + if(!isset($config->projectMode) || $config->projectMode == 'noExecution') unset($lang->createIcons['execution']); + /* Check whether the creation permission is available, and print create buttons. */ foreach($lang->createIcons as $objectType => $objectIcon) { - /* Change icon when object type is execution and mode is classic. */ - if($config->systemMode == 'classic' and $objectType == 'execution') $objectIcon = 'project'; - $createMethod = 'create'; $module = $objectType == 'kanbanspace' ? 'kanban' : $objectType; if($objectType == 'effort') $createMethod = 'batchCreate'; diff --git a/module/custom/lang/zh-cn.php b/module/custom/lang/zh-cn.php index 4d9a67aeeb..9df24eb8c7 100644 --- a/module/custom/lang/zh-cn.php +++ b/module/custom/lang/zh-cn.php @@ -56,9 +56,7 @@ $lang->custom->role = '职位'; $lang->custom->dept = '部门'; $lang->custom->code = $lang->code; $lang->custom->setCode = '是否启用代号'; - -if($config->systemMode == 'new') $lang->custom->execution = '执行'; -if($config->systemMode == 'classic' || !$config->systemMode) $lang->custom->execution = $lang->executionCommon; +$lang->custom->execution = '执行'; $lang->custom->unitList['efficiency'] = '工时/'; $lang->custom->unitList['manhour'] = '人时/'; diff --git a/module/upgrade/model.php b/module/upgrade/model.php index c0fd3dd323..7846a5d053 100644 --- a/module/upgrade/model.php +++ b/module/upgrade/model.php @@ -7528,4 +7528,46 @@ class upgradeModel extends model } return true; } + + /* + * Upgrade from classic mode of 15 version to the lite mode of 18 version. + * + * @access public + * @return bool + */ + public function classic2Lite() + { + /* Set mode as lite. */ + $this->loadModel('setting')->setItem('system.common.global.mode', 'lite'); + /* Set project mode as noExecution. */ + $this->loadModel('setting')->setItem('system.common.global.projectMode', 'noExecution'); + + $defaultProgram = $this->config->global->defaultProgram; + + $projects = $this->dao->select('*')->from(TABLE_PROJECT)->where('deleted')->eq('0')->andWhere('project')->eq(0)->andWhere('type')->eq('sprint')->fetchAll('id'); + + $this->dao->update(TABLE_PRODUCT)->set('program')->eq($defaultProgram)->exec(); + + /* Add default execution for project. */ + foreach($projects as $project) + { + $this->dao->update(TABLE_PROJECT)->set('noExecution')->eq('1')->set('type')->eq('project')->set('parent')->eq($defaultProgram)->set('path')->eq(",{$defaultProgram},{$project->id},")->where('id')->eq($project->id)->exec(); + + $execution = clone $project; + $execution->project = $project->id; + $execution->parent = $project->id; + $execution->grade = 1; + unset($execution->id); + + $this->dao->insert(TABLE_PROJECT)->data($execution)->autoCheck()->exec(); + if(dao::isError()) return false; + + $executionID = $this->dao->lastInsertID(); + $this->dao->update(TABLE_PROJECT)->set('path')->eq(",{$project->id},{$executionID},")->where('id')->eq($executionID)->exec(); + + $this->dao->update(TABLE_TASK)->set('execution')->eq($executionID)->where('project')->eq($project->id)->exec(); + } + + return !dao::isError(); + } } From 234cf3ff9754c89f43ebf089c08a154d84c47c42 Mon Sep 17 00:00:00 2001 From: liuruogu Date: Fri, 16 Sep 2022 01:05:29 +0000 Subject: [PATCH 044/712] * Finish task #69013. --- module/common/lang/menu.php | 6 +++--- module/common/model.php | 6 ++---- module/project/model.php | 8 ++++---- 3 files changed, 9 insertions(+), 11 deletions(-) diff --git a/module/common/lang/menu.php b/module/common/lang/menu.php index 7dd8ac6692..d5daec84cb 100644 --- a/module/common/lang/menu.php +++ b/module/common/lang/menu.php @@ -213,8 +213,8 @@ $lang->scrum->menu->dynamic = array('link' => "$lang->dynamic|project|dynamic $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'); $lang->scrum->menu->storyGroup['dropMenu'] = new stdclass(); -$lang->scrum->menu->storyGroup['dropMenu']->SRStory = array('link' => "{$lang->SRCommon}|projectstory|story|projectID=%s&productID=%s|story", 'subModule' => 'projectstory,tree', 'alias' => 'story,track'); -$lang->scrum->menu->storyGroup['dropMenu']->URStory = array('link' => "{$lang->URCommon}|projectstory|story|projectID=%s&productID=%s&branch=0&browseType=¶m=0&storyType=requirement|requirement", 'subModule' => 'projectstory,tree', 'alias' => 'story,track'); +$lang->scrum->menu->storyGroup['dropMenu']->story = array('link' => "{$lang->SRCommon}|projectstory|story|projectID=%s&productID=%s|story", 'subModule' => 'projectstory,tree', 'alias' => 'story,track'); +$lang->scrum->menu->storyGroup['dropMenu']->requirement = array('link' => "{$lang->URCommon}|projectstory|story|projectID=%s&productID=%s&branch=0&browseType=¶m=0&storyType=requirement|requirement", 'subModule' => 'projectstory,tree', 'alias' => 'story,track'); $lang->scrum->dividerMenu = ',execution,programplan,doc,settings,'; @@ -273,7 +273,7 @@ $lang->waterfall->menuOrder[5] = 'index'; $lang->waterfall->menuOrder[15] = 'programplan'; $lang->waterfall->menuOrder[20] = 'execution'; $lang->waterfall->menuOrder[25] = 'story'; -$lang->waterfall->menuOrder[26] = 'storyGoup'; +$lang->waterfall->menuOrder[26] = 'storyGroup'; $lang->waterfall->menuOrder[30] = 'design'; $lang->waterfall->menuOrder[35] = 'devops'; $lang->waterfall->menuOrder[55] = 'qa'; diff --git a/module/common/model.php b/module/common/model.php index b5ba80d527..4ad666beb8 100644 --- a/module/common/model.php +++ b/module/common/model.php @@ -1181,10 +1181,8 @@ class commonModel extends model if(is_array($dropMenuItem) and isset($dropMenuItem['link'])) $dropMenuLink = $dropMenuLink['link']; $dropMenuLinks = explode('|', $dropMenuLink); - list($subLabel, $subModule, $subMethod, $subParams) = $dropMenuLinks; + list($subLabel, $subModule, $subMethod, $subParams) = explode('|', $dropMenuLink); if(!common::hasPriv($subModule, $subMethod)) continue; - $labelID = $subLabel; - if(isset($dropMenuLinks[4])) $labelID = $dropMenuLinks[4]; $subLink = helper::createLink($subModule, $subMethod, $subParams); @@ -1207,7 +1205,7 @@ class commonModel extends model $subActive = 'active'; $label = $subLabel; } - $dropMenu .= "
  • " . html::a($subLink, $subLabel, '', "data-app='$tab'") . '
  • '; + $dropMenu .= "
  • " . html::a($subLink, $subLabel, '', "data-app='$tab'") . '
  • '; } if(empty($dropMenu)) continue; diff --git a/module/project/model.php b/module/project/model.php index 34a3f5a789..f8c91161af 100644 --- a/module/project/model.php +++ b/module/project/model.php @@ -2454,7 +2454,7 @@ class projectModel extends model if(empty($project->hasProduct)) { - if(isset($this->lang->project->menu->story)) unset($this->lang->project->menu->story); + unset($this->lang->project->menu->story); unset($this->lang->project->menu->settings['subMenu']->products); $projectProduct = $this->dao->select('product')->from(TABLE_PROJECTPRODUCT)->where('project')->eq($objectID)->fetch()->product; $this->lang->project->menu->settings['subMenu']->module['link'] = sprintf($this->lang->project->menu->settings['subMenu']->module['link'], $projectProduct); @@ -2462,14 +2462,14 @@ class projectModel extends model if($model !== 'kanbanProject') { $this->lang->project->menu->storyGroup['link'] = sprintf($this->lang->project->menu->storyGroup['link'], '%s', $projectProduct); - $this->lang->project->menu->storyGroup['dropMenu']->SRStory['link'] = sprintf($this->lang->project->menu->storyGroup['dropMenu']->SRStory['link'], '%s', $projectProduct); - $this->lang->project->menu->storyGroup['dropMenu']->URStory['link'] = sprintf($this->lang->project->menu->storyGroup['dropMenu']->URStory['link'], '%s', $projectProduct); + $this->lang->project->menu->storyGroup['dropMenu']->story['link'] = sprintf($this->lang->project->menu->storyGroup['dropMenu']->story['link'], '%s', $projectProduct); + $this->lang->project->menu->storyGroup['dropMenu']->requirement['link'] = sprintf($this->lang->project->menu->storyGroup['dropMenu']->requirement['link'], '%s', $projectProduct); } } else { unset($this->lang->project->menu->settings['subMenu']->module); - if(isset($this->lang->project->menu->storyGroup)) unset($this->lang->project->menu->storyGroup); + unset($this->lang->project->menu->storyGroup); } /* Reset project priv. */ From 19d3a1948d9e71468b8dc80f3926e4f7c4183c85 Mon Sep 17 00:00:00 2001 From: liuruogu Date: Fri, 16 Sep 2022 01:13:03 +0000 Subject: [PATCH 045/712] * Finish task #69013. --- module/common/model.php | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/module/common/model.php b/module/common/model.php index 4ad666beb8..dc5bf20494 100644 --- a/module/common/model.php +++ b/module/common/model.php @@ -1177,10 +1177,8 @@ class commonModel extends model if(isset($dropMenuItem->hidden) and $dropMenuItem->hidden) continue; /* Parse drop menu link. */ - $dropMenuLink = $dropMenuItem; - if(is_array($dropMenuItem) and isset($dropMenuItem['link'])) $dropMenuLink = $dropMenuLink['link']; + $dropMenuLink = zget($dropMenuItem, 'link', $dropMenuItem); - $dropMenuLinks = explode('|', $dropMenuLink); list($subLabel, $subModule, $subMethod, $subParams) = explode('|', $dropMenuLink); if(!common::hasPriv($subModule, $subMethod)) continue; From fed9a781e9447d9ab7f54a1188856249bcc8f9a3 Mon Sep 17 00:00:00 2001 From: liuruogu Date: Fri, 16 Sep 2022 01:23:07 +0000 Subject: [PATCH 046/712] * Use global lang. --- module/project/model.php | 25 ++++++++++++------------- 1 file changed, 12 insertions(+), 13 deletions(-) diff --git a/module/project/model.php b/module/project/model.php index f8c91161af..bfa26c65a1 100644 --- a/module/project/model.php +++ b/module/project/model.php @@ -2454,22 +2454,22 @@ class projectModel extends model if(empty($project->hasProduct)) { - unset($this->lang->project->menu->story); - unset($this->lang->project->menu->settings['subMenu']->products); + unset($lang->project->menu->story); + unset($lang->project->menu->settings['subMenu']->products); $projectProduct = $this->dao->select('product')->from(TABLE_PROJECTPRODUCT)->where('project')->eq($objectID)->fetch()->product; - $this->lang->project->menu->settings['subMenu']->module['link'] = sprintf($this->lang->project->menu->settings['subMenu']->module['link'], $projectProduct); + $lang->project->menu->settings['subMenu']->module['link'] = sprintf($lang->project->menu->settings['subMenu']->module['link'], $projectProduct); if($model !== 'kanbanProject') { - $this->lang->project->menu->storyGroup['link'] = sprintf($this->lang->project->menu->storyGroup['link'], '%s', $projectProduct); - $this->lang->project->menu->storyGroup['dropMenu']->story['link'] = sprintf($this->lang->project->menu->storyGroup['dropMenu']->story['link'], '%s', $projectProduct); - $this->lang->project->menu->storyGroup['dropMenu']->requirement['link'] = sprintf($this->lang->project->menu->storyGroup['dropMenu']->requirement['link'], '%s', $projectProduct); + $lang->project->menu->storyGroup['link'] = sprintf($lang->project->menu->storyGroup['link'], '%s', $projectProduct); + $lang->project->menu->storyGroup['dropMenu']->story['link'] = sprintf($lang->project->menu->storyGroup['dropMenu']->story['link'], '%s', $projectProduct); + $lang->project->menu->storyGroup['dropMenu']->requirement['link'] = sprintf($lang->project->menu->storyGroup['dropMenu']->requirement['link'], '%s', $projectProduct); } } else { - unset($this->lang->project->menu->settings['subMenu']->module); - unset($this->lang->project->menu->storyGroup); + unset($lang->project->menu->settings['subMenu']->module); + unset($lang->project->menu->storyGroup); } /* Reset project priv. */ @@ -2480,9 +2480,8 @@ class projectModel extends model if(isset($project->model) and $project->model == 'waterfall') { - global $lang; - $lang->project->createExecution = str_replace($this->lang->executionCommon, $lang->project->stage, $lang->project->createExecution); - $lang->project->lastIteration = str_replace($this->lang->executionCommon, $lang->project->stage, $lang->project->lastIteration); + $lang->project->createExecution = str_replace($lang->executionCommon, $lang->project->stage, $lang->project->createExecution); + $lang->project->lastIteration = str_replace($lang->executionCommon, $lang->project->stage, $lang->project->lastIteration); $this->loadModel('execution'); $lang->executionCommon = $lang->project->stage; @@ -2490,11 +2489,11 @@ class projectModel extends model include $this->app->getModulePath('', 'execution') . 'lang/' . $this->app->getClientLang() . '.php'; } - $this->lang->switcherMenu = $this->getSwitcher($objectID, $moduleName, $methodName); + $lang->switcherMenu = $this->getSwitcher($objectID, $moduleName, $methodName); $this->saveState($objectID, $this->getPairsByProgram()); - if(isset($project->acl) and $project->acl == 'open') unset($this->lang->project->menu->settings['subMenu']->whitelist); + if(isset($project->acl) and $project->acl == 'open') unset($lang->project->menu->settings['subMenu']->whitelist); common::setMenuVars('project', $objectID); return $objectID; From 3d54c6ea822ac3e5865f8fc2fb2fb7c31a4b655d Mon Sep 17 00:00:00 2001 From: wangyuting2 <851424971@qq.com> Date: Fri, 16 Sep 2022 01:25:47 +0000 Subject: [PATCH 047/712] * Finish task #69256. --- module/upgrade/control.php | 14 +- module/upgrade/lang/de.php | 1 + module/upgrade/lang/en.php | 1 + module/upgrade/lang/fr.php | 1 + module/upgrade/lang/vi.php | 1 + module/upgrade/lang/zh-cn.php | 1 + module/upgrade/model.php | 229 ++++++++++++++++++- module/upgrade/view/selectmergemode.html.php | 4 +- 8 files changed, 244 insertions(+), 8 deletions(-) diff --git a/module/upgrade/control.php b/module/upgrade/control.php index 22c0fef9f2..d8d5593280 100644 --- a/module/upgrade/control.php +++ b/module/upgrade/control.php @@ -635,18 +635,22 @@ class upgrade extends control * Select the merge mode when upgrading to zentaopms 18.0. * * @param string $fromVersion + * @param string $mode lean | new * @access public * @return void */ - public function selectMergeMode($fromVersion) + public function selectMergeMode($fromVersion, $mode = 'lean') { if($_POST) { - $mode = $this->post->mode; - if($mode == 'project') echo 'execute mergeData method'; - if($mode == 'execution') echo 'execute mergeData method'; - if($mode == 'manually') $this->locate(inlink('mergeProgram')); + $mergeMode = $this->post->projectType; + if($mergeMode == 'manually') $this->locate(inlink('mergeProgram')); + $program = $this->upgrade->createDefaultProgram(); + if($mergeMode == 'project') $this->upgrade->upgradeInProjectMode($program->id); + if($mergeMode == 'execution') $this->upgrade->upgradeInExecutionMode($program->id); + + if(dao::isError()) return print(js::error(dao::getError())); $this->locate(inlink('afterExec', "fromVersion=$fromVersion")); } $this->view->title = $this->lang->upgrade->selectMergeMode; diff --git a/module/upgrade/lang/de.php b/module/upgrade/lang/de.php index 1e0920a538..14ddc72fc1 100644 --- a/module/upgrade/lang/de.php +++ b/module/upgrade/lang/de.php @@ -102,6 +102,7 @@ $lang->upgrade->selectedModeTips['new'] = 'Switching to the program manageme $lang->upgrade->line = 'Product Line'; $lang->upgrade->allLines = "All Product Lines"; $lang->upgrade->program = 'Merge Project'; +$lang->upgrade->defaultProgram = 'Default Program'; $lang->upgrade->existProgram = 'Existing programs'; $lang->upgrade->existProject = 'Existing projects'; $lang->upgrade->existLine = 'Existing' . $lang->productCommon . ' lines'; diff --git a/module/upgrade/lang/en.php b/module/upgrade/lang/en.php index 882f75a2ac..11703f3871 100644 --- a/module/upgrade/lang/en.php +++ b/module/upgrade/lang/en.php @@ -102,6 +102,7 @@ $lang->upgrade->selectedModeTips['new'] = 'Switching to the program manageme $lang->upgrade->line = 'Product Line'; $lang->upgrade->allLines = "All Product Lines"; $lang->upgrade->program = 'Merge Project'; +$lang->upgrade->defaultProgram = 'Default Program'; $lang->upgrade->existProgram = 'Existing programs'; $lang->upgrade->existProject = 'Existing projects'; $lang->upgrade->existLine = 'Existing' . $lang->productCommon . ' lines'; diff --git a/module/upgrade/lang/fr.php b/module/upgrade/lang/fr.php index 02e766e464..79555a5524 100644 --- a/module/upgrade/lang/fr.php +++ b/module/upgrade/lang/fr.php @@ -102,6 +102,7 @@ $lang->upgrade->selectedModeTips['new'] = 'Switching to the program manageme $lang->upgrade->line = 'Product Line'; $lang->upgrade->allLines = "All Product Lines"; $lang->upgrade->program = 'Merge Project'; +$lang->upgrade->defaultProgram = 'Default Program'; $lang->upgrade->existProgram = 'Existing programs'; $lang->upgrade->existProject = 'Existing projects'; $lang->upgrade->existLine = 'Existing' . $lang->productCommon . ' lines'; diff --git a/module/upgrade/lang/vi.php b/module/upgrade/lang/vi.php index e3f454e7c2..06aab7e2c5 100644 --- a/module/upgrade/lang/vi.php +++ b/module/upgrade/lang/vi.php @@ -99,6 +99,7 @@ $lang->upgrade->selectedModeTips['new'] = 'Switching to the program manageme $lang->upgrade->line = 'Product Line'; $lang->upgrade->allLines = "All Product Lines"; $lang->upgrade->program = 'Merge Project'; +$lang->upgrade->defaultProgram = 'Default Program'; $lang->upgrade->existProgram = 'Existing programs'; $lang->upgrade->existProject = 'Existing projects'; $lang->upgrade->existLine = 'Existing' . $lang->productCommon . ' lines'; diff --git a/module/upgrade/lang/zh-cn.php b/module/upgrade/lang/zh-cn.php index cc919f92ef..20a409caab 100644 --- a/module/upgrade/lang/zh-cn.php +++ b/module/upgrade/lang/zh-cn.php @@ -102,6 +102,7 @@ $lang->upgrade->selectedModeTips['new'] = '切换为项目集管理模式需 $lang->upgrade->line = '产品线'; $lang->upgrade->allLines = "所有{$lang->productCommon}线"; $lang->upgrade->program = '目标项目集和项目'; +$lang->upgrade->defaultProgram = '默认项目集'; $lang->upgrade->existProgram = '已有项目集'; $lang->upgrade->existProject = '已有项目'; $lang->upgrade->existLine = '已有' . $lang->productCommon . '线'; diff --git a/module/upgrade/model.php b/module/upgrade/model.php index c0fd3dd323..4a9788acdd 100644 --- a/module/upgrade/model.php +++ b/module/upgrade/model.php @@ -4941,7 +4941,7 @@ class upgradeModel extends model * @access public * @return void */ - public function processMergedData($programID, $projectID, $lineID, $productIdList = array(), $sprintIdList = array()) + public function processMergedData($programID, $projectID, $lineID = 0, $productIdList = array(), $sprintIdList = array()) { /* Product linked objects. */ $this->dao->update(TABLE_RELEASE)->set('project')->eq($projectID)->where('product')->in($productIdList)->exec(); @@ -7528,4 +7528,231 @@ class upgradeModel extends model } return true; } + + /** + * Create a default program. + * + * @access public + * @return object + */ + public function createDefaultProgram() + { + $program = $this->dao->select('*')->from(TABLE_PROGRAM)->where('name')->eq($this->lang->upgrade->defaultProgram)->fetch(); + if($program) return $program; + + $account = isset($this->app->user->account) ? $this->app->user->account : ''; + + $program = new stdclass(); + $program->name = $this->lang->upgrade->defaultProgram; + $program->type = 'program'; + $program->status = 'doing'; + $program->begin = helper::now(); + $program->end = LONG_TIME; + $program->openedBy = $account; + $program->openedDate = helper::now(); + $program->openedVersion = $this->config->version; + $program->acl = 'open'; + $program->days = $this->computeDaysDelta($program->begin, $program->end); + $program->grade = 1; + $program->vision = 'rnd'; + + $this->app->loadLang('program'); + $this->app->loadLang('project'); + $this->lang->project->name = $this->lang->program->name; + + $this->dao->insert(TABLE_PROGRAM)->data($program)->exec(); + if(dao::isError()) return false; + + $programID = $this->dao->lastInsertId(); + + $this->dao->update(TABLE_PROGRAM)->set('path')->eq(",{$programID},")->set('`order`')->eq($programID * 5)->where('id')->eq($programID)->exec(); + $this->loadModel('action')->create('program', $programID, 'openedbysystem'); + + return $this->loadModel('program')->getByID($programID); + } + + /** + * Historical projects are upgraded by project. + * + * @param int $programID + * @access public + * @return bool + */ + public function upgradeInProjectMode($programID) + { + $this->loadModel('action'); + $now = helper::now(); + $account = isset($this->app->user->account) ? $this->app->user->account : ''; + + $noMergedSprints = $this->getNoMergedSprints(); + if(!$noMergedSprints) return true; + + foreach($noMergedSprints as $sprint) + { + $project = new stdclass(); + $project->name = $sprint->name; + $project->type = 'project'; + $project->model = 'scrum'; + $project->parent = $programID; + $project->status = $sprint->status; + $project->begin = $sprint->begin; + $project->end = isset($sprint->end) ? $sprint->end : LONG_TIME; + $project->days = $this->computeDaysDelta($project->begin, $project->end); + $project->PM = $sprint->PM; + $project->auth = 'extend'; + $project->openedBy = $account; + $project->openedDate = $now; + $project->openedVersion = $this->config->version; + $project->lastEditedBy = $account; + $project->lastEditedDate = $now; + $project->grade = 2; + $project->acl = $sprint->acl == 'open' ? 'open' : 'private'; + + $this->dao->insert(TABLE_PROJECT)->data($project)->check('name', 'unique', "type='project' AND parent=$programID AND deleted='0'")->exec(); + if(dao::isError()) return false; + + $projectID = $this->dao->lastInsertId(); + + $this->action->create('project', $projectID, 'openedbysystem'); + if($project->status == 'closed') $this->action->create('project', $projectID, 'closedbysystem'); + + $project->id = $projectID; + $this->createProjectDocLib($project); + $this->processMergedData($programID, $projectID, '', array(), array($sprint->id)); + } + + $this->fixProjectPath($programID); + + if(dao::isError()) return false; + return true; + } + + /** + * Historical projects are upgraded by execution. + * + * @param int $programID + * @access public + * @return bool + */ + public function upgradeInExecutionMode($programID) + { + $this->loadModel('action'); + $now = helper::now(); + $account = isset($this->app->user->account) ? $this->app->user->account : ''; + + $noMergedSprints = $this->getNoMergedSprints(); + if(!$noMergedSprints) return true; + + $projects = array(); + foreach($noMergedSprints as $sprint) + { + $year = date('Y', strtotime($sprint->openedDate)); + $projects[$year][$sprint->id] = $sprint; + } + + foreach($projects as $year => $sprints) + { + $project = new stdclass(); + $project->name = $year; + $project->type = 'project'; + $project->model = 'scrum'; + $project->parent = $programID; + $project->auth = 'extend'; + $project->begin = ''; + $project->end = ''; + $project->openedBy = $account; + $project->openedDate = $now; + $project->openedVersion = $this->config->version; + $project->lastEditedBy = $account; + $project->lastEditedDate = $now; + $project->grade = 2; + $project->acl = 'open'; + + $projectStatus = 'closed'; + foreach($sprints as $sprint) + { + if(!$project->begin || $sprint->begin < $project->begin) $project->begin = $sprint->begin; + if(!$project->end || $sprint->end > $project->end) $project->end = $sprint->end; + if($sprint->status != 'closed') $projectStatus = 'doing'; + } + $project->status = $projectStatus; + $project->days = $this->computeDaysDelta($project->begin, $project->end); + + $this->dao->insert(TABLE_PROJECT)->data($project)->exec(); + if(dao::isError()) return false; + + $projectID = $this->dao->lastInsertId(); + + $this->action->create('project', $projectID, 'openedbysystem'); + if($project->status == 'closed') $this->action->create('project', $projectID, 'closedbysystem'); + + $project->id = $projectID; + $this->createProjectDocLib($project); + $this->processMergedData($programID, $projectID, '', array(), array_keys($sprints)); + } + + $this->fixProjectPath($programID); + + if(dao::isError()) return false; + return true; + } + + /** + * Get sprints has not been merged. + * + * @access public + * @return array + */ + public function getNoMergedSprints() + { + $noMergedSprints = $this->dao->select('*')->from(TABLE_PROJECT) + ->where('project')->eq(0) + ->andWhere('vision')->eq('rnd') + ->andWhere('type')->eq('sprint') + ->andWhere('deleted')->eq(0) + ->fetchAll('id'); + + $projectProducts = $this->dao->select('*')->from(TABLE_PROJECTPRODUCT)->where('project')->in(array_keys($noMergedSprints))->fetchGroup('project', 'product'); + foreach($projectProducts as $sprintID => $products) unset($noMergedSprints[$sprintID]); + + if(empty($noMergedSprints)) return false; + return $noMergedSprints; + } + + /** + * Create doc lib for project. + * + * @param object $project + * @access public + * @return void + */ + public function createProjectDocLib($project) + { + $this->app->loadLang('doc'); + + $lib = new stdclass(); + $lib->project = $project->id; + $lib->name = $this->lang->doclib->main['project']; + $lib->type = 'project'; + $lib->main = '1'; + $lib->acl = $project->acl != 'program' ? $project->acl : 'custom'; + $this->dao->insert(TABLE_DOCLIB)->data($lib)->exec(); + } + + /** + * Fix the project path under the program. + * + * @param int $programID + * @access public + * @return void + */ + public function fixProjectPath($programID) + { + $this->dao->update(TABLE_PROJECT) + ->set("path = CONCAT(',{$programID},', id, ',')")->set("`order` = `id` * 5") + ->where('type')->eq('project') + ->andWhere('parent')->eq($programID) + ->andWhere('grade')->eq('2') + ->exec(); + } } diff --git a/module/upgrade/view/selectmergemode.html.php b/module/upgrade/view/selectmergemode.html.php index 4dbcd69461..84bf3f2c18 100644 --- a/module/upgrade/view/selectmergemode.html.php +++ b/module/upgrade/view/selectmergemode.html.php @@ -25,9 +25,9 @@
    upgrade->mergeMode;?> upgrade->mergeModes as $mode => $label):?> -
    +
    From c44bc35ec694865512088915815071a5d217a69d Mon Sep 17 00:00:00 2001 From: daitingting Date: Fri, 16 Sep 2022 02:38:51 +0000 Subject: [PATCH 051/712] * Adjust language. --- module/block/lang/de.php | 40 +++++++++++++++--------------------- module/block/lang/en.php | 40 +++++++++++++++--------------------- module/block/lang/fr.php | 40 +++++++++++++++--------------------- module/common/lang/en.php | 2 +- module/custom/lang/de.php | 8 +++----- module/custom/lang/en.php | 8 +++----- module/custom/lang/fr.php | 8 +++----- module/custom/lang/zh-cn.php | 4 ++-- 8 files changed, 63 insertions(+), 87 deletions(-) diff --git a/module/block/lang/de.php b/module/block/lang/de.php index bc16a941ea..655c4df0de 100644 --- a/module/block/lang/de.php +++ b/module/block/lang/de.php @@ -284,14 +284,11 @@ $lang->block->default['full']['my']['4']['grid'] = 8; $lang->block->default['full']['my']['4']['source'] = 'project'; $lang->block->default['full']['my']['4']['params']['count'] = '20'; -if($config->systemMode == 'new') -{ - $lang->block->default['full']['my']['5']['title'] = 'Personal Contribution'; - $lang->block->default['full']['my']['5']['block'] = 'contribute'; - $lang->block->default['full']['my']['5']['source'] = ''; - $lang->block->default['full']['my']['5']['grid'] = 4; - $lang->block->default['full']['my']['5']['params']['count'] = '20'; -} +$lang->block->default['full']['my']['5']['title'] = 'Personal Contribution'; +$lang->block->default['full']['my']['5']['block'] = 'contribute'; +$lang->block->default['full']['my']['5']['source'] = ''; +$lang->block->default['full']['my']['5']['grid'] = 4; +$lang->block->default['full']['my']['5']['params']['count'] = '20'; $lang->block->default['full']['my']['6']['title'] = 'Recent Project'; $lang->block->default['full']['my']['6']['block'] = 'recentproject'; @@ -316,19 +313,16 @@ $lang->block->default['full']['my']['8']['params']['issueCount'] = '20'; $lang->block->default['full']['my']['8']['params']['storyCount'] = '20'; $lang->block->default['full']['my']['8']['params']['meetingCount'] = '20'; -if($config->systemMode == 'new') -{ - $lang->block->default['full']['my']['9']['title'] = 'Project List'; - $lang->block->default['full']['my']['9']['block'] = 'project'; - $lang->block->default['full']['my']['9']['source'] = 'project'; - $lang->block->default['full']['my']['9']['grid'] = 8; -} +$lang->block->default['full']['my']['9']['title'] = 'Project List'; +$lang->block->default['full']['my']['9']['block'] = 'project'; +$lang->block->default['full']['my']['9']['source'] = 'project'; +$lang->block->default['full']['my']['9']['grid'] = 8; $lang->block->default['full']['my']['10']['title'] = 'Project List'; $lang->block->default['full']['my']['10']['block'] = 'project'; $lang->block->default['full']['my']['10']['source'] = 'project'; $lang->block->default['full']['my']['10']['grid'] = 8; -if($config->systemMode == 'classic') +if(!isset($config->projectMode) || $config->projectMode != 'noExecution') { $lang->block->default['full']['my']['10']['block'] = 'project'; $lang->block->default['full']['my']['10']['source'] = 'project'; @@ -359,18 +353,18 @@ $lang->block->availableBlocks->issue = 'My Issues'; $lang->block->availableBlocks->meeting = 'My Meetings'; $lang->block->availableBlocks->feedback = 'My Feedbacks'; -if($config->systemMode == 'new') $lang->block->moduleList['project'] = 'Project'; -$lang->block->moduleList['product'] = $lang->productCommon; -$lang->block->moduleList['execution'] = $lang->execution->common; -$lang->block->moduleList['qa'] = 'QA'; -$lang->block->moduleList['todo'] = 'Todos'; +$lang->block->moduleList['product'] = $lang->productCommon; +$lang->block->moduleList['project'] = 'Project'; +if(!isset($config->projectMode) || $config->projectMode != 'noExecution') $lang->block->moduleList['execution'] = $lang->execution->common; +$lang->block->moduleList['qa'] = 'QA'; +$lang->block->moduleList['todo'] = 'Todos'; $lang->block->modules['project'] = new stdclass(); $lang->block->modules['project']->availableBlocks = new stdclass(); $lang->block->modules['project']->availableBlocks->project = 'Project List'; $lang->block->modules['project']->availableBlocks->recentproject = 'Recent Project'; $lang->block->modules['project']->availableBlocks->statistic = 'Project Statistic'; -if($config->systemMode == 'new') $lang->block->modules['project']->availableBlocks->projectteam = 'Project Human Input'; +$lang->block->modules['project']->availableBlocks->projectteam = 'Project Human Input'; $lang->block->modules['scrum']['index'] = new stdclass(); $lang->block->modules['scrum']['index']->availableBlocks = new stdclass(); @@ -573,7 +567,7 @@ $lang->block->flowchart['admin'] = array('Administrator', 'Abteilung erstellen if($config->systemMode == 'new') $lang->block->flowchart['program'] = array('Program Owner', 'Create Program', 'Link Product', "Create Project", "Budgeting and planning", 'Add Stakeholder'); $lang->block->flowchart['product'] = array($lang->productCommon . ' Besitzer', $lang->productCommon . ' erstellen', 'Module pflegen', 'Pläne pflegen', 'Storys pflegen', 'Release erstellen'); $lang->block->flowchart['project'] = array('Project Manager', 'Add projects and ' . $lang->executionCommon . 's', 'Maintain Teams', 'Link Stories', 'Create Tasks', 'Track'); -if($config->systemMode == 'new') $lang->block->flowchart['project'] = array('Project Manager', 'Add projects and ' . $lang->executionCommon . 's', 'Maintain Teams', 'Link Stories', 'Create Tasks', 'Track'); +$lang->block->flowchart['project'] = array('Project Manager', 'Add projects and ' . $lang->executionCommon . 's', 'Maintain Teams', 'Link Stories', 'Create Tasks', 'Track'); $lang->block->flowchart['dev'] = array('Entwickler', 'Aufgabe/Bugs anfordern', 'Update Status', 'Aufgaben/Bugs abschließen'); $lang->block->flowchart['tester'] = array('QS Team', 'Fälle erstellen', 'Fälle ausführen', 'Bug Berichte', 'Bugs überprüfen', 'Bugs schließen'); diff --git a/module/block/lang/en.php b/module/block/lang/en.php index 835b29776e..214b1fd45f 100644 --- a/module/block/lang/en.php +++ b/module/block/lang/en.php @@ -284,14 +284,11 @@ $lang->block->default['full']['my']['4']['grid'] = 4; $lang->block->default['full']['my']['4']['source'] = 'todo'; $lang->block->default['full']['my']['4']['params']['count'] = '20'; -if($config->systemMode == 'new') -{ - $lang->block->default['full']['my']['5']['title'] = 'Project Statistic'; - $lang->block->default['full']['my']['5']['block'] = 'statistic'; - $lang->block->default['full']['my']['5']['source'] = 'project'; - $lang->block->default['full']['my']['5']['grid'] = 8; - $lang->block->default['full']['my']['5']['params']['count'] = '20'; -} +$lang->block->default['full']['my']['5']['title'] = 'Project Statistic'; +$lang->block->default['full']['my']['5']['block'] = 'statistic'; +$lang->block->default['full']['my']['5']['source'] = 'project'; +$lang->block->default['full']['my']['5']['grid'] = 8; +$lang->block->default['full']['my']['5']['params']['count'] = '20'; $lang->block->default['full']['my']['6']['title'] = 'Personal Contribution'; $lang->block->default['full']['my']['6']['block'] = 'contribute'; @@ -316,19 +313,16 @@ $lang->block->default['full']['my']['8']['params']['issueCount'] = '20'; $lang->block->default['full']['my']['8']['params']['storyCount'] = '20'; $lang->block->default['full']['my']['8']['params']['meetingCount'] = '20'; -if($config->systemMode == 'new') -{ - $lang->block->default['full']['my']['9']['title'] = 'Manpower Input'; - $lang->block->default['full']['my']['9']['block'] = 'projectteam'; - $lang->block->default['full']['my']['9']['source'] = 'project'; - $lang->block->default['full']['my']['9']['grid'] = 8; -} +$lang->block->default['full']['my']['9']['title'] = 'Manpower Input'; +$lang->block->default['full']['my']['9']['block'] = 'projectteam'; +$lang->block->default['full']['my']['9']['source'] = 'project'; +$lang->block->default['full']['my']['9']['grid'] = 8; $lang->block->default['full']['my']['10']['title'] = 'Project List'; $lang->block->default['full']['my']['10']['block'] = 'project'; $lang->block->default['full']['my']['10']['source'] = 'project'; $lang->block->default['full']['my']['10']['grid'] = 8; -if($config->systemMode == 'classic') +if(!isset($config->projectMode) || $config->projectMode != 'noExecution') { $lang->block->default['full']['my']['10']['block'] = 'execution'; $lang->block->default['full']['my']['10']['source'] = 'execution'; @@ -359,18 +353,18 @@ $lang->block->availableBlocks->issue = 'Issues'; $lang->block->availableBlocks->meeting = 'Meetings'; $lang->block->availableBlocks->feedback = 'My Feedbacks'; -if($config->systemMode == 'new') $lang->block->moduleList['project'] = 'Project'; -$lang->block->moduleList['product'] = $lang->productCommon; -$lang->block->moduleList['execution'] = $lang->execution->common; -$lang->block->moduleList['qa'] = 'Test'; -$lang->block->moduleList['todo'] = 'Todo'; +$lang->block->moduleList['product'] = $lang->productCommon; +$lang->block->moduleList['project'] = 'Project'; +if(!isset($config->projectMode) || $config->projectMode != 'noExecution') $lang->block->moduleList['execution'] = $lang->execution->common; +$lang->block->moduleList['qa'] = 'Test'; +$lang->block->moduleList['todo'] = 'Todo'; $lang->block->modules['project'] = new stdclass(); $lang->block->modules['project']->availableBlocks = new stdclass(); $lang->block->modules['project']->availableBlocks->project = 'Project List'; $lang->block->modules['project']->availableBlocks->recentproject = 'Recent Project'; $lang->block->modules['project']->availableBlocks->statistic = 'Project Statistic'; -if($config->systemMode == 'new') $lang->block->modules['project']->availableBlocks->projectteam = 'Project Manpower Input'; +$lang->block->modules['project']->availableBlocks->projectteam = 'Project Manpower Input'; $lang->block->modules['scrum']['index'] = new stdclass(); $lang->block->modules['scrum']['index']->availableBlocks = new stdclass(); @@ -573,7 +567,7 @@ $lang->block->flowchart['admin'] = array('Administrator', 'Add Departments', ' if($config->systemMode == 'new') $lang->block->flowchart['program'] = array('Program Owner', 'Create Program', 'Link Product', "Create Project", "Budgeting and planning", 'Add Stakeholder'); $lang->block->flowchart['product'] = array($lang->productCommon . ' Owner', 'Add ' . $lang->productCommon, 'Maintain Modules', 'Maintain Plans', 'Maintain Stories', 'Create Releases'); $lang->block->flowchart['project'] = array('Project Manager', 'Add projects and ' . $lang->executionCommon . 's', 'Maintain Teams', 'Link Stories', 'Create Tasks', 'Track'); -if($config->systemMode == 'new') $lang->block->flowchart['project'] = array('Project Manager', 'Add ' . $lang->executionCommon . 's', 'Maintain Teams', 'Link Stories', 'Create Tasks', 'Track'); +$lang->block->flowchart['project'] = array('Project Manager', 'Add ' . $lang->executionCommon . 's', 'Maintain Teams', 'Link Stories', 'Create Tasks', 'Track'); $lang->block->flowchart['dev'] = array('Dev Team', 'Claim Tasks/Bugs', 'Design', 'Update Status', 'Finish Tasks/Bugs', 'Commit Code'); $lang->block->flowchart['tester'] = array('Test Team', 'Write Cases', 'Run Cases', 'Report Bugs', 'Verify Bugs', 'Close Bugs'); diff --git a/module/block/lang/fr.php b/module/block/lang/fr.php index 2b662628c3..d0e712551e 100644 --- a/module/block/lang/fr.php +++ b/module/block/lang/fr.php @@ -284,14 +284,11 @@ $lang->block->default['full']['my']['4']['grid'] = 8; $lang->block->default['full']['my']['4']['source'] = 'project'; $lang->block->default['full']['my']['4']['params']['count'] = '20'; -if($config->systemMode == 'new') -{ - $lang->block->default['full']['my']['5']['title'] = 'Personal Contribution'; - $lang->block->default['full']['my']['5']['block'] = 'contribute'; - $lang->block->default['full']['my']['5']['source'] = ''; - $lang->block->default['full']['my']['5']['grid'] = 4; - $lang->block->default['full']['my']['5']['params']['count'] = '20'; -} +$lang->block->default['full']['my']['5']['title'] = 'Personal Contribution'; +$lang->block->default['full']['my']['5']['block'] = 'contribute'; +$lang->block->default['full']['my']['5']['source'] = ''; +$lang->block->default['full']['my']['5']['grid'] = 4; +$lang->block->default['full']['my']['5']['params']['count'] = '20'; $lang->block->default['full']['my']['6']['title'] = 'Recent Projecets'; $lang->block->default['full']['my']['6']['block'] = 'recentproject'; @@ -316,19 +313,16 @@ $lang->block->default['full']['my']['8']['params']['issueCount'] = '20'; $lang->block->default['full']['my']['8']['params']['storyCount'] = '20'; $lang->block->default['full']['my']['8']['params']['meetingCount'] = '20'; -if($config->systemMode == 'new') -{ - $lang->block->default['full']['my']['9']['title'] = 'Project List'; - $lang->block->default['full']['my']['9']['block'] = 'project'; - $lang->block->default['full']['my']['9']['source'] = 'project'; - $lang->block->default['full']['my']['9']['grid'] = 8; -} +$lang->block->default['full']['my']['9']['title'] = 'Project List'; +$lang->block->default['full']['my']['9']['block'] = 'project'; +$lang->block->default['full']['my']['9']['source'] = 'project'; +$lang->block->default['full']['my']['9']['grid'] = 8; $lang->block->default['full']['my']['10']['title'] = 'Project List'; $lang->block->default['full']['my']['10']['block'] = 'project'; $lang->block->default['full']['my']['10']['source'] = 'project'; $lang->block->default['full']['my']['10']['grid'] = 8; -if($config->systemMode == 'classic') +if(!isset($config->projectMode) || $config->projectMode != 'noExecution') { $lang->block->default['full']['my']['10']['block'] = 'project'; $lang->block->default['full']['my']['10']['source'] = 'project'; @@ -359,18 +353,18 @@ $lang->block->availableBlocks->issue = 'My Issues'; $lang->block->availableBlocks->meeting = 'My Meetings'; $lang->block->availableBlocks->feedback = 'My Feedbacks'; -if($config->systemMode == 'new') $lang->block->moduleList['project'] = 'Project'; -$lang->block->moduleList['product'] = $lang->productCommon; -$lang->block->moduleList['execution'] = $lang->execution->common; -$lang->block->moduleList['qa'] = 'Test'; -$lang->block->moduleList['todo'] = 'Todo'; +$lang->block->moduleList['product'] = $lang->productCommon; +$lang->block->moduleList['project'] = 'Project'; +if(!isset($config->projectMode) || $config->projectMode != 'noExecution') $lang->block->moduleList['execution'] = $lang->execution->common; +$lang->block->moduleList['qa'] = 'Test'; +$lang->block->moduleList['todo'] = 'Todo'; $lang->block->modules['project'] = new stdclass(); $lang->block->modules['project']->availableBlocks = new stdclass(); $lang->block->modules['project']->availableBlocks->project = 'Project List'; $lang->block->modules['project']->availableBlocks->recentproject = 'Recent Projects'; $lang->block->modules['project']->availableBlocks->statistic = 'Project Statistic'; -if($config->systemMode == 'new') $lang->block->modules['project']->availableBlocks->projectteam = 'Project Human Input'; +$lang->block->modules['project']->availableBlocks->projectteam = 'Project Human Input'; $lang->block->modules['scrum']['index'] = new stdclass(); $lang->block->modules['scrum']['index']->availableBlocks = new stdclass(); @@ -573,7 +567,7 @@ $lang->block->flowchart['admin'] = array('Administrateur', 'Ajoute Compartimen if($config->systemMode == 'new') $lang->block->flowchart['program'] = array('Program Owner', 'Create Program', 'Link Product', "Create Project", "Budgeting and planning", 'Add Stakeholder'); $lang->block->flowchart['product'] = array($lang->productCommon . ' Owner', 'Ajoute ' . $lang->productCommon . '/Modules', 'Ajoute ' . $lang->executionCommon . 's', 'Ajoute Stories', 'Maintient Plans', 'Crée Releases'); $lang->block->flowchart['project'] = array('Project Manager', 'Add projects and ' . $lang->executionCommon . 's', 'Maintain Teams', 'Link Stories', 'Create Tasks', 'Track'); -if($config->systemMode == 'new') $lang->block->flowchart['project'] = array('Project Manager', 'Add projects and ' . $lang->executionCommon . 's', 'Maintain Teams', 'Link Stories', 'Create Tasks', 'Track'); +$lang->block->flowchart['project'] = array('Project Manager', 'Add projects and ' . $lang->executionCommon . 's', 'Maintain Teams', 'Link Stories', 'Create Tasks', 'Track'); $lang->block->flowchart['dev'] = array('Développeurs', 'Réclament Tâches/Bugs', 'Effectuent Tâches', 'Corrigent Bugs', 'MàJ Statuts', 'Terminent Tâches/Bugs'); $lang->block->flowchart['tester'] = array('Testeurs', 'Rédigent CasTests', 'Jouent CasTests', 'Détectent Bugs', 'Vérifient Corrections', 'Ferment Bugs'); diff --git a/module/common/lang/en.php b/module/common/lang/en.php index 4dac83fa31..15b36e122e 100644 --- a/module/common/lang/en.php +++ b/module/common/lang/en.php @@ -160,7 +160,7 @@ $lang->my->common = 'My'; $lang->program->common = 'Program'; $lang->product->common = 'Product'; $lang->project->common = 'Project'; -$lang->execution->common = $config->systemMode == 'new' ? 'Execution' : $lang->executionCommon; +$lang->execution->common = 'Execution'; $lang->kanban->common = 'Kanban'; $lang->qa->common = 'QA'; $lang->devops->common = 'DevOps'; diff --git a/module/custom/lang/de.php b/module/custom/lang/de.php index 91a0a869b9..f450a8002f 100644 --- a/module/custom/lang/de.php +++ b/module/custom/lang/de.php @@ -56,9 +56,7 @@ $lang->custom->role = 'Role'; $lang->custom->dept = 'Dept'; $lang->custom->code = $lang->code; $lang->custom->setCode = 'Enable or Disable Code'; - -if($config->systemMode == 'new') $lang->custom->execution = 'Execution'; -if($config->systemMode == 'classic' || !$config->systemMode) $lang->custom->execution = 'Execution'; +$lang->custom->execution = 'Execution'; $lang->custom->unitList['efficiency'] = 'Working Hours/'; $lang->custom->unitList['manhour'] = 'Man-hour/'; @@ -89,7 +87,7 @@ $lang->custom->closedExecution = 'Closed ' . $lang->executionCommon; $lang->custom->closedKanban = 'Closed ' . $lang->custom->kanban; $lang->custom->closedProduct = 'Closed ' . $lang->productCommon; -if($config->systemMode == 'new') $lang->custom->object['project'] = 'Project'; +$lang->custom->object['project'] = 'Project'; $lang->custom->object['product'] = $lang->productCommon; $lang->custom->object['execution'] = $lang->custom->execution; $lang->custom->object['kanban'] = $lang->custom->kanban; @@ -104,7 +102,7 @@ $lang->custom->object['block'] = 'ClosedBlock'; $lang->custom->object['flow'] = '流程'; $lang->custom->object['score'] = '积分'; -if($config->systemMode == 'new') $lang->custom->menuOrder[5] = 'project'; +$lang->custom->menuOrder[5] = 'project'; $lang->custom->menuOrder[10] = 'product'; $lang->custom->menuOrder[15] = 'execution'; $lang->custom->menuOrder[20] = 'kanban'; diff --git a/module/custom/lang/en.php b/module/custom/lang/en.php index e7f36d9a8e..6b83545b8e 100644 --- a/module/custom/lang/en.php +++ b/module/custom/lang/en.php @@ -56,9 +56,7 @@ $lang->custom->role = 'Role'; $lang->custom->dept = 'Dept'; $lang->custom->code = $lang->code; $lang->custom->setCode = 'Enable or Disable Code'; - -if($config->systemMode == 'new') $lang->custom->execution = 'Execution'; -if($config->systemMode == 'classic' || !$config->systemMode) $lang->custom->execution = $lang->executionCommon; +$lang->custom->execution = 'Execution'; $lang->custom->unitList['efficiency'] = 'Working Hours/'; $lang->custom->unitList['manhour'] = 'Man-hour/'; @@ -89,7 +87,7 @@ $lang->custom->closedExecution = 'Closed ' . $lang->executionCommon; $lang->custom->closedKanban = 'Closed ' . $lang->custom->kanban; $lang->custom->closedProduct = 'Closed ' . $lang->productCommon; -if($config->systemMode == 'new') $lang->custom->object['project'] = 'Project'; +$lang->custom->object['project'] = 'Project'; $lang->custom->object['product'] = $lang->productCommon; $lang->custom->object['execution'] = $lang->custom->execution; $lang->custom->object['kanban'] = $lang->custom->kanban; @@ -104,7 +102,7 @@ $lang->custom->object['block'] = 'Block'; $lang->custom->object['flow'] = '流程'; $lang->custom->object['score'] = '积分'; -if($config->systemMode == 'new') $lang->custom->menuOrder[5] = 'project'; +$lang->custom->menuOrder[5] = 'project'; $lang->custom->menuOrder[10] = 'product'; $lang->custom->menuOrder[15] = 'execution'; $lang->custom->menuOrder[20] = 'kanban'; diff --git a/module/custom/lang/fr.php b/module/custom/lang/fr.php index b7318ed979..01af67d707 100644 --- a/module/custom/lang/fr.php +++ b/module/custom/lang/fr.php @@ -56,9 +56,7 @@ $lang->custom->role = 'Role'; $lang->custom->dept = 'Dept'; $lang->custom->code = $lang->code; $lang->custom->setCode = 'Activer ou Désactiver le Code'; - -if($config->systemMode == 'new') $lang->custom->execution = 'Execution'; -if($config->systemMode == 'classic' || !$config->systemMode) $lang->custom->execution = 'Execution'; +$lang->custom->execution = 'Execution'; $lang->custom->unitList['efficiency'] = 'Working Hours/'; $lang->custom->unitList['manhour'] = 'Man-hour/'; @@ -89,7 +87,7 @@ $lang->custom->closedExecution = 'Closed ' . $lang->executionCommon; $lang->custom->closedKanban = 'Closed ' . $lang->custom->kanban; $lang->custom->closedProduct = 'Closed ' . $lang->productCommon; -if($config->systemMode == 'new') $lang->custom->object['project'] = 'Project'; +$lang->custom->object['project'] = 'Project'; $lang->custom->object['product'] = $lang->productCommon; $lang->custom->object['execution'] = $lang->custom->execution; $lang->custom->object['kanban'] = $lang->custom->kanban; @@ -104,7 +102,7 @@ $lang->custom->object['block'] = 'Bloc'; $lang->custom->object['flow'] = '流程'; $lang->custom->object['score'] = '积分'; -if($config->systemMode == 'new') $lang->custom->menuOrder[5] = 'project'; +$lang->custom->menuOrder[5] = 'project'; $lang->custom->menuOrder[10] = 'product'; $lang->custom->menuOrder[15] = 'execution'; $lang->custom->menuOrder[20] = 'kanban'; diff --git a/module/custom/lang/zh-cn.php b/module/custom/lang/zh-cn.php index 9df24eb8c7..c378d31979 100644 --- a/module/custom/lang/zh-cn.php +++ b/module/custom/lang/zh-cn.php @@ -87,7 +87,7 @@ $lang->custom->closedExecution = '已关闭' . $lang->custom->execution; $lang->custom->closedKanban = '已关闭' . $lang->custom->kanban; $lang->custom->closedProduct = '已关闭' . $lang->productCommon; -if($config->systemMode == 'new') $lang->custom->object['project'] = '项目'; +$lang->custom->object['project'] = '项目'; $lang->custom->object['product'] = $lang->productCommon; $lang->custom->object['execution'] = $lang->custom->execution; $lang->custom->object['kanban'] = $lang->custom->kanban; @@ -102,7 +102,7 @@ $lang->custom->object['block'] = '区块'; $lang->custom->object['flow'] = '流程'; $lang->custom->object['score'] = '积分'; -if($config->systemMode == 'new') $lang->custom->menuOrder[5] = 'project'; +$lang->custom->menuOrder[5] = 'project'; $lang->custom->menuOrder[10] = 'product'; $lang->custom->menuOrder[15] = 'execution'; $lang->custom->menuOrder[20] = 'kanban'; From 34bfa0e42383a7446064a7887e6859d5ece982ba Mon Sep 17 00:00:00 2001 From: liuruogu Date: Fri, 16 Sep 2022 02:43:34 +0000 Subject: [PATCH 052/712] * Light menu. --- module/common/lang/menu.php | 8 ++++---- module/product/js/browse.js | 4 ++-- module/project/model.php | 12 +++++++----- module/story/js/common.js | 3 ++- 4 files changed, 15 insertions(+), 12 deletions(-) diff --git a/module/common/lang/menu.php b/module/common/lang/menu.php index d5daec84cb..aa20bb80ab 100644 --- a/module/common/lang/menu.php +++ b/module/common/lang/menu.php @@ -202,7 +202,7 @@ if($config->systemMode == 'new') $lang->project->homeMenu->kanban = array('link' $lang->scrum->menu = new stdclass(); $lang->scrum->menu->index = array('link' => "{$lang->dashboard}|project|index|project=%s"); $lang->scrum->menu->execution = array('link' => "$lang->executionCommon|project|execution|status=all&projectID=%s", 'exclude' => 'execution-testreport', 'subModule' => 'task'); -$lang->scrum->menu->storyGroup = array('link' => "{$lang->story->story}|projectstory|story|projectID=%s&product=%s",'class' => 'dropdown dropdown-hover'); +$lang->scrum->menu->storyGroup = array('link' => "{$lang->story->story}|projectstory|story|projectID=%s&productID=%s",'class' => 'dropdown dropdown-hover', 'subModule' => 'projectstory,story'); $lang->scrum->menu->story = array('link' => "$lang->SRCommon|projectstory|story|projectID=%s|story", 'subModule' => 'projectstory,tree', 'alias' => 'story,track'); $lang->scrum->menu->doc = array('link' => "{$lang->doc->common}|doc|tableContents|type=project&objectID=%s", 'subModule' => 'doc'); $lang->scrum->menu->qa = array('link' => "{$lang->qa->common}|project|bug|projectID=%s", 'subModule' => 'testcase,testtask,bug,testreport,execution', 'alias' => 'bug,testtask,testcase,testreport', 'exclude' => 'execution-create,execution-batchedit'); @@ -213,8 +213,8 @@ $lang->scrum->menu->dynamic = array('link' => "$lang->dynamic|project|dynamic $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'); $lang->scrum->menu->storyGroup['dropMenu'] = new stdclass(); -$lang->scrum->menu->storyGroup['dropMenu']->story = array('link' => "{$lang->SRCommon}|projectstory|story|projectID=%s&productID=%s|story", 'subModule' => 'projectstory,tree', 'alias' => 'story,track'); -$lang->scrum->menu->storyGroup['dropMenu']->requirement = array('link' => "{$lang->URCommon}|projectstory|story|projectID=%s&productID=%s&branch=0&browseType=¶m=0&storyType=requirement|requirement", 'subModule' => 'projectstory,tree', 'alias' => 'story,track'); +$lang->scrum->menu->storyGroup['dropMenu']->story = array('link' => "{$lang->SRCommon}|projectstory|story|projectID=%s&productID=%s", 'subModule' => 'projectstory,tree', 'alias' => 'story,track'); +$lang->scrum->menu->storyGroup['dropMenu']->requirement = array('link' => "{$lang->URCommon}|projectstory|story|projectID=%s&productID=%s&branch=0&browseType=¶m=0&storyType=requirement", 'subModule' => 'projectstory,tree', 'alias' => 'story,track'); $lang->scrum->dividerMenu = ',execution,programplan,doc,settings,'; @@ -253,7 +253,7 @@ $lang->scrum->menu->settings['subMenu']->module = array('link' => "{$lang-> $lang->waterfall->menu = new stdclass(); $lang->waterfall->menu->index = array('link' => "$lang->dashboard|project|index|project=%s"); $lang->waterfall->menu->execution = array('link' => "{$lang->stage->common}|project|execution|status=all&projectID=%s", 'subModule' => 'programplan,task'); -$lang->waterfall->menu->storyGroup = array('link' => "{$lang->story->story}|projectstory|story|projectID=%s",'class' => 'dropdown dropdown-hover'); +$lang->waterfall->menu->storyGroup = array('link' => "{$lang->story->story}|projectstory|story|projectID=%s&productID=%s",'class' => 'dropdown dropdown-hover'); $lang->waterfall->menu->story = array('link' => "$lang->SRCommon|projectstory|story|projectID=%s", 'subModule' => 'projectstory,tree', 'alias' => 'story,track'); $lang->waterfall->menu->design = array('link' => "{$lang->design->common}|design|browse|project=%s"); $lang->waterfall->menu->qa = array('link' => "{$lang->qa->common}|project|bug|projectID=%s", 'subModule' => 'testcase,testtask,bug,testreport', 'alias' => 'bug,testtask,testcase,testreport'); diff --git a/module/product/js/browse.js b/module/product/js/browse.js index 47ea4452c4..17e5d9c6c9 100644 --- a/module/product/js/browse.js +++ b/module/product/js/browse.js @@ -7,8 +7,8 @@ $(function() if(rawModule == 'projectstory') { - $('#navbar .nav li[data-id=storyGroup]').addClass('active'); - $('#navbar .nav li[data-id=storyGroup]>a').html($('.active [data-id=' + storyType + ']').text() + ''); + $('#navbar .nav>li[data-id=story]').addClass('active'); + $('#navbar .nav>li[data-id=story]>a').html($('.active [data-id=' + storyType + ']').text() + ''); } $(document).ready(function(){ diff --git a/module/project/model.php b/module/project/model.php index bfa26c65a1..5fd5af46d6 100644 --- a/module/project/model.php +++ b/module/project/model.php @@ -2454,23 +2454,25 @@ class projectModel extends model if(empty($project->hasProduct)) { - unset($lang->project->menu->story); + $lang->project->menu->story = $lang->project->menu->storyGroup; + unset($lang->project->menu->settings['subMenu']->products); + $projectProduct = $this->dao->select('product')->from(TABLE_PROJECTPRODUCT)->where('project')->eq($objectID)->fetch()->product; $lang->project->menu->settings['subMenu']->module['link'] = sprintf($lang->project->menu->settings['subMenu']->module['link'], $projectProduct); if($model !== 'kanbanProject') { - $lang->project->menu->storyGroup['link'] = sprintf($lang->project->menu->storyGroup['link'], '%s', $projectProduct); - $lang->project->menu->storyGroup['dropMenu']->story['link'] = sprintf($lang->project->menu->storyGroup['dropMenu']->story['link'], '%s', $projectProduct); - $lang->project->menu->storyGroup['dropMenu']->requirement['link'] = sprintf($lang->project->menu->storyGroup['dropMenu']->requirement['link'], '%s', $projectProduct); + $lang->project->menu->story['link'] = sprintf($lang->project->menu->storyGroup['link'], '%s', $projectProduct); + $lang->project->menu->story['dropMenu']->story['link'] = sprintf($lang->project->menu->storyGroup['dropMenu']->story['link'], '%s', $projectProduct); + $lang->project->menu->story['dropMenu']->requirement['link'] = sprintf($lang->project->menu->storyGroup['dropMenu']->requirement['link'], '%s', $projectProduct); } } else { unset($lang->project->menu->settings['subMenu']->module); - unset($lang->project->menu->storyGroup); } + unset($lang->project->menu->storyGroup); /* Reset project priv. */ $moduleName = $this->app->rawModule; diff --git a/module/story/js/common.js b/module/story/js/common.js index ce4a67d484..db3973064e 100644 --- a/module/story/js/common.js +++ b/module/story/js/common.js @@ -7,9 +7,10 @@ $(function() if(typeof(execution) != 'undefined') rawModule = 'projectstory'; if(['project', 'projectstory'].indexOf(rawModule) === -1 && app != 'qa') { - if(app != 'my') $('#navbar .nav li').removeClass('active'); + if(app != 'my') $('#navbar .nav li[data-id!=story]').removeClass('active'); $("#navbar .nav li[data-id=" + storyType + ']').addClass('active'); $('#subNavbar li[data-id="' + storyType + '"]').addClass('active'); + $('#navbar .nav>li[data-id=story]>a').html($('.active [data-id=' + storyType + ']').text() + ''); } $('#saveButton').on('click', function() From 788741caf83e5af687356357d70a86608ba62515 Mon Sep 17 00:00:00 2001 From: liuruogu Date: Fri, 16 Sep 2022 02:45:28 +0000 Subject: [PATCH 053/712] * Light menu. --- 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 aa20bb80ab..383c73ab33 100644 --- a/module/common/lang/menu.php +++ b/module/common/lang/menu.php @@ -202,7 +202,7 @@ if($config->systemMode == 'new') $lang->project->homeMenu->kanban = array('link' $lang->scrum->menu = new stdclass(); $lang->scrum->menu->index = array('link' => "{$lang->dashboard}|project|index|project=%s"); $lang->scrum->menu->execution = array('link' => "$lang->executionCommon|project|execution|status=all&projectID=%s", 'exclude' => 'execution-testreport', 'subModule' => 'task'); -$lang->scrum->menu->storyGroup = array('link' => "{$lang->story->story}|projectstory|story|projectID=%s&productID=%s",'class' => 'dropdown dropdown-hover', 'subModule' => 'projectstory,story'); +$lang->scrum->menu->storyGroup = array('link' => "{$lang->story->story}|projectstory|story|projectID=%s&productID=%s",'class' => 'dropdown dropdown-hover'); $lang->scrum->menu->story = array('link' => "$lang->SRCommon|projectstory|story|projectID=%s|story", 'subModule' => 'projectstory,tree', 'alias' => 'story,track'); $lang->scrum->menu->doc = array('link' => "{$lang->doc->common}|doc|tableContents|type=project&objectID=%s", 'subModule' => 'doc'); $lang->scrum->menu->qa = array('link' => "{$lang->qa->common}|project|bug|projectID=%s", 'subModule' => 'testcase,testtask,bug,testreport,execution', 'alias' => 'bug,testtask,testcase,testreport', 'exclude' => 'execution-create,execution-batchedit'); From 8319c90e58c8d39854f3bef2ed6dcfd2f21c6c83 Mon Sep 17 00:00:00 2001 From: liuruogu Date: Fri, 16 Sep 2022 02:52:20 +0000 Subject: [PATCH 054/712] * Modify menu of project. --- module/project/model.php | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/module/project/model.php b/module/project/model.php index 5fd5af46d6..03681bd814 100644 --- a/module/project/model.php +++ b/module/project/model.php @@ -2454,19 +2454,18 @@ class projectModel extends model if(empty($project->hasProduct)) { - $lang->project->menu->story = $lang->project->menu->storyGroup; - - unset($lang->project->menu->settings['subMenu']->products); - $projectProduct = $this->dao->select('product')->from(TABLE_PROJECTPRODUCT)->where('project')->eq($objectID)->fetch()->product; $lang->project->menu->settings['subMenu']->module['link'] = sprintf($lang->project->menu->settings['subMenu']->module['link'], $projectProduct); - if($model !== 'kanbanProject') + if($project->model !== 'kanban') { + $lang->project->menu->story = $lang->project->menu->storyGroup; $lang->project->menu->story['link'] = sprintf($lang->project->menu->storyGroup['link'], '%s', $projectProduct); $lang->project->menu->story['dropMenu']->story['link'] = sprintf($lang->project->menu->storyGroup['dropMenu']->story['link'], '%s', $projectProduct); $lang->project->menu->story['dropMenu']->requirement['link'] = sprintf($lang->project->menu->storyGroup['dropMenu']->requirement['link'], '%s', $projectProduct); } + + unset($lang->project->menu->settings['subMenu']->products); } else { From f602db8d9d176243f862958ff71dbcb1d3fa1f3c Mon Sep 17 00:00:00 2001 From: liuruogu Date: Fri, 16 Sep 2022 03:06:31 +0000 Subject: [PATCH 055/712] * Finish task #69013. --- module/product/js/browse.js | 2 +- module/product/view/browse.html.php | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/module/product/js/browse.js b/module/product/js/browse.js index 17e5d9c6c9..afe5bfdc07 100644 --- a/module/product/js/browse.js +++ b/module/product/js/browse.js @@ -5,7 +5,7 @@ $(function() $('#navbar .nav li').removeClass('active'); $("#navbar .nav li[data-id=" + storyType + ']').addClass('active'); - if(rawModule == 'projectstory') + if(rawModule == 'projectstory' && !projectHasProduct) { $('#navbar .nav>li[data-id=story]').addClass('active'); $('#navbar .nav>li[data-id=story]>a').html($('.active [data-id=' + storyType + ']').text() + ''); diff --git a/module/product/view/browse.html.php b/module/product/view/browse.html.php index 0e88c43143..9dbc50dfa5 100644 --- a/module/product/view/browse.html.php +++ b/module/product/view/browse.html.php @@ -25,6 +25,7 @@ body {margin-bottom: 25px;} app->rawModule);?> app->tab == 'product' ? $product->type : '');?> +hasProduct));?> product->browse->unfoldStories) ? json_decode($config->product->browse->unfoldStories, true) : array(); $unfoldStories = zget($unfoldStories, $productID, array()); From b0c3bccc9d424d0d5cf715d088f206dfe9904337 Mon Sep 17 00:00:00 2001 From: lanzongjun Date: Fri, 16 Sep 2022 11:07:26 +0800 Subject: [PATCH 056/712] * task #69250 --- module/custom/control.php | 2 +- module/custom/view/mode.html.php | 4 +- module/install/lang/de.php | 2 +- module/install/lang/en.php | 2 +- module/install/lang/fr.php | 2 +- module/install/lang/zh-cn.php | 2 +- module/project/model.php | 2 +- module/upgrade/control.php | 60 ++++++++++++++++++++++++-- module/upgrade/css/to18guide.css | 9 ++-- module/upgrade/lang/de.php | 1 + module/upgrade/lang/en.php | 1 + module/upgrade/lang/fr.php | 1 + module/upgrade/lang/zh-cn.php | 7 +-- module/upgrade/model.php | 45 ++++++++++++++++++- module/upgrade/view/to18guide.html.php | 8 ++-- 15 files changed, 125 insertions(+), 23 deletions(-) diff --git a/module/custom/control.php b/module/custom/control.php index 5f46e7eb59..930e8222c8 100644 --- a/module/custom/control.php +++ b/module/custom/control.php @@ -627,7 +627,7 @@ class custom extends control */ public function mode() { - $mode = zget($this->config->global, 'mode', 'lite'); + $mode = zget($this->config->global, 'mode', 'lean'); if($this->post->mode and $this->post->mode != $mode) // If mode value change. { $mode = fixer::input('post')->get('mode'); diff --git a/module/custom/view/mode.html.php b/module/custom/view/mode.html.php index 554321244b..f2998029b6 100644 --- a/module/custom/view/mode.html.php +++ b/module/custom/view/mode.html.php @@ -24,8 +24,8 @@

    - - + +

    upgrade->selectedModeTips['new'];?>

    @@ -82,9 +82,9 @@ - - - + + + From 196f638737e65276dd9d760413c19fa34585ab41 Mon Sep 17 00:00:00 2001 From: daitingting Date: Fri, 16 Sep 2022 03:09:55 +0000 Subject: [PATCH 057/712] * Finish task #69245. --- module/custom/control.php | 15 ++++++--------- module/custom/view/mode.html.php | 8 ++------ 2 files changed, 8 insertions(+), 15 deletions(-) diff --git a/module/custom/control.php b/module/custom/control.php index a770c7b2e6..0941c023bd 100644 --- a/module/custom/control.php +++ b/module/custom/control.php @@ -630,12 +630,10 @@ class custom extends control $mode = zget($this->config->global, 'mode', 'classic'); if($this->post->mode and $this->post->mode != $mode) // If mode value change. { - $mode = fixer::input('post')->get('mode'); - $this->loadModel('setting')->setItem('system.common.global.mode', $mode); - $this->setting->setItem('system.common.global.changedMode', 'yes'); + $this->loadModel('setting')->setItem('system.common.global.mode', $this->post->mode); $sprintConcept = isset($this->config->custom->sprintConcept) ? $this->config->custom->sprintConcept : '0'; - if($mode == 'new') + if($this->post->mode == 'new') { if($sprintConcept == 2) $this->setting->setItem('system.custom.sprintConcept', 1); if($sprintConcept == 1) $this->setting->setItem('system.custom.sprintConcept', 0); @@ -658,11 +656,10 @@ class custom extends control $this->app->loadLang('upgrade'); - $this->view->title = $this->lang->custom->mode; - $this->view->position[] = $this->lang->custom->common; - $this->view->position[] = $this->view->title; - $this->view->mode = $mode; - $this->view->changedMode = zget($this->config->global, 'changedMode', 'no'); + $this->view->title = $this->lang->custom->mode; + $this->view->position[] = $this->lang->custom->common; + $this->view->position[] = $this->view->title; + $this->view->mode = $mode; $this->display(); } diff --git a/module/custom/view/mode.html.php b/module/custom/view/mode.html.php index 2d480ed65c..89a21fc9dd 100644 --- a/module/custom/view/mode.html.php +++ b/module/custom/view/mode.html.php @@ -22,18 +22,14 @@ From b8d30bed93e4b49f9f59068aae929f9c6f0ea6f6 Mon Sep 17 00:00:00 2001 From: liuruogu Date: Fri, 16 Sep 2022 03:21:31 +0000 Subject: [PATCH 058/712] * Fix bug for lang. --- module/common/lang/en.php | 2 +- module/common/lang/fr.php | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/module/common/lang/en.php b/module/common/lang/en.php index c72a009bf2..652ac6f6bf 100644 --- a/module/common/lang/en.php +++ b/module/common/lang/en.php @@ -170,7 +170,7 @@ $lang->report->common = 'Statistic'; $lang->system->common = 'System'; $lang->admin->common = 'Admin'; $lang->story->common = 'Story'; -$lang->story->story = 'Story' +$lang->story->story = 'Story'; $lang->task->common = 'Task'; $lang->bug->common = 'Bug'; $lang->testcase->common = 'Testcase'; diff --git a/module/common/lang/fr.php b/module/common/lang/fr.php index 5c94767774..7b743c7b2a 100644 --- a/module/common/lang/fr.php +++ b/module/common/lang/fr.php @@ -170,7 +170,7 @@ $lang->report->common = 'Statistic'; $lang->system->common = 'System'; $lang->admin->common = 'Admin'; $lang->story->common = 'Story'; -$lang->story->story = 'Story' +$lang->story->story = 'Story'; $lang->task->common = 'Task'; $lang->bug->common = 'Bug'; $lang->testcase->common = 'Testcase'; From 8248051b393ed9f9b2e97453903d8bc075edac63 Mon Sep 17 00:00:00 2001 From: liugang Date: Fri, 16 Sep 2022 11:55:52 +0800 Subject: [PATCH 059/712] * Finish task #68997. --- module/product/control.php | 23 +++++++++++++---------- module/product/view/browse.html.php | 7 ++++--- 2 files changed, 17 insertions(+), 13 deletions(-) diff --git a/module/product/control.php b/module/product/control.php index facc091eb8..0c63fd4b2b 100644 --- a/module/product/control.php +++ b/module/product/control.php @@ -204,8 +204,10 @@ class product extends control $branch = $this->cookie->treeBranch; } + $isProjectStory = $this->app->rawModule == 'projectstory'; + /* If in project story and not chose product, get project story mdoules. */ - if($this->app->rawModule == 'projectstory' and empty($productID)) + if($isProjectStory and empty($productID)) { $moduleTree = $this->tree->getProjectStoryTreeMenu($projectID, 0, array('treeModel', $createModuleLink)); } @@ -234,7 +236,7 @@ class product extends control $showBranch = $this->loadModel('branch')->showBranch($productID); /* Get stories. */ - if($this->app->rawModule == 'projectstory') + if($isProjectStory) { $showBranch = $this->loadModel('branch')->showBranch($productID, 0, $projectID); @@ -267,7 +269,7 @@ class product extends control } /* Process the sql, get the conditon partion, save it to session. */ - $this->loadModel('common')->saveQueryCondition($queryCondition, 'story', ($browseType != 'bysearch' and $browseType != 'reviewbyme' and $this->app->rawModule != 'projectstory')); + $this->loadModel('common')->saveQueryCondition($queryCondition, 'story', ($browseType != 'bysearch' and $browseType != 'reviewbyme' and !$isProjectStory)); if(!empty($stories)) $stories = $this->story->mergeReviewer($stories); @@ -296,21 +298,22 @@ class product extends control } $project = $this->loadModel('project')->getByID($projectID); - if(empty($project->hasProduct)) unset($this->config->product->search['fields']['product']); + if(empty($project->hasProduct)) + { + if($isProjectStory && !$productID && !empty($this->products)) $productID = key($this->products); // If toggle a project by the #swapper component on the story page of the projectstory module, the $productID may be empty. Make sure it has value. + unset($this->config->product->search['fields']['product']); // The none-product project don't need display the product in the search form. + } /* Build search form. */ - $rawModule = $this->app->rawModule; - $rawMethod = $this->app->rawMethod; - - $params = $rawModule == 'projectstory' ? "projectID=$projectID&" : ''; - $actionURL = $this->createLink($rawModule, $rawMethod, $params . "productID=$productID&branch=$branch&browseType=bySearch&queryID=myQueryID&storyType=$storyType"); + $params = $isProjectStory ? "projectID=$projectID&" : ''; + $actionURL = $this->createLink($this->app->rawModule, $this->app->rawMethod, $params . "productID=$productID&branch=$branch&browseType=bySearch&queryID=myQueryID&storyType=$storyType"); $this->config->product->search['onMenuBar'] = 'yes'; $this->product->buildSearchForm($productID, $this->products, $queryID, $actionURL, $branch, $projectID); $showModule = !empty($this->config->datatable->productBrowse->showModule) ? $this->config->datatable->productBrowse->showModule : ''; - $productName = ($this->app->rawModule == 'projectstory' and empty($productID)) ? $this->lang->product->all : $this->products[$productID]; + $productName = ($isProjectStory and empty($productID)) ? $this->lang->product->all : $this->products[$productID]; /* Assign. */ $this->view->title = $productName . $this->lang->colon . $this->lang->product->browse; diff --git a/module/product/view/browse.html.php b/module/product/view/browse.html.php index 9dbc50dfa5..d1a7ce64ed 100644 --- a/module/product/view/browse.html.php +++ b/module/product/view/browse.html.php @@ -192,8 +192,8 @@ $projectIDParam = $isProjectStory ? "projectID=$projectID&" : ''; - - From f1285908b1c1854df0d90ee5e31fd75edf21ff0d Mon Sep 17 00:00:00 2001 From: lanzongjun Date: Fri, 16 Sep 2022 13:03:02 +0800 Subject: [PATCH 060/712] * task #69250 --- module/upgrade/view/to18guide.html.php | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/module/upgrade/view/to18guide.html.php b/module/upgrade/view/to18guide.html.php index e9859cf6ff..bebb5de6d5 100644 --- a/module/upgrade/view/to18guide.html.php +++ b/module/upgrade/view/to18guide.html.php @@ -21,15 +21,15 @@ - + - - + + @@ -93,9 +93,9 @@
    lang->upgrade->selectUsage;?>lang->upgrade->useLean;?>lang->upgrade->useNew;?>lang->upgrade->selectUsage;?>
    lang->upgrade->remark;?>
    custom->mode;?> -

    - - - -

    +

    upgrade->to15Mode, $mode);?>

    upgrade->selectedModeTips['new'];?>

    - custom->switch);?> + custom->switch);?>
    lang->upgrade->mode;?>lang->upgrade->to18Mode['lite'];?>lang->upgrade->to18Mode['lean'];?> lang->upgrade->to18Mode['new'];?>
    lang->upgrade->mode;?>lang->upgrade->leanUsage;?>lang->upgrade->newUsage;?>lang->upgrade->leanUsage;?>lang->upgrade->newUsage;?>
    lang->upgrade->program;?>
    -
    -
    - +
    +
    +
    - \ No newline at end of file + From 8d0e5b978c7c2e5d26fa720db4dacc9960886003 Mon Sep 17 00:00:00 2001 From: lanzongjun Date: Fri, 16 Sep 2022 13:13:24 +0800 Subject: [PATCH 061/712] * task #69250 --- module/custom/lang/zh-cn.php | 1 + module/install/lang/de.php | 2 +- module/install/lang/en.php | 2 +- module/install/lang/fr.php | 2 +- module/install/lang/zh-cn.php | 2 +- module/upgrade/js/to18guide.js | 6 ++++-- module/upgrade/model.php | 3 ++- 7 files changed, 11 insertions(+), 7 deletions(-) diff --git a/module/custom/lang/zh-cn.php b/module/custom/lang/zh-cn.php index 4d9a67aeeb..24403c4852 100644 --- a/module/custom/lang/zh-cn.php +++ b/module/custom/lang/zh-cn.php @@ -56,6 +56,7 @@ $lang->custom->role = '职位'; $lang->custom->dept = '部门'; $lang->custom->code = $lang->code; $lang->custom->setCode = '是否启用代号'; +$lang->custom->execution = '1111'; if($config->systemMode == 'new') $lang->custom->execution = '执行'; if($config->systemMode == 'classic' || !$config->systemMode) $lang->custom->execution = $lang->executionCommon; diff --git a/module/install/lang/de.php b/module/install/lang/de.php index 40cbfc8f97..352fb7ac01 100644 --- a/module/install/lang/de.php +++ b/module/install/lang/de.php @@ -47,7 +47,7 @@ $lang->install->guideVideo = 'https://dl.cnezsoft.com/vedio/zentaoconce $lang->install->introductionContent = <<

    Dear users,

    -

    Welcome to ZenTao project management system. ZenTao has two managment modes in version 15.0 and up. One is the lite management mode, providing two core features, Product and Project; the other is a new project management mode, with Program and Execution added. The following is an introduction to the new mode:

    +

    Welcome to ZenTao project management system. ZenTao has two managment modes in version 15.0 and up. One is the classic management mode, providing two core features, Product and Project; the other is a new project management mode, with Program and Execution added. The following is an introduction to the new mode:

    Program

    Program is used to manage a group of products and projects, and the company executives or PMO can use it for strategic planning.

    diff --git a/module/install/lang/en.php b/module/install/lang/en.php index a328c9a4f2..3333c0cebe 100644 --- a/module/install/lang/en.php +++ b/module/install/lang/en.php @@ -47,7 +47,7 @@ $lang->install->guideVideo = 'https://dl.cnezsoft.com/vedio/zentaoconce $lang->install->introductionContent = <<

    Dear users,

    -

    Welcome to ZenTao project management system. ZenTao has two managment modes in version 15.0 and up. One is the lite management mode, providing two core features, Product and Project; the other is a new project management mode, with Program and Execution added. The following is an introduction to the new mode:

    +

    Welcome to ZenTao project management system. ZenTao has two managment modes in version 15.0 and up. One is the classic management mode, providing two core features, Product and Project; the other is a new project management mode, with Program and Execution added. The following is an introduction to the new mode:

    Program

    Program is used to manage a group of products and projects, and the company executives or PMO can use it for strategic planning.

    diff --git a/module/install/lang/fr.php b/module/install/lang/fr.php index 9c2c6bb6fa..0391c6ddf5 100644 --- a/module/install/lang/fr.php +++ b/module/install/lang/fr.php @@ -47,7 +47,7 @@ $lang->install->guideVideo = 'https://dl.cnezsoft.com/vedio/zentaoconce $lang->install->introductionContent = <<

    Dear users,

    -

    Welcome to ZenTao project management system. ZenTao has two managment modes in version 15.0 and up. One is the lite management mode, providing two core features, Product and Project; the other is a new project management mode, with Program and Execution added. The following is an introduction to the new mode:

    +

    Welcome to ZenTao project management system. ZenTao has two managment modes in version 15.0 and up. One is the classic management mode, providing two core features, Product and Project; the other is a new project management mode, with Program and Execution added. The following is an introduction to the new mode:

    Program

    Program is used to manage a group of products and projects, and the company executives or PMO can use it for strategic planning.

    diff --git a/module/install/lang/zh-cn.php b/module/install/lang/zh-cn.php index 57624113eb..5b648ee89e 100644 --- a/module/install/lang/zh-cn.php +++ b/module/install/lang/zh-cn.php @@ -47,7 +47,7 @@ $lang->install->guideVideo = 'https://dl.cnezsoft.com/vedio/program0716 $lang->install->introductionContent = <<

    尊敬的用户您好,欢迎您使用禅道项目管理系统。

    -

    禅道自15系列开始提供了两种使用模式,一种是迅捷模式,功能较为精简,主要提供了产品和项目两个核心功能;另一种是综合模式,增加了项目集和执行的概念。下面是综合模式的介绍:

    +

    禅道自15系列开始提供了两种使用模式,一种是经典管理模式,功能较为精简,主要提供了产品和项目两个核心功能;另一种是综合模式,增加了项目集和执行的概念。下面是全新项目集管理模式的介绍:

    项目集

    项目集用来管理一组相关的产品和项目,公司高层或者PMO可以用来做战略规划。

    diff --git a/module/upgrade/js/to18guide.js b/module/upgrade/js/to18guide.js index 4f141b1662..e6bb22c6cc 100644 --- a/module/upgrade/js/to18guide.js +++ b/module/upgrade/js/to18guide.js @@ -1,11 +1,13 @@ $(function() { - $("#useLean").click(function(){ + $("#useLean").click(function() + { $('#mode').val('lean'); $('form').submit(); }) - $("#useNew").click(function(){ + $("#useNew").click(function() + { $('#mode').val('new'); $('form').submit(); }) diff --git a/module/upgrade/model.php b/module/upgrade/model.php index c1aa63d386..b8d12ae2e6 100644 --- a/module/upgrade/model.php +++ b/module/upgrade/model.php @@ -1009,7 +1009,7 @@ class upgradeModel extends model case '17_0_beta2': $confirmContent .= file_get_contents($this->getUpgradeFile('17.0.beta2')); case '17_0': $confirmContent .= file_get_contents($this->getUpgradeFile('17.0')); case '17_1': - $confirmContent .= file_get_contents($this->getUpgradeFile('17.1')); + $confirmContent .= file_get_contents($this->getUpgradeFile('17.1')); $xuanxuanSql = $this->app->getAppRoot() . 'db' . DS . 'upgradexuanxuan5.6.sql'; $confirmContent .= file_get_contents($xuanxuanSql); case '17_2': @@ -7532,6 +7532,7 @@ class upgradeModel extends model /** * Relation default program. * + * @param int $programID * @access public * @return bool */ From 14dd9807e9d1ecb7c312a3f2110a46cf8134d14d Mon Sep 17 00:00:00 2001 From: tanghucheng Date: Fri, 16 Sep 2022 13:13:26 +0800 Subject: [PATCH 062/712] * Finish task #69006. --- module/common/lang/de.php | 2 +- module/common/lang/en.php | 2 +- module/common/lang/fr.php | 2 +- module/common/lang/menu.php | 4 ++-- module/common/lang/zh-cn.php | 2 +- module/execution/control.php | 15 ++++++++++++--- module/execution/js/create.js | 2 +- module/execution/view/create.html.php | 7 +++++-- module/execution/view/edit.html.php | 7 +++++-- module/execution/view/view.html.php | 4 +++- 10 files changed, 32 insertions(+), 15 deletions(-) diff --git a/module/common/lang/de.php b/module/common/lang/de.php index 6518dd9646..2d3f67c397 100644 --- a/module/common/lang/de.php +++ b/module/common/lang/de.php @@ -156,6 +156,7 @@ $lang->pri = 'Priority'; $lang->delayed = 'Delayed'; $lang->common->common = 'Standard Module'; +$lang->common->story = 'Story' $lang->my->common = 'My'; $lang->program->common = 'Program'; $lang->product->common = 'Product'; @@ -170,7 +171,6 @@ $lang->report->common = 'Statistic'; $lang->system->common = 'System'; $lang->admin->common = 'Admin'; $lang->story->common = 'Story'; -$lang->story->story = 'Story' $lang->task->common = 'Task'; $lang->bug->common = 'Bug'; $lang->testcase->common = 'Testcase'; diff --git a/module/common/lang/en.php b/module/common/lang/en.php index c72a009bf2..ebc4c2cd37 100644 --- a/module/common/lang/en.php +++ b/module/common/lang/en.php @@ -156,6 +156,7 @@ $lang->pri = 'Priority'; $lang->delayed = 'Delayed'; $lang->common->common = 'Common Module'; +$lang->common->story = 'Story' $lang->my->common = 'My'; $lang->program->common = 'Program'; $lang->product->common = 'Product'; @@ -170,7 +171,6 @@ $lang->report->common = 'Statistic'; $lang->system->common = 'System'; $lang->admin->common = 'Admin'; $lang->story->common = 'Story'; -$lang->story->story = 'Story' $lang->task->common = 'Task'; $lang->bug->common = 'Bug'; $lang->testcase->common = 'Testcase'; diff --git a/module/common/lang/fr.php b/module/common/lang/fr.php index 5c94767774..c15320b1c9 100644 --- a/module/common/lang/fr.php +++ b/module/common/lang/fr.php @@ -156,6 +156,7 @@ $lang->pri = 'Priority'; $lang->delayed = 'Delayed'; $lang->common->common = 'Module Commun'; +$lang->common->story = 'Story' $lang->my->common = 'My'; $lang->program->common = 'Program'; $lang->product->common = 'Product'; @@ -170,7 +171,6 @@ $lang->report->common = 'Statistic'; $lang->system->common = 'System'; $lang->admin->common = 'Admin'; $lang->story->common = 'Story'; -$lang->story->story = 'Story' $lang->task->common = 'Task'; $lang->bug->common = 'Bug'; $lang->testcase->common = 'Testcase'; diff --git a/module/common/lang/menu.php b/module/common/lang/menu.php index d5daec84cb..c383464195 100644 --- a/module/common/lang/menu.php +++ b/module/common/lang/menu.php @@ -202,7 +202,7 @@ if($config->systemMode == 'new') $lang->project->homeMenu->kanban = array('link' $lang->scrum->menu = new stdclass(); $lang->scrum->menu->index = array('link' => "{$lang->dashboard}|project|index|project=%s"); $lang->scrum->menu->execution = array('link' => "$lang->executionCommon|project|execution|status=all&projectID=%s", 'exclude' => 'execution-testreport', 'subModule' => 'task'); -$lang->scrum->menu->storyGroup = array('link' => "{$lang->story->story}|projectstory|story|projectID=%s&product=%s",'class' => 'dropdown dropdown-hover'); +$lang->scrum->menu->storyGroup = array('link' => "{$lang->common->story}|projectstory|story|projectID=%s&product=%s",'class' => 'dropdown dropdown-hover'); $lang->scrum->menu->story = array('link' => "$lang->SRCommon|projectstory|story|projectID=%s|story", 'subModule' => 'projectstory,tree', 'alias' => 'story,track'); $lang->scrum->menu->doc = array('link' => "{$lang->doc->common}|doc|tableContents|type=project&objectID=%s", 'subModule' => 'doc'); $lang->scrum->menu->qa = array('link' => "{$lang->qa->common}|project|bug|projectID=%s", 'subModule' => 'testcase,testtask,bug,testreport,execution', 'alias' => 'bug,testtask,testcase,testreport', 'exclude' => 'execution-create,execution-batchedit'); @@ -253,7 +253,7 @@ $lang->scrum->menu->settings['subMenu']->module = array('link' => "{$lang-> $lang->waterfall->menu = new stdclass(); $lang->waterfall->menu->index = array('link' => "$lang->dashboard|project|index|project=%s"); $lang->waterfall->menu->execution = array('link' => "{$lang->stage->common}|project|execution|status=all&projectID=%s", 'subModule' => 'programplan,task'); -$lang->waterfall->menu->storyGroup = array('link' => "{$lang->story->story}|projectstory|story|projectID=%s",'class' => 'dropdown dropdown-hover'); +$lang->waterfall->menu->storyGroup = array('link' => "{$lang->common->story}|projectstory|story|projectID=%s",'class' => 'dropdown dropdown-hover'); $lang->waterfall->menu->story = array('link' => "$lang->SRCommon|projectstory|story|projectID=%s", 'subModule' => 'projectstory,tree', 'alias' => 'story,track'); $lang->waterfall->menu->design = array('link' => "{$lang->design->common}|design|browse|project=%s"); $lang->waterfall->menu->qa = array('link' => "{$lang->qa->common}|project|bug|projectID=%s", 'subModule' => 'testcase,testtask,bug,testreport', 'alias' => 'bug,testtask,testcase,testreport'); diff --git a/module/common/lang/zh-cn.php b/module/common/lang/zh-cn.php index 9ebbc58379..36cdc57167 100644 --- a/module/common/lang/zh-cn.php +++ b/module/common/lang/zh-cn.php @@ -156,6 +156,7 @@ $lang->pri = '优先级'; $lang->delayed = '已延期'; $lang->common->common = '公有模块'; +$lang->common->story = '需求'; $lang->my->common = '地盘'; $lang->program->common = '项目集'; $lang->product->common = '产品'; @@ -170,7 +171,6 @@ $lang->report->common = '统计'; $lang->system->common = '组织'; $lang->admin->common = '后台'; $lang->story->common = $lang->SRCommon; -$lang->story->story = '需求'; $lang->task->common = '任务'; $lang->bug->common = 'Bug'; $lang->testcase->common = '用例'; diff --git a/module/execution/control.php b/module/execution/control.php index 140d8f0b7e..0576110f86 100644 --- a/module/execution/control.php +++ b/module/execution/control.php @@ -850,7 +850,10 @@ class execution extends control $projectID = $execution->project; $project = $this->loadModel('project')->getByID($projectID); - if(empty($project->hasProduct)) unset($this->config->product->search['fields']['product']); + + if(empty($project->hasProduct)) unset($this->config->product->search['fields']['product']); + if(empty($project->hasProduct) and $project->model != 'scrum') unset($this->config->product->search['fields']['plan']); + $this->execution->buildStorySearchForm($products, $branchGroups, $modules, $queryID, $actionURL, 'executionStory', $executionID); /* Header and position. */ @@ -1659,7 +1662,8 @@ class execution extends control $this->execution->updateProducts($executionID); if(dao::isError()) return $this->send(array('result' => 'fail', 'message' => dao::getError())); - $this->loadModel('action')->create($this->objectType, $executionID, 'opened', '', join(',', $_POST['products'])); + $comment = $project->hasProduct ? join(',', $_POST['products']) : ''; + $this->loadModel('action')->create($this->objectType, $executionID, 'opened', '', $comment); $message = $this->executeHooks($executionID); if($message) $this->lang->saveSuccess = $message; @@ -1726,12 +1730,15 @@ class execution extends control $copyProjects = $this->loadModel('project')->getPairsByProgram(isset($project->parent) ? $project->parent : '', 'noclosed', '', 'order_asc', '', isset($project->model) ? $project->model : ''); $copyProjectID = ($projectID == 0) ? key($copyProjects) : $projectID; + if(!empty($project->hasProduct)) $allProducts = array(0 => '') + $allProducts; + if(isset($project->hasProduct) and $project->hasProduct == 0) $this->lang->execution->PO = $this->lang->common->story . $this->lang->execution->owner; + $this->view->title = (($this->app->tab == 'execution') and ($this->config->systemMode == 'new')) ? $this->lang->execution->createExec : $this->lang->execution->create; $this->view->position[] = $this->view->title; $this->view->gobackLink = (isset($output['from']) and $output['from'] == 'global') ? $this->createLink('execution', 'all') : ''; $this->view->executions = array('' => '') + $this->execution->getList($projectID); $this->view->groups = $this->loadModel('group')->getPairs(); - $this->view->allProducts = array(0 => '') + $allProducts; + $this->view->allProducts = $allProducts; $this->view->acl = $acl; $this->view->plan = $plan; $this->view->name = $name; @@ -1923,6 +1930,7 @@ class execution extends control if(!empty($this->config->user->moreLink)) $this->config->moreLinks["RD"] = $this->config->user->moreLink; $project = $this->project->getById($execution->project); + if(!$project->hasProduct) $this->lang->execution->PO = $this->lang->common->story . $this->lang->execution->owner; $this->view->title = $title; $this->view->position = $position; @@ -2349,6 +2357,7 @@ class execution extends control $pager = new pager(0, 30, 1); $this->executeHooks($executionID); + if(!$execution->projectInfo->hasProduct) $this->lang->execution->PO = $this->lang->common->story . $this->lang->execution->owner; $this->view->title = $this->lang->execution->view; $this->view->position[] = html::a($this->createLink('execution', 'browse', "executionID=$executionID"), $execution->name); diff --git a/module/execution/js/create.js b/module/execution/js/create.js index ecf65d9fc2..32fe77810a 100644 --- a/module/execution/js/create.js +++ b/module/execution/js/create.js @@ -42,7 +42,7 @@ $(function() var adjustMainCol = function() { - if(!isStage) $('.main-form .col-main').css('width', Math.max(250, Math.floor(($('#productsBox').outerWidth() - 50)/3) + 10)); + $('.main-form .col-main').css('width', Math.max(250, Math.floor(($('#tplBoxWrapper').parent('td').outerWidth() - 50)/3) + 10)); }; adjustMainCol(); $(window).on('resize', adjustMainCol); diff --git a/module/execution/view/create.html.php b/module/execution/view/create.html.php index 4da8c28962..cb796adfa2 100644 --- a/module/execution/view/create.html.php +++ b/module/execution/view/create.html.php @@ -132,7 +132,9 @@ printExtendFields('', 'table', 'columns=3');?> - + + hasProduct)) $hidden = ''?> + execution->manageProducts;?>
    @@ -159,7 +161,8 @@
    - + model) and $project->model == 'scrum') $hidden = '';?> + execution->linkPlan;?>
    diff --git a/module/execution/view/edit.html.php b/module/execution/view/edit.html.php index 5f98f51b32..f9fe3468fe 100644 --- a/module/execution/view/edit.html.php +++ b/module/execution/view/edit.html.php @@ -139,7 +139,9 @@ attribute, array('request', 'design', 'review'))): ?> - + + hasProduct)) $hidden = ''?> + execution->manageProducts;?> grade == 2 ? "readonly='readonly'" : '';?> @@ -174,7 +176,8 @@
    - + model) and $project->model == 'scrum') $hidden = '';?> + execution->linkPlan;?>
    diff --git a/module/execution/view/view.html.php b/module/execution/view/view.html.php index 58e6974ed6..405d479d7a 100644 --- a/module/execution/view/view.html.php +++ b/module/execution/view/view.html.php @@ -327,7 +327,7 @@
    - attribute, array('request', 'design', 'review'))): ?> + attribute, array('request', 'design', 'review')) and $execution->projectInfo->hasProduct): ?>
    execution->manageProducts;?> @@ -347,6 +347,7 @@
    + projectInfo->hasProduct or $execution->projectInfo->model == 'scrum'):?>
    execution->linkPlan;?>
    @@ -367,6 +368,7 @@
    +
    execution->lblStats;?>
    From 62fec75de1f43ad3a8cbbaa2a95bb3583da50e5b Mon Sep 17 00:00:00 2001 From: lanzongjun Date: Fri, 16 Sep 2022 13:15:09 +0800 Subject: [PATCH 063/712] * task #69250 --- module/custom/lang/zh-cn.php | 1 - module/install/lang/zh-cn.php | 2 +- 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/module/custom/lang/zh-cn.php b/module/custom/lang/zh-cn.php index 24403c4852..4d9a67aeeb 100644 --- a/module/custom/lang/zh-cn.php +++ b/module/custom/lang/zh-cn.php @@ -56,7 +56,6 @@ $lang->custom->role = '职位'; $lang->custom->dept = '部门'; $lang->custom->code = $lang->code; $lang->custom->setCode = '是否启用代号'; -$lang->custom->execution = '1111'; if($config->systemMode == 'new') $lang->custom->execution = '执行'; if($config->systemMode == 'classic' || !$config->systemMode) $lang->custom->execution = $lang->executionCommon; diff --git a/module/install/lang/zh-cn.php b/module/install/lang/zh-cn.php index 5b648ee89e..3bb318ab7a 100644 --- a/module/install/lang/zh-cn.php +++ b/module/install/lang/zh-cn.php @@ -47,7 +47,7 @@ $lang->install->guideVideo = 'https://dl.cnezsoft.com/vedio/program0716 $lang->install->introductionContent = <<

    尊敬的用户您好,欢迎您使用禅道项目管理系统。

    -

    禅道自15系列开始提供了两种使用模式,一种是经典管理模式,功能较为精简,主要提供了产品和项目两个核心功能;另一种是综合模式,增加了项目集和执行的概念。下面是全新项目集管理模式的介绍:

    +

    禅道自15系列开始提供了两种使用模式,一种是经典管理模式,功能较为精简,主要提供了产品和项目两个核心功能;另一种是全新项目集管理模式,增加了项目集和执行的概念。下面是全新项目集管理模式的介绍:

    项目集

    项目集用来管理一组相关的产品和项目,公司高层或者PMO可以用来做战略规划。

    From d80acf6a78d350667f8a86eca739caaae30b51ac Mon Sep 17 00:00:00 2001 From: lanzongjun Date: Fri, 16 Sep 2022 13:28:50 +0800 Subject: [PATCH 064/712] * task #69250 --- module/custom/lang/de.php | 4 +- module/custom/lang/en.php | 4 +- module/custom/lang/fr.php | 4 +- module/custom/lang/zh-cn.php | 4 +- module/install/css/step4.css | 18 ++--- module/install/js/step4.js | 27 +++----- module/install/view/step4.html.php | 106 +++++++++++++++++++++++------ module/my/lang/de.php | 4 +- module/my/lang/en.php | 4 +- module/my/lang/fr.php | 4 +- module/my/lang/zh-cn.php | 4 +- 11 files changed, 119 insertions(+), 64 deletions(-) diff --git a/module/custom/lang/de.php b/module/custom/lang/de.php index 91a0a869b9..4fb8b31f43 100644 --- a/module/custom/lang/de.php +++ b/module/custom/lang/de.php @@ -58,7 +58,7 @@ $lang->custom->code = $lang->code; $lang->custom->setCode = 'Enable or Disable Code'; if($config->systemMode == 'new') $lang->custom->execution = 'Execution'; -if($config->systemMode == 'classic' || !$config->systemMode) $lang->custom->execution = 'Execution'; +if($config->systemMode == 'lean' || !$config->systemMode) $lang->custom->execution = 'Execution'; $lang->custom->unitList['efficiency'] = 'Working Hours/'; $lang->custom->unitList['manhour'] = 'Man-hour/'; @@ -237,7 +237,7 @@ $lang->custom->weekendList[2] = '2-Day Off'; $lang->custom->weekendList[1] = '1-Day Off'; global $config; -if($config->systemMode == 'classic') +if($config->systemMode == 'lean') { $lang->custom->sprintConceptList[0] = 'Product - Project'; $lang->custom->sprintConceptList[1] = 'Product - Iteration'; diff --git a/module/custom/lang/en.php b/module/custom/lang/en.php index e7f36d9a8e..b6102b87f8 100644 --- a/module/custom/lang/en.php +++ b/module/custom/lang/en.php @@ -58,7 +58,7 @@ $lang->custom->code = $lang->code; $lang->custom->setCode = 'Enable or Disable Code'; if($config->systemMode == 'new') $lang->custom->execution = 'Execution'; -if($config->systemMode == 'classic' || !$config->systemMode) $lang->custom->execution = $lang->executionCommon; +if($config->systemMode == 'lean' || !$config->systemMode) $lang->custom->execution = $lang->executionCommon; $lang->custom->unitList['efficiency'] = 'Working Hours/'; $lang->custom->unitList['manhour'] = 'Man-hour/'; @@ -237,7 +237,7 @@ $lang->custom->weekendList[2] = '2-Day Off'; $lang->custom->weekendList[1] = '1-Day Off'; global $config; -if($config->systemMode == 'classic') +if($config->systemMode == 'lean') { $lang->custom->sprintConceptList[0] = 'Product - Project'; $lang->custom->sprintConceptList[1] = 'Product - Iteration'; diff --git a/module/custom/lang/fr.php b/module/custom/lang/fr.php index b7318ed979..cf681def91 100644 --- a/module/custom/lang/fr.php +++ b/module/custom/lang/fr.php @@ -58,7 +58,7 @@ $lang->custom->code = $lang->code; $lang->custom->setCode = 'Activer ou Désactiver le Code'; if($config->systemMode == 'new') $lang->custom->execution = 'Execution'; -if($config->systemMode == 'classic' || !$config->systemMode) $lang->custom->execution = 'Execution'; +if($config->systemMode == 'lean' || !$config->systemMode) $lang->custom->execution = 'Execution'; $lang->custom->unitList['efficiency'] = 'Working Hours/'; $lang->custom->unitList['manhour'] = 'Man-hour/'; @@ -237,7 +237,7 @@ $lang->custom->weekendList[2] = '2-Jour'; $lang->custom->weekendList[1] = '1-Jour'; global $config; -if($config->systemMode == 'classic') +if($config->systemMode == 'lean') { $lang->custom->sprintConceptList[0] = 'Product - Project'; $lang->custom->sprintConceptList[1] = 'Product - Iteration'; diff --git a/module/custom/lang/zh-cn.php b/module/custom/lang/zh-cn.php index 4d9a67aeeb..35294f4f46 100644 --- a/module/custom/lang/zh-cn.php +++ b/module/custom/lang/zh-cn.php @@ -58,7 +58,7 @@ $lang->custom->code = $lang->code; $lang->custom->setCode = '是否启用代号'; if($config->systemMode == 'new') $lang->custom->execution = '执行'; -if($config->systemMode == 'classic' || !$config->systemMode) $lang->custom->execution = $lang->executionCommon; +if($config->systemMode == 'lean' || !$config->systemMode) $lang->custom->execution = $lang->executionCommon; $lang->custom->unitList['efficiency'] = '工时/'; $lang->custom->unitList['manhour'] = '人时/'; @@ -237,7 +237,7 @@ $lang->custom->weekendList[2] = '双休'; $lang->custom->weekendList[1] = '单休'; global $config; -if($config->systemMode == 'classic') +if($config->systemMode == 'lean') { $lang->custom->sprintConceptList[0] = '产品 - 项目'; $lang->custom->sprintConceptList[1] = '产品 - 迭代'; diff --git a/module/install/css/step4.css b/module/install/css/step4.css index f164401d3a..1d12295a52 100644 --- a/module/install/css/step4.css +++ b/module/install/css/step4.css @@ -1,8 +1,10 @@ -.block-content {width: 100%;} -.block-content .block-details {width: 45%; display: inline-table; margin-top: 20px;} -.block-content .block-right {margin-left: 5%;} -.block-content .block-details .block-title {font-size: 14px;} -.block-content .block-details i {color: rgb(22, 169, 248); font-size: 20px;} -.introduction-link a {margin: 30px;} -#selectedModeTips, .select-mode {margin-top: 20px;} -.select-mode .radio-inline {margin-right: 30px;} +#mainContent tr td .icon-close {font-weight: bold; color: #ea644a;} +#mainContent tr td .icon-check {font-weight: bold; color: #329d38;} + +#mainContent tr th {background-color: rgb(241, 241, 241);} +#mainContent tr td {background-color: rgb(255, 255, 255); border-bottom: 1px solid rgb(238, 238, 238); border-right: 1px solid rgb(238, 238, 238);} + +#useLean {background-color: #ddd!important; padding: 6px 85px;} +#useNew {background-color: #ddd!important; padding: 6px 85px;} + +#mainContent .datatable {cursor: default;} \ No newline at end of file diff --git a/module/install/js/step4.js b/module/install/js/step4.js index 8ce4d661c9..e6bb22c6cc 100644 --- a/module/install/js/step4.js +++ b/module/install/js/step4.js @@ -1,23 +1,14 @@ -/** - * Show guide video. - * - * @access public - * @return void - */ -function showVideo() -{ - $('video').removeClass('hidden'); -} - $(function() { - $('#modeclassic').click(function() + $("#useLean").click(function() { - $('#selectedModeTips').show(); - }); + $('#mode').val('lean'); + $('form').submit(); + }) - $('#modenew').click(function() + $("#useNew").click(function() { - $('#selectedModeTips').hide(); - }); -}) + $('#mode').val('new'); + $('form').submit(); + }) +}); diff --git a/module/install/view/step4.html.php b/module/install/view/step4.html.php index fb8a6814d7..f48ad071b1 100644 --- a/module/install/view/step4.html.php +++ b/module/install/view/step4.html.php @@ -28,28 +28,90 @@
    -
    -
    -

    -
    - install->introductionContent;?> - -
    -

    install->howToUse;?>

    - upgrade->to15Mode['classic']) ? 'classic' : 'new';?> - visions == ',lite,'):?> - install->modeList['classic']);?> - - -
    install->modeList, $systemMode);?>
    -
    upgrade->selectedModeTips[$systemMode];?>
    -
    -
    -
    - -
    +
    +
    +

    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    lang->upgrade->mode;?>lang->upgrade->to18Mode['lean'];?>lang->upgrade->to18Mode['new'];?>
    lang->upgrade->mode;?>lang->upgrade->leanUsage;?>lang->upgrade->newUsage;?>
    lang->upgrade->program;?>
    lang->upgrade->productRR;?>
    lang->upgrade->productUR;?>
    lang->upgrade->productLine;?>
    lang->upgrade->projectScrum;?>
    lang->upgrade->projectWaterfull;?>
    lang->upgrade->projectKanban;?>
    lang->upgrade->execution;?>
    lang->upgrade->assetlib;?>
    lang->upgrade->oa;?>
    lang->upgrade->selectUsage;?>
    lang->upgrade->remark;?>lang->upgrade->remarkDesc;?>
    +
    +
    +
    diff --git a/module/my/lang/de.php b/module/my/lang/de.php index 999f8e0949..fcc098f822 100644 --- a/module/my/lang/de.php +++ b/module/my/lang/de.php @@ -95,7 +95,7 @@ $lang->my->form->lblAccount = 'Account Info'; $lang->my->programLink = 'Program Default Page'; $lang->my->productLink = 'Product Default Page'; $lang->my->projectLink = 'Project Default Page'; -if($config->systemMode == 'classic') $lang->my->executionLink = $lang->executionCommon . ' Default Page'; +if($config->systemMode == 'lean') $lang->my->executionLink = $lang->executionCommon . ' Default Page'; if($config->systemMode == 'new') $lang->my->executionLink = $lang->executionCommon . ' Default Page'; $lang->my->programLinkList = array(); @@ -124,7 +124,7 @@ if($config->systemMode == 'new') $lang->my->executionLinkList['execution-task'] = 'By default, enter the list of the most recently executed task, and you can view the task information under the current iteration'; $lang->my->executionLinkList['execution-executionkanban'] = 'By default, you can enter the execution Kanban to view the execution status of projects in progress'; } -if($config->systemMode == 'classic') $lang->my->executionLinkList['execution-task'] = 'By default, enter the list of the most recently executed task, and you can view the task information under the current iteration'; +if($config->systemMode == 'lean') $lang->my->executionLinkList['execution-task'] = 'By default, enter the list of the most recently executed task, and you can view the task information under the current iteration'; $lang->my->guideChangeTheme = <<"Young Blue" theme is available now!

    diff --git a/module/my/lang/en.php b/module/my/lang/en.php index 66e1068d95..986548143a 100644 --- a/module/my/lang/en.php +++ b/module/my/lang/en.php @@ -95,7 +95,7 @@ $lang->my->form->lblAccount = 'Account Info'; $lang->my->programLink = 'Program Default Page'; $lang->my->productLink = 'Product Default Page'; $lang->my->projectLink = 'Project Default Page'; -if($config->systemMode == 'classic') $lang->my->executionLink = $lang->executionCommon . ' Default Page'; +if($config->systemMode == 'lean') $lang->my->executionLink = $lang->executionCommon . ' Default Page'; if($config->systemMode == 'new') $lang->my->executionLink = 'Execution Default Page'; $lang->my->programLinkList = array(); @@ -124,7 +124,7 @@ if($config->systemMode == 'new') $lang->my->executionLinkList['execution-task'] = 'By default, enter the list of the most recently executed task, and you can view the task information under the current iteration'; $lang->my->executionLinkList['execution-executionkanban'] = 'By default, you can enter the execution Kanban to view the execution status of projects in progress'; } -if($config->systemMode == 'classic') $lang->my->executionLinkList['execution-task'] = "By default, enter the list of the most recently {$lang->executionCommon} task, and you can view the task information under the current {$lang->executionCommon}"; +if($config->systemMode == 'lean') $lang->my->executionLinkList['execution-task'] = "By default, enter the list of the most recently {$lang->executionCommon} task, and you can view the task information under the current {$lang->executionCommon}"; $lang->my->guideChangeTheme = <<"Young Blue" theme is available now!

    diff --git a/module/my/lang/fr.php b/module/my/lang/fr.php index 999f8e0949..fcc098f822 100644 --- a/module/my/lang/fr.php +++ b/module/my/lang/fr.php @@ -95,7 +95,7 @@ $lang->my->form->lblAccount = 'Account Info'; $lang->my->programLink = 'Program Default Page'; $lang->my->productLink = 'Product Default Page'; $lang->my->projectLink = 'Project Default Page'; -if($config->systemMode == 'classic') $lang->my->executionLink = $lang->executionCommon . ' Default Page'; +if($config->systemMode == 'lean') $lang->my->executionLink = $lang->executionCommon . ' Default Page'; if($config->systemMode == 'new') $lang->my->executionLink = $lang->executionCommon . ' Default Page'; $lang->my->programLinkList = array(); @@ -124,7 +124,7 @@ if($config->systemMode == 'new') $lang->my->executionLinkList['execution-task'] = 'By default, enter the list of the most recently executed task, and you can view the task information under the current iteration'; $lang->my->executionLinkList['execution-executionkanban'] = 'By default, you can enter the execution Kanban to view the execution status of projects in progress'; } -if($config->systemMode == 'classic') $lang->my->executionLinkList['execution-task'] = 'By default, enter the list of the most recently executed task, and you can view the task information under the current iteration'; +if($config->systemMode == 'lean') $lang->my->executionLinkList['execution-task'] = 'By default, enter the list of the most recently executed task, and you can view the task information under the current iteration'; $lang->my->guideChangeTheme = <<"Young Blue" theme is available now!

    diff --git a/module/my/lang/zh-cn.php b/module/my/lang/zh-cn.php index 3c168dab0f..c5ae67f85f 100644 --- a/module/my/lang/zh-cn.php +++ b/module/my/lang/zh-cn.php @@ -95,7 +95,7 @@ $lang->my->form->lblAccount = '帐号信息'; $lang->my->programLink = '项目集默认着陆页'; $lang->my->productLink = '产品默认着陆页'; $lang->my->projectLink = '项目默认着陆页'; -if($config->systemMode == 'classic') $lang->my->executionLink = $lang->executionCommon . '默认着陆页'; +if($config->systemMode == 'lean') $lang->my->executionLink = $lang->executionCommon . '默认着陆页'; if($config->systemMode == 'new') $lang->my->executionLink = '执行默认着陆页'; $lang->my->programLinkList = array(); @@ -124,7 +124,7 @@ if($config->systemMode == 'new') $lang->my->executionLinkList['execution-task'] = '默认进入最近一个执行的任务列表,可以查看当前迭代下的任务信息'; $lang->my->executionLinkList['execution-executionkanban'] = '默认进入执行看板,可以查看进行中项目的执行情况'; } -if($config->systemMode == 'classic') $lang->my->executionLinkList['execution-task'] = "默认进入最近一个{$lang->executionCommon}的任务列表,可以查看当前{$lang->executionCommon}下的任务信息"; +if($config->systemMode == 'lean') $lang->my->executionLinkList['execution-task'] = "默认进入最近一个{$lang->executionCommon}的任务列表,可以查看当前{$lang->executionCommon}下的任务信息"; $lang->my->guideChangeTheme = <<全新“青春蓝”主题上线了!

    From ebeb74af0fb7a69376e458a8edc8c8a99cf2e616 Mon Sep 17 00:00:00 2001 From: tanghucheng Date: Fri, 16 Sep 2022 13:36:40 +0800 Subject: [PATCH 065/712] * * Fix bug for common lang. --- module/common/lang/de.php | 2 +- module/common/lang/en.php | 2 +- module/common/lang/fr.php | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/module/common/lang/de.php b/module/common/lang/de.php index 2d3f67c397..a8495c2cc5 100644 --- a/module/common/lang/de.php +++ b/module/common/lang/de.php @@ -156,7 +156,7 @@ $lang->pri = 'Priority'; $lang->delayed = 'Delayed'; $lang->common->common = 'Standard Module'; -$lang->common->story = 'Story' +$lang->common->story = 'Story'; $lang->my->common = 'My'; $lang->program->common = 'Program'; $lang->product->common = 'Product'; diff --git a/module/common/lang/en.php b/module/common/lang/en.php index ebc4c2cd37..b1a66f8b29 100644 --- a/module/common/lang/en.php +++ b/module/common/lang/en.php @@ -156,7 +156,7 @@ $lang->pri = 'Priority'; $lang->delayed = 'Delayed'; $lang->common->common = 'Common Module'; -$lang->common->story = 'Story' +$lang->common->story = 'Story'; $lang->my->common = 'My'; $lang->program->common = 'Program'; $lang->product->common = 'Product'; diff --git a/module/common/lang/fr.php b/module/common/lang/fr.php index c15320b1c9..ab635964db 100644 --- a/module/common/lang/fr.php +++ b/module/common/lang/fr.php @@ -156,7 +156,7 @@ $lang->pri = 'Priority'; $lang->delayed = 'Delayed'; $lang->common->common = 'Module Commun'; -$lang->common->story = 'Story' +$lang->common->story = 'Story'; $lang->my->common = 'My'; $lang->program->common = 'Program'; $lang->product->common = 'Product'; From fc48995990f17e3535c7daefeec9a65237befb73 Mon Sep 17 00:00:00 2001 From: wangyuting2 <851424971@qq.com> Date: Fri, 16 Sep 2022 06:10:54 +0000 Subject: [PATCH 066/712] * Fix noMergedSprints data bug. --- module/upgrade/model.php | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/module/upgrade/model.php b/module/upgrade/model.php index 3c0858ef43..f084216025 100644 --- a/module/upgrade/model.php +++ b/module/upgrade/model.php @@ -7747,18 +7747,12 @@ class upgradeModel extends model */ public function getNoMergedSprints() { - $noMergedSprints = $this->dao->select('*')->from(TABLE_PROJECT) + return $this->dao->select('*')->from(TABLE_PROJECT) ->where('project')->eq(0) ->andWhere('vision')->eq('rnd') ->andWhere('type')->eq('sprint') ->andWhere('deleted')->eq(0) ->fetchAll('id'); - - $projectProducts = $this->dao->select('*')->from(TABLE_PROJECTPRODUCT)->where('project')->in(array_keys($noMergedSprints))->fetchGroup('project', 'product'); - foreach($projectProducts as $sprintID => $products) unset($noMergedSprints[$sprintID]); - - if(empty($noMergedSprints)) return false; - return $noMergedSprints; } /** From 4964be7b3b7a6e67efb68a3e8e447fa4a10bf25f Mon Sep 17 00:00:00 2001 From: daitingting Date: Fri, 16 Sep 2022 06:21:58 +0000 Subject: [PATCH 067/712] * Optimize codes. --- module/upgrade/model.php | 44 +++++++++------------------------------- 1 file changed, 10 insertions(+), 34 deletions(-) diff --git a/module/upgrade/model.php b/module/upgrade/model.php index 3c0858ef43..443787236b 100644 --- a/module/upgrade/model.php +++ b/module/upgrade/model.php @@ -5009,12 +5009,12 @@ class upgradeModel extends model foreach($sprints as $sprint) { $data = new stdclass(); - $data->project = $projectID; - $data->parent = $projectID; - $data->grade = 1; - $data->path = ",{$projectID},{$sprint->id},"; - $data->type = 'sprint'; - $data->acl = $sprint->acl == 'custom' ? 'private' : $sprint->acl; + $data->project = $projectID; + $data->parent = $projectID; + $data->grade = 1; + $data->path = ",{$projectID},{$sprint->id},"; + $data->type = 'sprint'; + $data->acl = $sprint->acl == 'custom' ? 'private' : $sprint->acl; $this->dao->update(TABLE_PROJECT)->data($data)->where('id')->eq($sprint->id)->exec(); @@ -7535,38 +7535,13 @@ class upgradeModel extends model * @access public * @return bool */ - public function classic2Lite() + public function classic2Lean() { - /* Set mode as lite. */ - $this->loadModel('setting')->setItem('system.common.global.mode', 'lite'); /* Set project mode as noExecution. */ $this->loadModel('setting')->setItem('system.common.global.projectMode', 'noExecution'); - $defaultProgram = $this->config->global->defaultProgram; - - $projects = $this->dao->select('*')->from(TABLE_PROJECT)->where('deleted')->eq('0')->andWhere('project')->eq(0)->andWhere('type')->eq('sprint')->fetchAll('id'); - - $this->dao->update(TABLE_PRODUCT)->set('program')->eq($defaultProgram)->exec(); - - /* Add default execution for project. */ - foreach($projects as $project) - { - $this->dao->update(TABLE_PROJECT)->set('noExecution')->eq('1')->set('type')->eq('project')->set('parent')->eq($defaultProgram)->set('path')->eq(",{$defaultProgram},{$project->id},")->where('id')->eq($project->id)->exec(); - - $execution = clone $project; - $execution->project = $project->id; - $execution->parent = $project->id; - $execution->grade = 1; - unset($execution->id); - - $this->dao->insert(TABLE_PROJECT)->data($execution)->autoCheck()->exec(); - if(dao::isError()) return false; - - $executionID = $this->dao->lastInsertID(); - $this->dao->update(TABLE_PROJECT)->set('path')->eq(",{$project->id},{$executionID},")->where('id')->eq($executionID)->exec(); - - $this->dao->update(TABLE_TASK)->set('execution')->eq($executionID)->where('project')->eq($project->id)->exec(); - } + $programID = $this->createDefaultProgram(); + $this->upgradeInProjectMode($programID); return !dao::isError(); } @@ -7649,6 +7624,7 @@ class upgradeModel extends model $project->lastEditedDate = $now; $project->grade = 2; $project->acl = $sprint->acl == 'open' ? 'open' : 'private'; + if($this->config->global->mode == 'classic') $project->noExecution = '1'; $this->dao->insert(TABLE_PROJECT)->data($project)->check('name', 'unique', "type='project' AND parent=$programID AND deleted='0'")->exec(); if(dao::isError()) return false; From bfe47dbdb55112152d784fa340b5eb6b6cefd859 Mon Sep 17 00:00:00 2001 From: daitingting Date: Fri, 16 Sep 2022 06:54:35 +0000 Subject: [PATCH 068/712] * Add noExecution field in project table. * Set noExecution of project accord to projectMode. --- db/update17.6.1.sql | 1 + db/zentao.sql | 1 + module/upgrade/model.php | 7 ++++--- 3 files changed, 6 insertions(+), 3 deletions(-) create mode 100644 db/update17.6.1.sql diff --git a/db/update17.6.1.sql b/db/update17.6.1.sql new file mode 100644 index 0000000000..e8749557cf --- /dev/null +++ b/db/update17.6.1.sql @@ -0,0 +1 @@ +ALTER table `zt_project` ADD `noExecution` enum('0', '1') NOT NULL DEFAULT '0'; diff --git a/db/zentao.sql b/db/zentao.sql index d5266fc5e3..da4c5c0d2b 100755 --- a/db/zentao.sql +++ b/db/zentao.sql @@ -1193,6 +1193,7 @@ CREATE TABLE IF NOT EXISTS `zt_project` ( `vision` varchar(10) NOT NULL DEFAULT 'rnd', `displayCards` smallint(6) NOT NULL default '0', `fluidBoard` enum('0','1') NOT NULL DEFAULT '0', + `noExecution` enum('0', '1') NOT NULL DEFAULT '0', `deleted` enum('0','1') NOT NULL DEFAULT '0', PRIMARY KEY (`id`), KEY `parent` (`parent`), diff --git a/module/upgrade/model.php b/module/upgrade/model.php index 443787236b..397a87013e 100644 --- a/module/upgrade/model.php +++ b/module/upgrade/model.php @@ -7598,8 +7598,9 @@ class upgradeModel extends model public function upgradeInProjectMode($programID) { $this->loadModel('action'); - $now = helper::now(); - $account = isset($this->app->user->account) ? $this->app->user->account : ''; + $now = helper::now(); + $account = isset($this->app->user->account) ? $this->app->user->account : ''; + $projectMode = $this->setting->getItem('owner=system&module=common§ion=global&key=projectMode'); $noMergedSprints = $this->getNoMergedSprints(); if(!$noMergedSprints) return true; @@ -7624,7 +7625,7 @@ class upgradeModel extends model $project->lastEditedDate = $now; $project->grade = 2; $project->acl = $sprint->acl == 'open' ? 'open' : 'private'; - if($this->config->global->mode == 'classic') $project->noExecution = '1'; + if($projectMode == 'noExecution') $project->noExecution = '1'; $this->dao->insert(TABLE_PROJECT)->data($project)->check('name', 'unique', "type='project' AND parent=$programID AND deleted='0'")->exec(); if(dao::isError()) return false; From 49faebaad7039205d1ae76a81c1af65cd6878e6e Mon Sep 17 00:00:00 2001 From: lanzongjun Date: Fri, 16 Sep 2022 14:58:39 +0800 Subject: [PATCH 069/712] * task #69250#69251 --- module/install/control.php | 11 +- module/install/view/step4.html.php | 166 ++++++++++++------------ module/my/lang/de.php | 3 +- module/my/lang/en.php | 3 +- module/my/lang/fr.php | 3 +- module/my/lang/zh-cn.php | 3 +- module/program/lang/de.php | 2 + module/program/lang/en.php | 2 + module/program/lang/fr.php | 2 + module/program/lang/zh-cn.php | 2 + module/program/model.php | 31 +++++ module/project/lang/de.php | 4 +- module/project/lang/en.php | 4 +- module/project/lang/fr.php | 4 +- module/project/lang/zh-cn.php | 4 +- module/project/model.php | 25 ---- module/upgrade/control.php | 32 +++-- module/upgrade/model.php | 37 ++---- module/upgrade/view/to18guide.html.php | 170 ++++++++++++------------- 19 files changed, 249 insertions(+), 259 deletions(-) diff --git a/module/install/control.php b/module/install/control.php index e9df85988e..a7479b1b37 100644 --- a/module/install/control.php +++ b/module/install/control.php @@ -237,13 +237,14 @@ class install extends control $this->install->updateLang(); if(dao::isError()) return print(js::error(dao::getError())); - if($this->post->importDemoData) $this->install->importDemoData(); + // if($this->post->importDemoData) $this->install->importDemoData(); - if($this->config->systemMode == 'lite') + if($this->config->systemMode == 'lean') { - /* lite mode create default program. */ - $programID = $this->loadModel('project')->createDefaultProgram(); - /* set default program config. */ + /* Lean mode create default program. */ + $programID = $this->loadModel('program')->createDefaultProgram(); + echo $programID;exit; + /* Set default program config. */ $this->loadModel('setting')->setItem('system.common.global.defaultProgram', $programID); } diff --git a/module/install/view/step4.html.php b/module/install/view/step4.html.php index f48ad071b1..622e78f6a6 100644 --- a/module/install/view/step4.html.php +++ b/module/install/view/step4.html.php @@ -29,89 +29,89 @@
    -
    -

    -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    lang->upgrade->mode;?>lang->upgrade->to18Mode['lean'];?>lang->upgrade->to18Mode['new'];?>
    lang->upgrade->mode;?>lang->upgrade->leanUsage;?>lang->upgrade->newUsage;?>
    lang->upgrade->program;?>
    lang->upgrade->productRR;?>
    lang->upgrade->productUR;?>
    lang->upgrade->productLine;?>
    lang->upgrade->projectScrum;?>
    lang->upgrade->projectWaterfull;?>
    lang->upgrade->projectKanban;?>
    lang->upgrade->execution;?>
    lang->upgrade->assetlib;?>
    lang->upgrade->oa;?>
    lang->upgrade->selectUsage;?>
    lang->upgrade->remark;?>lang->upgrade->remarkDesc;?>
    -
    -
    -
    +
    +

    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    lang->upgrade->mode;?>lang->upgrade->to18Mode['lean'];?>lang->upgrade->to18Mode['new'];?>
    lang->upgrade->mode;?>lang->upgrade->leanUsage;?>lang->upgrade->newUsage;?>
    lang->upgrade->program;?>
    lang->upgrade->productRR;?>
    lang->upgrade->productUR;?>
    lang->upgrade->productLine;?>
    lang->upgrade->projectScrum;?>
    lang->upgrade->projectWaterfull;?>
    lang->upgrade->projectKanban;?>
    lang->upgrade->execution;?>
    lang->upgrade->assetlib;?>
    lang->upgrade->oa;?>
    lang->upgrade->selectUsage;?>
    lang->upgrade->remark;?>lang->upgrade->remarkDesc;?>
    +
    +
    +
    diff --git a/module/my/lang/de.php b/module/my/lang/de.php index fcc098f822..b2f6ece0d3 100644 --- a/module/my/lang/de.php +++ b/module/my/lang/de.php @@ -95,8 +95,7 @@ $lang->my->form->lblAccount = 'Account Info'; $lang->my->programLink = 'Program Default Page'; $lang->my->productLink = 'Product Default Page'; $lang->my->projectLink = 'Project Default Page'; -if($config->systemMode == 'lean') $lang->my->executionLink = $lang->executionCommon . ' Default Page'; -if($config->systemMode == 'new') $lang->my->executionLink = $lang->executionCommon . ' Default Page'; +$lang->my->executionLink = 'Execution Default Page'; $lang->my->programLinkList = array(); $lang->my->programLinkList['program-browse'] = 'By default, you go to the program list, where you can view all of the programs'; diff --git a/module/my/lang/en.php b/module/my/lang/en.php index 986548143a..7e97146c16 100644 --- a/module/my/lang/en.php +++ b/module/my/lang/en.php @@ -95,8 +95,7 @@ $lang->my->form->lblAccount = 'Account Info'; $lang->my->programLink = 'Program Default Page'; $lang->my->productLink = 'Product Default Page'; $lang->my->projectLink = 'Project Default Page'; -if($config->systemMode == 'lean') $lang->my->executionLink = $lang->executionCommon . ' Default Page'; -if($config->systemMode == 'new') $lang->my->executionLink = 'Execution Default Page'; +$lang->my->executionLink = 'Execution Default Page'; $lang->my->programLinkList = array(); $lang->my->programLinkList['program-browse'] = 'By default, you go to the program list, where you can view all of the programs'; diff --git a/module/my/lang/fr.php b/module/my/lang/fr.php index fcc098f822..b2f6ece0d3 100644 --- a/module/my/lang/fr.php +++ b/module/my/lang/fr.php @@ -95,8 +95,7 @@ $lang->my->form->lblAccount = 'Account Info'; $lang->my->programLink = 'Program Default Page'; $lang->my->productLink = 'Product Default Page'; $lang->my->projectLink = 'Project Default Page'; -if($config->systemMode == 'lean') $lang->my->executionLink = $lang->executionCommon . ' Default Page'; -if($config->systemMode == 'new') $lang->my->executionLink = $lang->executionCommon . ' Default Page'; +$lang->my->executionLink = 'Execution Default Page'; $lang->my->programLinkList = array(); $lang->my->programLinkList['program-browse'] = 'By default, you go to the program list, where you can view all of the programs'; diff --git a/module/my/lang/zh-cn.php b/module/my/lang/zh-cn.php index c5ae67f85f..d8e0bec065 100644 --- a/module/my/lang/zh-cn.php +++ b/module/my/lang/zh-cn.php @@ -95,8 +95,7 @@ $lang->my->form->lblAccount = '帐号信息'; $lang->my->programLink = '项目集默认着陆页'; $lang->my->productLink = '产品默认着陆页'; $lang->my->projectLink = '项目默认着陆页'; -if($config->systemMode == 'lean') $lang->my->executionLink = $lang->executionCommon . '默认着陆页'; -if($config->systemMode == 'new') $lang->my->executionLink = '执行默认着陆页'; +$lang->my->executionLink = '执行默认着陆页'; $lang->my->programLinkList = array(); $lang->my->programLinkList['program-browse'] = '默认进入项目集列表,可以查看所有的项目集'; diff --git a/module/program/lang/de.php b/module/program/lang/de.php index eee8d70de7..af00cedde6 100644 --- a/module/program/lang/de.php +++ b/module/program/lang/de.php @@ -163,3 +163,5 @@ $lang->program->kanban->doingExecutions = 'Ongoing Executions'; $lang->program->kanban->normalReleases = 'Normal Releases'; $lang->program->kanban->laneColorList = array('#32C5FF', '#006AF1', '#9D28B2', '#FF8F26', '#FFC20E', '#00A78E', '#7FBB00', '#424BAC', '#C0E9FF', '#EC2761'); + +$lang->program->defaultProgram = 'Default program'; \ No newline at end of file diff --git a/module/program/lang/en.php b/module/program/lang/en.php index 62c84da556..07cfc1e030 100644 --- a/module/program/lang/en.php +++ b/module/program/lang/en.php @@ -163,3 +163,5 @@ $lang->program->kanban->doingExecutions = 'Ongoing Executions'; $lang->program->kanban->normalReleases = 'Normal Releases'; $lang->program->kanban->laneColorList = array('#32C5FF', '#006AF1', '#9D28B2', '#FF8F26', '#FFC20E', '#00A78E', '#7FBB00', '#424BAC', '#C0E9FF', '#EC2761'); + +$lang->program->defaultProgram = 'Default program'; \ No newline at end of file diff --git a/module/program/lang/fr.php b/module/program/lang/fr.php index 395d896a50..a392192170 100644 --- a/module/program/lang/fr.php +++ b/module/program/lang/fr.php @@ -163,3 +163,5 @@ $lang->program->kanban->doingExecutions = 'Ongoing Executions'; $lang->program->kanban->normalReleases = 'Normal Releases'; $lang->program->kanban->laneColorList = array('#32C5FF', '#006AF1', '#9D28B2', '#FF8F26', '#FFC20E', '#00A78E', '#7FBB00', '#424BAC', '#C0E9FF', '#EC2761'); + +$lang->program->defaultProgram = 'Default program'; \ No newline at end of file diff --git a/module/program/lang/zh-cn.php b/module/program/lang/zh-cn.php index a7c9452f73..d47ffd4227 100644 --- a/module/program/lang/zh-cn.php +++ b/module/program/lang/zh-cn.php @@ -163,3 +163,5 @@ $lang->program->kanban->doingExecutions = '进行中的执行'; $lang->program->kanban->normalReleases = '正常的发布'; $lang->program->kanban->laneColorList = array('#32C5FF', '#006AF1', '#9D28B2', '#FF8F26', '#FFC20E', '#00A78E', '#7FBB00', '#424BAC', '#C0E9FF', '#EC2761'); + +$lang->program->defaultProgram = '默认项目集'; \ No newline at end of file diff --git a/module/program/model.php b/module/program/model.php index c2d23738b1..05903b363a 100644 --- a/module/program/model.php +++ b/module/program/model.php @@ -1590,4 +1590,35 @@ class programModel extends model } return $menu; } + + /** + * Create default program. + * + * @access public + * @return int + */ + public function createDefaultProgram() + { + $minBegin = $this->dao->select('min(begin) as min')->from(TABLE_PROJECT)->where('deleted')->eq(0)->fetch('min'); + $program = new stdClass(); + + $program->type = 'program'; + $program->name = $this->lang->program->defaultProgram; + $program->budgetUnit = 'CNY'; + $program->whitelist = ''; + $program->status = 'doing'; + $program->grade = 1; + $program->auth = 'extend'; + $program->openedDate = $minBegin; + $program->begin = helper::today(); + $program->end = LONG_TIME; + + $this->dao->insert(TABLE_PROGRAM)->data($program)->exec(); + + $insertID = $this->dao->lastInsertId(); + + $this->dao->update(TABLE_PROGRAM)->set('path')->eq(",$insertID,")->where('id')->eq($insertID)->exec(); + + return $insertID; + } } diff --git a/module/project/lang/de.php b/module/project/lang/de.php index 98c7cb7b5c..6ba84626ed 100644 --- a/module/project/lang/de.php +++ b/module/project/lang/de.php @@ -334,6 +334,4 @@ $lang->project->childLongTime = "If a child as long-term projects, the pa $lang->project->confirmUnlinkMember = "Do you want to remove this user from project?"; $lang->project->action = new stdclass(); -$lang->project->action->managed = '$date, managed by $actor. $extra' . "\n"; - -$lang->project->defaultProgram = 'Default program'; \ No newline at end of file +$lang->project->action->managed = '$date, managed by $actor. $extra' . "\n"; \ No newline at end of file diff --git a/module/project/lang/en.php b/module/project/lang/en.php index 59c1cb8be4..92ac76fba0 100644 --- a/module/project/lang/en.php +++ b/module/project/lang/en.php @@ -334,6 +334,4 @@ $lang->project->childLongTime = "There are long-term projects in the child $lang->project->confirmUnlinkMember = "Do you want to remove this user from project?"; $lang->project->action = new stdclass(); -$lang->project->action->managed = '$date, managed by $actor. $extra' . "\n"; - -$lang->project->defaultProgram = 'Default program'; \ No newline at end of file +$lang->project->action->managed = '$date, managed by $actor. $extra' . "\n"; \ No newline at end of file diff --git a/module/project/lang/fr.php b/module/project/lang/fr.php index 4432563cda..c5f2bffc24 100644 --- a/module/project/lang/fr.php +++ b/module/project/lang/fr.php @@ -334,6 +334,4 @@ $lang->project->childLongTime = "If a child as long-term projects, the pa $lang->project->confirmUnlinkMember = "Do you want to remove this user from project?"; $lang->project->action = new stdclass(); -$lang->project->action->managed = '$date, managed by $actor. $extra' . "\n"; - -$lang->project->defaultProgram = 'Default program'; \ No newline at end of file +$lang->project->action->managed = '$date, managed by $actor. $extra' . "\n"; \ No newline at end of file diff --git a/module/project/lang/zh-cn.php b/module/project/lang/zh-cn.php index 929d26209d..166cfc02de 100644 --- a/module/project/lang/zh-cn.php +++ b/module/project/lang/zh-cn.php @@ -334,6 +334,4 @@ $lang->project->childLongTime = "子项目中有长期项目,父项目 $lang->project->confirmUnlinkMember = "您确定从该项目中移除该用户吗?"; $lang->project->action = new stdclass(); -$lang->project->action->managed = '$date, 由 $actor 维护。$extra' . "\n"; - -$lang->project->defaultProgram = '默认项目集'; \ No newline at end of file +$lang->project->action->managed = '$date, 由 $actor 维护。$extra' . "\n"; \ No newline at end of file diff --git a/module/project/model.php b/module/project/model.php index 89bc950641..64e107c2ab 100644 --- a/module/project/model.php +++ b/module/project/model.php @@ -2630,29 +2630,4 @@ class projectModel extends model return $menu; } - - /** - * Create default program. - * - * @access public - * @return int - */ - public function createDefaultProgram() - { - $program = new stdClass(); - - $program->type = 'program'; - $program->name = $this->lang->project->defaultProgram; - $program->budgetUnit = 'CNY'; - $program->whitelist = ''; - $program->status = 'doing'; - $program->grade = 1; - $program->openedDate = helper::now(); - $program->begin = helper::today(); - $program->end = LONG_TIME; - - $this->dao->insert(TABLE_PROGRAM)->data($program)->exec(); - - return $this->dao->lastInsertId(); - } } diff --git a/module/upgrade/control.php b/module/upgrade/control.php index 5e3ac8760b..840e206f3a 100644 --- a/module/upgrade/control.php +++ b/module/upgrade/control.php @@ -117,7 +117,6 @@ class upgrade extends control $this->view->position[] = $this->lang->upgrade->common; $this->view->confirm = $this->upgrade->getConfirm($this->post->fromVersion); $this->view->fromVersion = $this->post->fromVersion; - /* When sql is empty then skip it. */ if(empty($this->view->confirm)) $this->locate(inlink('execute', "fromVersion={$this->post->fromVersion}")); @@ -159,13 +158,20 @@ class upgrade extends control $openVersion = $this->upgrade->getOpenVersion(str_replace('.', '_', $fromVersion)); $selectMode = true; - if(version_compare($openVersion, '15_0', '>=') and version_compare($openVersion, '18_0', '<=') and $systemMode == 'classic') $selectMode = false; + if(version_compare($openVersion, '15_0', '>=') and version_compare($openVersion, '18_0', '<=') and $systemMode != 'new') + { + $this->loadModel('setting')->setItem('system.common.global.mode', 'lean'); + /* Lean mode create default program. */ + $programID = $this->loadModel('program')->createDefaultProgram(); + /* Set default program config. */ + $this->loadModel('setting')->setItem('system.common.global.defaultProgram', $programID); + /* 只有没有关联项目集的产品和项目关联到默认项目集下. */ + $this->upgrade->relationDefaultProgram($programID); + $selectMode = false; + } if(version_compare($openVersion, '18_0', '>')) $selectMode = false; - if($selectMode) - { - $this->locate(inlink('to18Guide', "fromVersion=$fromVersion")); - } + if($selectMode) $this->locate(inlink('to18Guide', "fromVersion=$fromVersion")); $this->locate(inlink('afterExec', "fromVersion=$fromVersion")); } @@ -241,25 +247,25 @@ class upgrade extends control $sprintConcept = 0; if(isset($this->config->custom->sprintConcept)) { - if($this->config->custom->sprintConcept == 2 and $mode == 'new') $sprintConcept = 1; + if($this->config->custom->sprintConcept == 2) $sprintConcept = 1; } elseif(isset($this->config->custom->productProject)) { list($productConcept, $projectConcept) = explode('_', $this->config->custom->productProject); - if($mode == 'classic') $sprintConcept = $projectConcept; - if($mode == 'new' and $projectConcept == 2) $sprintConcept = 1; + if($projectConcept == 2) $sprintConcept = 1; } $this->setting->setItem('system.custom.sprintConcept', $sprintConcept); if($mode == 'lean') { - /* lite mode create default program. */ - $programID = $this->loadModel('project')->createDefaultProgram(); - /* set default program config. */ + /* Lean mode create default program. */ + $programID = $this->loadModel('program')->createDefaultProgram(); + /* Set default program config. */ $this->loadModel('setting')->setItem('system.common.global.defaultProgram', $programID); - /* 只有没有关联项目集的产品和项目关联到默认项目集下. */ $this->upgrade->relationDefaultProgram($programID); + $openVersion = $this->upgrade->getOpenVersion(str_replace('.', '_', $fromVersion)); + if(version_compare($openVersion, '15_0', '<')) $this->locate(inlink('mergeTips')); $this->locate(inlink('afterExec', "fromVersion=$fromVersion")); } diff --git a/module/upgrade/model.php b/module/upgrade/model.php index b8d12ae2e6..304a4d9045 100644 --- a/module/upgrade/model.php +++ b/module/upgrade/model.php @@ -7539,36 +7539,17 @@ class upgradeModel extends model public function relationDefaultProgram($programID) { /* product */ - $noRelationProduct = $this->dao->select('id')->from(TABLE_PRODUCT)->where('program')->eq(0)->fetchPairs('id'); - if(!empty($noRelationProduct)) - { - foreach($noRelationProduct as $productID) - { - $this->dao->update(TABLE_PRODUCT)->set('program')->eq($programID)->where('id')->eq($productID)->exec(); - } - } + $this->dao->update(TABLE_PRODUCT) + ->set('program')->eq($programID) + ->where('program')->eq(0) + ->exec(); /* project */ - $noRelationProject = $this->dao->select('id,path')->from(TABLE_PROJECT)->where('type')->eq('project')->andWhere('parent')->eq(0)->andWhere('grade')->eq(1)->fetchAll(); - if(!empty($noRelationProject)) - { - foreach($noRelationProject as $project) - { - $path = ",{$programID}" . $project->path; - $this->dao->update(TABLE_PROJECT) - ->set('parent')->eq($programID) - ->set('path')->eq($path) - ->set('grade = grade+1') - ->where('id')->eq($project->id)->exec(); - - /* Update children. */ - $this->dao->update(TABLE_PROJECT) - ->set("path = CONCAT(',{$programID}', path)") - ->set('grade = grade+1') - ->where('path')->like(",$project->id,%") - ->exec(); - } - } + $this->dao->update(TABLE_PROJECT) + ->set("path = CONCAT(',{$programID}', path)") + ->set('grade = grade+1') + ->where('type')->eq('project')->andWhere('parent')->eq(0)->andWhere('grade')->eq(1) + ->exec(); return true; } diff --git a/module/upgrade/view/to18guide.html.php b/module/upgrade/view/to18guide.html.php index bebb5de6d5..6b7b81037a 100644 --- a/module/upgrade/view/to18guide.html.php +++ b/module/upgrade/view/to18guide.html.php @@ -12,90 +12,90 @@ ?>
    -
    -
    -

    -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    lang->upgrade->mode;?>lang->upgrade->to18Mode['lean'];?>lang->upgrade->to18Mode['new'];?>
    lang->upgrade->mode;?>lang->upgrade->leanUsage;?>lang->upgrade->newUsage;?>
    lang->upgrade->program;?>
    lang->upgrade->productRR;?>
    lang->upgrade->productUR;?>
    lang->upgrade->productLine;?>
    lang->upgrade->projectScrum;?>
    lang->upgrade->projectWaterfull;?>
    lang->upgrade->projectKanban;?>
    lang->upgrade->execution;?>
    lang->upgrade->assetlib;?>
    lang->upgrade->oa;?>
    lang->upgrade->selectUsage;?>
    lang->upgrade->remark;?>lang->upgrade->remarkDesc;?>
    -
    -
    -
    -
    +
    +
    +

    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    lang->upgrade->mode;?>lang->upgrade->to18Mode['lean'];?>lang->upgrade->to18Mode['new'];?>
    lang->upgrade->mode;?>lang->upgrade->leanUsage;?>lang->upgrade->newUsage;?>
    lang->upgrade->program;?>
    lang->upgrade->productRR;?>
    lang->upgrade->productUR;?>
    lang->upgrade->productLine;?>
    lang->upgrade->projectScrum;?>
    lang->upgrade->projectWaterfull;?>
    lang->upgrade->projectKanban;?>
    lang->upgrade->execution;?>
    lang->upgrade->assetlib;?>
    lang->upgrade->oa;?>
    lang->upgrade->selectUsage;?>
    lang->upgrade->remark;?>lang->upgrade->remarkDesc;?>
    +
    +
    +
    +
    From 633266d9e5864c57fd22fa7cbae5480bf2e1f537 Mon Sep 17 00:00:00 2001 From: wangyidong Date: Fri, 16 Sep 2022 14:58:54 +0800 Subject: [PATCH 070/712] * fix bug #27012. --- module/task/view/create.html.php | 1 + 1 file changed, 1 insertion(+) diff --git a/module/task/view/create.html.php b/module/task/view/create.html.php index 995fb04143..a4b271b2e0 100644 --- a/module/task/view/create.html.php +++ b/module/task/view/create.html.php @@ -165,6 +165,7 @@ foreach(explode(',', $config->task->create->requiredFields) as $field) 30) break;?> + From 8f9c7b3ecfc3f62e9602a5e9f65342c7d15ae482 Mon Sep 17 00:00:00 2001 From: lanzongjun Date: Fri, 16 Sep 2022 15:00:43 +0800 Subject: [PATCH 071/712] * task #69250#69251 --- module/install/control.php | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/module/install/control.php b/module/install/control.php index a7479b1b37..1bd16fb17d 100644 --- a/module/install/control.php +++ b/module/install/control.php @@ -237,13 +237,12 @@ class install extends control $this->install->updateLang(); if(dao::isError()) return print(js::error(dao::getError())); - // if($this->post->importDemoData) $this->install->importDemoData(); + if($this->post->importDemoData) $this->install->importDemoData(); if($this->config->systemMode == 'lean') { /* Lean mode create default program. */ $programID = $this->loadModel('program')->createDefaultProgram(); - echo $programID;exit; /* Set default program config. */ $this->loadModel('setting')->setItem('system.common.global.defaultProgram', $programID); } From 1d9a11cc66b54746d876de7c4435bb1618a00d1e Mon Sep 17 00:00:00 2001 From: lanzongjun Date: Fri, 16 Sep 2022 15:08:38 +0800 Subject: [PATCH 072/712] * task #69250#69251 --- module/custom/lang/de.php | 3 +-- module/custom/lang/en.php | 3 +-- module/custom/lang/fr.php | 3 +-- module/custom/lang/zh-cn.php | 3 +-- 4 files changed, 4 insertions(+), 8 deletions(-) diff --git a/module/custom/lang/de.php b/module/custom/lang/de.php index 4fb8b31f43..3988d8f0a8 100644 --- a/module/custom/lang/de.php +++ b/module/custom/lang/de.php @@ -57,8 +57,7 @@ $lang->custom->dept = 'Dept'; $lang->custom->code = $lang->code; $lang->custom->setCode = 'Enable or Disable Code'; -if($config->systemMode == 'new') $lang->custom->execution = 'Execution'; -if($config->systemMode == 'lean' || !$config->systemMode) $lang->custom->execution = 'Execution'; +$lang->custom->execution = 'Execution'; $lang->custom->unitList['efficiency'] = 'Working Hours/'; $lang->custom->unitList['manhour'] = 'Man-hour/'; diff --git a/module/custom/lang/en.php b/module/custom/lang/en.php index b6102b87f8..b6d284be1f 100644 --- a/module/custom/lang/en.php +++ b/module/custom/lang/en.php @@ -57,8 +57,7 @@ $lang->custom->dept = 'Dept'; $lang->custom->code = $lang->code; $lang->custom->setCode = 'Enable or Disable Code'; -if($config->systemMode == 'new') $lang->custom->execution = 'Execution'; -if($config->systemMode == 'lean' || !$config->systemMode) $lang->custom->execution = $lang->executionCommon; +$lang->custom->execution = 'Execution'; $lang->custom->unitList['efficiency'] = 'Working Hours/'; $lang->custom->unitList['manhour'] = 'Man-hour/'; diff --git a/module/custom/lang/fr.php b/module/custom/lang/fr.php index cf681def91..9970fdd66e 100644 --- a/module/custom/lang/fr.php +++ b/module/custom/lang/fr.php @@ -57,8 +57,7 @@ $lang->custom->dept = 'Dept'; $lang->custom->code = $lang->code; $lang->custom->setCode = 'Activer ou Désactiver le Code'; -if($config->systemMode == 'new') $lang->custom->execution = 'Execution'; -if($config->systemMode == 'lean' || !$config->systemMode) $lang->custom->execution = 'Execution'; +$lang->custom->execution = 'Execution'; $lang->custom->unitList['efficiency'] = 'Working Hours/'; $lang->custom->unitList['manhour'] = 'Man-hour/'; diff --git a/module/custom/lang/zh-cn.php b/module/custom/lang/zh-cn.php index 35294f4f46..a9d043745d 100644 --- a/module/custom/lang/zh-cn.php +++ b/module/custom/lang/zh-cn.php @@ -57,8 +57,7 @@ $lang->custom->dept = '部门'; $lang->custom->code = $lang->code; $lang->custom->setCode = '是否启用代号'; -if($config->systemMode == 'new') $lang->custom->execution = '执行'; -if($config->systemMode == 'lean' || !$config->systemMode) $lang->custom->execution = $lang->executionCommon; +$lang->custom->execution = '执行'; $lang->custom->unitList['efficiency'] = '工时/'; $lang->custom->unitList['manhour'] = '人时/'; From dd2071969a836bd61d924709a6a85963f8318896 Mon Sep 17 00:00:00 2001 From: lanzongjun Date: Fri, 16 Sep 2022 15:16:26 +0800 Subject: [PATCH 073/712] * task #69250#69251 --- module/install/view/step4.html.php | 2 +- module/upgrade/view/to18guide.html.php | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/module/install/view/step4.html.php b/module/install/view/step4.html.php index 622e78f6a6..e0f8f30c8a 100644 --- a/module/install/view/step4.html.php +++ b/module/install/view/step4.html.php @@ -100,7 +100,7 @@ lang->upgrade->selectUsage;?> - + lang->upgrade->remark;?> diff --git a/module/upgrade/view/to18guide.html.php b/module/upgrade/view/to18guide.html.php index 6b7b81037a..ed43c32e98 100644 --- a/module/upgrade/view/to18guide.html.php +++ b/module/upgrade/view/to18guide.html.php @@ -84,7 +84,7 @@ lang->upgrade->selectUsage;?> - + lang->upgrade->remark;?> From 63e5df239eba81aeb1b1fc2cd989d3e7e99eb043 Mon Sep 17 00:00:00 2001 From: wangyidong Date: Fri, 16 Sep 2022 15:18:41 +0800 Subject: [PATCH 074/712] * code for task #69248. --- module/action/config.php | 2 +- module/action/control.php | 3 +- module/block/lang/zh-cn.php | 1 - module/common/lang/menu.php | 136 +++--- module/common/lang/zh-cn.php | 2 +- module/common/model.php | 2 +- module/doc/control.php | 6 +- module/group/control.php | 8 - module/group/lang/resource.php | 437 +++++++++--------- module/group/view/manageprojectadmin.html.php | 89 +--- module/install/view/step4.html.php | 4 - module/product/control.php | 8 +- module/product/model.php | 111 ++--- module/product/view/create.html.php | 2 +- module/program/model.php | 4 +- module/project/config.php | 23 +- module/project/control.php | 19 +- module/project/model.php | 6 +- module/project/view/batchedit.html.php | 6 +- module/project/view/browsebycard.html.php | 2 + module/project/view/browsebylist.html.php | 8 +- module/project/view/create.html.php | 5 +- .../project/view/createstakeholder.html.php | 2 +- module/project/view/edit.html.php | 5 +- module/project/view/view.html.php | 2 +- module/todo/view/view.html.php | 2 +- module/tutorial/lang/de.php | 30 -- module/tutorial/lang/en.php | 30 -- module/tutorial/lang/fr.php | 30 -- module/tutorial/lang/zh-cn.php | 26 -- module/tutorial/lang/zh-tw.php | 25 - 31 files changed, 404 insertions(+), 632 deletions(-) diff --git a/module/action/config.php b/module/action/config.php index 09bd45b25c..b594863b30 100755 --- a/module/action/config.php +++ b/module/action/config.php @@ -70,7 +70,7 @@ $config->action->preferredTypeNum = 10; $config->action->preferredType = new stdclass(); $config->action->preferredType->new = array('user', 'story', 'task', 'bug', 'case', 'doc', 'program', 'product', 'project', 'execution'); -$config->action->preferredType->classic = array('user', 'story', 'task', 'bug', 'case', 'doc', 'product', 'execution', 'productplan', 'build'); +$config->action->preferredType->lite = array('user', 'story', 'task', 'bug', 'case', 'doc', 'product', 'project', 'execution'); global $app, $lang; $app->loadLang('action'); diff --git a/module/action/control.php b/module/action/control.php index 4613347f2f..7d3a53abcd 100755 --- a/module/action/control.php +++ b/module/action/control.php @@ -103,7 +103,8 @@ class action extends control $preferredType = array(); $moreType = array(); - $preferredTypeConfig = $this->config->systemMode == 'new' ? $this->config->action->preferredType->new : $this->config->action->preferredType->classic; + $preferredTypeConfig = $this->config->action->preferredType->new; + if($this->config->systemMode == 'lite') $preferredTypeConfig = $this->config->action->preferredType->lite; foreach($objectTypeList as $objectType) { if(!isset($this->config->objectTables[$objectType])) continue; diff --git a/module/block/lang/zh-cn.php b/module/block/lang/zh-cn.php index 4b564ba80f..2e5712c535 100644 --- a/module/block/lang/zh-cn.php +++ b/module/block/lang/zh-cn.php @@ -566,7 +566,6 @@ $lang->block->flowchart = array(); $lang->block->flowchart['admin'] = array('管理员', '维护公司', '添加用户', '维护权限'); if($config->systemMode == 'new') $lang->block->flowchart['program'] = array('项目集负责人', '创建项目集', '关联产品', "创建项目", "制定预算和规划", '添加干系人'); $lang->block->flowchart['product'] = array($lang->productCommon . '经理', '创建' . $lang->productCommon, '维护模块', "维护计划", "维护需求", '创建发布'); -$lang->block->flowchart['project'] = array('项目经理', '创建' . $lang->executionCommon, '维护团队', "关联需求", '分解任务', '跟踪进度'); $lang->block->flowchart['project'] = array('项目经理', '创建项目、' . $lang->executionCommon, '维护团队', "关联需求", '分解任务', '跟踪进度'); $lang->block->flowchart['dev'] = array('研发人员', '领取任务和Bug', '设计实现方案', '更新状态', '完成任务和Bug', '提交代码'); $lang->block->flowchart['tester'] = array('测试人员', '撰写用例', '执行用例', '提交Bug', '验证Bug', '关闭Bug'); diff --git a/module/common/lang/menu.php b/module/common/lang/menu.php index 932706646a..afcfa4d37c 100644 --- a/module/common/lang/menu.php +++ b/module/common/lang/menu.php @@ -32,34 +32,37 @@ if(defined('TUTORIAL')) } /* Main Navigation. */ -$lang->mainNav = new stdclass(); -$lang->mainNav->my = "{$lang->navIcons['my']} {$lang->my->shortCommon}|my|index|"; -$lang->mainNav->product = "{$lang->navIcons['product']} {$lang->product->common}|$productModule|$productMethod|"; -$lang->mainNav->project = "{$lang->navIcons['project']} {$lang->project->common}|$projectModule|$projectMethod|"; -$lang->mainNav->qa = "{$lang->navIcons['qa']} {$lang->qa->common}|qa|index|"; -$lang->mainNav->devops = "{$lang->navIcons['devops']} DevOps|repo|browse|"; -$lang->mainNav->kanban = "{$lang->navIcons['kanban']} {$lang->kanban->common}|kanban|space|"; -$lang->mainNav->doc = "{$lang->navIcons['doc']} {$lang->doc->common}|doc|index|"; -$lang->mainNav->report = "{$lang->navIcons['report']} {$lang->report->common}|report|productSummary|"; -$lang->mainNav->system = "{$lang->navIcons['system']} {$lang->system->common}|my|team|"; -$lang->mainNav->admin = "{$lang->navIcons['admin']} {$lang->admin->common}|admin|index|"; -if($config->systemMode == 'new') $lang->mainNav->program = "{$lang->navIcons['program']} {$lang->program->common}|$programModule|$programMethod|"; -if(!isset($config->projectMode) || $config->projectMode != 'noExecution') $lang->mainNav->execution = "{$lang->navIcons['execution']} {$lang->execution->common}|$executionModule|$executionMethod|"; +$lang->mainNav = new stdclass(); +$lang->mainNav->my = "{$lang->navIcons['my']} {$lang->my->shortCommon}|my|index|"; +$lang->mainNav->program = "{$lang->navIcons['program']} {$lang->program->common}|$programModule|$programMethod|"; +$lang->mainNav->product = "{$lang->navIcons['product']} {$lang->product->common}|$productModule|$productMethod|"; +$lang->mainNav->project = "{$lang->navIcons['project']} {$lang->project->common}|$projectModule|$projectMethod|"; +$lang->mainNav->execution = "{$lang->navIcons['execution']} {$lang->execution->common}|$executionModule|$executionMethod|"; +$lang->mainNav->qa = "{$lang->navIcons['qa']} {$lang->qa->common}|qa|index|"; +$lang->mainNav->devops = "{$lang->navIcons['devops']} DevOps|repo|browse|"; +$lang->mainNav->kanban = "{$lang->navIcons['kanban']} {$lang->kanban->common}|kanban|space|"; +$lang->mainNav->doc = "{$lang->navIcons['doc']} {$lang->doc->common}|doc|index|"; +$lang->mainNav->report = "{$lang->navIcons['report']} {$lang->report->common}|report|productSummary|"; +$lang->mainNav->system = "{$lang->navIcons['system']} {$lang->system->common}|my|team|"; +$lang->mainNav->admin = "{$lang->navIcons['admin']} {$lang->admin->common}|admin|index|"; $lang->dividerMenu = ',kanban,oa,admin,'; -$lang->mainNav->menuOrder[5] = 'my'; +$lang->mainNav->menuOrder[5] = 'my'; +$lang->mainNav->menuOrder[10] = 'program'; $lang->mainNav->menuOrder[15] = 'product'; $lang->mainNav->menuOrder[20] = 'project'; -$lang->mainNav->menuOrder[23] = 'qa'; -$lang->mainNav->menuOrder[25] = 'devops'; -$lang->mainNav->menuOrder[30] = 'kanban'; -$lang->mainNav->menuOrder[35] = 'doc'; -$lang->mainNav->menuOrder[40] = 'report'; -$lang->mainNav->menuOrder[45] = 'system'; -$lang->mainNav->menuOrder[65] = 'admin'; -if($config->systemMode == 'new') $lang->mainNav->menuOrder[10] = 'program'; -if(!isset($config->projectMode) || $config->projectMode != 'noExecution') $lang->mainNav->menuOrder[21] = 'execution'; +$lang->mainNav->menuOrder[25] = 'execution'; +$lang->mainNav->menuOrder[30] = 'qa'; +$lang->mainNav->menuOrder[35] = 'devops'; +$lang->mainNav->menuOrder[40] = 'kanban'; +$lang->mainNav->menuOrder[45] = 'doc'; +$lang->mainNav->menuOrder[50] = 'report'; +$lang->mainNav->menuOrder[55] = 'system'; +$lang->mainNav->menuOrder[60] = 'admin'; + +if($config->systemMode == 'lean') unset($lang->mainNav->program, $lang->mainNav->menuOrder[10]); +if(isset($config->projectMode) and $config->projectMode == 'noExecution') unset($lang->mainNav->execution, $lang->mainNav->menuOrder[25]); /* My menu. */ $lang->my->menu = new stdclass(); @@ -67,11 +70,11 @@ $lang->my->menu->index = array('link' => "$lang->dashboard|my|index"); $lang->my->menu->calendar = array('link' => "$lang->calendar|my|calendar|", 'subModule' => 'todo', 'alias' => 'todo'); $lang->my->menu->work = array('link' => "{$lang->my->work}|my|work|mode=task", 'subModule' => 'task'); $lang->my->menu->project = array('link' => "{$lang->project->common}|my|project|"); +$lang->my->menu->execution = array('link' => "{$lang->execution->common}|my|execution|type=undone"); $lang->my->menu->contribute = array('link' => "$lang->contribute|my|contribute|mode=task"); $lang->my->menu->dynamic = array('link' => "$lang->dynamic|my|dynamic|"); +$lang->my->menu->score = array('link' => "{$lang->score->shortCommon}|my|score|", 'subModule' => 'score'); $lang->my->menu->contacts = array('link' => "$lang->contact|my|managecontacts|"); -if($config->systemScore) $lang->my->menu->score = array('link' => "{$lang->score->shortCommon}|my|score|", 'subModule' => 'score'); -if(!isset($config->projectMode) || $config->projectMode != 'noExecution') $lang->my->menu->execution = array('link' => "{$lang->execution->common}|my|execution|type=undone"); /* My menu order. */ $lang->my->menuOrder[5] = 'index'; @@ -85,13 +88,16 @@ $lang->my->menuOrder[40] = 'dynamic'; $lang->my->menuOrder[45] = 'score'; $lang->my->menuOrder[50] = 'contacts'; -$lang->my->menu->work['subMenu'] = new stdclass(); -$lang->my->menu->work['subMenu']->task = array('link' => "{$lang->task->common}|my|work|mode=task", 'subModule' => 'task'); -$lang->my->menu->work['subMenu']->story = "$lang->SRCommon|my|work|mode=story"; -$lang->my->menu->work['subMenu']->bug = "{$lang->bug->common}|my|work|mode=bug"; -$lang->my->menu->work['subMenu']->testcase = array('link' => "{$lang->testcase->common}|my|work|mode=testcase&type=assigntome", 'subModule' => 'testtask'); -$lang->my->menu->work['subMenu']->testtask = "{$lang->testtask->common}|my|work|mode=testtask&type=wait"; -if($config->URAndSR) $lang->my->menu->work['subMenu']->requirement = "$lang->URCommon|my|work|mode=requirement"; +if(!$config->systemScore) unset($lang->my->menu->score, $lang->my->menuOrder[45]); +if(isset($config->projectMode) and $config->projectMode == 'noExecution') unset($lang->my->menu->execution, $lang->my->menuOrder[30]); + +$lang->my->menu->work['subMenu'] = new stdclass(); +$lang->my->menu->work['subMenu']->task = array('link' => "{$lang->task->common}|my|work|mode=task", 'subModule' => 'task'); +$lang->my->menu->work['subMenu']->requirement = "$lang->URCommon|my|work|mode=requirement"; +$lang->my->menu->work['subMenu']->story = "$lang->SRCommon|my|work|mode=story"; +$lang->my->menu->work['subMenu']->bug = "{$lang->bug->common}|my|work|mode=bug"; +$lang->my->menu->work['subMenu']->testcase = array('link' => "{$lang->testcase->common}|my|work|mode=testcase&type=assigntome", 'subModule' => 'testtask'); +$lang->my->menu->work['subMenu']->testtask = "{$lang->testtask->common}|my|work|mode=testtask&type=wait"; $lang->my->menu->work['menuOrder'][5] = 'task'; $lang->my->menu->work['menuOrder'][10] = 'requirement'; @@ -99,15 +105,16 @@ $lang->my->menu->work['menuOrder'][15] = 'story'; $lang->my->menu->work['menuOrder'][20] = 'bug'; $lang->my->menu->work['menuOrder'][25] = 'testcase'; $lang->my->menu->work['menuOrder'][30] = 'testtask'; +if(!$config->URAndSR) unset($lang->my->menu->work['subMenu']->requirement, $lang->my->menu->work['menuOrder'][10]); -$lang->my->menu->contribute['subMenu'] = new stdclass(); -$lang->my->menu->contribute['subMenu']->task = "{$lang->task->common}|my|contribute|mode=task"; -$lang->my->menu->contribute['subMenu']->story = "$lang->SRCommon|my|contribute|mode=story"; -$lang->my->menu->contribute['subMenu']->bug = "{$lang->bug->common}|my|contribute|mode=bug"; -$lang->my->menu->contribute['subMenu']->testcase = "{$lang->testcase->shortCommon}|my|contribute|mode=testcase&type=openedbyme"; -$lang->my->menu->contribute['subMenu']->testtask = "{$lang->testtask->common}|my|contribute|mode=testtask&type=done"; -$lang->my->menu->contribute['subMenu']->doc = "{$lang->doc->common}|my|contribute|mode=doc&type=openedbyme"; -if($config->URAndSR) $lang->my->menu->contribute['subMenu']->requirement = "$lang->URCommon|my|contribute|mode=requirement"; +$lang->my->menu->contribute['subMenu'] = new stdclass(); +$lang->my->menu->contribute['subMenu']->task = "{$lang->task->common}|my|contribute|mode=task"; +$lang->my->menu->contribute['subMenu']->requirement = "$lang->URCommon|my|contribute|mode=requirement"; +$lang->my->menu->contribute['subMenu']->story = "$lang->SRCommon|my|contribute|mode=story"; +$lang->my->menu->contribute['subMenu']->bug = "{$lang->bug->common}|my|contribute|mode=bug"; +$lang->my->menu->contribute['subMenu']->testcase = "{$lang->testcase->shortCommon}|my|contribute|mode=testcase&type=openedbyme"; +$lang->my->menu->contribute['subMenu']->testtask = "{$lang->testtask->common}|my|contribute|mode=testtask&type=done"; +$lang->my->menu->contribute['subMenu']->doc = "{$lang->doc->common}|my|contribute|mode=doc&type=openedbyme"; $lang->my->menu->contribute['menuOrder'][5] = 'task'; $lang->my->menu->contribute['menuOrder'][10] = 'requirement'; @@ -117,6 +124,8 @@ $lang->my->menu->contribute['menuOrder'][25] = 'testcase'; $lang->my->menu->contribute['menuOrder'][30] = 'testtask'; $lang->my->menu->contribute['menuOrder'][35] = 'doc'; +if(!$config->URAndSR) unset($lang->my->menu->contribute['subMenu']->requirement, $lang->my->menu->contribute['menuOrder'][10]); + $lang->my->dividerMenu = ',work,dynamic,'; /* Program menu. */ @@ -147,18 +156,18 @@ $lang->product->homeMenu->home = array('link' => "{$lang->dashboard}|product|i $lang->product->homeMenu->list = array('link' => $lang->product->list . '|product|all|', 'alias' => 'create,batchedit,manageline'); $lang->product->homeMenu->kanban = array('link' => "{$lang->product->kanban}|product|kanban|"); -$lang->product->menu = new stdclass(); -$lang->product->menu->dashboard = array('link' => "{$lang->dashboard}|product|dashboard|productID=%s"); -$lang->product->menu->story = array('link' => "$lang->SRCommon|product|browse|productID=%s", 'alias' => 'batchedit', 'subModule' => 'story'); -$lang->product->menu->plan = array('link' => "{$lang->productplan->shortCommon}|productplan|browse|productID=%s", 'subModule' => 'productplan,bug'); -$lang->product->menu->project = array('link' => "{$lang->project->common}|product|project|status=all&productID=%s"); -$lang->product->menu->release = array('link' => "{$lang->release->common}|release|browse|productID=%s", 'subModule' => 'release'); -$lang->product->menu->roadmap = array('link' => "{$lang->roadmap}|product|roadmap|productID=%s"); -$lang->product->menu->track = array('link' => "{$lang->track}|product|track|productID=%s"); -$lang->product->menu->doc = array('link' => "{$lang->doc->common}|doc|tableContents|type=product&objectID=%s", 'subModule' => 'doc'); -$lang->product->menu->dynamic = array('link' => "{$lang->dynamic}|product|dynamic|productID=%s"); -$lang->product->menu->settings = array('link' => "{$lang->settings}|product|view|productID=%s", 'subModule' => 'tree,branch', 'alias' => 'edit,whitelist,addwhitelist'); -if($config->URAndSR) $lang->product->menu->requirement = array('link' => "$lang->URCommon|product|browse|productID=%s&branch=&browseType=unclosed¶m=0&storyType=requirement", 'alias' => 'batchedit', 'subModule' => 'story'); +$lang->product->menu = new stdclass(); +$lang->product->menu->dashboard = array('link' => "{$lang->dashboard}|product|dashboard|productID=%s"); +$lang->product->menu->story = array('link' => "$lang->SRCommon|product|browse|productID=%s", 'alias' => 'batchedit', 'subModule' => 'story'); +$lang->product->menu->plan = array('link' => "{$lang->productplan->shortCommon}|productplan|browse|productID=%s", 'subModule' => 'productplan,bug'); +$lang->product->menu->project = array('link' => "{$lang->project->common}|product|project|status=all&productID=%s"); +$lang->product->menu->release = array('link' => "{$lang->release->common}|release|browse|productID=%s", 'subModule' => 'release'); +$lang->product->menu->roadmap = array('link' => "{$lang->roadmap}|product|roadmap|productID=%s"); +$lang->product->menu->requirement = array('link' => "$lang->URCommon|product|browse|productID=%s&branch=&browseType=unclosed¶m=0&storyType=requirement", 'alias' => 'batchedit', 'subModule' => 'story'); +$lang->product->menu->track = array('link' => "{$lang->track}|product|track|productID=%s"); +$lang->product->menu->doc = array('link' => "{$lang->doc->common}|doc|tableContents|type=product&objectID=%s", 'subModule' => 'doc'); +$lang->product->menu->dynamic = array('link' => "{$lang->dynamic}|product|dynamic|productID=%s"); +$lang->product->menu->settings = array('link' => "{$lang->settings}|product|view|productID=%s", 'subModule' => 'tree,branch', 'alias' => 'edit,whitelist,addwhitelist'); /* Product menu order. */ $lang->product->menuOrder[5] = 'dashboard'; @@ -175,6 +184,8 @@ $lang->product->menuOrder[55] = 'settings'; $lang->product->menuOrder[60] = 'create'; $lang->product->menuOrder[65] = 'all'; +if(!$config->URAndSR) unset($lang->product->menu->requirement, $lang->product->menuOrder[35]); + $lang->product->menu->doc['subMenu'] = new stdclass(); $lang->product->menu->settings['subMenu'] = new stdclass(); @@ -186,9 +197,9 @@ $lang->product->menu->settings['subMenu']->whitelist = array('link' => "{$lang-> $lang->product->dividerMenu = $config->URAndSR ? ',story,requirement,settings,' : ',story,track,settings,'; /* Project menu. */ -$lang->project->homeMenu = new stdclass(); -$lang->project->homeMenu->browse = array('link' => ($config->systemMode == 'new' ? $lang->project->list : $lang->executionCommon) . '|project|browse|', 'alias' => 'batchedit,create'); -if($config->systemMode == 'new') $lang->project->homeMenu->kanban = array('link' => "{$lang->project->kanban}|project|kanban|"); +$lang->project->homeMenu = new stdclass(); +$lang->project->homeMenu->browse = array('link' => "{$lang->project->list}|project|browse|", 'alias' => 'batchedit,create'); +$lang->project->homeMenu->kanban = array('link' => "{$lang->project->kanban}|project|kanban|"); /* Scrum menu. */ $lang->scrum->menu = new stdclass(); @@ -312,6 +323,7 @@ $lang->execution->menu->task = array('link' => "{$lang->task->common}|executio $lang->execution->menu->kanban = array('link' => "$lang->executionKanban|execution|taskkanban|executionID=%s"); $lang->execution->menu->burn = array('link' => "$lang->burn|execution|burn|executionID=%s"); $lang->execution->menu->view = array('link' => "$lang->view|execution|grouptask|executionID=%s", 'alias' => 'grouptask,tree,taskeffort,gantt,calendar,relation,maintainrelation'); + if($config->edition != 'open') $lang->execution->menu->view = array('link' => "$lang->view|execution|gantt|executionID=%s", 'alias' => 'grouptask,tree,taskeffort,gantt,calendar,relation,maintainrelation'); $lang->execution->menu->story = array('link' => "$lang->SRCommon|execution|story|executionID=%s", 'subModule' => 'story', 'alias' => 'batchcreate,linkstory,storykanban,batchtotask'); @@ -433,8 +445,8 @@ $lang->doc->menu->collect = array('link' => "{$lang->doc->favorite}|doc|browse $lang->doc->menu->product = array('link' => "{$lang->doc->product}|doc|tableContents|type=product", 'alias' => 'showfiles,product'); $lang->doc->menu->api = array('link' => "{$lang->doc->api}|api|index", 'alias' => 'api'); $lang->doc->menu->project = array('link' => "{$lang->doc->project}|doc|tableContents|type=project", 'alias' => 'showfiles,project'); +$lang->doc->menu->execution = array('link' => "{$lang->doc->execution}|doc|tableContents|type=execution", 'alias' => 'showfiles,execution'); $lang->doc->menu->custom = array('link' => "{$lang->doc->custom}|doc|tableContents|type=custom", 'alias' => 'custom'); -if(!isset($config->projectMode) || $config->projectMode != 'noExecution') $lang->doc->menu->execution = array('link' => "{$lang->doc->execution}|doc|tableContents|type=execution", 'alias' => 'showfiles,execution'); $lang->doc->dividerMenu = ',product,'; @@ -445,14 +457,16 @@ $lang->doc->menuOrder[15] = 'my'; $lang->doc->menuOrder[20] = 'collect'; $lang->doc->menuOrder[25] = 'product'; $lang->doc->menuOrder[30] = 'project'; +$lang->doc->menuOrder[35] = 'execution'; $lang->doc->menuOrder[36] = 'api'; $lang->doc->menuOrder[40] = 'custom'; -if(!isset($config->projectMode) || $config->projectMode != 'noExecution') $lang->doc->menuOrder[35] = 'execution'; +if(isset($config->projectMode) and $config->projectMode == 'noExecution') unset($lang->doc->menu->execution, $lang->doc->menuOrder[35]); -$lang->doc->menu->product['subMenu'] = new stdclass(); -$lang->doc->menu->project['subMenu'] = new stdclass(); -$lang->doc->menu->custom['subMenu'] = new stdclass(); -if(!isset($config->projectMode) || $config->projectMode != 'noExecution') $lang->doc->menu->execution['subMenu'] = new stdclass(); +$lang->doc->menu->product['subMenu'] = new stdclass(); +$lang->doc->menu->project['subMenu'] = new stdclass(); +$lang->doc->menu->execution['subMenu'] = new stdclass(); +$lang->doc->menu->custom['subMenu'] = new stdclass(); +if(isset($config->projectMode) and $config->projectMode == 'noExecution') unset($lang->doc->menu->execution['subMenu']); $lang->doc->menu->api['subMenu'] = new stdclass(); $lang->doc->menu->api['subMenu']->index = array('link' => "{$lang->doc->apiDoc}|api|index|libID=%s", 'alias' => 'create,edit'); diff --git a/module/common/lang/zh-cn.php b/module/common/lang/zh-cn.php index dd93f2b400..f1becbb1c1 100644 --- a/module/common/lang/zh-cn.php +++ b/module/common/lang/zh-cn.php @@ -345,7 +345,7 @@ $lang->createObjects['bug'] = 'Bug'; $lang->createObjects['story'] = '需求'; $lang->createObjects['task'] = '任务'; $lang->createObjects['testcase'] = '用例'; -$lang->createObjects['execution'] = $lang->execution->common; +$lang->createObjects['execution'] = '执行'; $lang->createObjects['project'] = '项目'; $lang->createObjects['product'] = '产品'; $lang->createObjects['program'] = '项目集'; diff --git a/module/common/model.php b/module/common/model.php index fe83b77fde..3390089b3b 100644 --- a/module/common/model.php +++ b/module/common/model.php @@ -623,8 +623,8 @@ class commonModel extends model if($config->systemMode != 'new') unset($lang->createIcons['program']); if(!isset($config->projectMode) || $config->projectMode == 'noExecution') unset($lang->createIcons['execution']); - /* Check whether the creation permission is available, and print create buttons. */ + foreach($lang->createIcons as $objectType => $objectIcon) { $createMethod = 'create'; diff --git a/module/doc/control.php b/module/doc/control.php index cbadd7763d..29ee7ee417 100755 --- a/module/doc/control.php +++ b/module/doc/control.php @@ -506,8 +506,8 @@ class doc extends control unset($this->lang->doc->menu->product['subMenu']); unset($this->lang->doc->menu->custom['subMenu']); - if($this->config->systemMode == 'new') unset($this->lang->doc->menu->project['subMenu']); - if($this->config->systemMode == 'classic') unset($this->lang->doc->menu->execution['subMenu']); + unset($this->lang->doc->menu->project['subMenu']); + unset($this->lang->doc->menu->execution['subMenu']); /* High light menu. */ if(strpos(',product,project,execution,custom,book,', ",$objectType,") !== false) @@ -626,7 +626,6 @@ class doc extends control { $doc = $this->doc->getByID($docID); $objectType = $this->dao->select('type')->from(TABLE_DOCLIB)->where('id')->eq($doc->lib)->fetch('type'); - if($this->config->systemMode == 'classic' and $objectType == 'project') $objectType = 'execution'; $this->doc->delete(TABLE_DOC, $docID); /* if ajax request, send result. */ @@ -1119,7 +1118,6 @@ class doc extends control $lib = $this->doc->getLibById($libID); if(!empty($lib) and $lib->deleted == '1') $appendLib = $libID; - if($this->config->systemMode == 'classic' and $type == 'project') $type = 'execution'; list($libs, $libID, $object, $objectID) = $this->doc->setMenuByType($type, $objectID, $libID, $appendLib); /* Set Custom. */ diff --git a/module/group/control.php b/module/group/control.php index 2f32259e70..942d36293e 100644 --- a/module/group/control.php +++ b/module/group/control.php @@ -209,14 +209,6 @@ class group extends control $group = $this->group->getById($groupID); $groupPrivs = $this->group->getPrivs($groupID); - if($this->config->systemMode == 'classic') - { - if(isset($groupPrivs['project']['browse'])) - { - $groupPrivs['project']['list'] = 'list'; - } - } - $this->view->title = $this->lang->company->common . $this->lang->colon . $group->name . $this->lang->colon . $this->lang->group->managePriv; $this->view->position[] = $group->name; $this->view->position[] = $this->lang->group->managePriv; diff --git a/module/group/lang/resource.php b/module/group/lang/resource.php index a0ff9f225b..12118a855c 100644 --- a/module/group/lang/resource.php +++ b/module/group/lang/resource.php @@ -88,6 +88,7 @@ $lang->resource->my->todo = 'todo'; $lang->resource->my->calendar = 'calendarAction'; $lang->resource->my->work = 'workAction'; $lang->resource->my->contribute = 'contributeAction'; +$lang->resource->my->project = 'project'; $lang->resource->my->profile = 'profileAction'; $lang->resource->my->uploadAvatar = 'uploadAvatar'; $lang->resource->my->preference = 'preference'; @@ -151,36 +152,226 @@ $lang->personnel->methodOrder[10] = 'invest'; $lang->personnel->methodOrder[15] = 'whitelist'; $lang->personnel->methodOrder[20] = 'addWhitelist'; +/* Design. */ +$lang->resource->design = new stdclass(); +$lang->resource->design->browse = 'browse'; +$lang->resource->design->view = 'view'; +$lang->resource->design->create = 'create'; +$lang->resource->design->batchCreate = 'batchCreate'; +$lang->resource->design->edit = 'edit'; +$lang->resource->design->assignTo = 'assignTo'; +$lang->resource->design->delete = 'delete'; +$lang->resource->design->linkCommit = 'linkCommit'; +$lang->resource->design->viewCommit = 'viewCommit'; +$lang->resource->design->unlinkCommit = 'unlinkCommit'; +$lang->resource->design->revision = 'revision'; + +$lang->design->methodOrder[5] = 'browse'; +$lang->design->methodOrder[10] = 'view'; +$lang->design->methodOrder[15] = 'create'; +$lang->design->methodOrder[20] = 'batchCreate'; +$lang->design->methodOrder[25] = 'edit'; +$lang->design->methodOrder[30] = 'assignTo'; +$lang->design->methodOrder[35] = 'delete'; +$lang->design->methodOrder[40] = 'linkCommit'; +$lang->design->methodOrder[45] = 'viewCommit'; +$lang->design->methodOrder[50] = 'unlinkCommit'; +$lang->design->methodOrder[55] = 'revision'; + +/* Program plan. */ +$lang->resource->programplan = new stdclass(); +$lang->resource->programplan->create = 'create'; +$lang->resource->programplan->edit = 'edit'; + +$lang->programplan->methodOrder[0] = 'create'; +$lang->programplan->methodOrder[5] = 'edit'; + +/* Project. */ +$lang->resource->project = new stdclass(); +$lang->resource->project->index = 'index'; +$lang->resource->project->browse = 'browse'; +$lang->resource->project->kanban = 'kanban'; +$lang->resource->project->create = 'create'; +$lang->resource->project->edit = 'edit'; +$lang->resource->project->batchEdit = 'batchEdit'; +$lang->resource->project->group = 'group'; +$lang->resource->project->createGroup = 'createGroup'; +$lang->resource->project->managePriv = 'managePriv'; +$lang->resource->project->manageMembers = 'manageMembers'; +$lang->resource->project->manageGroupMember = 'manageGroupMember'; +$lang->resource->project->copyGroup = 'copyGroup'; +$lang->resource->project->editGroup = 'editGroup'; +$lang->resource->project->start = 'start'; +$lang->resource->project->suspend = 'suspend'; +$lang->resource->project->close = 'close'; +$lang->resource->project->activate = 'activate'; +$lang->resource->project->delete = 'delete'; +$lang->resource->project->view = 'view'; +$lang->resource->project->whitelist = 'whitelist'; +$lang->resource->project->addWhitelist = 'addWhitelist'; +$lang->resource->project->unbindWhitelist = 'unbindWhitelist'; +$lang->resource->project->manageProducts = 'manageProducts'; +$lang->resource->project->dynamic = 'dynamic'; +$lang->resource->project->build = 'build'; +$lang->resource->project->qa = 'qa'; +$lang->resource->project->bug = 'bug'; +$lang->resource->project->testcase = 'testcase'; +$lang->resource->project->testtask = 'testtask'; +$lang->resource->project->testreport = 'testreport'; +$lang->resource->project->execution = 'execution'; +$lang->resource->project->export = 'export'; +$lang->resource->project->updateOrder = 'updateOrder'; +$lang->resource->project->team = 'teamAction'; +$lang->resource->project->unlinkMember = 'unlinkMember'; + +$lang->project->methodOrder[0] = 'index'; +$lang->project->methodOrder[5] = 'browse'; +$lang->project->methodOrder[10] = 'kanban'; +$lang->project->methodOrder[15] = 'projectTitle'; +$lang->project->methodOrder[20] = 'create'; +$lang->project->methodOrder[25] = 'edit'; +$lang->project->methodOrder[30] = 'batchEdit'; +$lang->project->methodOrder[35] = 'group'; +$lang->project->methodOrder[40] = 'createGroup'; +$lang->project->methodOrder[45] = 'managePriv'; +$lang->project->methodOrder[50] = 'manageMembers'; +$lang->project->methodOrder[55] = 'manageGroupMember'; +$lang->project->methodOrder[60] = 'copyGroup'; +$lang->project->methodOrder[65] = 'editGroup'; +$lang->project->methodOrder[70] = 'start'; +$lang->project->methodOrder[75] = 'suspend'; +$lang->project->methodOrder[80] = 'close'; +$lang->project->methodOrder[85] = 'activate'; +$lang->project->methodOrder[90] = 'updateOrder'; +$lang->project->methodOrder[95] = 'delete'; +$lang->project->methodOrder[100] = 'view'; +$lang->project->methodOrder[105] = 'whitelist'; +$lang->project->methodOrder[110] = 'addWhitelist'; +$lang->project->methodOrder[115] = 'unbindWhitelist'; +$lang->project->methodOrder[120] = 'manageProducts'; +$lang->project->methodOrder[125] = 'view'; +$lang->project->methodOrder[130] = 'dynamic'; +$lang->project->methodOrder[135] = 'build'; +$lang->project->methodOrder[140] = 'qa'; +$lang->project->methodOrder[145] = 'bug'; +$lang->project->methodOrder[150] = 'testcase'; +$lang->project->methodOrder[155] = 'testtask'; +$lang->project->methodOrder[160] = 'testreport'; +$lang->project->methodOrder[165] = 'execution'; +$lang->project->methodOrder[170] = 'export'; +$lang->project->methodOrder[175] = 'updateOrder'; +$lang->project->methodOrder[180] = 'team'; +$lang->project->methodOrder[185] = 'unlinkMember'; + +$lang->resource->projectbuild = new stdclass(); +$lang->resource->projectbuild->browse = 'browse'; + +$lang->projectbuild->methodOrder[5] = 'browse'; + +/* Project Story. */ +$lang->resource->projectstory = new stdclass(); +$lang->resource->projectstory->story = 'story'; +$lang->resource->projectstory->track = 'trackAction'; +$lang->resource->projectstory->view = 'view'; +$lang->resource->projectstory->linkStory = 'linkStory'; +$lang->resource->projectstory->unlinkStory = 'unlinkStory'; +$lang->resource->projectstory->batchUnlinkStory = 'batchUnlinkStory'; +$lang->resource->projectstory->importplanstories = 'importplanstories'; + +$lang->projectstory->methodOrder[5] = 'story'; +$lang->projectstory->methodOrder[10] = 'track'; +$lang->projectstory->methodOrder[15] = 'view'; +$lang->projectstory->methodOrder[20] = 'linkStory'; +$lang->projectstory->methodOrder[25] = 'unlinkStory'; +$lang->projectstory->methodOrder[23] = 'importplanstories'; + +/* Release. */ +$lang->resource->projectrelease = new stdclass(); +$lang->resource->projectrelease->browse = 'browseAction'; +$lang->resource->projectrelease->create = 'create'; +$lang->resource->projectrelease->edit = 'edit'; +$lang->resource->projectrelease->delete = 'delete'; +$lang->resource->projectrelease->view = 'view'; +$lang->resource->projectrelease->export = 'export'; +$lang->resource->projectrelease->linkStory = 'linkStory'; +$lang->resource->projectrelease->unlinkStory = 'unlinkStory'; +$lang->resource->projectrelease->batchUnlinkStory = 'batchUnlinkStory'; +$lang->resource->projectrelease->linkBug = 'linkBug'; +$lang->resource->projectrelease->unlinkBug = 'unlinkBug'; +$lang->resource->projectrelease->batchUnlinkBug = 'batchUnlinkBug'; +$lang->resource->projectrelease->changeStatus = 'changeStatus'; +$lang->resource->projectrelease->notify = 'notify'; + +$lang->projectrelease->methodOrder[5] = 'browse'; +$lang->projectrelease->methodOrder[10] = 'create'; +$lang->projectrelease->methodOrder[15] = 'edit'; +$lang->projectrelease->methodOrder[20] = 'delete'; +$lang->projectrelease->methodOrder[25] = 'view'; +$lang->projectrelease->methodOrder[35] = 'export'; +$lang->projectrelease->methodOrder[40] = 'linkStory'; +$lang->projectrelease->methodOrder[45] = 'unlinkStory'; +$lang->projectrelease->methodOrder[50] = 'batchUnlinkStory'; +$lang->projectrelease->methodOrder[55] = 'linkBug'; +$lang->projectrelease->methodOrder[60] = 'unlinkBug'; +$lang->projectrelease->methodOrder[65] = 'batchUnlinkBug'; +$lang->projectrelease->methodOrder[70] = 'changeStatus'; +$lang->projectrelease->methodOrder[75] = 'notify'; + +/* Stage. */ +$lang->resource->stage = new stdclass(); +$lang->resource->stage->browse = 'browse'; +$lang->resource->stage->create = 'create'; +$lang->resource->stage->batchCreate = 'batchCreate'; +$lang->resource->stage->edit = 'edit'; +$lang->resource->stage->setType = 'setType'; +$lang->resource->stage->delete = 'delete'; + +$lang->stage->methodOrder[5] = 'browse'; +$lang->stage->methodOrder[10] = 'create'; +$lang->stage->methodOrder[15] = 'batchCreate'; +$lang->stage->methodOrder[20] = 'edit'; +$lang->stage->methodOrder[25] = 'setType'; +$lang->stage->methodOrder[30] = 'delete'; + +/* Stakeholer. */ +$lang->resource->stakeholder = new stdclass(); +$lang->resource->stakeholder->browse = 'browse'; +$lang->resource->stakeholder->create = 'create'; +$lang->resource->stakeholder->batchCreate = 'batchCreate'; +$lang->resource->stakeholder->edit = 'edit'; +$lang->resource->stakeholder->delete = 'delete'; +$lang->resource->stakeholder->view = 'viewAction'; +$lang->resource->stakeholder->issue = 'issue'; +$lang->resource->stakeholder->viewIssue = 'viewIssueAction'; +$lang->resource->stakeholder->communicate = 'communicate'; +$lang->resource->stakeholder->expect = 'expect'; +$lang->resource->stakeholder->expectation = 'expectation'; +$lang->resource->stakeholder->deleteExpect = 'deleteExpect'; +$lang->resource->stakeholder->createExpect = 'createExpect'; +$lang->resource->stakeholder->editExpect = 'editExpect'; +$lang->resource->stakeholder->viewExpect = 'viewExpect'; +$lang->resource->stakeholder->userIssue = 'userIssue'; + +$lang->stakeholder->methodOrder[5] = 'browse'; +$lang->stakeholder->methodOrder[10] = 'create'; +$lang->stakeholder->methodOrder[13] = 'batchCreate'; +$lang->stakeholder->methodOrder[15] = 'edit'; +$lang->stakeholder->methodOrder[25] = 'delete'; +$lang->stakeholder->methodOrder[30] = 'view'; +$lang->stakeholder->methodOrder[35] = 'issue'; +$lang->stakeholder->methodOrder[40] = 'viewIssue'; +$lang->stakeholder->methodOrder[45] = 'communicate'; +$lang->stakeholder->methodOrder[50] = 'expect'; +$lang->stakeholder->methodOrder[55] = 'expectation'; +$lang->stakeholder->methodOrder[60] = 'deleteExpect'; +$lang->stakeholder->methodOrder[65] = 'createExpect'; +$lang->stakeholder->methodOrder[70] = 'editExpect'; +$lang->stakeholder->methodOrder[75] = 'viewExpect'; +$lang->stakeholder->methodOrder[80] = 'userIssue'; + global $config; if($config->systemMode == 'new') { - $lang->resource->my->project = 'project'; - - /* Design. */ - $lang->resource->design = new stdclass(); - $lang->resource->design->browse = 'browse'; - $lang->resource->design->view = 'view'; - $lang->resource->design->create = 'create'; - $lang->resource->design->batchCreate = 'batchCreate'; - $lang->resource->design->edit = 'edit'; - $lang->resource->design->assignTo = 'assignTo'; - $lang->resource->design->delete = 'delete'; - $lang->resource->design->linkCommit = 'linkCommit'; - $lang->resource->design->viewCommit = 'viewCommit'; - $lang->resource->design->unlinkCommit = 'unlinkCommit'; - $lang->resource->design->revision = 'revision'; - - $lang->design->methodOrder[5] = 'browse'; - $lang->design->methodOrder[10] = 'view'; - $lang->design->methodOrder[15] = 'create'; - $lang->design->methodOrder[20] = 'batchCreate'; - $lang->design->methodOrder[25] = 'edit'; - $lang->design->methodOrder[30] = 'assignTo'; - $lang->design->methodOrder[35] = 'delete'; - $lang->design->methodOrder[40] = 'linkCommit'; - $lang->design->methodOrder[45] = 'viewCommit'; - $lang->design->methodOrder[50] = 'unlinkCommit'; - $lang->design->methodOrder[55] = 'revision'; /* Program. */ $lang->resource->program = new stdclass(); @@ -223,197 +414,7 @@ if($config->systemMode == 'new') $lang->program->methodOrder[90] = 'unbindWhitelist'; $lang->program->methodOrder[95] = 'updateOrder'; - /* Program plan. */ - $lang->resource->programplan = new stdclass(); - $lang->resource->programplan->create = 'create'; - $lang->resource->programplan->edit = 'edit'; - - $lang->programplan->methodOrder[0] = 'create'; - $lang->programplan->methodOrder[5] = 'edit'; - - /* Project. */ - $lang->resource->project = new stdclass(); - $lang->resource->project->index = 'index'; - $lang->resource->project->browse = 'browse'; - $lang->resource->project->kanban = 'kanban'; - $lang->resource->project->programTitle = 'moduleOpen'; - $lang->resource->project->create = 'create'; - $lang->resource->project->edit = 'edit'; - $lang->resource->project->batchEdit = 'batchEdit'; - $lang->resource->project->group = 'group'; - $lang->resource->project->createGroup = 'createGroup'; - $lang->resource->project->managePriv = 'managePriv'; - $lang->resource->project->manageMembers = 'manageMembers'; - $lang->resource->project->manageGroupMember = 'manageGroupMember'; - $lang->resource->project->copyGroup = 'copyGroup'; - $lang->resource->project->editGroup = 'editGroup'; - $lang->resource->project->start = 'start'; - $lang->resource->project->suspend = 'suspend'; - $lang->resource->project->close = 'close'; - $lang->resource->project->activate = 'activate'; - $lang->resource->project->delete = 'delete'; - $lang->resource->project->view = 'view'; - $lang->resource->project->whitelist = 'whitelist'; - $lang->resource->project->addWhitelist = 'addWhitelist'; - $lang->resource->project->unbindWhitelist = 'unbindWhitelist'; - $lang->resource->project->manageProducts = 'manageProducts'; - $lang->resource->project->dynamic = 'dynamic'; - $lang->resource->project->build = 'build'; - $lang->resource->project->qa = 'qa'; - $lang->resource->project->bug = 'bug'; - $lang->resource->project->testcase = 'testcase'; - $lang->resource->project->testtask = 'testtask'; - $lang->resource->project->testreport = 'testreport'; - $lang->resource->project->execution = 'execution'; - $lang->resource->project->export = 'export'; - $lang->resource->project->updateOrder = 'updateOrder'; - $lang->resource->project->team = 'teamAction'; - $lang->resource->project->unlinkMember = 'unlinkMember'; - - $lang->project->methodOrder[0] = 'index'; - $lang->project->methodOrder[5] = 'browse'; - $lang->project->methodOrder[10] = 'kanban'; - $lang->project->methodOrder[15] = 'projectTitle'; - $lang->project->methodOrder[20] = 'create'; - $lang->project->methodOrder[25] = 'edit'; - $lang->project->methodOrder[30] = 'batchEdit'; - $lang->project->methodOrder[35] = 'group'; - $lang->project->methodOrder[40] = 'createGroup'; - $lang->project->methodOrder[45] = 'managePriv'; - $lang->project->methodOrder[50] = 'manageMembers'; - $lang->project->methodOrder[55] = 'manageGroupMember'; - $lang->project->methodOrder[60] = 'copyGroup'; - $lang->project->methodOrder[65] = 'editGroup'; - $lang->project->methodOrder[70] = 'start'; - $lang->project->methodOrder[75] = 'suspend'; - $lang->project->methodOrder[80] = 'close'; - $lang->project->methodOrder[85] = 'activate'; - $lang->project->methodOrder[90] = 'updateOrder'; - $lang->project->methodOrder[95] = 'delete'; - $lang->project->methodOrder[100] = 'view'; - $lang->project->methodOrder[105] = 'whitelist'; - $lang->project->methodOrder[110] = 'addWhitelist'; - $lang->project->methodOrder[115] = 'unbindWhitelist'; - $lang->project->methodOrder[120] = 'manageProducts'; - $lang->project->methodOrder[125] = 'view'; - $lang->project->methodOrder[130] = 'dynamic'; - $lang->project->methodOrder[135] = 'build'; - $lang->project->methodOrder[140] = 'qa'; - $lang->project->methodOrder[145] = 'bug'; - $lang->project->methodOrder[150] = 'testcase'; - $lang->project->methodOrder[155] = 'testtask'; - $lang->project->methodOrder[160] = 'testreport'; - $lang->project->methodOrder[165] = 'execution'; - $lang->project->methodOrder[170] = 'export'; - $lang->project->methodOrder[175] = 'updateOrder'; - $lang->project->methodOrder[180] = 'team'; - $lang->project->methodOrder[185] = 'unlinkMember'; - - $lang->resource->projectbuild = new stdclass(); - $lang->resource->projectbuild->browse = 'browse'; - - $lang->projectbuild->methodOrder[5] = 'browse'; - - /* Project Story. */ - $lang->resource->projectstory = new stdclass(); - $lang->resource->projectstory->story = 'story'; - $lang->resource->projectstory->track = 'trackAction'; - $lang->resource->projectstory->view = 'view'; - $lang->resource->projectstory->linkStory = 'linkStory'; - $lang->resource->projectstory->unlinkStory = 'unlinkStory'; - $lang->resource->projectstory->batchUnlinkStory = 'batchUnlinkStory'; - $lang->resource->projectstory->importplanstories = 'importplanstories'; - - $lang->projectstory->methodOrder[5] = 'story'; - $lang->projectstory->methodOrder[10] = 'track'; - $lang->projectstory->methodOrder[15] = 'view'; - $lang->projectstory->methodOrder[20] = 'linkStory'; - $lang->projectstory->methodOrder[25] = 'unlinkStory'; - $lang->projectstory->methodOrder[23] = 'importplanstories'; - - /* Release. */ - $lang->resource->projectrelease = new stdclass(); - $lang->resource->projectrelease->browse = 'browseAction'; - $lang->resource->projectrelease->create = 'create'; - $lang->resource->projectrelease->edit = 'edit'; - $lang->resource->projectrelease->delete = 'delete'; - $lang->resource->projectrelease->view = 'view'; - $lang->resource->projectrelease->export = 'export'; - $lang->resource->projectrelease->linkStory = 'linkStory'; - $lang->resource->projectrelease->unlinkStory = 'unlinkStory'; - $lang->resource->projectrelease->batchUnlinkStory = 'batchUnlinkStory'; - $lang->resource->projectrelease->linkBug = 'linkBug'; - $lang->resource->projectrelease->unlinkBug = 'unlinkBug'; - $lang->resource->projectrelease->batchUnlinkBug = 'batchUnlinkBug'; - $lang->resource->projectrelease->changeStatus = 'changeStatus'; - $lang->resource->projectrelease->notify = 'notify'; - - $lang->projectrelease->methodOrder[5] = 'browse'; - $lang->projectrelease->methodOrder[10] = 'create'; - $lang->projectrelease->methodOrder[15] = 'edit'; - $lang->projectrelease->methodOrder[20] = 'delete'; - $lang->projectrelease->methodOrder[25] = 'view'; - $lang->projectrelease->methodOrder[35] = 'export'; - $lang->projectrelease->methodOrder[40] = 'linkStory'; - $lang->projectrelease->methodOrder[45] = 'unlinkStory'; - $lang->projectrelease->methodOrder[50] = 'batchUnlinkStory'; - $lang->projectrelease->methodOrder[55] = 'linkBug'; - $lang->projectrelease->methodOrder[60] = 'unlinkBug'; - $lang->projectrelease->methodOrder[65] = 'batchUnlinkBug'; - $lang->projectrelease->methodOrder[70] = 'changeStatus'; - $lang->projectrelease->methodOrder[75] = 'notify'; - - /* Stage. */ - $lang->resource->stage = new stdclass(); - $lang->resource->stage->browse = 'browse'; - $lang->resource->stage->create = 'create'; - $lang->resource->stage->batchCreate = 'batchCreate'; - $lang->resource->stage->edit = 'edit'; - $lang->resource->stage->setType = 'setType'; - $lang->resource->stage->delete = 'delete'; - - $lang->stage->methodOrder[5] = 'browse'; - $lang->stage->methodOrder[10] = 'create'; - $lang->stage->methodOrder[15] = 'batchCreate'; - $lang->stage->methodOrder[20] = 'edit'; - $lang->stage->methodOrder[25] = 'setType'; - $lang->stage->methodOrder[30] = 'delete'; - - /* Stakeholer. */ - $lang->resource->stakeholder = new stdclass(); - $lang->resource->stakeholder->browse = 'browse'; - $lang->resource->stakeholder->create = 'create'; - $lang->resource->stakeholder->batchCreate = 'batchCreate'; - $lang->resource->stakeholder->edit = 'edit'; - $lang->resource->stakeholder->delete = 'delete'; - $lang->resource->stakeholder->view = 'viewAction'; - $lang->resource->stakeholder->issue = 'issue'; - $lang->resource->stakeholder->viewIssue = 'viewIssueAction'; - $lang->resource->stakeholder->communicate = 'communicate'; - $lang->resource->stakeholder->expect = 'expect'; - $lang->resource->stakeholder->expectation = 'expectation'; - $lang->resource->stakeholder->deleteExpect = 'deleteExpect'; - $lang->resource->stakeholder->createExpect = 'createExpect'; - $lang->resource->stakeholder->editExpect = 'editExpect'; - $lang->resource->stakeholder->viewExpect = 'viewExpect'; - $lang->resource->stakeholder->userIssue = 'userIssue'; - - $lang->stakeholder->methodOrder[5] = 'browse'; - $lang->stakeholder->methodOrder[10] = 'create'; - $lang->stakeholder->methodOrder[13] = 'batchCreate'; - $lang->stakeholder->methodOrder[15] = 'edit'; - $lang->stakeholder->methodOrder[25] = 'delete'; - $lang->stakeholder->methodOrder[30] = 'view'; - $lang->stakeholder->methodOrder[35] = 'issue'; - $lang->stakeholder->methodOrder[40] = 'viewIssue'; - $lang->stakeholder->methodOrder[45] = 'communicate'; - $lang->stakeholder->methodOrder[50] = 'expect'; - $lang->stakeholder->methodOrder[55] = 'expectation'; - $lang->stakeholder->methodOrder[60] = 'deleteExpect'; - $lang->stakeholder->methodOrder[65] = 'createExpect'; - $lang->stakeholder->methodOrder[70] = 'editExpect'; - $lang->stakeholder->methodOrder[75] = 'viewExpect'; - $lang->stakeholder->methodOrder[80] = 'userIssue'; + $lang->resource->project->programTitle = 'moduleOpen'; } /* Product. */ diff --git a/module/group/view/manageprojectadmin.html.php b/module/group/view/manageprojectadmin.html.php index d3cf2665c2..370e3a3cbc 100644 --- a/module/group/view/manageprojectadmin.html.php +++ b/module/group/view/manageprojectadmin.html.php @@ -11,7 +11,7 @@ */ ?> -systemMode == 'classic' and $this->app->getClientLang() == 'en'):?> + @@ -41,24 +41,25 @@ group->allCheck . " ";?> actions;?> - systemMode == 'new'):?> + systemMode == 'new' ? '' : 'hidden';?> + systemMode == 'new' ? 4 : 3;?> $group):?> - +
    group][]", $allUsers, $account, "class='form-control picker-select' multiple");?>
    - +
    programs == 'all' ? "disabled='disabled'" : '';?> group->manageProgram;?> group][]", $programs, $group->programs == 'all' ? '' : $group->programs, "class='form-control picker-select' multiple $disabled");?>
    - + group]", array(1 => ''), $group->programs == 'all' ? 1 : '', "onchange=toggleDisabled(this);");?> - + @@ -103,19 +104,19 @@ - +
    - +
    group->manageProgram;?>
    - + ''), '', "onchange=toggleDisabled(this);");?> - + @@ -154,74 +155,6 @@ - - - $group):?> - - -
    group][]", $allUsers, $account, "class='form-control picker-select' multiple");?>
    - - -
    - products == 'all' ? "disabled='disabled'" : '';?> - group->manageProduct;?> - group][]", $products, $group->products == 'all' ? '' : $group->products, "class='form-control picker-select' multiple $disabled");?> -
    - - - group]", array(1 => ''), $group->products == 'all' ? 1 : '', "onchange=toggleDisabled(this);");?> - - - - - - - - - -
    - executions == 'all' ? "disabled='disabled'" : '';?> - group->manageExecution;?> - group][]", $executions, $group->executions == 'all' ? '' : $group->executions, "class='form-control picker-select' multiple $disabled");?> -
    - - - group]", array(1 => ''), $group->executions == 'all' ? 1 : '', "onchange=toggleDisabled(this);");?> - - - - - - -
    - - -
    - group->manageProduct;?> - -
    - - - ''), '', "onchange=toggleDisabled(this);");?> - - - - - - - - -
    - group->manageExecution;?> - -
    - - - ''), '', "onchange=toggleDisabled(this);");?> - - - - install->guideVideo;?>" width="100%" controls ="controls">

    install->howToUse;?>

    - upgrade->to15Mode['classic']) ? 'classic' : 'new';?> - visions == ',lite,'):?> - install->modeList['classic']);?> -
    install->modeList, $systemMode);?>
    upgrade->selectedModeTips[$systemMode];?>
    diff --git a/module/product/control.php b/module/product/control.php index ee3d3e1427..82c59c5b46 100644 --- a/module/product/control.php +++ b/module/product/control.php @@ -406,8 +406,7 @@ class product extends control if(!empty($this->config->user->moreLink)) $this->config->moreLinks["RD"] = $this->config->user->moreLink; $lines = array(); - if($programID) $lines = array('') + $this->product->getLinePairs($programID); - if($this->config->systemMode == 'classic') $lines = array('') + $this->product->getLinePairs(); + if($programID and $this->config->systemMode == 'new') $lines = array('') + $this->product->getLinePairs($programID); if($this->app->tab == 'doc') unset($this->lang->doc->menu->product['subMenu']); @@ -551,8 +550,7 @@ class product extends control if(!empty($this->config->user->moreLink)) $this->config->moreLinks["RD"] = $this->config->user->moreLink; $lines = array(); - if($product->program) $lines = array('') + $this->product->getLinePairs($product->program); - if($this->config->systemMode == 'classic') $lines = array('') + $this->product->getLinePairs(); + if($product->program and $this->config->systemMode == 'new') $lines = array('') + $this->product->getLinePairs($product->program); /* Get programs. */ $programs = $this->loadModel('program')->getTopPairs(); @@ -1263,7 +1261,7 @@ class product extends control $pager = new pager($recTotal, $recPerPage, $pageID); /* Process product structure. */ - if($this->config->systemMode == 'classic' and $orderBy == 'program_asc') $orderBy = 'line_desc,order_asc'; + if($this->config->systemMode == 'lite' and $orderBy == 'program_asc') $orderBy = 'order_asc'; $productStats = $this->product->getStats($orderBy, $pager, $browseType, '', 'story', '', $queryID); $productStructure = $this->product->statisticProgram($productStats); $productLines = $this->dao->select('*')->from(TABLE_MODULE)->where('type')->eq('line')->andWhere('deleted')->eq(0)->orderBy('`order` asc')->fetchAll(); diff --git a/module/product/model.php b/module/product/model.php index 6d7da2880a..6f3d20c6b0 100644 --- a/module/product/model.php +++ b/module/product/model.php @@ -344,35 +344,19 @@ class productModel 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"; - if($this->config->systemMode == 'new') - { - /* Order by program. */ - return $this->dao->select('t1.*, IF(INSTR(" closed", t1.status) < 2, 0, 1) AS isClosed')->from(TABLE_PRODUCT)->alias('t1') - ->leftJoin(TABLE_PROGRAM)->alias('t2')->on('t1.program = t2.id') - ->where(1) - ->beginIF(strpos($mode, 'all') === false)->andWhere('t1.deleted')->eq(0)->fi() - ->beginIF($programID)->andWhere('t1.program')->eq($programID)->fi() - ->beginIF(strpos($mode, 'noclosed') !== false)->andWhere('t1.status')->ne('closed')->fi() - ->beginIF(!$this->app->user->admin and $this->config->vision == 'rnd')->andWhere('t1.id')->in($views)->fi() - ->andWhere('t1.vision')->eq($this->config->vision) - ->orderBy('isClosed, t2.order_asc, t1.line_desc, t1.order_asc') - ->fetchPairs('id', 'name'); - } - else - { - $orderBy = !empty($this->config->product->orderBy) ? $this->config->product->orderBy : 'isClosed'; - return $this->dao->select('*, IF(INSTR(" closed", status) < 2, 0, 1) AS isClosed') - ->from(TABLE_PRODUCT) - ->where(1) - ->beginIF(strpos($mode, 'all') === false)->andWhere('deleted')->eq(0)->fi() - ->beginIF($programID)->andWhere('program')->eq($programID)->fi() - ->beginIF(strpos($mode, 'noclosed') !== false)->andWhere('status')->ne('closed')->fi() - ->beginIF(!$this->app->user->admin and $this->config->vision == 'rnd')->andWhere('id')->in($views)->fi() - ->andWhere('vision')->eq($this->config->vision) - ->orderBy($orderBy) - ->fetchPairs('id', 'name'); - } + $views = empty($append) ? $this->app->user->view->products : $this->app->user->view->products . ",$append"; + $orderBy = !empty($this->config->product->orderBy) ? $this->config->product->orderBy : 'isClosed'; + /* Order by program. */ + return $this->dao->select('t1.*, IF(INSTR(" closed", t1.status) < 2, 0, 1) AS isClosed')->from(TABLE_PRODUCT)->alias('t1') + ->leftJoin(TABLE_PROGRAM)->alias('t2')->on('t1.program = t2.id') + ->where(1) + ->beginIF(strpos($mode, 'all') === false)->andWhere('t1.deleted')->eq(0)->fi() + ->beginIF($programID)->andWhere('t1.program')->eq($programID)->fi() + ->beginIF(strpos($mode, 'noclosed') !== false)->andWhere('t1.status')->ne('closed')->fi() + ->beginIF(!$this->app->user->admin and $this->config->vision == 'rnd')->andWhere('t1.id')->in($views)->fi() + ->andWhere('t1.vision')->eq($this->config->vision) + ->orderBy("$orderBy, t2.order_asc, t1.line_desc, t1.order_asc") + ->fetchPairs('id', 'name'); } /** @@ -1167,10 +1151,8 @@ class productModel extends model ->leftJoin(TABLE_PROJECT)->alias('t2')->on('t1.project = t2.id') ->where('t1.product')->eq($productID) ->beginIF($status == 'closed')->andWhere('t2.status')->ne('closed')->fi() - ->beginIF($this->config->systemMode == 'new')->andWhere('t2.type')->eq('project')->fi() - ->beginIF($this->config->systemMode == 'classic')->andWhere('t2.type')->eq('sprint')->fi() - ->beginIF(!$this->app->user->admin and $this->config->systemMode == 'new')->andWhere('t2.id')->in($this->app->user->view->projects)->fi() - ->beginIF(!$this->app->user->admin and $this->config->systemMode == 'classic')->andWhere('t2.id')->in($this->app->user->view->sprints)->fi() + ->andWhere('t2.type')->eq('project') + ->beginIF(!$this->app->user->admin)->andWhere('t2.id')->in($this->app->user->view->projects)->fi() ->beginIF($product->type != 'normal' and $branch !== '')->andWhere('t1.branch')->in($branch)->fi() ->andWhere('t2.deleted')->eq('0') ->orderBy('order_asc') @@ -1196,12 +1178,10 @@ class productModel extends model $projectList = $this->dao->select('t2.*')->from(TABLE_PROJECTPRODUCT)->alias('t1') ->leftJoin(TABLE_PROJECT)->alias('t2')->on('t1.project = t2.id') ->where('t1.product')->eq($productID) - ->beginIF($this->config->systemMode == 'new')->andWhere('t2.type')->eq('project')->fi() - ->beginIF($this->config->systemMode == 'classic')->andWhere('t2.type')->eq('sprint')->fi() + ->andWhere('t2.type')->eq('project') ->beginIF($browseType == 'undone')->andWhere('t2.status')->in('wait,doing')->fi() ->beginIF(strpos(",all,undone,", ",$browseType,") === false)->andWhere('t2.status')->eq($browseType)->fi() - ->beginIF(!$this->app->user->admin and $this->config->systemMode == 'new')->andWhere('t2.id')->in($this->app->user->view->projects)->fi() - ->beginIF(!$this->app->user->admin and $this->config->systemMode == 'classic')->andWhere('t2.id')->in($this->app->user->view->sprints)->fi() + ->beginIF(!$this->app->user->admin)->andWhere('t2.id')->in($this->app->user->view->projects)->fi() ->beginIF($this->cookie->involved or $involved) ->andWhere('t2.openedBy', true)->eq($this->app->user->account) ->orWhere('t2.PM')->eq($this->app->user->account) @@ -1245,24 +1225,13 @@ class productModel extends model $emptyHour = array('totalEstimate' => 0, 'totalConsumed' => 0, 'totalLeft' => 0, 'progress' => 0); /* Get all tasks and compute totalEstimate, totalConsumed, totalLeft, progress according to them. */ - if($this->config->systemMode == 'new') - { - $tasks = $this->dao->select('id, project, estimate, consumed, `left`, status, closedReason') - ->from(TABLE_TASK) - ->where('project')->in($projectKeys) - ->andWhere('parent')->lt(1) - ->andWhere('deleted')->eq(0) - ->fetchGroup('project', 'id'); - } - else - { - $tasks = $this->dao->select('id, execution, estimate, consumed, `left`, status, closedReason') - ->from(TABLE_TASK) - ->where('execution')->in($projectKeys) - ->andWhere('parent')->lt(1) - ->andWhere('deleted')->eq(0) - ->fetchGroup('execution', 'id'); - } + $tasks = $this->dao->select('id, project, estimate, consumed, `left`, status, closedReason') + ->from(TABLE_TASK) + ->where('project')->in($projectKeys) + ->andWhere('parent')->lt(1) + ->andWhere('deleted')->eq(0) + ->fetchGroup('project', 'id'); + /* Compute totalEstimate, totalConsumed, totalLeft. */ foreach($tasks as $projectID => $projectTasks) { @@ -1332,7 +1301,6 @@ class productModel extends model public function getExecutionPairsByProduct($productID, $branch = 0, $orderBy = 'id_asc', $projectID = 0, $mode = '') { if(empty($productID)) return array(); - if(empty($projectID) or $this->config->systemMode == 'classic') return $this->getAllExecutionPairsByProduct($productID, $branch); $project = $this->loadModel('project')->getByID($projectID); $orderBy = $project->model == 'waterfall' ? 'begin_asc,id_asc' : 'begin_desc,id_desc'; @@ -1426,8 +1394,7 @@ class productModel extends model $executionPairs = $executionPairs + $execution->children; continue; } - if($this->config->systemMode == 'new' and isset($projectPairs[$execution->project])) $executionPairs[$execution->id] = $projectPairs[$execution->project] . '/' . $execution->name; - if($this->config->systemMode == 'classic') $executionPairs[$execution->id] = $execution->name; + if(isset($projectPairs[$execution->project])) $executionPairs[$execution->id] = $projectPairs[$execution->project] . '/' . $execution->name; } return $executionPairs; @@ -1683,7 +1650,7 @@ class productModel extends model if(empty($products)) return array(); $productKeys = array_keys($products); - if($orderBy == 'program_asc' and $this->config->systemMode == 'new') + if($orderBy == 'program_asc') { $products = $this->dao->select('t1.id as id, t1.*')->from(TABLE_PRODUCT)->alias('t1') ->leftJoin(TABLE_PROGRAM)->alias('t2')->on('t1.program = t2.id') @@ -1881,38 +1848,26 @@ class productModel extends model ->orderBy('begin desc') ->fetchGroup('product', 'id'); - $executionListKey = $this->config->systemMode == 'new' ? 'project' : 'productID'; $executionList = $this->dao->select('t1.product as productID,t2.*')->from(TABLE_PROJECTPRODUCT)->alias('t1') ->leftJoin(TABLE_EXECUTION)->alias('t2')->on('t1.project=t2.id') ->where('type')->in('stage,sprint,kanban') - ->beginIF($this->config->systemMode == 'new')->andWhere('t2.project')->in(array_keys($projectList))->fi() + ->andWhere('t2.project')->in(array_keys($projectList)) ->beginIF(!$this->app->user->admin)->andWhere('t1.project')->in($this->app->user->view->sprints)->fi() ->andWhere('t1.product')->in(array_keys($productList)) ->andWhere('status')->eq('doing') ->andWhere('deleted')->eq('0') ->orderBy('id_desc') - ->fetchGroup($executionListKey, 'id'); + ->fetchGroup('project', 'id'); $projectLatestExecutions = array(); $latestExecutionList = array(); - if($this->config->systemMode == 'new') + foreach($executionList as $projectID => $executions) { - foreach($executionList as $projectID => $executions) - { - /* Used to computer execution progress. */ - $latestExecutionList[key($executions)] = current($executions); + /* Used to computer execution progress. */ + $latestExecutionList[key($executions)] = current($executions); - /* Used for display in page. */ - $projectLatestExecutions[$projectID] = current($executions); - } - } - - if($this->config->systemMode == 'classic') - { - foreach($executionList as $productID => $executions) - { - foreach($executions as $executionID => $execution) $latestExecutionList[$executionID] = $execution; - } + /* Used for display in page. */ + $projectLatestExecutions[$projectID] = current($executions); } $hourList = $this->loadModel('project')->computerProgress($latestExecutionList); diff --git a/module/product/view/create.html.php b/module/product/view/create.html.php index e02e822238..3cf28e8393 100644 --- a/module/product/view/create.html.php +++ b/module/product/view/create.html.php @@ -32,7 +32,7 @@ product->line;?> - systemMode == 'classic' or $programID)):?> +
    1 ? '' : 'checked';?> diff --git a/module/program/model.php b/module/program/model.php index c2d23738b1..46d96b2edc 100644 --- a/module/program/model.php +++ b/module/program/model.php @@ -572,8 +572,8 @@ class programModel extends model ->where('t1.deleted')->eq('0') ->andWhere('t1.vision')->eq($this->config->vision) ->beginIF($browseType == 'bysearch')->andWhere($query)->fi() - ->beginIF($this->config->systemMode == 'new')->andWhere('t1.type')->eq('project')->fi() - ->beginIF($this->config->systemMode == 'new' and ($this->cookie->involved or $involved))->andWhere('t2.type')->eq('project')->fi() + ->andWhere('t1.type')->eq('project') + ->beginIF($this->cookie->involved or $involved)->andWhere('t2.type')->eq('project')->fi() ->beginIF(!in_array($browseType, array('all', 'undone', 'bysearch', 'review', 'unclosed'), true))->andWhere('t1.status')->eq($browseType)->fi() ->beginIF($browseType == 'undone' or $browseType == 'unclosed')->andWhere('t1.status')->in('wait,doing')->fi() ->beginIF($browseType == 'review') diff --git a/module/project/config.php b/module/project/config.php index db2d222cdb..8b0c298011 100644 --- a/module/project/config.php +++ b/module/project/config.php @@ -49,16 +49,13 @@ $config->project->datatable->fieldList['name']['required'] = 'yes'; $config->project->datatable->fieldList['name']['sort'] = 'no'; $config->project->datatable->fieldList['name']['pri'] = '1'; -if(!isset($config->setCode) or $config->setCode == 1) -{ - $config->project->datatable->fieldList['code']['title'] = 'code'; - $config->project->datatable->fieldList['code']['fixed'] = 'left'; - $config->project->datatable->fieldList['code']['width'] = '100'; - $config->project->datatable->fieldList['code']['minWidth'] = '180'; - $config->project->datatable->fieldList['code']['required'] = 'no'; - $config->project->datatable->fieldList['code']['sort'] = 'no'; - $config->project->datatable->fieldList['code']['pri'] = '1'; -} +$config->project->datatable->fieldList['code']['title'] = 'code'; +$config->project->datatable->fieldList['code']['fixed'] = 'left'; +$config->project->datatable->fieldList['code']['width'] = '100'; +$config->project->datatable->fieldList['code']['minWidth'] = '180'; +$config->project->datatable->fieldList['code']['required'] = 'no'; +$config->project->datatable->fieldList['code']['sort'] = 'no'; +$config->project->datatable->fieldList['code']['pri'] = '1'; $config->project->datatable->fieldList['PM']['title'] = 'PM'; $config->project->datatable->fieldList['PM']['fixed'] = 'no'; @@ -128,6 +125,8 @@ $config->project->datatable->fieldList['actions']['width'] = '180'; $config->project->datatable->fieldList['actions']['required'] = 'yes'; $config->project->datatable->fieldList['actions']['pri'] = '1'; +if(isset($config->setCode) and $config->setCode == 0) unset($config->project->datatable->fieldList['code']); + $config->project->checkList = new stdclass(); $config->project->checkList->scrum = array('bug', 'execution', 'build', 'doc', 'release', 'testtask', 'case'); $config->project->checkList->waterfall = array('execution', 'design', 'doc', 'bug', 'case', 'build', 'release', 'testtask'); @@ -137,7 +136,7 @@ $config->project->maxCheckList->waterfall = array('execution', 'design', 'doc', $config->project->search['module'] = 'project'; $config->project->search['fields']['name'] = $lang->project->name; -if(!isset($config->setCode) or $config->setCode == 1) $config->project->search['fields']['code'] = $lang->project->code; +$config->project->search['fields']['code'] = $lang->project->code; $config->project->search['fields']['id'] = $lang->project->id; $config->project->search['fields']['model'] = $lang->project->model; $config->project->search['fields']['parent'] = $lang->project->parent; @@ -155,7 +154,7 @@ $config->project->search['fields']['lastEditedDate'] = $lang->project->lastEdite $config->project->search['fields']['closedDate'] = $lang->project->closedDate; $config->project->search['params']['name'] = array('operator' => 'include', 'control' => 'input' , 'values' => ''); -if(!isset($config->setCode) or $config->setCode == 1) $config->project->search['params']['code'] = array('operator' => '=', 'control' => 'input' , 'values' => ''); +$config->project->search['params']['code'] = array('operator' => '=', 'control' => 'input' , 'values' => ''); $config->project->search['params']['id'] = array('operator' => '=' , 'control' => 'input' , 'values' => ''); $config->project->search['params']['model'] = array('operator' => '=' , 'control' => 'select', 'values' => $lang->project->modelList); $config->project->search['params']['parent'] = array('operator' => '=' , 'control' => 'select', 'values' => ''); diff --git a/module/project/control.php b/module/project/control.php index 56282a0926..20cff8bddd 100644 --- a/module/project/control.php +++ b/module/project/control.php @@ -10,6 +10,21 @@ */ class project extends control { + /** + * Construct + * + * @param string $moduleName + * @param string $methodName + * @param string $appName + * @access public + * @return void + */ + public function __construct($moduleName = '', $methodName = '', $appName = '') + { + parent::__construct($moduleName, $methodName, $appName); + $this->view->globalDisableProgram = $this->config->systemMode != 'new'; + } + /** * Project create guide. * @@ -737,12 +752,10 @@ class project extends control /** * Batch edit projects. * - * @param string $from - * @param int $projectID * @access public * @return void */ - public function batchEdit($from = 'browse', $projectID = 0) + public function batchEdit() { $this->loadModel('action'); $this->loadModel('execution'); diff --git a/module/project/model.php b/module/project/model.php index 64e107c2ab..e38755458b 100644 --- a/module/project/model.php +++ b/module/project/model.php @@ -893,6 +893,10 @@ class projectModel extends model $programPairs = array(0 => ''); $programPairs += $this->loadModel('program')->getPairs(); $this->config->project->search['params']['parent']['values'] = $programPairs; + + if(isset($this->config->setCode) and $this->config->setCode == 0) unset($this->config->project->search['fields']['code'], $this->config->project->search['params']['code']); + if($this->config->systemMode == 'lite') unset($this->config->project->search['fields']['parent'], $this->config->project->search['params']['parent']); + $this->loadModel('search')->setSearchParams($this->config->project->search); } @@ -1961,7 +1965,7 @@ class projectModel extends model $canBatchEdit = common::hasPriv('project', 'batchEdit'); $account = $this->app->user->account; $id = $col->id; - $projectLink = $this->config->systemMode == 'new' ? helper::createLink('project', 'index', "projectID=$project->id", '', '', $project->id) : helper::createLink('execution', 'task', "projectID=$project->id"); + $projectLink = helper::createLink('project', 'index', "projectID=$project->id", '', '', $project->id); if($col->show) { diff --git a/module/project/view/batchedit.html.php b/module/project/view/batchedit.html.php index ef59ddf40b..883eeaa5ea 100644 --- a/module/project/view/batchedit.html.php +++ b/module/project/view/batchedit.html.php @@ -29,7 +29,9 @@ idAB;?> + project->parent;?> + project->name;?> setCode) or $config->setCode == 1):?> project->code;?> @@ -46,9 +48,10 @@ $project):?> - parent ? $lang->program->subAcls : $lang->project->acls;?> + parent) ? $lang->program->subAcls : $lang->project->acls;?> + parent])):?> parent, "class='form-control chosen' onchange='outOfDateTip($projectID)' data-id='$projectID' data-name='{$project->name}' data-parent='{$project->parent}' disabled");?> @@ -57,6 +60,7 @@ parent, "class='form-control chosen' onchange='outOfDateTip($projectID)' data-id='$projectID' data-name='{$project->name}' data-parent='{$project->parent}'");?> + name, "class='form-control'");?> setCode) or $config->setCode == 1):?> code, "class='form-control'");?> diff --git a/module/project/view/browsebycard.html.php b/module/project/view/browsebycard.html.php index 0794d733db..aeb13d4a2f 100644 --- a/module/project/view/browsebycard.html.php +++ b/module/project/view/browsebycard.html.php @@ -57,8 +57,10 @@