diff --git a/db/update20.0.beta2.sql b/db/update20.0.beta2.sql index c00d256eb9..79567aeeb7 100644 --- a/db/update20.0.beta2.sql +++ b/db/update20.0.beta2.sql @@ -1,3 +1,4 @@ ALTER TABLE `zt_risk` add `closedBy` char(30) AFTER `assignedTo`; ALTER TABLE `zt_risk` add `closedDate` date AFTER `closedBy`; ALTER TABLE `zt_issue` CHANGE `closeBy` `closedBy` char(30); +ALTER TABLE `zt_repo` CHANGE `PRJ` `product` varchar(255) NOT NULL AFTER `id`; diff --git a/db/zentao.sql b/db/zentao.sql index 0e58c1be7f..a6982a37a1 100644 --- a/db/zentao.sql +++ b/db/zentao.sql @@ -810,7 +810,7 @@ CREATE TABLE IF NOT EXISTS `zt_release` ( -- DROP TABLE IF EXISTS `zt_repo`; CREATE TABLE IF NOT EXISTS `zt_repo` ( `id` mediumint(9) NOT NULL AUTO_INCREMENT, - `PRJ` varchar(255) NOT NULL, + `product` varchar(255) NOT NULL, `name` varchar(255) NOT NULL, `path` varchar(255) NOT NULL, `prefix` varchar(100) NOT NULL, diff --git a/module/common/lang/de.php b/module/common/lang/de.php index 88edc76106..af961d2ca2 100644 --- a/module/common/lang/de.php +++ b/module/common/lang/de.php @@ -133,11 +133,12 @@ $lang->mainNav->my = ' My|my|index|'; $lang->mainNav->program = ' Program|program|pgmbrowse|'; $lang->mainNav->product = ' Product|product|index|'; $lang->mainNav->project = ' Project|program|prjbrowse|'; +$lang->mainNav->repo = ' Code|repo|browse|'; $lang->mainNav->system = ' System|custom|estimate|'; $lang->mainNav->admin = ' Admin|admin|index|'; $lang->reporting = new stdclass(); -$lang->dividerMenu = ',admin,'; +$lang->dividerMenu = ',admin,project,repo,'; /* Program set menu. */ $lang->program = new stdclass(); @@ -623,21 +624,22 @@ $lang->navGroup->weekly = 'project'; $lang->navGroup->milestone = 'project'; $lang->navGroup->pssp = 'project'; $lang->navGroup->design = 'project'; -$lang->navGroup->repo = 'project'; $lang->navGroup->issue = 'project'; $lang->navGroup->risk = 'project'; $lang->navGroup->auditplan = 'project'; $lang->navGroup->cm = 'project'; $lang->navGroup->nc = 'project'; -$lang->navGroup->job = 'project'; -$lang->navGroup->jenkins = 'project'; -$lang->navGroup->compile = 'project'; $lang->navGroup->build = 'project'; $lang->navGroup->projectrelease = 'project'; $lang->navGroup->projectbuild = 'project'; $lang->navGroup->durationestimation = 'project'; +$lang->navGroup->repo = 'repo'; +$lang->navGroup->job = 'repo'; +$lang->navGroup->jenkins = 'repo'; +$lang->navGroup->compile = 'repo'; + $lang->navGroup->stage = 'system'; $lang->navGroup->measurement = 'system'; $lang->navGroup->report = 'system'; @@ -958,6 +960,6 @@ $lang->projectstory->menu->story = array('link' => "{$lang->projectSRCommo $lang->projectstory->menu->track = array('link' => 'Track|projectstory|track', 'subModule' => ''); $lang->nc->menu = $lang->auditplan->menu; -$lang->noMenuModule = array('my', 'todo', 'effort', 'program', 'product', 'productplan', 'projectbuild', 'story', 'branch', 'release', 'attend', 'leave', 'makeup', 'overtime', 'lieu', 'custom', 'admin', 'mail', 'extension', 'dev', 'backup', 'action', 'cron', 'issue', 'risk', 'pssp', 'sms', 'message', 'webhook', 'search'); +$lang->noMenuModule = array('my', 'todo', 'effort', 'program', 'product', 'productplan', 'projectbuild', 'story', 'job', 'jenkins', 'branch', 'release', 'attend', 'leave', 'makeup', 'overtime', 'lieu', 'custom', 'admin', 'mail', 'extension', 'dev', 'backup', 'action', 'cron', 'issue', 'risk', 'pssp', 'sms', 'message', 'webhook', 'search'); include (dirname(__FILE__) . '/menuOrder.php'); diff --git a/module/common/lang/en.php b/module/common/lang/en.php index a7d3af338b..e42cf1b824 100644 --- a/module/common/lang/en.php +++ b/module/common/lang/en.php @@ -133,11 +133,12 @@ $lang->mainNav->my = ' My|my|index|'; $lang->mainNav->program = ' Program|program|pgmbrowse|'; $lang->mainNav->product = ' Product|product|index|'; $lang->mainNav->project = ' Project|program|prjbrowse|'; +$lang->mainNav->repo = ' Code|repo|browse|'; $lang->mainNav->system = ' System|custom|estimate|'; $lang->mainNav->admin = ' Admin|admin|index|'; $lang->reporting = new stdclass(); -$lang->dividerMenu = ',admin,'; +$lang->dividerMenu = ',admin,project,repo,'; /* Program set menu. */ $lang->program = new stdclass(); @@ -623,21 +624,22 @@ $lang->navGroup->weekly = 'project'; $lang->navGroup->milestone = 'project'; $lang->navGroup->pssp = 'project'; $lang->navGroup->design = 'project'; -$lang->navGroup->repo = 'project'; $lang->navGroup->issue = 'project'; $lang->navGroup->risk = 'project'; $lang->navGroup->auditplan = 'project'; $lang->navGroup->cm = 'project'; $lang->navGroup->nc = 'project'; -$lang->navGroup->job = 'project'; -$lang->navGroup->jenkins = 'project'; -$lang->navGroup->compile = 'project'; $lang->navGroup->build = 'project'; $lang->navGroup->projectrelease = 'project'; $lang->navGroup->projectbuild = 'project'; $lang->navGroup->durationestimation = 'project'; +$lang->navGroup->repo = 'repo'; +$lang->navGroup->job = 'repo'; +$lang->navGroup->jenkins = 'repo'; +$lang->navGroup->compile = 'repo'; + $lang->navGroup->stage = 'system'; $lang->navGroup->measurement = 'system'; $lang->navGroup->report = 'system'; @@ -958,6 +960,6 @@ $lang->projectstory->menu->story = array('link' => "{$lang->projectSRCommo $lang->projectstory->menu->track = array('link' => 'Track|projectstory|track', 'subModule' => ''); $lang->nc->menu = $lang->auditplan->menu; -$lang->noMenuModule = array('my', 'todo', 'effort', 'program', 'product', 'productplan', 'projectbuild', 'story', 'branch', 'release', 'attend', 'leave', 'makeup', 'overtime', 'lieu', 'custom', 'admin', 'mail', 'extension', 'dev', 'backup', 'action', 'cron', 'issue', 'risk', 'pssp', 'sms', 'message', 'webhook', 'search'); +$lang->noMenuModule = array('my', 'todo', 'effort', 'program', 'product', 'productplan', 'projectbuild', 'story', 'job', 'jenkins', 'branch', 'release', 'attend', 'leave', 'makeup', 'overtime', 'lieu', 'custom', 'admin', 'mail', 'extension', 'dev', 'backup', 'action', 'cron', 'issue', 'risk', 'pssp', 'sms', 'message', 'webhook', 'search'); include (dirname(__FILE__) . '/menuOrder.php'); diff --git a/module/common/lang/fr.php b/module/common/lang/fr.php index dc13e3aaf1..230c806ba6 100644 --- a/module/common/lang/fr.php +++ b/module/common/lang/fr.php @@ -133,11 +133,12 @@ $lang->mainNav->my = ' My|my|index|'; $lang->mainNav->program = ' Program|program|pgmbrowse|'; $lang->mainNav->product = ' Product|product|index|'; $lang->mainNav->project = ' Project|program|prjbrowse|'; +$lang->mainNav->repo = ' Code|repo|browse|'; $lang->mainNav->system = ' System|custom|estimate|'; $lang->mainNav->admin = ' Admin|admin|index|'; $lang->reporting = new stdclass(); -$lang->dividerMenu = ',admin,'; +$lang->dividerMenu = ',admin,project,repo,'; /* Program set menu. */ $lang->program = new stdclass(); @@ -623,21 +624,22 @@ $lang->navGroup->weekly = 'project'; $lang->navGroup->milestone = 'project'; $lang->navGroup->pssp = 'project'; $lang->navGroup->design = 'project'; -$lang->navGroup->repo = 'project'; $lang->navGroup->issue = 'project'; $lang->navGroup->risk = 'project'; $lang->navGroup->auditplan = 'project'; $lang->navGroup->cm = 'project'; $lang->navGroup->nc = 'project'; -$lang->navGroup->job = 'project'; -$lang->navGroup->jenkins = 'project'; -$lang->navGroup->compile = 'project'; $lang->navGroup->build = 'project'; $lang->navGroup->projectrelease = 'project'; $lang->navGroup->projectbuild = 'project'; $lang->navGroup->durationestimation = 'project'; +$lang->navGroup->repo = 'repo'; +$lang->navGroup->job = 'repo'; +$lang->navGroup->jenkins = 'repo'; +$lang->navGroup->compile = 'repo'; + $lang->navGroup->stage = 'system'; $lang->navGroup->measurement = 'system'; $lang->navGroup->report = 'system'; @@ -958,6 +960,6 @@ $lang->projectstory->menu->story = array('link' => "{$lang->projectSRCommo $lang->projectstory->menu->track = array('link' => 'Track|projectstory|track', 'subModule' => ''); $lang->nc->menu = $lang->auditplan->menu; -$lang->noMenuModule = array('my', 'todo', 'effort', 'program', 'product', 'productplan', 'projectbuild', 'story', 'branch', 'release', 'attend', 'leave', 'makeup', 'overtime', 'lieu', 'custom', 'admin', 'mail', 'extension', 'dev', 'backup', 'action', 'cron', 'issue', 'risk', 'pssp', 'sms', 'message', 'webhook', 'search'); +$lang->noMenuModule = array('my', 'todo', 'effort', 'program', 'product', 'productplan', 'projectbuild', 'story', 'job', 'jenkins', 'branch', 'release', 'attend', 'leave', 'makeup', 'overtime', 'lieu', 'custom', 'admin', 'mail', 'extension', 'dev', 'backup', 'action', 'cron', 'issue', 'risk', 'pssp', 'sms', 'message', 'webhook', 'search'); include (dirname(__FILE__) . '/menuOrder.php'); diff --git a/module/common/lang/vi.php b/module/common/lang/vi.php index 5b8051343f..8e088c00a6 100644 --- a/module/common/lang/vi.php +++ b/module/common/lang/vi.php @@ -133,11 +133,12 @@ $lang->mainNav->my = ' My|my|index|'; $lang->mainNav->program = ' Program|program|pgmbrowse|'; $lang->mainNav->product = ' Product|product|index|'; $lang->mainNav->project = ' Project|program|prjbrowse|'; +$lang->mainNav->repo = ' Code|repo|browse|'; $lang->mainNav->system = ' System|custom|estimate|'; $lang->mainNav->admin = ' Admin|admin|index|'; $lang->reporting = new stdclass(); -$lang->dividerMenu = ',admin,'; +$lang->dividerMenu = ',admin,project,repo,'; /* Program set menu. */ $lang->program = new stdclass(); @@ -623,21 +624,22 @@ $lang->navGroup->weekly = 'project'; $lang->navGroup->milestone = 'project'; $lang->navGroup->pssp = 'project'; $lang->navGroup->design = 'project'; -$lang->navGroup->repo = 'project'; $lang->navGroup->issue = 'project'; $lang->navGroup->risk = 'project'; $lang->navGroup->auditplan = 'project'; $lang->navGroup->cm = 'project'; $lang->navGroup->nc = 'project'; -$lang->navGroup->job = 'project'; -$lang->navGroup->jenkins = 'project'; -$lang->navGroup->compile = 'project'; $lang->navGroup->build = 'project'; $lang->navGroup->projectrelease = 'project'; $lang->navGroup->projectbuild = 'project'; $lang->navGroup->durationestimation = 'project'; +$lang->navGroup->repo = 'repo'; +$lang->navGroup->job = 'repo'; +$lang->navGroup->jenkins = 'repo'; +$lang->navGroup->compile = 'repo'; + $lang->navGroup->stage = 'system'; $lang->navGroup->measurement = 'system'; $lang->navGroup->report = 'system'; @@ -958,6 +960,6 @@ $lang->projectstory->menu->story = array('link' => "{$lang->projectSRCommo $lang->projectstory->menu->track = array('link' => 'Track|projectstory|track', 'subModule' => ''); $lang->nc->menu = $lang->auditplan->menu; -$lang->noMenuModule = array('my', 'todo', 'effort', 'program', 'product', 'productplan', 'projectbuild', 'story', 'branch', 'release', 'attend', 'leave', 'makeup', 'overtime', 'lieu', 'custom', 'admin', 'mail', 'extension', 'dev', 'backup', 'action', 'cron', 'issue', 'risk', 'pssp', 'sms', 'message', 'webhook', 'search'); +$lang->noMenuModule = array('my', 'todo', 'effort', 'program', 'product', 'productplan', 'projectbuild', 'story', 'job', 'jenkins', 'branch', 'release', 'attend', 'leave', 'makeup', 'overtime', 'lieu', 'custom', 'admin', 'mail', 'extension', 'dev', 'backup', 'action', 'cron', 'issue', 'risk', 'pssp', 'sms', 'message', 'webhook', 'search'); include (dirname(__FILE__) . '/menuOrder.php'); diff --git a/module/common/lang/zh-cn.php b/module/common/lang/zh-cn.php index 6440230db0..5fec127a62 100755 --- a/module/common/lang/zh-cn.php +++ b/module/common/lang/zh-cn.php @@ -133,11 +133,12 @@ $lang->mainNav->my = ' 地盘|my|index|'; $lang->mainNav->program = ' 项目集|program|pgmbrowse|'; $lang->mainNav->product = ' 产品|product|index|'; $lang->mainNav->project = ' 项目|program|prjbrowse|'; +$lang->mainNav->repo = ' 代码|repo|browse|'; $lang->mainNav->system = ' 组织|subject|browse|'; $lang->mainNav->admin = ' 后台|admin|index|'; $lang->reporting = new stdclass(); -$lang->dividerMenu = ',admin,'; +$lang->dividerMenu = ',admin,project,repo,'; /* Program set menu. */ $lang->program = new stdclass(); @@ -623,21 +624,22 @@ $lang->navGroup->weekly = 'project'; $lang->navGroup->milestone = 'project'; $lang->navGroup->pssp = 'project'; $lang->navGroup->design = 'project'; -$lang->navGroup->repo = 'project'; $lang->navGroup->issue = 'project'; $lang->navGroup->risk = 'project'; $lang->navGroup->auditplan = 'project'; $lang->navGroup->cm = 'project'; $lang->navGroup->nc = 'project'; -$lang->navGroup->job = 'project'; -$lang->navGroup->jenkins = 'project'; -$lang->navGroup->compile = 'project'; $lang->navGroup->build = 'project'; $lang->navGroup->projectrelease = 'project'; $lang->navGroup->projectbuild = 'project'; $lang->navGroup->durationestimation = 'project'; +$lang->navGroup->repo = 'repo'; +$lang->navGroup->job = 'repo'; +$lang->navGroup->jenkins = 'repo'; +$lang->navGroup->compile = 'repo'; + $lang->navGroup->stage = 'system'; $lang->navGroup->measurement = 'system'; $lang->navGroup->report = 'system'; @@ -891,7 +893,6 @@ $lang->menu->waterfall->weekly = array('link' => '报告|weekly|index|pr $lang->menu->waterfall->doc = array('link' => '文档|doc|index|project={PROJECT}'); $lang->menu->waterfall->projectstory = array('link' => '需求|projectstory|requirement', 'alias' => 'requirement,story,track'); $lang->menu->waterfall->design = '设计|design|browse|product={PRODUCT}'; -$lang->menu->waterfall->ci = '代码|repo|browse|'; $lang->menu->waterfall->qa = array('link' => '测试|bug|browse|product={PRODUCT}', 'subModule' => ',testcase,testtask,testsuite,caselib,'); $lang->menu->waterfall->projectrelease = array('link' => '发布|projectrelease|browse'); $lang->menu->waterfall->issue = '问题|issue|browse|'; @@ -958,6 +959,6 @@ $lang->projectstory->menu->story = array('link' => "{$lang->projectSRCommo $lang->projectstory->menu->track = array('link' => '跟踪矩阵|projectstory|track', 'subModule' => ''); $lang->nc->menu = $lang->auditplan->menu; -$lang->noMenuModule = array('my', 'todo', 'effort', 'program', 'product', 'productplan', 'projectbuild', 'story', 'branch', 'release', 'attend', 'leave', 'makeup', 'overtime', 'lieu', 'custom', 'admin', 'mail', 'extension', 'dev', 'backup', 'action', 'cron', 'issue', 'risk', 'pssp', 'sms', 'message', 'webhook', 'search'); +$lang->noMenuModule = array('my', 'todo', 'effort', 'program', 'product', 'productplan', 'projectbuild', 'story', 'job', 'jenkins', 'branch', 'release', 'attend', 'leave', 'makeup', 'overtime', 'lieu', 'custom', 'admin', 'mail', 'extension', 'dev', 'backup', 'action', 'cron', 'issue', 'risk', 'pssp', 'sms', 'message', 'webhook', 'search'); include (dirname(__FILE__) . '/menuOrder.php'); diff --git a/module/common/model.php b/module/common/model.php index 4e44b5f08e..ba21acd61e 100644 --- a/module/common/model.php +++ b/module/common/model.php @@ -49,7 +49,7 @@ class commonModel extends model if($this->loadModel('setting')->getItem('owner=system&module=sso&key=turnon')) { - if(isset($_SERVER["HTTPS"]) && $_SERVER["HTTPS"] == 'on') + if(isset($_SERVER["HTTPS"]) && $_SERVER["HTTPS"] == 'on') { $session = $this->config->sessionVar . '=' . session_id(); header("Set-Cookie: $session; SameSite=None; Secure=true", false); @@ -204,7 +204,7 @@ class commonModel extends model /** * Deny access. * - * @param varchar $module + * @param varchar $module * @param varchar $method * @param bool $reload * @access public @@ -454,28 +454,28 @@ class commonModel extends model { /* Replace for dropdown submenu. */ if(isset($lang->$model->subMenu->$key)) - { + { $programSubMenu = $lang->$model->subMenu->$key; $subMenu = common::createSubMenu($programSubMenu, $app->session->PRJ); if(!empty($subMenu)) - { + { foreach($subMenu as $menuKey => $menu) - { - $itemMenu = zget($programSubMenu, $menuKey, ''); + { + $itemMenu = zget($programSubMenu, $menuKey, ''); $isActive['method'] = ($moduleName == strtolower($menu->link['module']) and $methodName == strtolower($menu->link['method'])); $isActive['alias'] = ($moduleName == strtolower($menu->link['module']) and (is_array($itemMenu) and isset($itemMenu['alias']) and strpos($itemMenu['alias'], $methodName) !== false)); $isActive['subModule'] = (is_array($itemMenu) and isset($itemMenu['subModule']) and strpos($itemMenu['subModule'], $moduleName) !== false); if($isActive['method'] or $isActive['alias'] or $isActive['subModule']) - { + { $lang->menu->$model->{$key}['link'] = $menu->text . "|" . join('|', $menu->link); break; - } - } + } + } $lang->menu->$model->{$key}['subMenu'] = $subMenu; - } - } + } + } } } } @@ -538,7 +538,6 @@ class commonModel extends model global $app, $lang; $lastMenu = end($lang->mainNav); - echo "\n"; } /** @@ -667,7 +664,7 @@ class commonModel extends model if(isset($subMenuItem->link['vars'])) $subParams = $subMenuItem->link['vars']; $subLink = helper::createLink($subModule, $subMethod, $subParams); - if($subMenuItem->name == 'program') + if($subMenuItem->name == 'program') { /* Print program sub menu.*/ global $dbh; @@ -781,6 +778,7 @@ class commonModel extends model /* Set main menu by group. */ $group = isset($lang->navGroup->$moduleName) ? $lang->navGroup->$moduleName : ''; if($moduleName == 'admin') return; + if($group == 'repo') return; if($group == 'my') self::getMyModuleMenu($moduleName, $methodName); if($group == 'project') self::getProgramModuleMenu($moduleName); @@ -1737,7 +1735,7 @@ EOD; /* If is the program admin, have all program privs. */ $inProject = isset($lang->navGroup->$module) && $lang->navGroup->$module == 'project'; - if($inProject && $app->session->PRJ && strpos(",{$app->user->rights['projects']},", ",{$app->session->PRJ},") !== false) return true; + if($inProject && $app->session->PRJ && strpos(",{$app->user->rights['projects']},", ",{$app->session->PRJ},") !== false) return true; /* If not super admin, check the rights. */ $rights = $app->user->rights['rights']; @@ -1794,14 +1792,14 @@ EOD; $this->app->user->rights = $this->loadModel('user')->authorize($this->app->user->account); $rights = $this->app->user->rights['rights']; if($program->auth == 'extend') $this->app->user->rights['rights'] = array_merge_recursive($programRightGroup, $rights); - if($program->auth == 'reset') + if($program->auth == 'reset') { /* If priv way is reset, unset common program priv, and cover by program priv. */ - foreach($rights as $moduleKey => $methods) + foreach($rights as $moduleKey => $methods) { if(in_array($moduleKey, $this->config->programPriv->waterfall)) unset($rights[$moduleKey]); } - + $this->app->user->rights['rights'] = array_merge($rights, $programRightGroup); } } @@ -2307,6 +2305,11 @@ EOD; $lang->menu = $lang->product->menu; $lang->menuOrder = $lang->product->menuOrder; } + if($group == 'repo') + { + $lang->menu = $lang->repo->menu; + $lang->menuOrder = $lang->repo->menuOrder; + } if($group == 'project') { $lang->menu = self::getProgramMainMenu($moduleName); @@ -2322,28 +2325,28 @@ EOD; * @return string */ public static function processMenuVars($menus) - { + { global $app, $lang; if(empty($menus)) return; foreach($menus as $name => $setting) - { + { $link = is_array($setting) ? $setting['link'] : $setting; if(strpos($link, "{PRODUCT}") !== false) $link = str_replace('{PRODUCT}', $app->session->product, $link); if(strpos($link, "{EXECUTION}") !== false) $link = str_replace('{EXECUTION}', $app->session->project, $link); if(strpos($link, "{PROJECT}") !== false) $link = str_replace('{PROJECT}', $app->session->PRJ, $link); - if(is_array($setting)) - { + if(is_array($setting)) + { $setting['link'] = $link; - } - else - { + } + else + { $setting = $link; - } + } $menus->$name = $setting; - } + } return $menus; } @@ -2396,12 +2399,12 @@ EOD; global $app, $lang, $dbh; $program = $dbh->query("SELECT * FROM " . TABLE_PROJECT . " WHERE `id` = '{$app->session->PRJ}'")->fetch(); if(empty($program)) return; - if($program->model == 'waterfall') + if($program->model == 'waterfall') { $lang->navGroup->product = 'project'; $lang->$moduleName->menu = self::processMenuVars($lang->$moduleName->menu); } - if($program->model == 'scrum') + if($program->model == 'scrum') { unset($lang->stakeholder->menu->issue); unset($lang->stakeholder->menu->plan); diff --git a/module/common/view/datatable.html.php b/module/common/view/datatable.html.php index e29ddbdc9c..412962dc67 100644 --- a/module/common/view/datatable.html.php +++ b/module/common/view/datatable.html.php @@ -53,6 +53,7 @@ var datatableOptions = this.$datatable.find('.table').addClass('has-sort-head'); } this.$datatable.find('.sparkline').sparkline(); + $('.progress-pie').progressPie(); } }; diff --git a/module/common/view/header.html.php b/module/common/view/header.html.php index 36e485e9d7..d7131c9789 100755 --- a/module/common/view/header.html.php +++ b/module/common/view/header.html.php @@ -12,8 +12,10 @@ include 'chosen.html.php'; navGroup, $app->rawModule) == 'product');?>