diff --git a/db/update17.6.1.sql b/db/update17.6.1.sql index 9846b7562f..7fed81278f 100644 --- a/db/update17.6.1.sql +++ b/db/update17.6.1.sql @@ -1,2 +1,4 @@ ALTER TABLE `zt_product` ADD `shadow` tinyint(1) unsigned NOT NULL AFTER `code`; ALTER TABLE `zt_project` ADD `hasProduct` tinyint(1) unsigned NOT NULL DEFAULT 1 AFTER `code`; + +ALTER TABLE `zt_product` MODIFY `name` varchar(110) NOT NULL; \ No newline at end of file diff --git a/db/zentao.sql b/db/zentao.sql index b39793fd2a..e92a6e2223 100755 --- a/db/zentao.sql +++ b/db/zentao.sql @@ -1096,7 +1096,7 @@ CREATE TABLE IF NOT EXISTS `zt_planstory` ( CREATE TABLE IF NOT EXISTS `zt_product` ( `id` mediumint(8) unsigned NOT NULL auto_increment, `program` mediumint(8) unsigned NOT NULL, - `name` varchar(90) NOT NULL, + `name` varchar(110) NOT NULL, `code` varchar(45) NOT NULL, `shadow` tinyint(1) unsigned NOT NULL, `bind` enum('0','1') NOT NULL DEFAULT '0', diff --git a/module/common/lang/menu.php b/module/common/lang/menu.php index 856fe405a8..c6f2c848eb 100644 --- a/module/common/lang/menu.php +++ b/module/common/lang/menu.php @@ -209,7 +209,7 @@ $lang->scrum->menu->devops = array('link' => "{$lang->repo->common}|repo|brow $lang->scrum->menu->build = array('link' => "{$lang->build->common}|project|build|project=%s"); $lang->scrum->menu->release = array('link' => "{$lang->release->common}|projectrelease|browse|project=%s", 'subModule' => 'projectrelease'); $lang->scrum->menu->dynamic = array('link' => "$lang->dynamic|project|dynamic|project=%s"); -$lang->scrum->menu->settings = array('link' => "$lang->settings|project|view|project=%s", 'subModule' => 'stakeholder', 'alias' => 'edit,manageproducts,group,managemembers,manageview,managepriv,whitelist,addwhitelist,team'); +$lang->scrum->menu->settings = array('link' => "$lang->settings|project|view|project=%s", 'subModule' => 'tree,stakeholder', 'alias' => 'edit,manageproducts,group,managemembers,manageview,managepriv,whitelist,addwhitelist,team'); $lang->scrum->dividerMenu = ',execution,programplan,doc,settings,'; @@ -241,6 +241,7 @@ $lang->scrum->menu->settings['subMenu']->members = array('link' => "{$lang-> $lang->scrum->menu->settings['subMenu']->whitelist = array('link' => "{$lang->whitelist}|project|whitelist|project=%s", 'subModule' => 'personnel'); $lang->scrum->menu->settings['subMenu']->stakeholder = array('link' => "{$lang->stakeholder->common}|stakeholder|browse|project=%s", 'subModule' => 'stakeholder'); $lang->scrum->menu->settings['subMenu']->group = array('link' => "{$lang->priv}|project|group|project=%s", 'alias' => 'group,manageview,managepriv'); +$lang->scrum->menu->settings['subMenu']->module = array('link' => "{$lang->module}|tree|browse|product=%s&view=story"); /* Waterfall menu. */ $lang->waterfall->menu = new stdclass(); @@ -295,7 +296,7 @@ $lang->kanbanProject = new stdclass(); $lang->kanbanProject->menu = new stdclass(); $lang->kanbanProject->menu->index = array('link' => "{$lang->kanban->common}|project|index|project=%s"); $lang->kanbanProject->menu->build = array('link' => "{$lang->build->common}|project|build|project=%s"); -$lang->kanbanProject->menu->settings = array('link' => "$lang->settings|project|view|project=%s", 'subModule' => 'stakeholder', 'alias' => 'edit,manageproducts,group,managemembers,manageview,managepriv,whitelist,addwhitelist,team'); +$lang->kanbanProject->menu->settings = array('link' => "$lang->settings|project|view|project=%s", 'subModule' => 'tree,stakeholder', 'alias' => 'edit,manageproducts,group,managemembers,manageview,managepriv,whitelist,addwhitelist,team'); $lang->kanbanProject->dividerMenu = ''; @@ -309,6 +310,7 @@ $lang->kanbanProject->menu->settings['subMenu']->view = array('link' => " $lang->kanbanProject->menu->settings['subMenu']->products = array('link' => "{$lang->product->common}|project|manageProducts|project=%s", 'alias' => 'manageproducts'); $lang->kanbanProject->menu->settings['subMenu']->members = array('link' => "{$lang->team->common}|project|team|project=%s", 'alias' => 'managemembers,team'); $lang->kanbanProject->menu->settings['subMenu']->whitelist = array('link' => "{$lang->whitelist}|project|whitelist|project=%s", 'subModule' => 'personnel'); +$lang->kanbanProject->menu->settings['subMenu']->module = array('link' => "{$lang->module}|tree|browse|product=%s&view=story"); /* Execution menu. */ $lang->execution->homeMenu = new stdclass(); diff --git a/module/datatable/config.php b/module/datatable/config.php index 0c2c0fdbb0..3909fefff3 100644 --- a/module/datatable/config.php +++ b/module/datatable/config.php @@ -6,3 +6,5 @@ $config->datatable->moduleAlias['testtask-cases'] = 'testcase'; $config->datatable->moduleAlias['program-project'] = 'project'; $config->datatable->moduleAlias['project-bug'] = 'bug'; $config->datatable->moduleAlias['execution-bug'] = 'bug'; + +$config->datatable->noProductModule = ',review,'; diff --git a/module/datatable/model.php b/module/datatable/model.php index e69834e266..49267b9bf6 100644 --- a/module/datatable/model.php +++ b/module/datatable/model.php @@ -23,6 +23,12 @@ class datatableModel extends model public function getFieldList($module) { if(!isset($this->config->$module)) $this->loadModel($module); + if($this->session->hasProduct == 0 and (strpos($this->config->datatable->noProductModule, ",$module,") !== false)) + { + $productIndex = array_search('product', $this->config->$module->datatable->defaultField); + if($productIndex) unset($this->config->$module->datatable->defaultField[$productIndex]); + if(isset($this->config->$module->datatable->fieldList['product'])) unset($this->config->$module->datatable->fieldList['product']); + } if($this->session->currentProductType === 'normal') unset($this->config->$module->datatable->fieldList['branch']); foreach($this->config->$module->datatable->fieldList as $field => $items) { diff --git a/module/execution/control.php b/module/execution/control.php index 6eeeddbe7e..140d8f0b7e 100644 --- a/module/execution/control.php +++ b/module/execution/control.php @@ -847,6 +847,10 @@ class execution extends control $branchOption[$branchID] = $name; } } + + $projectID = $execution->project; + $project = $this->loadModel('project')->getByID($projectID); + if(empty($project->hasProduct)) unset($this->config->product->search['fields']['product']); $this->execution->buildStorySearchForm($products, $branchGroups, $modules, $queryID, $actionURL, 'executionStory', $executionID); /* Header and position. */ diff --git a/module/execution/model.php b/module/execution/model.php index 32b6aaa4e0..a86ab95200 100644 --- a/module/execution/model.php +++ b/module/execution/model.php @@ -1604,7 +1604,7 @@ class executionModel extends model ->beginIF($limit)->limit($limit)->fi() ->fetchAll('id'); - if(isset($project->model) and $project->model == 'waterfall') + if(isset($project->model) and $project->model == 'waterfall' and $project->hasProduct) { $executionList = array(); $executionProducts = $this->dao->select('t1.project,t1.product')->from(TABLE_PROJECTPRODUCT)->alias('t1') diff --git a/module/product/control.php b/module/product/control.php index 72c732df21..b78a354694 100644 --- a/module/product/control.php +++ b/module/product/control.php @@ -295,6 +295,9 @@ class product extends control unset($this->config->product->search['fields']['stage']); } + $project = $this->loadModel('project')->getByID($projectID); + if(empty($project->hasProduct)) unset($this->config->product->search['fields']['product']); + /* Build search form. */ $rawModule = $this->app->rawModule; $rawMethod = $this->app->rawMethod; @@ -347,7 +350,7 @@ class product extends control $this->view->storyType = $storyType; $this->view->from = $this->app->tab; $this->view->modulePairs = $showModule ? $this->tree->getModulePairs($productID, 'story', $showModule) : array(); - $this->view->project = $this->loadModel('project')->getByID($projectID); + $this->view->project = $project; $this->display(); } diff --git a/module/product/view/browse.html.php b/module/product/view/browse.html.php index e99aeab382..0e88c43143 100644 --- a/module/product/view/browse.html.php +++ b/module/product/view/browse.html.php @@ -59,6 +59,7 @@ $projectIDParam = $isProjectStory ? "projectID=$projectID&" : '';
+ hasProduct)):?>
+
URAndSR):?> > - app->rawModule == 'projectstory'): ?> + app->rawModule == 'projectstory' and $this->session->hasProduct): ?> + model == 'kanban'):?> execution->team;?> diff --git a/module/project/view/execution.html.php b/module/project/view/execution.html.php index dcc40d6fd8..db1012515e 100644 --- a/module/project/view/execution.html.php +++ b/module/project/view/execution.html.php @@ -10,6 +10,7 @@ project->disabledInputTip, $lang->programplan->stageCustom->task));?> + hasProduct)):?>
project->manageProducts;?> @@ -187,6 +188,7 @@
+
execution->lblStats;?>
diff --git a/module/projectrelease/control.php b/module/projectrelease/control.php index 993f8fab5c..35ec467923 100644 --- a/module/projectrelease/control.php +++ b/module/projectrelease/control.php @@ -530,6 +530,7 @@ class projectrelease extends control $branches = array('' => '', BRANCH_MAIN => $this->lang->branch->main, $release->branch => $branchName); $this->config->product->search['params']['branch']['values'] = $branches; } + if($this->view->project->model == 'waterfall' && empty($this->view->project->hasProduct)) unset($this->config->product->search['fields']['plan']); $this->loadModel('search')->setSearchParams($this->config->product->search); if($browseType == 'bySearch') @@ -651,6 +652,7 @@ class projectrelease extends control $branches = array('' => '', BRANCH_MAIN => $this->lang->branch->main, $release->branch => $branchName); $this->config->bug->search['params']['branch']['values'] = $branches; } + if($this->view->project->model == 'waterfall' && empty($this->view->project->hasProduct)) unset($this->config->bug->search['fields']['plan']); $this->loadModel('search')->setSearchParams($this->config->bug->search); $allBugs = array(); diff --git a/module/projectrelease/view/browse.html.php b/module/projectrelease/view/browse.html.php index f748053199..9dfc502561 100644 --- a/module/projectrelease/view/browse.html.php +++ b/module/projectrelease/view/browse.html.php @@ -46,7 +46,9 @@ release->id;?> release->name;?> + hasProduct):?> release->product;?> + executionCommon;?> release->build;?> release->date;?> @@ -68,7 +70,9 @@ echo html::a(inlink('view', "release=$release->id"), $release->name, '', "data-app='$from'") . $flagIcon; ?> + hasProduct):?> productName?> + executionName?> execution) ? $release->buildName : html::a($this->createLink('build', 'view', "buildID=$release->buildID"), $release->buildName);?> date;?> diff --git a/module/projectrelease/view/create.html.php b/module/projectrelease/view/create.html.php index 84426ac700..ceca9ba631 100644 --- a/module/projectrelease/view/create.html.php +++ b/module/projectrelease/view/create.html.php @@ -37,7 +37,7 @@ release->build;?> - + hasProduct) echo "class='hide'";?> > release->product;?>
diff --git a/module/projectrelease/view/view.html.php b/module/projectrelease/view/view.html.php index 70378c16b2..d59bada8f3 100644 --- a/module/projectrelease/view/view.html.php +++ b/module/projectrelease/view/view.html.php @@ -333,18 +333,20 @@
release->basicInfo?>
+ hasProduct):?> - productType != 'normal'):?> - - - - - + productType != 'normal'):?> - + + + + + + + diff --git a/module/projectstory/control.php b/module/projectstory/control.php index 6cf48eafe0..093dd6928f 100644 --- a/module/projectstory/control.php +++ b/module/projectstory/control.php @@ -57,6 +57,9 @@ class projectStory extends control $products = $this->loadModel('product')->getProductPairsByProject($projectID); if(empty($productID)) $productID = key($products); + $project = $this->loadModel('project')->getByID($projectID); + $this->session->set('hasProduct', $project->hasProduct); + echo $this->fetch('product', 'track', "productID=$productID&branch=$branch&projectID=$projectID&recTotal=$recTotal&recPerPage=$recPerPage&pageID=$pageID"); } diff --git a/module/story/control.php b/module/story/control.php index 16b4b7158b..986b2afe38 100644 --- a/module/story/control.php +++ b/module/story/control.php @@ -258,7 +258,7 @@ class story extends control setcookie('storyModuleParam', 0, 0, $this->config->webRoot, '', $this->config->cookieSecure, true); $execution = $this->dao->findById((int)$objectID)->from(TABLE_EXECUTION)->fetch(); $moduleName = $execution->type == 'project' ? 'projectstory' : 'execution'; - $param = $execution->type == 'project' ? "projectID=$objectID&productID=$productID" : "executionID=$objectID&orderBy=order_desc&browseType=unclosed"; + $param = $execution->type == 'project' ? "projectID=$objectID" : "executionID=$objectID&orderBy=order_desc&browseType=unclosed"; $response['locate'] = $this->createLink($moduleName, 'story', $param); } if($this->app->getViewType() == 'xhtml') $response['locate'] = $this->createLink('story', 'view', "storyID=$storyID", 'html'); diff --git a/module/tree/control.php b/module/tree/control.php index 7ec64ec211..5550b1c0d3 100644 --- a/module/tree/control.php +++ b/module/tree/control.php @@ -285,6 +285,12 @@ class tree extends control } } + if($this->app->tab == 'project' and strpos($viewType, 'doc') === false) + { + $project = $this->loadModel('project')->getByID($this->session->project); + if(empty($project->hasProduct)) $this->view->root->name = $project->name; + } + $parentModules = $this->tree->getParents($currentModuleID); $this->view->title = $title; $this->view->position = $position; diff --git a/module/weekly/model.php b/module/weekly/model.php index 400c59ac5d..d45302657b 100755 --- a/module/weekly/model.php +++ b/module/weekly/model.php @@ -47,14 +47,9 @@ class weeklyModel extends model $weeks = $this->getWeekPairs($begin, $end); $current = zget($weeks, $date, current($weeks)); - $selectHtml = ''; - - if(!empty($project->hasProduct)) - { - $selectHtml .= "
"; - $selectHtml .= html::a('###', $this->lang->weekly->common . $this->lang->colon . $project->name, '', "class='btn'"); - $selectHtml .= '
'; - } + $selectHtml = "
"; + $selectHtml .= html::a('###', $this->lang->weekly->common . $this->lang->colon . $project->name, '', "class='btn'"); + $selectHtml .= '
'; $selectHtml .= "
"; $selectHtml .= "
";
release->product;?> productName;?>
product->branch, $lang->product->branchName[$product->type]);?>
release->name;?>product->branch, $lang->product->branchName[$product->type]);?>
release->name;?> name;?>