@@ -21,14 +20,10 @@
- - - - @@ -43,7 +38,7 @@ - " id="attributeType"> + " id="attributeType"> @@ -94,29 +89,15 @@ $("#parent").change(function() { var parent = $(this).children("option:selected").val(); - if(parentID > 0) + if(parent == 0) { - if(parent == 0) - { - $("#attributeType").removeClass('hidden'); - } - else - { - $("#attributeType").addClass('hidden'); - - } + $("#attributeType").removeClass('hidden'); + $("#acl").attr('disabled', false); } else { - if(parent == 0) - { - $("#attributeType").removeClass('hidden'); - } - else - { - $("#attributeType").addClass('hidden'); - - } + $("#attributeType").addClass('hidden'); + $("#acl").attr('disabled', true); } }); From 0dda441f023350d23c33c951dac1cfab0a520701 Mon Sep 17 00:00:00 2001 From: qiyu-xie Date: Mon, 30 Nov 2020 11:27:40 +0800 Subject: [PATCH 06/25] * Remove expect. --- module/stakeholder/view/browse.html.php | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/module/stakeholder/view/browse.html.php b/module/stakeholder/view/browse.html.php index c9cab434e2..39717135a2 100644 --- a/module/stakeholder/view/browse.html.php +++ b/module/stakeholder/view/browse.html.php @@ -38,7 +38,7 @@ - + @@ -59,7 +59,6 @@ - + + diff --git a/module/user/view/login.html.php b/module/user/view/login.html.php index c160b0519a..099833225e 100644 --- a/module/user/view/login.html.php +++ b/module/user/view/login.html.php @@ -89,4 +89,50 @@ if(empty($config->notMd5Pwd))js::import($jsRoot . 'md5.js'); +config->webRoot}|") !== false) +{ + $databases = array('zentao' => 'zentao', 'zentaopro' => 'zentaopro', 'zentaobiz' => 'zentaobiz', 'zentaoep' => 'zentaoep'); + if($this->config->webRoot == '/zentao/') unset($databases['zentao']); + if($this->config->webRoot == '/pro/') unset($databases['zentaopro']); + if($this->config->webRoot == '/biz/') + { + unset($databases['zentaobiz']); + unset($databases['zentaoep']); + } + + $users = array(); + foreach($databases as $database) + { + try + { + $webRoot = "/{$database}/"; + if($database == 'zentao') $webRoot = '/zentao/'; + if($database == 'zentaopro') $webRoot = '/pro/'; + if($database == 'zentaobiz') $webRoot = '/biz/'; + if($database == 'zentaoep') $webRoot = '/biz/'; + + $users[$webRoot] = $this->dbh->query("select * from {$database}.`zt_user` where account = 'admin' and password='" . md5('123456') . "'")->fetch(); + } + catch(Exception $e){} + } + + if($users) + { + $sysURL = common::getSysURL(); + $links = array(); + foreach($users as $webRoot => $user) $links[] = $sysURL . $webRoot; + + $notice = sprintf($lang->user->notice4Safe, join('
', $links)); + echo << +\$(function() +{ + bootbox.alert('$notice'); +}) + +EOD; + } +} +?> From 4ee0238d2ac9c5a9da7c1e314aabda504e8787fd Mon Sep 17 00:00:00 2001 From: hufangzhou <746775970@qq.com> Date: Tue, 1 Dec 2020 09:15:08 +0800 Subject: [PATCH 25/25] * Finish task#8541. --- module/custom/view/configurescrum.html.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/module/custom/view/configurescrum.html.php b/module/custom/view/configurescrum.html.php index 63170d6ab1..17a17cf1bc 100644 --- a/module/custom/view/configurescrum.html.php +++ b/module/custom/view/configurescrum.html.php @@ -40,7 +40,8 @@ - + +
programplan->parent;?> parent, "class='form-control chosen '");?>
programplan->name;?> name, "class='form-control'");?>
programplan->attribute;?> stage->typeList, $plan->attribute, "class='form-control'");?>
stakeholder->qq;?> stakeholder->weixin;?> stakeholder->email;?>actions;?>actions;?>
id", $stakeholder, 'list', 'chat-line', '', 'iframe', 'yes'); - common::printIcon('stakeholder', 'expect', "id=$stakeholder->id", $stakeholder, 'list', 'flag', '', 'iframe', 'yes'); if($stakeholder->projectModel == 'waterfall') common::printIcon('stakeholder', 'userIssue', "account=$stakeholder->id", $stakeholder, 'list', 'list-alt', '', 'iframe', 'yes'); common::printIcon('stakeholder', 'edit', "id=$stakeholder->id", $stakeholder, 'list', '', '', '', ''); $deleteClass = common::hasPriv('stakeholder', 'delete') ? 'btn' : 'btn disabled'; From bfef3210cc68f053c2dd159817fe0d533990dfd5 Mon Sep 17 00:00:00 2001 From: qiyu-xie Date: Mon, 30 Nov 2020 11:33:32 +0800 Subject: [PATCH 07/25] * Add class. --- module/stakeholder/view/browse.html.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/module/stakeholder/view/browse.html.php b/module/stakeholder/view/browse.html.php index 39717135a2..619b42ea56 100644 --- a/module/stakeholder/view/browse.html.php +++ b/module/stakeholder/view/browse.html.php @@ -56,7 +56,7 @@ qq;?> weixin;?> email;?> + id", $stakeholder, 'list', 'chat-line', '', 'iframe', 'yes'); if($stakeholder->projectModel == 'waterfall') common::printIcon('stakeholder', 'userIssue', "account=$stakeholder->id", $stakeholder, 'list', 'list-alt', '', 'iframe', 'yes'); From 7b8e7b4c65ace789d6465c509a9f7fa0522aab95 Mon Sep 17 00:00:00 2001 From: leiyong <1549684884@qq.com> Date: Mon, 30 Nov 2020 13:04:37 +0800 Subject: [PATCH 08/25] * Adjust product module. --- module/product/control.php | 2 +- module/project/control.php | 2 +- module/project/model.php | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/module/product/control.php b/module/product/control.php index d0979fc36a..f39c73fd2f 100644 --- a/module/product/control.php +++ b/module/product/control.php @@ -78,7 +78,7 @@ class product extends control $this->product->setMenu($this->products, $productID, $branch); $this->app->loadLang('my'); - $this->view->projectStats = $this->loadModel('project')->getProjectStats($status, $productID, $branch); + $this->view->projectStats = $this->loadModel('project')->getExecutionStats(0, 'undone', $productID, $branch); $this->view->title = $this->products[$productID] . $this->lang->colon . $this->lang->product->project; $this->view->position[] = $this->products[$productID]; diff --git a/module/project/control.php b/module/project/control.php index 5d404e952b..abfbee44b9 100644 --- a/module/project/control.php +++ b/module/project/control.php @@ -2597,7 +2597,7 @@ class project extends control unset($fields[$key]); } - $projectStats = $this->project->getProjectStats($status == 'byproduct' ? 'all' : $status, $productID, 0, 30, $orderBy, null, $this->session->PRJ); + $projectStats = $this->project->getExecutionStats($this->session->PRJ, $status == 'byproduct' ? 'all' : $status, $productID, 0, 30, 'path_asc,id_asc'); $users = $this->loadModel('user')->getPairs('noletter'); foreach($projectStats as $i => $project) { diff --git a/module/project/model.php b/module/project/model.php index d7079a7df3..360a6ba56c 100644 --- a/module/project/model.php +++ b/module/project/model.php @@ -1101,7 +1101,7 @@ class projectModel extends model $executions = $this->dao->select('t2.*')->from(TABLE_PROJECTPRODUCT)->alias('t1') ->leftJoin(TABLE_EXECUTION)->alias('t2')->on('t1.project=t2.id') ->where('t1.product')->eq($productID) - ->andWhere('t2.project')->eq($projectID) + ->beginIF($projectID)->andWhere('t2.project')->eq($projectID)->fi() ->beginIF($status == 'undone')->andWhere('t2.status')->notIN('done,closed')->fi() ->beginIF($status != 'all' and $status != 'undone')->andWhere('t2.status')->eq($status)->fi() ->beginIF(!$this->app->user->admin)->andWhere('t2.id')->in($this->app->user->view->sprints)->fi() From 491ea3a07088c90899d059028b9268d81bb89d15 Mon Sep 17 00:00:00 2001 From: hufangzhou <746775970@qq.com> Date: Mon, 30 Nov 2020 17:02:31 +0800 Subject: [PATCH 09/25] * Fix a bug. --- module/bug/model.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/module/bug/model.php b/module/bug/model.php index 5385691ba5..7c1c57674c 100644 --- a/module/bug/model.php +++ b/module/bug/model.php @@ -1379,7 +1379,7 @@ class bugModel extends model ->where('deleted')->eq(0) ->beginIF($projectID)->andWhere('PRJ')->eq($projectID)->fi() ->beginIF(!$this->app->user->admin)->andWhere('PRJ')->in($this->app->user->view->projects)->fi() - ->beginIF(!$this->app->user->admin)->andWhere('project')->in($this->app->user->view->sprints)->fi() + ->beginIF(!$this->app->user->admin)->andWhere('project')->in('0,' . $this->app->user->view->sprints)->fi() ->beginIF($type != 'closedBy' and $this->app->moduleName == 'block')->andWhere('status')->ne('closed')->fi() ->beginIF($type != 'all')->andWhere("`$type`")->eq($account)->fi() ->orderBy($orderBy) From 5e6cea9a2d733cbac06c531d33184b9c383ac130 Mon Sep 17 00:00:00 2001 From: Yagami <976204163@qq.com> Date: Mon, 30 Nov 2020 11:32:58 +0800 Subject: [PATCH 10/25] * Add upgrade program. --- VERSION | 2 +- config/config.php | 2 +- module/misc/lang/zh-cn.php | 2 + module/upgrade/lang/version.php | 263 ++++++++++++++++---------------- module/upgrade/model.php | 3 +- 5 files changed, 138 insertions(+), 134 deletions(-) diff --git a/VERSION b/VERSION index 24f50a8fd6..5f11db3c7a 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -20.0.alpha1 +20.0.beta1 diff --git a/config/config.php b/config/config.php index 7d9cbdf42f..89b355c307 100644 --- a/config/config.php +++ b/config/config.php @@ -16,7 +16,7 @@ if(!class_exists('config')){class config{}} if(!function_exists('getWebRoot')){function getWebRoot(){}} /* 基本设置。Basic settings. */ -$config->version = '20.0.alpha1'; // ZenTaoPHP的版本。 The version of ZenTaoPHP. Don't change it. +$config->version = '20.0.beta1'; // ZenTaoPHP的版本。 The version of ZenTaoPHP. Don't change it. $config->charset = 'UTF-8'; // ZenTaoPHP的编码。 The encoding of ZenTaoPHP. $config->cookieLife = time() + 2592000; // Cookie的生存时间。The cookie life time. $config->timezone = 'Asia/Shanghai'; // 时区设置。 The time zone setting, for more see http://www.php.net/manual/en/timezones.php. diff --git a/module/misc/lang/zh-cn.php b/module/misc/lang/zh-cn.php index 887336b91e..94b9d2cdf1 100644 --- a/module/misc/lang/zh-cn.php +++ b/module/misc/lang/zh-cn.php @@ -86,6 +86,7 @@ $lang->misc->feature = new stdclass(); $lang->misc->feature->lastest = '最新版本'; $lang->misc->feature->detailed = '详情'; +$lang->misc->releaseDate['20.0.beta1'] = '2020-11-30'; $lang->misc->releaseDate['12.5.stable'] = '2020-11-19'; $lang->misc->releaseDate['20.0.alpha1'] = '2020-10-30'; $lang->misc->releaseDate['12.4.4'] = '2020-10-30'; @@ -137,6 +138,7 @@ $lang->misc->releaseDate['7.2.stable'] = '2015-05-22'; $lang->misc->releaseDate['7.1.stable'] = '2015-03-07'; $lang->misc->releaseDate['6.3.stable'] = '2014-11-07'; +$lang->misc->feature->all['20.0.beta1'][] = array('title'=>'禅道20beta版本,修复bug,完善细节', 'desc' => ''); $lang->misc->feature->all['20.0.alpha1'][] = array('title'=>'禅道20版本大更新,重构导航,增加瀑布模型', 'desc' => '

增加项目集和项目概念

将原项目概念变为迭代或阶段概念

增加瀑布开发模板

'); $lang->misc->feature->all['12.5.stable'][] = array('title' => '解决bug,完成高优先级需求。', 'desc' => ''); diff --git a/module/upgrade/lang/version.php b/module/upgrade/lang/version.php index 499664ee71..61515b0d2f 100644 --- a/module/upgrade/lang/version.php +++ b/module/upgrade/lang/version.php @@ -1,132 +1,133 @@ upgrade->fromVersions['0_3beta'] = '0.3 BETA'; -$lang->upgrade->fromVersions['0_4beta'] = '0.4 BETA'; -$lang->upgrade->fromVersions['0_5beta'] = '0.5 BETA'; -$lang->upgrade->fromVersions['0_6beta'] = '0.6 BETA'; -$lang->upgrade->fromVersions['1_0beta'] = '1.0 BETA'; -$lang->upgrade->fromVersions['1_0rc1'] = '1.0 RC1'; -$lang->upgrade->fromVersions['1_0rc2'] = '1.0 RC2'; -$lang->upgrade->fromVersions['1_0'] = '1.0 STABLE'; -$lang->upgrade->fromVersions['1_0_1'] = '1.0.1'; -$lang->upgrade->fromVersions['1_1'] = '1.1'; -$lang->upgrade->fromVersions['1_2'] = '1.2'; -$lang->upgrade->fromVersions['1_3'] = '1.3'; -$lang->upgrade->fromVersions['1_4'] = '1.4'; -$lang->upgrade->fromVersions['1_5'] = '1.5'; -$lang->upgrade->fromVersions['2_0'] = '2.0'; -$lang->upgrade->fromVersions['2_1'] = '2.1'; -$lang->upgrade->fromVersions['2_2'] = '2.2'; -$lang->upgrade->fromVersions['2_3'] = '2.3'; -$lang->upgrade->fromVersions['2_4'] = '2.4'; -$lang->upgrade->fromVersions['3_0_beta1'] = '3.0 BETA1'; -$lang->upgrade->fromVersions['3_0_beta2'] = '3.0 BETA2'; -$lang->upgrade->fromVersions['3_0'] = '3.0 STABLE'; -$lang->upgrade->fromVersions['3_1'] = '3.1'; -$lang->upgrade->fromVersions['3_2'] = '3.2'; -$lang->upgrade->fromVersions['3_2_1'] = '3.2.1'; -$lang->upgrade->fromVersions['3_3'] = '3.3'; -$lang->upgrade->fromVersions['4_0_beta1'] = '4.0 BETA1'; -$lang->upgrade->fromVersions['4_0_beta2'] = '4.0 BETA2'; -$lang->upgrade->fromVersions['4_0'] = '4.0'; -$lang->upgrade->fromVersions['4_0_1'] = '4.0.1'; -$lang->upgrade->fromVersions['4_1'] = '4.1'; -$lang->upgrade->fromVersions['4_2_beta'] = '4.2.beta'; -$lang->upgrade->fromVersions['4_3_beta'] = '4.3.beta'; -$lang->upgrade->fromVersions['5_0_beta1'] = '5.0.beta1'; -$lang->upgrade->fromVersions['5_0_beta2'] = '5.0.beta2'; -$lang->upgrade->fromVersions['5_0'] = '5.0'; -$lang->upgrade->fromVersions['5_1'] = '5.1'; -$lang->upgrade->fromVersions['5_2'] = '5.2'; -$lang->upgrade->fromVersions['5_2_1'] = '5.2.1'; -$lang->upgrade->fromVersions['5_3'] = '5.3'; -$lang->upgrade->fromVersions['6_0_beta1'] = '6.0.beta1'; -$lang->upgrade->fromVersions['6_0'] = '6.0'; -$lang->upgrade->fromVersions['6_1'] = '6.1'; -$lang->upgrade->fromVersions['6_2'] = '6.2'; -$lang->upgrade->fromVersions['6_3'] = '6.3'; -$lang->upgrade->fromVersions['6_4'] = '6.4'; -$lang->upgrade->fromVersions['7_0'] = '7.0'; -$lang->upgrade->fromVersions['7_1'] = '7.1'; -$lang->upgrade->fromVersions['7_2'] = '7.2'; -$lang->upgrade->fromVersions['7_2_4'] = '7.2.4'; -$lang->upgrade->fromVersions['7_2_5'] = '7.2.5'; -$lang->upgrade->fromVersions['7_3'] = '7.3'; -$lang->upgrade->fromVersions['7_4_beta'] = '7.4.beta'; -$lang->upgrade->fromVersions['8_0'] = '8.0'; -$lang->upgrade->fromVersions['8_0_1'] = '8.0.1'; -$lang->upgrade->fromVersions['8_1'] = '8.1'; -$lang->upgrade->fromVersions['8_1_3'] = '8.1.3'; -$lang->upgrade->fromVersions['8_2_beta'] = '8.2.beta'; -$lang->upgrade->fromVersions['8_2'] = '8.2'; -$lang->upgrade->fromVersions['8_2_1'] = '8.2.1'; -$lang->upgrade->fromVersions['8_2_2'] = '8.2.2'; -$lang->upgrade->fromVersions['8_2_3'] = '8.2.3'; -$lang->upgrade->fromVersions['8_2_4'] = '8.2.4'; -$lang->upgrade->fromVersions['8_2_5'] = '8.2.5'; -$lang->upgrade->fromVersions['8_2_6'] = '8.2.6'; -$lang->upgrade->fromVersions['8_3'] = '8.3'; -$lang->upgrade->fromVersions['8_3_1'] = '8.3.1'; -$lang->upgrade->fromVersions['8_4'] = '8.4'; -$lang->upgrade->fromVersions['8_4_1'] = '8.4.1'; -$lang->upgrade->fromVersions['9_0_beta'] = '9.0.beta'; -$lang->upgrade->fromVersions['9_0'] = '9.0'; -$lang->upgrade->fromVersions['9_0_1'] = '9.0.1'; -$lang->upgrade->fromVersions['9_1'] = '9.1'; -$lang->upgrade->fromVersions['9_1_1'] = '9.1.1'; -$lang->upgrade->fromVersions['9_1_2'] = '9.1.2'; -$lang->upgrade->fromVersions['9_2'] = '9.2'; -$lang->upgrade->fromVersions['9_2_1'] = '9.2.1'; -$lang->upgrade->fromVersions['9_3_beta'] = '9.3.beta'; -$lang->upgrade->fromVersions['9_4'] = '9.4'; -$lang->upgrade->fromVersions['9_5'] = '9.5'; -$lang->upgrade->fromVersions['9_5_1'] = '9.5.1'; -$lang->upgrade->fromVersions['9_6'] = '9.6'; -$lang->upgrade->fromVersions['9_6_1'] = '9.6.1'; -$lang->upgrade->fromVersions['9_6_2'] = '9.6.2'; -$lang->upgrade->fromVersions['9_6_3'] = '9.6.3'; -$lang->upgrade->fromVersions['9_7'] = '9.7'; -$lang->upgrade->fromVersions['9_8'] = '9.8'; -$lang->upgrade->fromVersions['9_8_1'] = '9.8.1'; -$lang->upgrade->fromVersions['9_8_2'] = '9.8.2'; -$lang->upgrade->fromVersions['9_8_3'] = '9.8.3'; -$lang->upgrade->fromVersions['10_0_alpha'] = '10.0.alpha'; -$lang->upgrade->fromVersions['10_0_beta'] = '10.0.beta'; -$lang->upgrade->fromVersions['10_0'] = '10.0'; -$lang->upgrade->fromVersions['10_1'] = '10.1'; -$lang->upgrade->fromVersions['10_2'] = '10.2'; -$lang->upgrade->fromVersions['10_3'] = '10.3'; -$lang->upgrade->fromVersions['10_3_1'] = '10.3.1'; -$lang->upgrade->fromVersions['10_4'] = '10.4'; -$lang->upgrade->fromVersions['10_5'] = '10.5'; -$lang->upgrade->fromVersions['10_5_1'] = '10.5.1'; -$lang->upgrade->fromVersions['10_6'] = '10.6'; -$lang->upgrade->fromVersions['11_0'] = '11.0'; -$lang->upgrade->fromVersions['11_1'] = '11.1'; -$lang->upgrade->fromVersions['11_2'] = '11.2'; -$lang->upgrade->fromVersions['11_3'] = '11.3'; -$lang->upgrade->fromVersions['11_4'] = '11.4'; -$lang->upgrade->fromVersions['11_4_1'] = '11.4.1'; -$lang->upgrade->fromVersions['11_5'] = '11.5'; -$lang->upgrade->fromVersions['11_5_1'] = '11.5.1'; -$lang->upgrade->fromVersions['11_5_2'] = '11.5.2'; -$lang->upgrade->fromVersions['11_6'] = '11.6'; -$lang->upgrade->fromVersions['11_6_1'] = '11.6.1'; -$lang->upgrade->fromVersions['11_6_2'] = '11.6.2'; -$lang->upgrade->fromVersions['11_6_3'] = '11.6.3'; -$lang->upgrade->fromVersions['11_6_4'] = '11.6.4'; -$lang->upgrade->fromVersions['11_6_5'] = '11.6.5'; -$lang->upgrade->fromVersions['11_7'] = '11.7'; -$lang->upgrade->fromVersions['12_0'] = '12.0'; -$lang->upgrade->fromVersions['12_0_1'] = '12.0.1'; -$lang->upgrade->fromVersions['12_1'] = '12.1'; -$lang->upgrade->fromVersions['12_2'] = '12.2'; -$lang->upgrade->fromVersions['12_3'] = '12.3'; -$lang->upgrade->fromVersions['12_3_1'] = '12.3.1'; -$lang->upgrade->fromVersions['12_3_2'] = '12.3.2'; -$lang->upgrade->fromVersions['12_3_3'] = '12.3.3'; -$lang->upgrade->fromVersions['12_4'] = '12.4'; -$lang->upgrade->fromVersions['12_4_1'] = '12.4.1'; -$lang->upgrade->fromVersions['12_4_2'] = '12.4.2'; -$lang->upgrade->fromVersions['12_4_3'] = '12.4.3'; -$lang->upgrade->fromVersions['12_4_4'] = '12.4.4'; -$lang->upgrade->fromVersions['12_5'] = '12.5'; +$lang->upgrade->fromVersions['0_3beta'] = '0.3 BETA'; +$lang->upgrade->fromVersions['0_4beta'] = '0.4 BETA'; +$lang->upgrade->fromVersions['0_5beta'] = '0.5 BETA'; +$lang->upgrade->fromVersions['0_6beta'] = '0.6 BETA'; +$lang->upgrade->fromVersions['1_0beta'] = '1.0 BETA'; +$lang->upgrade->fromVersions['1_0rc1'] = '1.0 RC1'; +$lang->upgrade->fromVersions['1_0rc2'] = '1.0 RC2'; +$lang->upgrade->fromVersions['1_0'] = '1.0 STABLE'; +$lang->upgrade->fromVersions['1_0_1'] = '1.0.1'; +$lang->upgrade->fromVersions['1_1'] = '1.1'; +$lang->upgrade->fromVersions['1_2'] = '1.2'; +$lang->upgrade->fromVersions['1_3'] = '1.3'; +$lang->upgrade->fromVersions['1_4'] = '1.4'; +$lang->upgrade->fromVersions['1_5'] = '1.5'; +$lang->upgrade->fromVersions['2_0'] = '2.0'; +$lang->upgrade->fromVersions['2_1'] = '2.1'; +$lang->upgrade->fromVersions['2_2'] = '2.2'; +$lang->upgrade->fromVersions['2_3'] = '2.3'; +$lang->upgrade->fromVersions['2_4'] = '2.4'; +$lang->upgrade->fromVersions['3_0_beta1'] = '3.0 BETA1'; +$lang->upgrade->fromVersions['3_0_beta2'] = '3.0 BETA2'; +$lang->upgrade->fromVersions['3_0'] = '3.0 STABLE'; +$lang->upgrade->fromVersions['3_1'] = '3.1'; +$lang->upgrade->fromVersions['3_2'] = '3.2'; +$lang->upgrade->fromVersions['3_2_1'] = '3.2.1'; +$lang->upgrade->fromVersions['3_3'] = '3.3'; +$lang->upgrade->fromVersions['4_0_beta1'] = '4.0 BETA1'; +$lang->upgrade->fromVersions['4_0_beta2'] = '4.0 BETA2'; +$lang->upgrade->fromVersions['4_0'] = '4.0'; +$lang->upgrade->fromVersions['4_0_1'] = '4.0.1'; +$lang->upgrade->fromVersions['4_1'] = '4.1'; +$lang->upgrade->fromVersions['4_2_beta'] = '4.2.beta'; +$lang->upgrade->fromVersions['4_3_beta'] = '4.3.beta'; +$lang->upgrade->fromVersions['5_0_beta1'] = '5.0.beta1'; +$lang->upgrade->fromVersions['5_0_beta2'] = '5.0.beta2'; +$lang->upgrade->fromVersions['5_0'] = '5.0'; +$lang->upgrade->fromVersions['5_1'] = '5.1'; +$lang->upgrade->fromVersions['5_2'] = '5.2'; +$lang->upgrade->fromVersions['5_2_1'] = '5.2.1'; +$lang->upgrade->fromVersions['5_3'] = '5.3'; +$lang->upgrade->fromVersions['6_0_beta1'] = '6.0.beta1'; +$lang->upgrade->fromVersions['6_0'] = '6.0'; +$lang->upgrade->fromVersions['6_1'] = '6.1'; +$lang->upgrade->fromVersions['6_2'] = '6.2'; +$lang->upgrade->fromVersions['6_3'] = '6.3'; +$lang->upgrade->fromVersions['6_4'] = '6.4'; +$lang->upgrade->fromVersions['7_0'] = '7.0'; +$lang->upgrade->fromVersions['7_1'] = '7.1'; +$lang->upgrade->fromVersions['7_2'] = '7.2'; +$lang->upgrade->fromVersions['7_2_4'] = '7.2.4'; +$lang->upgrade->fromVersions['7_2_5'] = '7.2.5'; +$lang->upgrade->fromVersions['7_3'] = '7.3'; +$lang->upgrade->fromVersions['7_4_beta'] = '7.4.beta'; +$lang->upgrade->fromVersions['8_0'] = '8.0'; +$lang->upgrade->fromVersions['8_0_1'] = '8.0.1'; +$lang->upgrade->fromVersions['8_1'] = '8.1'; +$lang->upgrade->fromVersions['8_1_3'] = '8.1.3'; +$lang->upgrade->fromVersions['8_2_beta'] = '8.2.beta'; +$lang->upgrade->fromVersions['8_2'] = '8.2'; +$lang->upgrade->fromVersions['8_2_1'] = '8.2.1'; +$lang->upgrade->fromVersions['8_2_2'] = '8.2.2'; +$lang->upgrade->fromVersions['8_2_3'] = '8.2.3'; +$lang->upgrade->fromVersions['8_2_4'] = '8.2.4'; +$lang->upgrade->fromVersions['8_2_5'] = '8.2.5'; +$lang->upgrade->fromVersions['8_2_6'] = '8.2.6'; +$lang->upgrade->fromVersions['8_3'] = '8.3'; +$lang->upgrade->fromVersions['8_3_1'] = '8.3.1'; +$lang->upgrade->fromVersions['8_4'] = '8.4'; +$lang->upgrade->fromVersions['8_4_1'] = '8.4.1'; +$lang->upgrade->fromVersions['9_0_beta'] = '9.0.beta'; +$lang->upgrade->fromVersions['9_0'] = '9.0'; +$lang->upgrade->fromVersions['9_0_1'] = '9.0.1'; +$lang->upgrade->fromVersions['9_1'] = '9.1'; +$lang->upgrade->fromVersions['9_1_1'] = '9.1.1'; +$lang->upgrade->fromVersions['9_1_2'] = '9.1.2'; +$lang->upgrade->fromVersions['9_2'] = '9.2'; +$lang->upgrade->fromVersions['9_2_1'] = '9.2.1'; +$lang->upgrade->fromVersions['9_3_beta'] = '9.3.beta'; +$lang->upgrade->fromVersions['9_4'] = '9.4'; +$lang->upgrade->fromVersions['9_5'] = '9.5'; +$lang->upgrade->fromVersions['9_5_1'] = '9.5.1'; +$lang->upgrade->fromVersions['9_6'] = '9.6'; +$lang->upgrade->fromVersions['9_6_1'] = '9.6.1'; +$lang->upgrade->fromVersions['9_6_2'] = '9.6.2'; +$lang->upgrade->fromVersions['9_6_3'] = '9.6.3'; +$lang->upgrade->fromVersions['9_7'] = '9.7'; +$lang->upgrade->fromVersions['9_8'] = '9.8'; +$lang->upgrade->fromVersions['9_8_1'] = '9.8.1'; +$lang->upgrade->fromVersions['9_8_2'] = '9.8.2'; +$lang->upgrade->fromVersions['9_8_3'] = '9.8.3'; +$lang->upgrade->fromVersions['10_0_alpha'] = '10.0.alpha'; +$lang->upgrade->fromVersions['10_0_beta'] = '10.0.beta'; +$lang->upgrade->fromVersions['10_0'] = '10.0'; +$lang->upgrade->fromVersions['10_1'] = '10.1'; +$lang->upgrade->fromVersions['10_2'] = '10.2'; +$lang->upgrade->fromVersions['10_3'] = '10.3'; +$lang->upgrade->fromVersions['10_3_1'] = '10.3.1'; +$lang->upgrade->fromVersions['10_4'] = '10.4'; +$lang->upgrade->fromVersions['10_5'] = '10.5'; +$lang->upgrade->fromVersions['10_5_1'] = '10.5.1'; +$lang->upgrade->fromVersions['10_6'] = '10.6'; +$lang->upgrade->fromVersions['11_0'] = '11.0'; +$lang->upgrade->fromVersions['11_1'] = '11.1'; +$lang->upgrade->fromVersions['11_2'] = '11.2'; +$lang->upgrade->fromVersions['11_3'] = '11.3'; +$lang->upgrade->fromVersions['11_4'] = '11.4'; +$lang->upgrade->fromVersions['11_4_1'] = '11.4.1'; +$lang->upgrade->fromVersions['11_5'] = '11.5'; +$lang->upgrade->fromVersions['11_5_1'] = '11.5.1'; +$lang->upgrade->fromVersions['11_5_2'] = '11.5.2'; +$lang->upgrade->fromVersions['11_6'] = '11.6'; +$lang->upgrade->fromVersions['11_6_1'] = '11.6.1'; +$lang->upgrade->fromVersions['11_6_2'] = '11.6.2'; +$lang->upgrade->fromVersions['11_6_3'] = '11.6.3'; +$lang->upgrade->fromVersions['11_6_4'] = '11.6.4'; +$lang->upgrade->fromVersions['11_6_5'] = '11.6.5'; +$lang->upgrade->fromVersions['11_7'] = '11.7'; +$lang->upgrade->fromVersions['12_0'] = '12.0'; +$lang->upgrade->fromVersions['12_0_1'] = '12.0.1'; +$lang->upgrade->fromVersions['12_1'] = '12.1'; +$lang->upgrade->fromVersions['12_2'] = '12.2'; +$lang->upgrade->fromVersions['12_3'] = '12.3'; +$lang->upgrade->fromVersions['12_3_1'] = '12.3.1'; +$lang->upgrade->fromVersions['12_3_2'] = '12.3.2'; +$lang->upgrade->fromVersions['12_3_3'] = '12.3.3'; +$lang->upgrade->fromVersions['12_4'] = '12.4'; +$lang->upgrade->fromVersions['12_4_1'] = '12.4.1'; +$lang->upgrade->fromVersions['12_4_2'] = '12.4.2'; +$lang->upgrade->fromVersions['12_4_3'] = '12.4.3'; +$lang->upgrade->fromVersions['12_4_4'] = '12.4.4'; +$lang->upgrade->fromVersions['12_5'] = '12.5'; +$lang->upgrade->fromVersions['20_0_alpha1'] = '20.0.alpha1'; diff --git a/module/upgrade/model.php b/module/upgrade/model.php index 757d06878a..80c0f8d14b 100644 --- a/module/upgrade/model.php +++ b/module/upgrade/model.php @@ -823,7 +823,8 @@ class upgradeModel extends model case '12_4_3': case '12_4_4': $confirmContent .= file_get_contents($this->getUpgradeFile('12.4.4')); case '12_5': - case '20_0_alpha': $confirmContent .= file_get_contents($this->getUpgradeFile('20.0.alpha')); + case '20_0_alpha' : $confirmContent .= file_get_contents($this->getUpgradeFile('20.0.alpha')); + case '20_0_alpha1': $confirmContent .= file_get_contents($this->getUpgradeFile('20.0.alpha1')); } return str_replace('zt_', $this->config->db->prefix, $confirmContent); } From 61ba67361d97c8080dfa55d34d5e1d2a56824185 Mon Sep 17 00:00:00 2001 From: Yagami <976204163@qq.com> Date: Mon, 30 Nov 2020 14:40:25 +0800 Subject: [PATCH 11/25] * Adjust code detail. --- module/block/js/admin.js | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/module/block/js/admin.js b/module/block/js/admin.js index ffea9f223d..4ecbc89fcc 100644 --- a/module/block/js/admin.js +++ b/module/block/js/admin.js @@ -34,10 +34,11 @@ $(function() if($blockParams.find('#actionLink').size() > 0) $form.attr('action', $blockParams.find('#actionLink').val()); $titleInput = $blockParams.find('#title'); - if($titleInput.length && $('#blockParams #paramstype').length) + if($titleInput.length && $('#paramstype').length) { blockTitle = $titleInput.val(); - preValue = $('#blockParams #paramstype').find('option:selected').text(); + preValue = $('#paramstype').find('option:selected').text(); + var preIndex = blockTitle.indexOf(' - ' + preValue); if(preIndex >= 0) blockTitle = blockTitle.substring(0, preIndex); From abc70f2bbd7c12a57e8fbf1c37bd737b04b60cfa Mon Sep 17 00:00:00 2001 From: Yagami <976204163@qq.com> Date: Mon, 30 Nov 2020 17:17:55 +0800 Subject: [PATCH 12/25] * Fix code detail. --- module/build/model.php | 100 +++++++++++++++++------------------ module/common/lang/zh-cn.php | 2 +- 2 files changed, 51 insertions(+), 51 deletions(-) diff --git a/module/build/model.php b/module/build/model.php index f33a8bee4e..9d522b64d3 100644 --- a/module/build/model.php +++ b/module/build/model.php @@ -73,6 +73,56 @@ class buildModel extends model ->fetchAll('id'); } + /** + * Get builds of a project in pairs. + * + * @param int $projectID + * @param int $productID + * @param int $branch + * @param string $params noempty|notrunk, can be a set of them + * @param int $buildID + * @access public + * @return array + */ + public function getProjectBuildPairs($projectID, $productID, $branch = 0, $params = '', $buildID = 0) + { + $sysBuilds = array(); + $selectedBuilds = array(); + if(strpos($params, 'noempty') === false) $sysBuilds = array('' => ''); + if(strpos($params, 'notrunk') === false) $sysBuilds = $sysBuilds + array('trunk' => $this->lang->trunk); + if($buildID != 0) $selectedBuilds = $this->dao->select('id, name')->from(TABLE_BUILD)->where('id')->in($buildID)->fetchPairs(); + + $projectBuilds = $this->dao->select('t1.id, t1.name, t1.project, t2.status as projectStatus, t3.id as releaseID, t3.status as releaseStatus, t4.name as branchName')->from(TABLE_BUILD)->alias('t1') + ->leftJoin(TABLE_PROJECT)->alias('t2')->on('t1.project = t2.id') + ->leftJoin(TABLE_RELEASE)->alias('t3')->on('t1.id = t3.build') + ->leftJoin(TABLE_BRANCH)->alias('t4')->on('t1.branch = t4.id') + ->where('t1.PRJ')->eq((int)$projectID) + ->beginIF($productID)->andWhere('t1.product')->eq((int)$productID)->fi() + ->beginIF($branch)->andWhere('t1.branch')->in("0,$branch")->fi() + ->andWhere('t1.deleted')->eq(0) + ->orderBy('t1.date desc, t1.id desc')->fetchAll('id'); + + /* Set builds and filter terminate releases. */ + $builds = array(); + foreach($projectBuilds as $buildID => $build) + { + if(empty($build->releaseID) and (strpos($params, 'nodone') !== false) and ($build->projectStatus === 'done')) continue; + if((strpos($params, 'noterminate') !== false) and ($build->releaseStatus === 'terminate')) continue; + $builds[$buildID] = $build->name; + } + if(!$builds) return $sysBuilds + $selectedBuilds; + + /* if the build has been released, replace build name with release name. */ + $releases = $this->dao->select('build, name')->from(TABLE_RELEASE) + ->where('build')->in(array_keys($builds)) + ->beginIF($branch)->andWhere('branch')->in("0,$branch")->fi() + ->andWhere('deleted')->eq(0) + ->fetchPairs(); + foreach($releases as $buildID => $releaseName) $builds[$buildID] = $releaseName; + + return $sysBuilds + $builds + $selectedBuilds; + } + /** * Get builds of a project by search. * @@ -169,56 +219,6 @@ class buildModel extends model return $this->getExecutionBuilds($executionID, 'bysearch', $buildQuery); } - /** - * Get builds of a project in pairs. - * - * @param int $projectID - * @param int $productID - * @param int $branch - * @param string $params noempty|notrunk, can be a set of them - * @param int $buildID - * @access public - * @return array - */ - public function getProjectBuildPairs($projectID, $productID, $branch = 0, $params = '', $buildID = 0) - { - $sysBuilds = array(); - $selectedBuilds = array(); - if(strpos($params, 'noempty') === false) $sysBuilds = array('' => ''); - if(strpos($params, 'notrunk') === false) $sysBuilds = $sysBuilds + array('trunk' => $this->lang->trunk); - if($buildID != 0) $selectedBuilds = $this->dao->select('id, name')->from(TABLE_BUILD)->where('id')->in($buildID)->fetchPairs(); - - $projectBuilds = $this->dao->select('t1.id, t1.name, t1.project, t2.status as projectStatus, t3.id as releaseID, t3.status as releaseStatus, t4.name as branchName')->from(TABLE_BUILD)->alias('t1') - ->leftJoin(TABLE_PROJECT)->alias('t2')->on('t1.project = t2.id') - ->leftJoin(TABLE_RELEASE)->alias('t3')->on('t1.id = t3.build') - ->leftJoin(TABLE_BRANCH)->alias('t4')->on('t1.branch = t4.id') - ->where('t1.PRJ')->eq((int)$projectID) - ->beginIF($productID)->andWhere('t1.product')->eq((int)$productID)->fi() - ->beginIF($branch)->andWhere('t1.branch')->in("0,$branch")->fi() - ->andWhere('t1.deleted')->eq(0) - ->orderBy('t1.date desc, t1.id desc')->fetchAll('id'); - - /* Set builds and filter terminate releases. */ - $builds = array(); - foreach($projectBuilds as $buildID => $build) - { - if(empty($build->releaseID) and (strpos($params, 'nodone') !== false) and ($build->projectStatus === 'done')) continue; - if((strpos($params, 'noterminate') !== false) and ($build->releaseStatus === 'terminate')) continue; - $builds[$buildID] = $build->name; - } - if(!$builds) return $sysBuilds + $selectedBuilds; - - /* if the build has been released, replace build name with release name. */ - $releases = $this->dao->select('build, name')->from(TABLE_RELEASE) - ->where('build')->in(array_keys($builds)) - ->beginIF($branch)->andWhere('branch')->in("0,$branch")->fi() - ->andWhere('deleted')->eq(0) - ->fetchPairs(); - foreach($releases as $buildID => $releaseName) $builds[$buildID] = $releaseName; - - return $sysBuilds + $builds + $selectedBuilds; - } - /** * Get builds of a execution in pairs. * diff --git a/module/common/lang/zh-cn.php b/module/common/lang/zh-cn.php index d4da9534ed..ba552dc07f 100755 --- a/module/common/lang/zh-cn.php +++ b/module/common/lang/zh-cn.php @@ -880,7 +880,7 @@ $lang->scrum->subMenu->morelink->program = '项目|program|edit|'; $lang->menu->waterfall = new stdclass(); $lang->menu->waterfall->programindex = array('link' => '仪表盘|program|index|project={PROJECT}'); $lang->menu->waterfall->programplan = array('link' => '计划|programplan|browse|project={PROJECT}', 'subModule' => 'programplan'); -$lang->menu->waterfall->project = array('link' => $lang->projectCommon . '|project|task|projectID={PROJECT}', 'subModule' => ',project,task,'); +$lang->menu->waterfall->project = array('link' => $lang->projectCommon . '|project|task|executionID={EXECUTION}', 'subModule' => ',project,task,'); $lang->menu->waterfall->weekly = array('link' => '报告|weekly|index|project={PROJECT}', 'subModule' => ',milestone,'); $lang->menu->waterfall->doc = array('link' => '文档|doc|index|project={PROJECT}'); $lang->menu->waterfall->projectstory = array('link' => '需求|projectstory|requirement', 'subModule' => 'requirement,story,track'); From 1bcf0274afe80deaca591a5f093ae08158e4b78c Mon Sep 17 00:00:00 2001 From: hufangzhou <746775970@qq.com> Date: Mon, 30 Nov 2020 17:26:33 +0800 Subject: [PATCH 13/25] * Finish task#8561. --- module/story/model.php | 2 -- 1 file changed, 2 deletions(-) diff --git a/module/story/model.php b/module/story/model.php index 89a1335fb1..a589c95dff 100644 --- a/module/story/model.php +++ b/module/story/model.php @@ -83,10 +83,8 @@ class storyModel extends model public function getByList($storyIdList = 0, $type = 'story') { return $this->dao->select('t1.*, t2.spec, t2.verify, t3.name as productTitle') - ->markLeft() ->from(TABLE_STORY)->alias('t1') ->leftJoin(TABLE_STORYSPEC)->alias('t2')->on('t1.id=t2.story') - ->markRight() ->leftJoin(TABLE_PRODUCT)->alias('t3')->on('t1.product=t3.id') ->where('t1.deleted')->eq(0) ->andWhere('t1.version=t2.version') From 8f6763c14c9b0657769a9e68cf2d4aaef37a15eb Mon Sep 17 00:00:00 2001 From: qiyu-xie Date: Mon, 30 Nov 2020 17:02:36 +0800 Subject: [PATCH 14/25] * Remove expect. --- module/action/lang/de.php | 1 - module/action/lang/en.php | 1 - module/action/lang/fr.php | 1 - module/action/lang/vi.php | 1 - module/action/lang/zh-cn.php | 1 - module/action/lang/zh-tw.php | 1 - 6 files changed, 6 deletions(-) diff --git a/module/action/lang/de.php b/module/action/lang/de.php index e49433c874..f4848a8685 100644 --- a/module/action/lang/de.php +++ b/module/action/lang/de.php @@ -89,7 +89,6 @@ $lang->action->objectTypes['caselib'] = 'Bibliothek'; $lang->action->objectTypes['testreport'] = 'Berichte'; $lang->action->objectTypes['entry'] = 'Eintrag'; $lang->action->objectTypes['stakeholder'] = 'Stakeholder'; -$lang->action->objectTypes['expect'] = 'Expect'; $lang->action->objectTypes['webhook'] = 'Webhook'; /* 用来描述操作历史记录。*/ diff --git a/module/action/lang/en.php b/module/action/lang/en.php index 0ada6c3af0..c713c3e2e8 100755 --- a/module/action/lang/en.php +++ b/module/action/lang/en.php @@ -89,7 +89,6 @@ $lang->action->objectTypes['caselib'] = 'Library'; $lang->action->objectTypes['testreport'] = 'Report'; $lang->action->objectTypes['entry'] = 'Entry'; $lang->action->objectTypes['stakeholder'] = 'Stakeholder'; -$lang->action->objectTypes['expect'] = 'Expect'; $lang->action->objectTypes['webhook'] = 'Webhook'; /* Used to describe operation history. */ diff --git a/module/action/lang/fr.php b/module/action/lang/fr.php index af0722f2f7..954db4c7e6 100644 --- a/module/action/lang/fr.php +++ b/module/action/lang/fr.php @@ -89,7 +89,6 @@ $lang->action->objectTypes['caselib'] = 'Library'; $lang->action->objectTypes['testreport'] = 'Edition'; $lang->action->objectTypes['entry'] = 'Entrée'; $lang->action->objectTypes['stakeholder'] = 'Stakeholder'; -$lang->action->objectTypes['expect'] = 'Expect'; $lang->action->objectTypes['webhook'] = 'Webhook'; /* 用来描述操作历史记录。*/ diff --git a/module/action/lang/vi.php b/module/action/lang/vi.php index 5136901db3..6b85097292 100644 --- a/module/action/lang/vi.php +++ b/module/action/lang/vi.php @@ -89,7 +89,6 @@ $lang->action->objectTypes['caselib'] = 'Thư viện'; $lang->action->objectTypes['testreport'] = 'Báo cáo'; $lang->action->objectTypes['entry'] = 'Entry'; $lang->action->objectTypes['stakeholder'] = 'Stakeholder'; -$lang->action->objectTypes['expect'] = 'Expect'; $lang->action->objectTypes['webhook'] = 'Webhook'; /* Used to describe operation history. */ diff --git a/module/action/lang/zh-cn.php b/module/action/lang/zh-cn.php index bb9ab7221f..0783c8790d 100755 --- a/module/action/lang/zh-cn.php +++ b/module/action/lang/zh-cn.php @@ -89,7 +89,6 @@ $lang->action->objectTypes['caselib'] = '用例库'; $lang->action->objectTypes['testreport'] = '报告'; $lang->action->objectTypes['entry'] = '应用'; $lang->action->objectTypes['stakeholder'] = '干系人'; -$lang->action->objectTypes['expect'] = '期望'; $lang->action->objectTypes['webhook'] = 'Webhook'; /* 用来描述操作历史记录。*/ diff --git a/module/action/lang/zh-tw.php b/module/action/lang/zh-tw.php index 4e4087a5fb..b046865c14 100755 --- a/module/action/lang/zh-tw.php +++ b/module/action/lang/zh-tw.php @@ -89,7 +89,6 @@ $lang->action->objectTypes['caselib'] = '用例庫'; $lang->action->objectTypes['testreport'] = '報告'; $lang->action->objectTypes['entry'] = '應用'; $lang->action->objectTypes['stakeholder'] = '干係人'; -$lang->action->objectTypes['expect'] = '期望'; $lang->action->objectTypes['webhook'] = 'Webhook'; /* 用來描述操作歷史記錄。*/ From ecf6f6643c76d5746ba672ed2020dd44590dd913 Mon Sep 17 00:00:00 2001 From: qiyu-xie Date: Mon, 30 Nov 2020 17:19:03 +0800 Subject: [PATCH 15/25] * Finish task#8543. --- module/action/lang/de.php | 2 +- module/action/lang/en.php | 2 +- module/action/lang/fr.php | 2 +- module/action/lang/vi.php | 2 +- module/action/lang/zh-cn.php | 2 +- module/action/lang/zh-tw.php | 2 +- 6 files changed, 6 insertions(+), 6 deletions(-) diff --git a/module/action/lang/de.php b/module/action/lang/de.php index f4848a8685..f2131af14f 100644 --- a/module/action/lang/de.php +++ b/module/action/lang/de.php @@ -426,7 +426,7 @@ $lang->action->label->space = ' '; $lang->action->label->risk = 'Risk|risk|view|riskID=%s'; $lang->action->label->issue = 'Issue|issue|view|issueID=%s'; $lang->action->label->design = 'Design|design|view|designID=%s'; -$lang->action->label->stakeholder = 'Stakeholder|stakeholder|browse|'; +$lang->action->label->stakeholder = 'Stakeholder|stakeholder|view|userID=%s'; /* Object type. */ $lang->action->search->objectTypeList[''] = ''; diff --git a/module/action/lang/en.php b/module/action/lang/en.php index c713c3e2e8..858db24d6d 100755 --- a/module/action/lang/en.php +++ b/module/action/lang/en.php @@ -426,7 +426,7 @@ $lang->action->label->space = ' '; $lang->action->label->risk = 'Risk|risk|view|riskID=%s'; $lang->action->label->issue = 'Issue|issue|view|issueID=%s'; $lang->action->label->design = 'Design|design|view|designID=%s'; -$lang->action->label->stakeholder = 'Stakeholder|stakeholder|browse|'; +$lang->action->label->stakeholder = 'Stakeholder|stakeholder|view|userID=%s'; /* Object type. */ $lang->action->search->objectTypeList[''] = ''; diff --git a/module/action/lang/fr.php b/module/action/lang/fr.php index 954db4c7e6..a505c475d6 100644 --- a/module/action/lang/fr.php +++ b/module/action/lang/fr.php @@ -426,7 +426,7 @@ $lang->action->label->space = ' '; $lang->action->label->risk = 'Risk|risk|view|riskID=%s'; $lang->action->label->issue = 'Issue|issue|view|issueID=%s'; $lang->action->label->design = 'Design|design|view|designID=%s'; -$lang->action->label->stakeholder = 'Stakeholder|stakeholder|browse|'; +$lang->action->label->stakeholder = 'Stakeholder|stakeholder|view|userID=%s'; /* Object type. */ $lang->action->search->objectTypeList[''] = ''; diff --git a/module/action/lang/vi.php b/module/action/lang/vi.php index 6b85097292..b333d6be9c 100644 --- a/module/action/lang/vi.php +++ b/module/action/lang/vi.php @@ -426,7 +426,7 @@ $lang->action->label->space = ' '; $lang->action->label->risk = 'Risk|risk|view|riskID%s'; $lang->action->label->issue = 'Issue|issue|view|issueID=%s'; $lang->action->label->design = 'Design|design|view|designID=%s'; -$lang->action->label->stakeholder = 'Stakeholder|stakeholder|browse|'; +$lang->action->label->stakeholder = 'Stakeholder|stakeholder|view|userID=%s'; /* Object type. */ $lang->action->search->objectTypeList[''] = ''; diff --git a/module/action/lang/zh-cn.php b/module/action/lang/zh-cn.php index 0783c8790d..d7af102f3b 100755 --- a/module/action/lang/zh-cn.php +++ b/module/action/lang/zh-cn.php @@ -426,7 +426,7 @@ $lang->action->label->space = ' '; $lang->action->label->risk = '风险|risk|view|riskID=%s'; $lang->action->label->issue = '问题|issue|view|issueID=%s'; $lang->action->label->design = '设计|design|view|designID=%s'; -$lang->action->label->stakeholder = '干系人|stakeholder|browse|'; +$lang->action->label->stakeholder = '干系人|stakeholder|view|userID=%s'; /* Object type. */ $lang->action->search->objectTypeList[''] = ''; diff --git a/module/action/lang/zh-tw.php b/module/action/lang/zh-tw.php index b046865c14..aae749283d 100755 --- a/module/action/lang/zh-tw.php +++ b/module/action/lang/zh-tw.php @@ -413,7 +413,7 @@ $lang->action->label->webhook = 'Webhook|webhook|browse|'; $lang->action->label->space = ' '; $lang->action->label->risk = '風險|risk|view|riskID=%s'; $lang->action->label->design = '設計|design|view|designID=%s'; -$lang->action->label->stakeholder = '干係人|stakeholder|browse|'; +$lang->action->label->stakeholder = '干係人|stakeholder|view|userID=%s'; /* Object type. */ $lang->action->search->objectTypeList[''] = ''; From 6745b96e1f337ae91adc6a91698b409b62df2982 Mon Sep 17 00:00:00 2001 From: qiyu-xie Date: Mon, 30 Nov 2020 17:26:20 +0800 Subject: [PATCH 16/25] * Finish task#8544. --- module/action/config.php | 2 ++ module/action/model.php | 5 ++--- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/module/action/config.php b/module/action/config.php index 7631912b80..842777cd18 100755 --- a/module/action/config.php +++ b/module/action/config.php @@ -37,3 +37,5 @@ $config->action->majorList['release'] = array('opened'); $config->action->majorList['build'] = array('opened'); $config->action->majorList['product'] = array('opened', 'edited'); $config->action->majorList['project'] = array('opened', 'edited'); + +$config->action->needGetPRJType = 'story,build,task,bug,case,testcase,caselib,testtask,testsuite,testreport,doc,issue,release,risk,design'; diff --git a/module/action/model.php b/module/action/model.php index d1f01f0eb2..fbf6618024 100755 --- a/module/action/model.php +++ b/module/action/model.php @@ -806,8 +806,7 @@ class actionModel extends model $field = $this->config->action->objectNameFields[$objectType]; if($table != TABLE_TODO) { - $needGetPRJType = 'story,build,task,bug,case,testcase,caselib,testtask,testsuite,testreport,doc,issue,release,risk,design'; - if(strpos($needGetPRJType, $objectType) !== false) + if(strpos($this->config->action->needGetPRJType, $objectType) !== false) { $objectInfo = $this->dao->select("id, PRJ, $field AS name")->from($table)->where('id')->in($objectIds)->fetchAll(); foreach($objectInfo as $object) @@ -816,7 +815,7 @@ class actionModel extends model $objectPRJ[$object->id] = $object->PRJ; } } - elseif($objectType == 'program' or $objectType == 'project' or $objectType == 'execution') + elseif($objectType == 'project' or $objectType == 'execution') { $objectInfo = $this->dao->select("id, project, $field AS name")->from($table)->where('id')->in($objectIds)->fetchAll(); foreach($objectInfo as $object) From d4553ab55f0847238f8bbb2e9cf55418b623645f Mon Sep 17 00:00:00 2001 From: tianshujie98 Date: Mon, 30 Nov 2020 17:35:23 +0800 Subject: [PATCH 17/25] * Finish task #8560. --- module/project/model.php | 116 +++++++++++++++++---------------------- 1 file changed, 51 insertions(+), 65 deletions(-) diff --git a/module/project/model.php b/module/project/model.php index 360a6ba56c..0a1724c009 100644 --- a/module/project/model.php +++ b/module/project/model.php @@ -339,30 +339,7 @@ class projectModel extends model ->get(); /* Check the workload format and total. */ - if(!empty($sprint->percent)) - { - if(!preg_match("/^[0-9]+(.[0-9]{1,3})?$/", $sprint->percent)) - { - dao::$errors['percent'] = $this->lang->programplan->error->percentNumber; - return false; - } - - $oldPercentTotal = $this->dao->select('SUM(t2.percent) as total')->from(TABLE_PROJECTPRODUCT)->alias('t1') - ->leftJoin(TABLE_PROJECT)->alias('t2')->on('t1.project=t2.id') - ->where('t1.product')->eq($this->post->products[0]) - ->andWhere('t2.type')->eq('stage') - ->andWhere('t2.grade')->eq(1) - ->andWhere('t2.deleted')->eq(0) - ->fetch('total'); - - /* The total workload of the stage should not exceed 100%. */ - $percentTotal = $sprint->percent + $oldPercentTotal; - if($percentTotal > 100) - { - dao::$errors['percent'] = sprintf($this->lang->project->workloadTotal, $oldPercentTotal . '%'); - return false; - } - } + if(!empty($sprint->percent)) $this->checkWorkload('create', $sprint->percent); /* Set planDuration and realDuration. */ $sprint->planDuration = $this->loadModel('programplan')->getDuration($sprint->begin, $sprint->end); @@ -491,47 +468,7 @@ class projectModel extends model $project = $this->loadModel('file')->processImgURL($project, $this->config->project->editor->edit['id'], $this->post->uid); /* Check the workload format and total. */ - if(!empty($project->percent)) - { - if(!preg_match("/^[0-9]+(.[0-9]{1,3})?$/", $project->percent)) - { - dao::$errors['percent'] = $this->lang->programplan->error->percentNumber; - return false; - } - - /* If it is the first stage, the total workload does not exceed 100%. */ - if($oldProject->grade == 1) - { - $oldPercentTotal = $this->dao->select('SUM(t2.percent) as total')->from(TABLE_PROJECTPRODUCT)->alias('t1') - ->leftJoin(TABLE_PROJECT)->alias('t2')->on('t1.project=t2.id') - ->where('t1.product')->eq($this->post->products[0]) - ->andWhere('t2.type')->eq('stage') - ->andWhere('t2.grade')->eq(1) - ->andWhere('t2.deleted')->eq(0) - ->fetch('total'); - - $percentTotal = $project->percent + $oldPercentTotal; - if($percentTotal > 100) - { - dao::$errors['percent'] = sprintf($this->lang->project->workloadTotal, $oldPercentTotal . '%'); - return false; - } - } - - /* The sum of the workload of the child stage cannot be greater than that of the parent stage. */ - if($oldProject->grade == 2) - { - $parentPlan = $this->loadModel('programPlan')->getByID($oldProject->parent); - $childrenTotalPercent = $this->dao->select('SUM(percent) as total')->from(TABLE_PROJECT)->where('parent')->eq($oldProject->parent)->andWhere('deleted')->eq(0)->fetch('total'); - $childrenTotalPercent = $childrenTotalPercent - $oldProject->percent + $project->percent; - - if($childrenTotalPercent > $parentPlan->percent) - { - dao::$errors['parent'] = sprintf($this->lang->programplan->error->parentWorkload, $parentPlan->percent . '%'); - return false; - } - } - } + if(!empty($project->percent)) $this->checkWorkload('update', $project->percent, $oldProject); /* Set planDuration and realDuration. */ $project->planDuration = $this->loadModel('programplan')->getDuration($project->begin, $project->end); @@ -841,6 +778,55 @@ class projectModel extends model } } + /** + * Check the workload format and total. + * + * @param string $type create|update + * @param int $percent + * @param object $oldProject + * @access public + * @return bool + */ + public function checkWorkload($type = '', $percent = 0, $oldProject = '') + { + if(!preg_match("/^[0-9]+(.[0-9]{1,3})?$/", $percent)) + { + return dao::$errors['percent'] = $this->lang->programplan->error->percentNumber; + } + + /* The total workload of the first stage should not exceed 100%. */ + if($type == 'create' or $oldProject->grade == 1) + { + $oldPercentTotal = $this->dao->select('SUM(t2.percent) as total')->from(TABLE_PROJECTPRODUCT)->alias('t1') + ->leftJoin(TABLE_PROJECT)->alias('t2')->on('t1.project=t2.id') + ->where('t1.product')->eq($this->post->products[0]) + ->andWhere('t2.type')->eq('stage') + ->andWhere('t2.grade')->eq(1) + ->andWhere('t2.deleted')->eq(0) + ->fetch('total'); + + if($type == 'create') $percentTotal = $percent + $oldPercentTotal; + if($oldProject->grade == 1) $percentTotal = $oldPercentTotal - $oldProject->percent + $this->post->percent; + + if($percentTotal >100) + { + return dao::$errors['percent'] = sprintf($this->lang->project->workloadTotal, $oldPercentTotal . '%'); + } + } + + if($type == 'update' and $oldProject->grade == 2) + { + $parentPlan = $this->loadModel('programPlan')->getByID($oldProject->parent); + $childrenTotalPercent = $this->dao->select('SUM(percent) as total')->from(TABLE_PROJECT)->where('parent')->eq($oldProject->parent)->andWhere('deleted')->eq(0)->fetch('total'); + $childrenTotalPercent = $childrenTotalPercent - $oldProject->percent + $this->post->percent; + + if($childrenTotalPercent > $parentPlan->percent) + { + return dao::$errors['parent'] = sprintf($this->lang->programplan->error->parentWorkload, $parentPlan->percent . '%'); + } + } + } + /** * Get execution pairs. * From ba64e020ae87f8d70a6b7af3919e1b2d0237f5f7 Mon Sep 17 00:00:00 2001 From: hufangzhou <746775970@qq.com> Date: Mon, 30 Nov 2020 17:39:44 +0800 Subject: [PATCH 18/25] * Finish task#8556. --- module/my/lang/de.php | 2 +- module/my/lang/en.php | 2 +- module/my/lang/fr.php | 2 +- module/my/lang/vi.php | 2 +- module/my/lang/zh-cn.php | 2 +- module/my/lang/zh-tw.php | 2 +- module/project/lang/de.php | 1 - module/project/lang/en.php | 1 - module/project/lang/fr.php | 1 - module/project/lang/vi.php | 1 - module/project/lang/zh-cn.php | 1 - module/project/lang/zh-tw.php | 1 - 12 files changed, 6 insertions(+), 12 deletions(-) diff --git a/module/my/lang/de.php b/module/my/lang/de.php index 081e9191e4..4c586d4bbd 100644 --- a/module/my/lang/de.php +++ b/module/my/lang/de.php @@ -27,7 +27,7 @@ $lang->my->score = 'Meine Wertung'; $lang->my->scoreRule = 'Wertungs regeln'; $lang->my->noTodo = 'Keine toDos. '; -$lang->my->myExecutions = "My Stage/{$lang->projectCommon}/Kanban"; +$lang->my->myExecutions = 'My Stage/Sprint/Iteration'; $lang->my->name = 'Name'; $lang->my->code = 'Code'; $lang->my->projects = 'Project'; diff --git a/module/my/lang/en.php b/module/my/lang/en.php index bd0529e01d..ba17faae4e 100644 --- a/module/my/lang/en.php +++ b/module/my/lang/en.php @@ -27,7 +27,7 @@ $lang->my->score = 'My Points'; $lang->my->scoreRule = 'Point Rules'; $lang->my->noTodo = 'No todos yet. '; -$lang->my->myExecutions = "My Stage/{$lang->projectCommon}/Kanban"; +$lang->my->myExecutions = "My Stage/Sprint/Iteration"; $lang->my->name = 'Name'; $lang->my->code = 'Code'; $lang->my->projects = 'Project'; diff --git a/module/my/lang/fr.php b/module/my/lang/fr.php index 33b9d8cad1..8f45a743d3 100644 --- a/module/my/lang/fr.php +++ b/module/my/lang/fr.php @@ -27,7 +27,7 @@ $lang->my->score = 'Mes Points'; $lang->my->scoreRule = 'Règles Point'; $lang->my->noTodo = "Je n'ai rien à faire pour l'instant."; -$lang->my->myExecutions = "My Stage/{$lang->projectCommon}/Kanban"; +$lang->my->myExecutions = 'My Stage/Sprint/Iteration'; $lang->my->name = 'Name'; $lang->my->code = 'Code'; $lang->my->projects = 'Project'; diff --git a/module/my/lang/vi.php b/module/my/lang/vi.php index 3237b0aae2..e9bd0714ef 100644 --- a/module/my/lang/vi.php +++ b/module/my/lang/vi.php @@ -27,7 +27,7 @@ $lang->my->score = 'Điểm của bạn'; $lang->my->scoreRule = 'Quy định điểm'; $lang->my->noTodo = 'Chưa có việc nào.'; -$lang->my->myExecutions = "My Stage/{$lang->projectCommon}/Kanban"; +$lang->my->myExecutions = "My Stage/Sprint/Iteration"; $lang->my->name = 'Name'; $lang->my->code = 'Code'; $lang->my->projects = 'Project'; diff --git a/module/my/lang/zh-cn.php b/module/my/lang/zh-cn.php index 5f3ae77004..d926a05407 100644 --- a/module/my/lang/zh-cn.php +++ b/module/my/lang/zh-cn.php @@ -27,7 +27,7 @@ $lang->my->score = '我的积分'; $lang->my->scoreRule = '积分规则'; $lang->my->noTodo = '暂时没有待办。'; -$lang->my->myExecutions = "我参与的阶段/{$lang->projectCommon}/看板"; +$lang->my->myExecutions = "我参与的阶段/冲刺/迭代"; $lang->my->name = '名称'; $lang->my->code = '代号'; $lang->my->projects = '项目'; diff --git a/module/my/lang/zh-tw.php b/module/my/lang/zh-tw.php index 46be93619c..db91c2ca2a 100644 --- a/module/my/lang/zh-tw.php +++ b/module/my/lang/zh-tw.php @@ -27,7 +27,7 @@ $lang->my->score = '我的積分'; $lang->my->scoreRule = '積分規則'; $lang->my->noTodo = '暫時沒有待辦。'; -$lang->my->myExecutions = "我參與的階段/{$lang->projectCommon}/看板"; +$lang->my->myExecutions = "我參與的階段/衝刺/迭代"; $lang->my->name = '名稱'; $lang->my->code = '代號'; $lang->my->projects = '項目'; diff --git a/module/project/lang/de.php b/module/project/lang/de.php index 1bfb8a0700..f9568b8c8e 100644 --- a/module/project/lang/de.php +++ b/module/project/lang/de.php @@ -349,7 +349,6 @@ $lang->printKanban->typeList['increment'] = 'Erhöhen'; $lang->project->typeList[''] = ''; $lang->project->typeList['stage'] = 'Stage'; $lang->project->typeList['sprint'] = $lang->projectCommon; -$lang->project->typeList['kanban'] = 'Kanban'; $lang->project->featureBar['task']['all'] = $lang->project->allTasks; $lang->project->featureBar['task']['unclosed'] = $lang->project->unclosed; diff --git a/module/project/lang/en.php b/module/project/lang/en.php index 9ee60f857f..5038f5bf34 100644 --- a/module/project/lang/en.php +++ b/module/project/lang/en.php @@ -349,7 +349,6 @@ $lang->printKanban->typeList['increment'] = 'Increment'; $lang->project->typeList[''] = ''; $lang->project->typeList['stage'] = 'Stage'; $lang->project->typeList['sprint'] = $lang->projectCommon; -$lang->project->typeList['kanban'] = 'Kanban'; $lang->project->featureBar['task']['all'] = $lang->project->allTasks; $lang->project->featureBar['task']['unclosed'] = $lang->project->unclosed; diff --git a/module/project/lang/fr.php b/module/project/lang/fr.php index 35c533c9b3..f9a16c3b52 100644 --- a/module/project/lang/fr.php +++ b/module/project/lang/fr.php @@ -349,7 +349,6 @@ $lang->printKanban->typeList['increment'] = 'Incrément'; $lang->project->typeList[''] = ''; $lang->project->typeList['stage'] = 'Stage'; $lang->project->typeList['sprint'] = $lang->projectCommon; -$lang->project->typeList['kanban'] = 'Kanban'; $lang->project->featureBar['task']['all'] = $lang->project->allTasks; $lang->project->featureBar['task']['unclosed'] = $lang->project->unclosed; diff --git a/module/project/lang/vi.php b/module/project/lang/vi.php index c2cc21a333..f83b554f50 100644 --- a/module/project/lang/vi.php +++ b/module/project/lang/vi.php @@ -349,7 +349,6 @@ $lang->printKanban->typeList['increment'] = 'Tăng dần'; $lang->project->typeList[''] = ''; $lang->project->typeList['stage'] = 'Stage'; $lang->project->typeList['sprint'] = $lang->projectCommon; -$lang->project->typeList['kanban'] = 'Kanban'; $lang->project->featureBar['task']['all'] = $lang->project->allTasks; $lang->project->featureBar['task']['unclosed'] = $lang->project->unclosed; diff --git a/module/project/lang/zh-cn.php b/module/project/lang/zh-cn.php index 2f51c39073..d655edf3f4 100644 --- a/module/project/lang/zh-cn.php +++ b/module/project/lang/zh-cn.php @@ -349,7 +349,6 @@ $lang->printKanban->typeList['increment'] = '增量'; $lang->project->typeList[''] = ''; $lang->project->typeList['stage'] = '阶段'; $lang->project->typeList['sprint'] = $lang->projectCommon; -$lang->project->typeList['kanban'] = '看板'; $lang->project->featureBar['task']['all'] = $lang->project->allTasks; $lang->project->featureBar['task']['unclosed'] = $lang->project->unclosed; diff --git a/module/project/lang/zh-tw.php b/module/project/lang/zh-tw.php index 1e03c6e303..ad0d1d2c7a 100644 --- a/module/project/lang/zh-tw.php +++ b/module/project/lang/zh-tw.php @@ -345,7 +345,6 @@ $lang->printKanban->typeList['increment'] = '增量'; $lang->project->typeList[''] = ''; $lang->project->typeList['stage'] = '階段'; $lang->project->typeList['sprint'] = $lang->projectCommon; -$lang->project->typeList['kanban'] = '看板'; $lang->project->featureBar['task']['all'] = $lang->project->allTasks; $lang->project->featureBar['task']['unclosed'] = $lang->project->unclosed; From 85b31c630da9f4834df4cadc281d350eeab378e2 Mon Sep 17 00:00:00 2001 From: qiyu-xie Date: Mon, 30 Nov 2020 17:35:40 +0800 Subject: [PATCH 19/25] * Restore the expect button. --- module/stakeholder/control.php | 1 - module/stakeholder/view/browse.html.php | 1 + 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/module/stakeholder/control.php b/module/stakeholder/control.php index ffd7dce67a..720d7ce02f 100644 --- a/module/stakeholder/control.php +++ b/module/stakeholder/control.php @@ -359,7 +359,6 @@ class stakeholder extends control $expectID = $this->stakeholder->expect(); if(dao::isError()) die(js::error(dao::getError())); - $actionID = $this->loadModel('action')->create('expect', $expectID, 'Opened'); die(js::closeModal('parent.parent', 'this')); } diff --git a/module/stakeholder/view/browse.html.php b/module/stakeholder/view/browse.html.php index 619b42ea56..3cf3e2dc89 100644 --- a/module/stakeholder/view/browse.html.php +++ b/module/stakeholder/view/browse.html.php @@ -59,6 +59,7 @@
id", $stakeholder, 'list', 'chat-line', '', 'iframe', 'yes'); + common::printIcon('stakeholder', 'expect', "id=$stakeholder->id", $stakeholder, 'list', 'flag', '', 'iframe', 'yes'); if($stakeholder->projectModel == 'waterfall') common::printIcon('stakeholder', 'userIssue', "account=$stakeholder->id", $stakeholder, 'list', 'list-alt', '', 'iframe', 'yes'); common::printIcon('stakeholder', 'edit', "id=$stakeholder->id", $stakeholder, 'list', '', '', '', ''); $deleteClass = common::hasPriv('stakeholder', 'delete') ? 'btn' : 'btn disabled'; From efdc35eafccd6ae0c5c68885020244030b30bd44 Mon Sep 17 00:00:00 2001 From: hufangzhou <746775970@qq.com> Date: Tue, 1 Dec 2020 08:21:10 +0800 Subject: [PATCH 20/25] * Finish task#8555. --- module/doc/model.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/module/doc/model.php b/module/doc/model.php index 4a12b3c197..a522bbe770 100644 --- a/module/doc/model.php +++ b/module/doc/model.php @@ -1118,7 +1118,7 @@ class docModel extends model $idList = array(); $projectID = $this->session->PRJ; - $executionStatus = strpos($this->config->doc->custom->showLibs, 'unclosed') !== false ? 'unclosed' : 'all'; + $executionStatus = strpos($this->config->doc->custom->showLibs, 'unclosed') !== false ? 'undone' : 'all'; if($type == 'product') $objectList = $this->loadModel('product')->getProductPairsByProject($projectID, 'all'); if($type == 'project') $objectList = $this->loadModel('project')->getExecutionsByProject($projectID, $executionStatus, 0, true); From c6d9ec8b3a020c038e582894d1f662e9d253cbc6 Mon Sep 17 00:00:00 2001 From: tianshujie98 Date: Tue, 1 Dec 2020 08:25:46 +0800 Subject: [PATCH 21/25] * Adjust code style. --- module/project/model.php | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/module/project/model.php b/module/project/model.php index 0a1724c009..b1b85e09f8 100644 --- a/module/project/model.php +++ b/module/project/model.php @@ -791,7 +791,8 @@ class projectModel extends model { if(!preg_match("/^[0-9]+(.[0-9]{1,3})?$/", $percent)) { - return dao::$errors['percent'] = $this->lang->programplan->error->percentNumber; + dao::$errors['percent'] = $this->lang->programplan->error->percentNumber; + return false; } /* The total workload of the first stage should not exceed 100%. */ @@ -810,7 +811,8 @@ class projectModel extends model if($percentTotal >100) { - return dao::$errors['percent'] = sprintf($this->lang->project->workloadTotal, $oldPercentTotal . '%'); + dao::$errors['percent'] = sprintf($this->lang->project->workloadTotal, $oldPercentTotal . '%'); + return false; } } @@ -822,7 +824,8 @@ class projectModel extends model if($childrenTotalPercent > $parentPlan->percent) { - return dao::$errors['parent'] = sprintf($this->lang->programplan->error->parentWorkload, $parentPlan->percent . '%'); + dao::$errors['parent'] = sprintf($this->lang->programplan->error->parentWorkload, $parentPlan->percent . '%'); + return false; } } } From fa1e4ef625c1fbe8acb7884b3ab3e4a39d91ba4c Mon Sep 17 00:00:00 2001 From: hufangzhou <746775970@qq.com> Date: Tue, 1 Dec 2020 08:53:38 +0800 Subject: [PATCH 22/25] * Finish task#8559. --- db/zentao.sql | 1 + module/group/lang/resource.php | 2 ++ module/program/lang/de.php | 1 + module/program/lang/en.php | 1 + module/program/lang/fr.php | 1 + module/program/lang/vi.php | 1 + module/program/lang/zh-cn.php | 1 + module/program/lang/zh-tw.php | 1 + 8 files changed, 9 insertions(+) diff --git a/db/zentao.sql b/db/zentao.sql index 10b856a303..4138c2bd42 100644 --- a/db/zentao.sql +++ b/db/zentao.sql @@ -1668,6 +1668,7 @@ INSERT INTO `zt_grouppriv` (`group`, `module`, `method`) VALUES (1, 'productplan', 'unlinkBug'), (1, 'productplan', 'unlinkStory'), (1, 'productplan', 'view'), +(1, 'program', 'view'), (1, 'project', 'activate'), (1, 'project', 'batchedit'), (1, 'project', 'batchUnlinkStory'), diff --git a/module/group/lang/resource.php b/module/group/lang/resource.php index 78b93baf7d..b9e09122dc 100644 --- a/module/group/lang/resource.php +++ b/module/group/lang/resource.php @@ -198,6 +198,7 @@ $lang->resource->program->PRJWhitelist = 'PRJWhitelist'; $lang->resource->program->PRJAddWhitelist = 'PRJAddWhitelist'; $lang->resource->program->unbindWhielist = 'unbindWhielist'; $lang->resource->program->PRJManageProducts = 'PRJManageProducts'; +$lang->resource->program->view = 'view'; $lang->program->methodOrder[0] = 'createGuide'; //$lang->program->methodOrder[5] = 'PGMIndex'; @@ -237,6 +238,7 @@ $lang->program->methodOrder[170] = 'PRJWhitelist'; $lang->program->methodOrder[175] = 'PRJAddWhitelist'; $lang->program->methodOrder[180] = 'unbindWhielist'; $lang->program->methodOrder[185] = 'PRJManageProducts'; +$lang->program->methodOrder[190] = 'view'; /* Personnel . */ $lang->resource->personnel = new stdclass(); diff --git a/module/program/lang/de.php b/module/program/lang/de.php index 341cdba341..2456598799 100644 --- a/module/program/lang/de.php +++ b/module/program/lang/de.php @@ -32,6 +32,7 @@ $lang->program->PRJWhitelist = 'Project Whitelist'; $lang->program->PRJAddWhitelist = 'Project Add Whitelist'; $lang->program->unbindWhielist = 'Project Remove Whitelist'; $lang->program->PRJManageProducts = 'Manage Products'; +$lang->program->view = 'Program Detail'; $lang->program->copyTitle = 'Please select an project to copy'; $lang->program->errorSameProducts = 'Project cannot be associated with multiple identical products.'; $lang->program->errorNoProducts = 'At least one product is associated'; diff --git a/module/program/lang/en.php b/module/program/lang/en.php index eea8bf877c..13bbccc767 100644 --- a/module/program/lang/en.php +++ b/module/program/lang/en.php @@ -32,6 +32,7 @@ $lang->program->PRJWhitelist = 'Project Whitelist'; $lang->program->PRJAddWhitelist = 'Project Add Whitelist'; $lang->program->unbindWhielist = 'Project Remove Whitelist'; $lang->program->PRJManageProducts = 'Manage Products'; +$lang->program->view = 'Program Detail'; $lang->program->copyTitle = 'Please select an project to copy'; $lang->program->errorSameProducts = 'Project cannot be associated with multiple identical products.'; $lang->program->errorNoProducts = 'At least one product is associated'; diff --git a/module/program/lang/fr.php b/module/program/lang/fr.php index 341cdba341..2456598799 100644 --- a/module/program/lang/fr.php +++ b/module/program/lang/fr.php @@ -32,6 +32,7 @@ $lang->program->PRJWhitelist = 'Project Whitelist'; $lang->program->PRJAddWhitelist = 'Project Add Whitelist'; $lang->program->unbindWhielist = 'Project Remove Whitelist'; $lang->program->PRJManageProducts = 'Manage Products'; +$lang->program->view = 'Program Detail'; $lang->program->copyTitle = 'Please select an project to copy'; $lang->program->errorSameProducts = 'Project cannot be associated with multiple identical products.'; $lang->program->errorNoProducts = 'At least one product is associated'; diff --git a/module/program/lang/vi.php b/module/program/lang/vi.php index 341cdba341..2456598799 100644 --- a/module/program/lang/vi.php +++ b/module/program/lang/vi.php @@ -32,6 +32,7 @@ $lang->program->PRJWhitelist = 'Project Whitelist'; $lang->program->PRJAddWhitelist = 'Project Add Whitelist'; $lang->program->unbindWhielist = 'Project Remove Whitelist'; $lang->program->PRJManageProducts = 'Manage Products'; +$lang->program->view = 'Program Detail'; $lang->program->copyTitle = 'Please select an project to copy'; $lang->program->errorSameProducts = 'Project cannot be associated with multiple identical products.'; $lang->program->errorNoProducts = 'At least one product is associated'; diff --git a/module/program/lang/zh-cn.php b/module/program/lang/zh-cn.php index fc30e50c91..f2dbe8b644 100644 --- a/module/program/lang/zh-cn.php +++ b/module/program/lang/zh-cn.php @@ -33,6 +33,7 @@ $lang->program->PRJAddWhitelist = '项目添加白名单'; $lang->program->PRJStoryConcept = '需求概念组合'; $lang->program->unbindWhielist = '项目删除白名单'; $lang->program->PRJManageProducts = '关联产品'; +$lang->program->view = '项目集详情'; $lang->program->copyTitle = '请选择一个项目来复制'; $lang->program->errorSameProducts = '项目不能关联多个相同的产品。'; $lang->program->errorNoProducts = '最少关联一个产品'; diff --git a/module/program/lang/zh-tw.php b/module/program/lang/zh-tw.php index b9eca72562..24292bb01b 100644 --- a/module/program/lang/zh-tw.php +++ b/module/program/lang/zh-tw.php @@ -31,6 +31,7 @@ $lang->program->PRJWhitelist = '項目白名單'; $lang->program->PRJAddWhitelist = '項目添加白名單'; $lang->program->unbindWhielist = '項目刪除白名單'; $lang->program->PRJManageProducts = '關聯產品'; +$lang->program->view = '項目集詳情'; $lang->program->copyTitle = '請選擇一個項目來複制'; $lang->program->errorSameProducts = '項目不能關聯多個相同的產品。'; $lang->program->errorNoProducts = '最少關聯一個產品'; From 7a69d802699bc2e41b64b0397932f9a00b03ced2 Mon Sep 17 00:00:00 2001 From: tianshujie98 Date: Tue, 1 Dec 2020 08:52:41 +0800 Subject: [PATCH 23/25] * Adjust code style. --- 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 b1b85e09f8..4af90adbb6 100644 --- a/module/project/model.php +++ b/module/project/model.php @@ -806,7 +806,7 @@ class projectModel extends model ->andWhere('t2.deleted')->eq(0) ->fetch('total'); - if($type == 'create') $percentTotal = $percent + $oldPercentTotal; + if($type == 'create') $percentTotal = $percent + $oldPercentTotal; if($oldProject->grade == 1) $percentTotal = $oldPercentTotal - $oldProject->percent + $this->post->percent; if($percentTotal >100) From e10897a838189ef12acafca41f3b8c3f74e32372 Mon Sep 17 00:00:00 2001 From: wangyidong Date: Tue, 1 Dec 2020 09:03:13 +0800 Subject: [PATCH 24/25] * fix bug. --- lib/base/filter/filter.class.php | 4 +-- module/build/model.php | 28 ++++++++++++++----- module/extension/control.php | 10 +++++-- module/file/model.php | 2 ++ module/install/control.php | 5 ++-- module/projectbuild/control.php | 2 +- module/user/lang/de.php | 1 + module/user/lang/en.php | 1 + module/user/lang/fr.php | 1 + module/user/lang/vi.php | 1 + module/user/lang/zh-cn.php | 1 + module/user/view/create.html.php | 2 ++ module/user/view/login.html.php | 46 ++++++++++++++++++++++++++++++++ 13 files changed, 91 insertions(+), 13 deletions(-) diff --git a/lib/base/filter/filter.class.php b/lib/base/filter/filter.class.php index c748063809..f572e20fc7 100644 --- a/lib/base/filter/filter.class.php +++ b/lib/base/filter/filter.class.php @@ -951,7 +951,7 @@ class baseFixer public function cleanFloat($fieldName) { $fields = $this->processFields($fieldName); - foreach($fields as $fieldName) $this->data->$fieldName = filter_var($this->data->$fieldName, FILTER_SANITIZE_NUMBER_FLOAT, FILTER_FLAG_ALLOW_FRACTION|FILTER_FLAG_ALLOW_THOUSAND); + foreach($fields as $fieldName) $this->data->$fieldName = (float)filter_var($this->data->$fieldName, FILTER_SANITIZE_NUMBER_FLOAT, FILTER_FLAG_ALLOW_FRACTION|FILTER_FLAG_ALLOW_THOUSAND); return $this; } @@ -971,7 +971,7 @@ class baseFixer $filterVar = filter_var($this->data->$fieldName, FILTER_SANITIZE_NUMBER_INT); if(empty($filterVar)) $filterVar = 0; - $this->data->$fieldName = $filterVar; + $this->data->$fieldName = (int)$filterVar; } return $this; } diff --git a/module/build/model.php b/module/build/model.php index 9d522b64d3..5b24acd96f 100644 --- a/module/build/model.php +++ b/module/build/model.php @@ -134,10 +134,10 @@ class buildModel extends model public function getProjectBuildsBySearch($projectID, $queryID) { /* If there are saved query conditions, reset the session. */ - if($queryID) + if((int)$queryID) { - $query = $this->loadModel('search')->getQuery($queryID); - if($query) + $buildQuery = $this->loadModel('search')->getQuery($queryID); + if($buildQuery) { $this->session->set('projectBuildQuery', $query->sql); $this->session->set('projectBuildForm', $query->form); @@ -147,6 +147,12 @@ class buildModel extends model $this->session->set('projectBuildQuery', ' 1 = 1'); } } + else + { + if($this->session->projectBuildQuery == false) $this->session->set('projectBuildQuery', ' 1 = 1'); + } + + $buildQuery = $this->session->projectBuildQuery; /* Distinguish between repeated fields. */ $fields = array('id' => '`id`', 'name' => '`name`', 'product' => '`product`', 'desc' => '`desc`'); @@ -196,15 +202,25 @@ class buildModel extends model public function getExecutionBuildsBySearch($executionID, $queryID) { /* If there are saved query conditions, reset the session. */ - if($queryID) + if((int)$queryID) { - $query = $this->loadModel('search')->getQuery($queryID); - if($query) + $buildQuery = $this->loadModel('search')->getQuery($queryID); + if($buildQuery) { $this->session->set('projectBuildQuery', $query->sql); $this->session->set('projectBuildForm', $query->form); } + else + { + $this->session->set('projectBuildQuery', ' 1 = 1'); + } } + else + { + if($this->session->projectBuildQuery == false) $this->session->set('projectBuildQuery', ' 1 = 1'); + } + + $buildQuery = $this->session->projectBuildQuery; /* Distinguish between repeated fields. */ $fields = array('id' => '`id`', 'name' => '`name`', 'product' => '`product`', 'desc' => '`desc`'); diff --git a/module/extension/control.php b/module/extension/control.php index 67d8a9cd4a..17df862c22 100644 --- a/module/extension/control.php +++ b/module/extension/control.php @@ -463,10 +463,16 @@ class extension extends control $tmpName = $_FILES['file']['tmp_name']; $fileName = $_FILES['file']['name']; - move_uploaded_file($tmpName, $this->app->getTmpRoot() . "/extension/$fileName"); + $dest = $this->app->getTmpRoot() . "/extension/$fileName"; + move_uploaded_file($tmpName, $dest); + $extension = basename($fileName, '.zip'); $return = $this->extension->extractPackage($extension); - if($return->result != 'ok') die(js::alert(str_replace("'", "\'", sprintf($this->lang->extension->errorExtracted, $fileName, $return->error)))); + if($return->result != 'ok') + { + unlink($dest); + die(js::alert(str_replace("'", "\'", sprintf($this->lang->extension->errorExtracted, $fileName, $return->error)))); + } $info = $this->extension->parseExtensionCFG($extension); if(isset($info->code) and $info->code != $extension) diff --git a/module/file/model.php b/module/file/model.php index f8cfdf7a3f..2f041f04b2 100644 --- a/module/file/model.php +++ b/module/file/model.php @@ -300,6 +300,8 @@ class fileModel extends model public function getExtension($filename) { $extension = trim(strtolower(pathinfo($filename, PATHINFO_EXTENSION))); + if($extension and strpos($extension, '::') !== false) $extension = substr($extension, 0, strpos($extension, '::')); + if(empty($extension) or stripos(",{$this->config->file->dangers},", ",{$extension},") !== false) return 'txt'; if(empty($extension) or stripos(",{$this->config->file->allowed},", ",{$extension},") === false) return 'txt'; if($extension == 'php') return 'txt'; diff --git a/module/install/control.php b/module/install/control.php index 8ede07bb17..42dbcb6116 100644 --- a/module/install/control.php +++ b/module/install/control.php @@ -127,6 +127,9 @@ class install extends control { if(!session_save_path()) { + /* Restart the session because the session save path is null when start the session last time. */ + session_write_close(); + $tmpRootInfo = $this->install->getTmpRoot(); $sessionSavePath = $tmpRootInfo['path'] . 'session'; if(!is_dir($sessionSavePath)) mkdir($sessionSavePath, 0777, true); @@ -137,8 +140,6 @@ class install extends control $sessionResult = $this->install->checkSessionSavePath(); if($sessionResult == 'fail') chmod($sessionSavePath, 0777); - /* Restart the session because the session save path is null when start the session last time. */ - session_write_close(); session_start(); $this->session->set('installing', true); } diff --git a/module/projectbuild/control.php b/module/projectbuild/control.php index 1955ea762d..0e96d382db 100644 --- a/module/projectbuild/control.php +++ b/module/projectbuild/control.php @@ -18,7 +18,7 @@ class projectBuild extends control if($type == 'bysearch') { - $builds = $this->loadModel('build')->getProjectBuildsBySearch((int)$projectID, $param); + $builds = $this->loadModel('build')->getProjectBuildsBySearch((int)$projectID, (int)$param); } else { diff --git a/module/user/lang/de.php b/module/user/lang/de.php index ea022d295d..93926ede1f 100644 --- a/module/user/lang/de.php +++ b/module/user/lang/de.php @@ -218,3 +218,4 @@ $lang->user->noticeResetFile = "
Kontaktieren Sie den Administrator um Ihr Pa
  • Die Datei muss leer sein.
  • Wenn die Datei bereits existiert löschen Sie diese und erstellen Sie eine neue.
  • "; +$lang->user->notice4Safe = "It is detected that you may be using the one click installation package environment, and other sites in the environment are still using a simple password. For security, please change the password in time. Login address of other sites:
    %s"; diff --git a/module/user/lang/en.php b/module/user/lang/en.php index 641236d0de..026e72efc9 100644 --- a/module/user/lang/en.php +++ b/module/user/lang/en.php @@ -218,3 +218,4 @@ $lang->user->noticeResetFile = "
    Contact the Administrator to reset your pass
  • Keep the file empty.
  • If the file exists, remove it and create it again.
  • "; +$lang->user->notice4Safe = "It is detected that you may be using the one click installation package environment, and other sites in the environment are still using a simple password. For security, please change the password in time. Login address of other sites:
    %s"; diff --git a/module/user/lang/fr.php b/module/user/lang/fr.php index e15ec39d9b..0be8e541e9 100644 --- a/module/user/lang/fr.php +++ b/module/user/lang/fr.php @@ -218,3 +218,4 @@ $lang->user->noticeResetFile = "
    Contactez l'administrateur pour réinitialis
  • Gardez ce fichier vide.
  • Si le fichier existe déjà, supprimez le et créez le à nouveau.
  • Bonne chance.
  • "; +$lang->user->notice4Safe = "It is detected that you may be using the one click installation package environment, and other sites in the environment are still using a simple password. For security, please change the password in time. Login address of other sites:
    %s"; diff --git a/module/user/lang/vi.php b/module/user/lang/vi.php index 885eb9a7a1..a80ec1a6d5 100644 --- a/module/user/lang/vi.php +++ b/module/user/lang/vi.php @@ -218,3 +218,4 @@ $lang->user->noticeResetFile = "
    Liên hệ quản trị viên để thiết
  • Giữ tập tin này rỗng.
  • Nếu tập tin đã tồn tại, xóa và tạo lại.
  • "; +$lang->user->notice4Safe = "It is detected that you may be using the one click installation package environment, and other sites in the environment are still using a simple password. For security, please change the password in time. Login address of other sites:
    %s"; diff --git a/module/user/lang/zh-cn.php b/module/user/lang/zh-cn.php index d97ba6c1b8..ac32efa643 100644 --- a/module/user/lang/zh-cn.php +++ b/module/user/lang/zh-cn.php @@ -218,3 +218,4 @@ $lang->user->noticeResetFile = "
    普通用户请联系管理员重置密码文件内容为空。
  • 如果之前文件存在,删除之后重新创建。
  • "; +$lang->user->notice4Safe = "检测到您可能在使用一键安装包环境,该环境中其他站点还在用简单密码,安全起见,请及时修改密码。其他站点的登录地址:
    %s"; diff --git a/module/user/view/create.html.php b/module/user/view/create.html.php index b4ae529524..2ca2e2143e 100644 --- a/module/user/view/create.html.php +++ b/module/user/view/create.html.php @@ -60,11 +60,13 @@
    user->roleList, '', "class='form-control' onchange='changeGroup(this.value)'");?> user->placeholder->role?>
    user->group;?> user->placeholder->group?>
    user->email;?> custom->SRTips}");?>