diff --git a/module/common/lang/menu.php b/module/common/lang/menu.php index c6f2c848eb..7dd8ac6692 100644 --- a/module/common/lang/menu.php +++ b/module/common/lang/menu.php @@ -199,17 +199,22 @@ $lang->project->homeMenu->browse = array('link' => ($config->systemMode == 'new' if($config->systemMode == 'new') $lang->project->homeMenu->kanban = array('link' => "{$lang->project->kanban}|project|kanban|"); /* Scrum menu. */ -$lang->scrum->menu = new stdclass(); -$lang->scrum->menu->index = array('link' => "{$lang->dashboard}|project|index|project=%s"); -$lang->scrum->menu->execution = array('link' => "$lang->executionCommon|project|execution|status=all&projectID=%s", 'exclude' => 'execution-testreport', 'subModule' => 'task'); -$lang->scrum->menu->story = array('link' => "$lang->SRCommon|projectstory|story|projectID=%s", 'subModule' => 'projectstory,tree', 'alias' => 'story,track'); -$lang->scrum->menu->doc = array('link' => "{$lang->doc->common}|doc|tableContents|type=project&objectID=%s", 'subModule' => 'doc'); -$lang->scrum->menu->qa = array('link' => "{$lang->qa->common}|project|bug|projectID=%s", 'subModule' => 'testcase,testtask,bug,testreport,execution', 'alias' => 'bug,testtask,testcase,testreport', 'exclude' => 'execution-create,execution-batchedit'); -$lang->scrum->menu->devops = array('link' => "{$lang->repo->common}|repo|browse|repoID=0&branchID=&objectID=%s", 'subModule' => 'repo'); -$lang->scrum->menu->build = array('link' => "{$lang->build->common}|project|build|project=%s"); -$lang->scrum->menu->release = array('link' => "{$lang->release->common}|projectrelease|browse|project=%s", 'subModule' => 'projectrelease'); -$lang->scrum->menu->dynamic = array('link' => "$lang->dynamic|project|dynamic|project=%s"); -$lang->scrum->menu->settings = array('link' => "$lang->settings|project|view|project=%s", 'subModule' => 'tree,stakeholder', 'alias' => 'edit,manageproducts,group,managemembers,manageview,managepriv,whitelist,addwhitelist,team'); +$lang->scrum->menu = new stdclass(); +$lang->scrum->menu->index = array('link' => "{$lang->dashboard}|project|index|project=%s"); +$lang->scrum->menu->execution = array('link' => "$lang->executionCommon|project|execution|status=all&projectID=%s", 'exclude' => 'execution-testreport', 'subModule' => 'task'); +$lang->scrum->menu->storyGroup = array('link' => "{$lang->story->story}|projectstory|story|projectID=%s&product=%s",'class' => 'dropdown dropdown-hover'); +$lang->scrum->menu->story = array('link' => "$lang->SRCommon|projectstory|story|projectID=%s|story", 'subModule' => 'projectstory,tree', 'alias' => 'story,track'); +$lang->scrum->menu->doc = array('link' => "{$lang->doc->common}|doc|tableContents|type=project&objectID=%s", 'subModule' => 'doc'); +$lang->scrum->menu->qa = array('link' => "{$lang->qa->common}|project|bug|projectID=%s", 'subModule' => 'testcase,testtask,bug,testreport,execution', 'alias' => 'bug,testtask,testcase,testreport', 'exclude' => 'execution-create,execution-batchedit'); +$lang->scrum->menu->devops = array('link' => "{$lang->repo->common}|repo|browse|repoID=0&branchID=&objectID=%s", 'subModule' => 'repo'); +$lang->scrum->menu->build = array('link' => "{$lang->build->common}|project|build|project=%s"); +$lang->scrum->menu->release = array('link' => "{$lang->release->common}|projectrelease|browse|project=%s", 'subModule' => 'projectrelease'); +$lang->scrum->menu->dynamic = array('link' => "$lang->dynamic|project|dynamic|project=%s"); +$lang->scrum->menu->settings = array('link' => "$lang->settings|project|view|project=%s", 'subModule' => 'tree,stakeholder', 'alias' => 'edit,manageproducts,group,managemembers,manageview,managepriv,whitelist,addwhitelist,team'); + +$lang->scrum->menu->storyGroup['dropMenu'] = new stdclass(); +$lang->scrum->menu->storyGroup['dropMenu']->SRStory = array('link' => "{$lang->SRCommon}|projectstory|story|projectID=%s&productID=%s|story", 'subModule' => 'projectstory,tree', 'alias' => 'story,track'); +$lang->scrum->menu->storyGroup['dropMenu']->URStory = array('link' => "{$lang->URCommon}|projectstory|story|projectID=%s&productID=%s&branch=0&browseType=¶m=0&storyType=requirement|requirement", 'subModule' => 'projectstory,tree', 'alias' => 'story,track'); $lang->scrum->dividerMenu = ',execution,programplan,doc,settings,'; @@ -217,6 +222,7 @@ $lang->scrum->dividerMenu = ',execution,programplan,doc,settings,'; $lang->scrum->menuOrder[5] = 'index'; $lang->scrum->menuOrder[10] = 'execution'; $lang->scrum->menuOrder[15] = 'story'; +$lang->scrum->menuOrder[16] = 'storyGroup'; $lang->scrum->menuOrder[20] = 'qa'; $lang->scrum->menuOrder[25] = 'devops'; $lang->scrum->menuOrder[30] = 'doc'; @@ -245,25 +251,29 @@ $lang->scrum->menu->settings['subMenu']->module = array('link' => "{$lang-> /* Waterfall menu. */ $lang->waterfall->menu = new stdclass(); -$lang->waterfall->menu->index = array('link' => "$lang->dashboard|project|index|project=%s"); -$lang->waterfall->menu->execution = array('link' => "{$lang->stage->common}|project|execution|status=all&projectID=%s", 'subModule' => 'programplan,task'); -$lang->waterfall->menu->story = array('link' => "$lang->SRCommon|projectstory|story|project=%s", 'subModule' => 'projectstory,tree', 'exclude' => 'projectstory-track'); -$lang->waterfall->menu->design = array('link' => "{$lang->design->common}|design|browse|project=%s"); -$lang->waterfall->menu->qa = array('link' => "{$lang->qa->common}|project|bug|projectID=%s", 'subModule' => 'testcase,testtask,bug,testreport', 'alias' => 'bug,testtask,testcase,testreport'); -$lang->waterfall->menu->doc = array('link' => "{$lang->doc->common}|doc|tableContents|type=project&objectID=%s"); -$lang->waterfall->menu->devops = array('link' => "{$lang->repo->common}|repo|browse|repoID=0&branchID=&objectID=%s", 'subModule' => 'repo'); -$lang->waterfall->menu->build = array('link' => "{$lang->build->common}|project|build|project=%s"); -$lang->waterfall->menu->release = array('link' => "{$lang->release->common}|projectrelease|browse|project=%s", 'subModule' => 'projectrelease'); -$lang->waterfall->menu->dynamic = array('link' => "$lang->dynamic|project|dynamic|project=%s"); +$lang->waterfall->menu->index = array('link' => "$lang->dashboard|project|index|project=%s"); +$lang->waterfall->menu->execution = array('link' => "{$lang->stage->common}|project|execution|status=all&projectID=%s", 'subModule' => 'programplan,task'); +$lang->waterfall->menu->storyGroup = array('link' => "{$lang->story->story}|projectstory|story|projectID=%s",'class' => 'dropdown dropdown-hover'); +$lang->waterfall->menu->story = array('link' => "$lang->SRCommon|projectstory|story|projectID=%s", 'subModule' => 'projectstory,tree', 'alias' => 'story,track'); +$lang->waterfall->menu->design = array('link' => "{$lang->design->common}|design|browse|project=%s"); +$lang->waterfall->menu->qa = array('link' => "{$lang->qa->common}|project|bug|projectID=%s", 'subModule' => 'testcase,testtask,bug,testreport', 'alias' => 'bug,testtask,testcase,testreport'); +$lang->waterfall->menu->doc = array('link' => "{$lang->doc->common}|doc|tableContents|type=project&objectID=%s"); +$lang->waterfall->menu->devops = array('link' => "{$lang->repo->common}|repo|browse|repoID=0&branchID=&objectID=%s", 'subModule' => 'repo'); +$lang->waterfall->menu->build = array('link' => "{$lang->build->common}|project|build|project=%s"); +$lang->waterfall->menu->release = array('link' => "{$lang->release->common}|projectrelease|browse|project=%s", 'subModule' => 'projectrelease'); +$lang->waterfall->menu->dynamic = array('link' => "$lang->dynamic|project|dynamic|project=%s"); $lang->waterfall->menu->settings = $lang->scrum->menu->settings; $lang->waterfall->dividerMenu = ',programplan,build,dynamic,'; +$lang->waterfall->menu->storyGroup['dropMenu'] = $lang->scrum->menu->storyGroup['dropMenu']; + /* Waterfall menu order. */ $lang->waterfall->menuOrder[5] = 'index'; $lang->waterfall->menuOrder[15] = 'programplan'; $lang->waterfall->menuOrder[20] = 'execution'; $lang->waterfall->menuOrder[25] = 'story'; +$lang->waterfall->menuOrder[26] = 'storyGoup'; $lang->waterfall->menuOrder[30] = 'design'; $lang->waterfall->menuOrder[35] = 'devops'; $lang->waterfall->menuOrder[55] = 'qa'; diff --git a/module/common/lang/zh-cn.php b/module/common/lang/zh-cn.php index a27488d59e..9ebbc58379 100644 --- a/module/common/lang/zh-cn.php +++ b/module/common/lang/zh-cn.php @@ -170,6 +170,7 @@ $lang->report->common = '统计'; $lang->system->common = '组织'; $lang->admin->common = '后台'; $lang->story->common = $lang->SRCommon; +$lang->story->story = '需求'; $lang->task->common = '任务'; $lang->bug->common = 'Bug'; $lang->testcase->common = '用例'; diff --git a/module/common/model.php b/module/common/model.php index 5bcbd38c37..b5ba80d527 100644 --- a/module/common/model.php +++ b/module/common/model.php @@ -1180,8 +1180,11 @@ class commonModel extends model $dropMenuLink = $dropMenuItem; if(is_array($dropMenuItem) and isset($dropMenuItem['link'])) $dropMenuLink = $dropMenuLink['link']; - list($subLabel, $subModule, $subMethod, $subParams) = explode('|', $dropMenuLink); + $dropMenuLinks = explode('|', $dropMenuLink); + list($subLabel, $subModule, $subMethod, $subParams) = $dropMenuLinks; if(!common::hasPriv($subModule, $subMethod)) continue; + $labelID = $subLabel; + if(isset($dropMenuLinks[4])) $labelID = $dropMenuLinks[4]; $subLink = helper::createLink($subModule, $subMethod, $subParams); @@ -1204,7 +1207,7 @@ class commonModel extends model $subActive = 'active'; $label = $subLabel; } - $dropMenu .= "
  • " . html::a($subLink, $subLabel, '', "data-app='$tab'") . '
  • '; + $dropMenu .= "
  • " . html::a($subLink, $subLabel, '', "data-app='$tab'") . '
  • '; } if(empty($dropMenu)) continue; diff --git a/module/product/control.php b/module/product/control.php index b78a354694..facc091eb8 100644 --- a/module/product/control.php +++ b/module/product/control.php @@ -245,7 +245,7 @@ class product extends control $productPlans = $this->execution->getPlans($projectProducts, 'skipParent'); if($browseType == 'bybranch') $param = $branchID; - $stories = $this->story->getExecutionStories($projectID, $productID, $branchID, $sort, $browseType, $param, 'story', '', $pager); + $stories = $this->story->getExecutionStories($projectID, $productID, $branchID, $sort, $browseType, $param, $storyType, '', $pager); } else { diff --git a/module/product/js/browse.js b/module/product/js/browse.js index cbbc03ed83..47ea4452c4 100644 --- a/module/product/js/browse.js +++ b/module/product/js/browse.js @@ -1,10 +1,14 @@ $(function() { if(typeof(rawModule) == 'undefined') rawModule = 'product'; - if(rawModule != 'projectstory') + + $('#navbar .nav li').removeClass('active'); + $("#navbar .nav li[data-id=" + storyType + ']').addClass('active'); + + if(rawModule == 'projectstory') { - $('#navbar .nav li').removeClass('active'); - $("#navbar .nav li[data-id=" + storyType + ']').addClass('active'); + $('#navbar .nav li[data-id=storyGroup]').addClass('active'); + $('#navbar .nav li[data-id=storyGroup]>a').html($('.active [data-id=' + storyType + ']').text() + ''); } $(document).ready(function(){ diff --git a/module/project/model.php b/module/project/model.php index 4b1e6e31c9..34a3f5a789 100644 --- a/module/project/model.php +++ b/module/project/model.php @@ -2454,13 +2454,22 @@ class projectModel extends model if(empty($project->hasProduct)) { + if(isset($this->lang->project->menu->story)) unset($this->lang->project->menu->story); unset($this->lang->project->menu->settings['subMenu']->products); $projectProduct = $this->dao->select('product')->from(TABLE_PROJECTPRODUCT)->where('project')->eq($objectID)->fetch()->product; $this->lang->project->menu->settings['subMenu']->module['link'] = sprintf($this->lang->project->menu->settings['subMenu']->module['link'], $projectProduct); + + if($model !== 'kanbanProject') + { + $this->lang->project->menu->storyGroup['link'] = sprintf($this->lang->project->menu->storyGroup['link'], '%s', $projectProduct); + $this->lang->project->menu->storyGroup['dropMenu']->SRStory['link'] = sprintf($this->lang->project->menu->storyGroup['dropMenu']->SRStory['link'], '%s', $projectProduct); + $this->lang->project->menu->storyGroup['dropMenu']->URStory['link'] = sprintf($this->lang->project->menu->storyGroup['dropMenu']->URStory['link'], '%s', $projectProduct); + } } else { unset($this->lang->project->menu->settings['subMenu']->module); + if(isset($this->lang->project->menu->storyGroup)) unset($this->lang->project->menu->storyGroup); } /* Reset project priv. */