diff --git a/module/common/lang/menuOrder.php b/module/common/lang/menuOrder.php index 1c53de9cea..342ecd1dac 100644 --- a/module/common/lang/menuOrder.php +++ b/module/common/lang/menuOrder.php @@ -48,19 +48,15 @@ $lang->branch->menuOrder = $lang->product->menuOrder; /* project menu order. */ $lang->project->menuOrder[5] = 'list'; -$lang->project->menuOrder[10] = 'index'; -$lang->project->menuOrder[15] = 'task'; +$lang->project->menuOrder[10] = 'kanban'; +$lang->project->menuOrder[15] = 'burn'; $lang->project->menuOrder[20] = 'story'; -$lang->project->menuOrder[25] = 'bug'; -$lang->project->menuOrder[30] = 'build'; -$lang->project->menuOrder[35] = 'testtask'; +$lang->project->menuOrder[25] = 'qa'; +$lang->project->menuOrder[30] = 'doc'; +$lang->project->menuOrder[35] = 'action'; $lang->project->menuOrder[40] = 'team'; -$lang->project->menuOrder[45] = 'dynamic'; -$lang->project->menuOrder[50] = 'doc'; -$lang->project->menuOrder[55] = 'product'; -$lang->project->menuOrder[60] = 'view'; -$lang->project->menuOrder[65] = 'create'; -$lang->project->menuOrder[70] = 'all'; +$lang->project->menuOrder[45] = 'product'; +$lang->project->menuOrder[50] = 'view'; $lang->task->menuOrder = $lang->project->menuOrder; $lang->build->menuOrder = $lang->project->menuOrder; diff --git a/module/common/lang/zh-cn.php b/module/common/lang/zh-cn.php index bc5832a81f..613a7b73ff 100644 --- a/module/common/lang/zh-cn.php +++ b/module/common/lang/zh-cn.php @@ -221,21 +221,42 @@ $lang->release->menu = $lang->product->menu; $lang->project = new stdclass(); $lang->project->menu = new stdclass(); -$lang->project->menu->task = array('link' => '任务|project|task|projectID=%s', 'subModule' => 'task,tree', 'alias' => 'grouptask,importtask,burn,importbug,kanban,printkanban,tree'); +$lang->project->menu->list = array('link' => '%s', 'subModule' => 'task,tree', 'alias' => 'grouptask,importtask,importbug,tree'); +$lang->project->menu->kanban = array('link' => '看板|project|kanban|projectID=%s'); +$lang->project->menu->burn = array('link' => '燃尽图|project|burn|projectID=%s'); $lang->project->menu->story = array('link' => '需求|project|story|projectID=%s', 'subModule' => 'story', 'alias' => 'linkstory,storykanban'); -$lang->project->menu->bug = 'Bug|project|bug|projectID=%s'; -$lang->project->menu->dynamic = '动态|project|dynamic|projectID=%s'; -$lang->project->menu->build = array('link' => '版本|project|build|projectID=%s', 'subModule' => 'build'); -$lang->project->menu->testtask = array('link' => '测试单|project|testtask|projectID=%s'); -$lang->project->menu->team = array('link' => '团队|project|team|projectID=%s', 'alias' => 'managemembers'); +$lang->project->menu->qa = array('link' => '%s', 'subModule' => 'build'); $lang->project->menu->doc = array('link' => '文档|doc|objectLibs|type=project&objectID=%s&from=project', 'subModule' => 'doc'); +$lang->project->menu->action = array('link' => '%s'); $lang->project->menu->product = $lang->productCommon . '|project|manageproducts|projectID=%s'; +$lang->project->menu->team = array('link' => '团队|project|team|projectID=%s', 'alias' => 'managemembers'); $lang->project->menu->view = array('link' => '概况|project|view|projectID=%s', 'alias' => 'edit,start,suspend,putoff,close'); +$lang->project->subMenu = new stdclass(); +$lang->project->subMenu->list = new stdclass(); +$lang->project->subMenu->list->task = '任务列表|project|task|projectID=%s'; +$lang->project->subMenu->list->tree = '树状图|project|tree|projectID=%s'; +$lang->project->subMenu->list->groupTask = '分组视图|project|groupTask|projectID=%s'; + +$lang->project->subMenu->qa = new stdclass(); +$lang->project->subMenu->qa->bug = 'Bug|project|bug|projectID=%s'; +$lang->project->subMenu->qa->build = '版本|project|build|projectID=%s'; +$lang->project->subMenu->qa->testtask = '测试单|project|testtask|projectID=%s'; + +$lang->project->subMenu->action = new stdclass(); +$lang->project->subMenu->action->dynamic = '动态|project|dynamic|projectID=%s'; + +$lang->project->dividerMenu = ',story,doc,'; + $lang->task = new stdclass(); $lang->build = new stdclass(); -$lang->task->menu = $lang->project->menu; -$lang->build->menu = $lang->project->menu; +$lang->task->menu = $lang->project->menu; +$lang->task->subMenu = $lang->project->subMenu; +$lang->build->menu = $lang->project->menu; +$lang->build->subMenu = $lang->project->subMenu; + +$lang->task->dividerMenu = $lang->project->dividerMenu; +$lang->build->dividerMenu = $lang->project->dividerMenu; /* QA视图菜单设置。*/ $lang->qa = new stdclass(); diff --git a/module/common/model.php b/module/common/model.php index 60fe2fb5ee..23a92a32f7 100644 --- a/module/common/model.php +++ b/module/common/model.php @@ -456,40 +456,38 @@ class commonModel extends model /* Cycling to print every sub menus. */ foreach($menu as $menuItem) { + if(isset($lang->$moduleName->dividerMenu) and strpos($lang->$moduleName->dividerMenu, ",{$menuItem->name},") !== false) echo "
  • "; if(isset($menuItem->hidden) && $menuItem->hidden) continue; if($isMobile and empty($menuItem->link)) continue; /* Init the these vars. */ + $alias = isset($menuItem->alias) ? $menuItem->alias : ''; + $subModule = isset($menuItem->subModule) ? explode(',', $menuItem->subModule) : array(); + $class = isset($menuItem->class) ? $menuItem->class : ''; + $active = ''; + if($subModule and in_array($currentModule, $subModule)) $active = 'active'; + if($alias and $moduleName == $currentModule and strpos(",$alias,", ",$currentMethod,") !== false) $active = 'active'; if($menuItem->link) { - $active = ''; - $float = isset($menuItem->float) ? $menuItem->float : ''; - $alias = ''; $target = ''; $module = ''; $method = ''; $link = commonModel::createMenuLink($menuItem); if(is_array($menuItem->link)) { - if(isset($menuItem->link['subModule'])) - { - $subModules = explode(',', $menuItem->link['subModule']); - if(in_array($currentModule, $subModules) and $float != 'right') $active = 'active'; - } - if(isset($menuItem->link['alias'])) $alias = $menuItem->link['alias']; if(isset($menuItem->link['target'])) $target = $menuItem->link['target']; if(isset($menuItem->link['module'])) $module = $menuItem->link['module']; if(isset($menuItem->link['method'])) $method = $menuItem->link['method']; } - if($float != 'right' and $module == $currentModule and ($method == $currentMethod or strpos(",$alias,", ",$currentMethod,") !== false)) $active = 'active'; + if($module == $currentModule and ($method == $currentMethod or strpos(",$alias,", ",$currentMethod,") !== false)) $active = 'active'; - $menuItemHtml = "
  • " . html::a($link, $menuItem->text, $target) . "
  • \n"; - if($isMobile) $menuItemHtml = html::a($link, $menuItem->text, $target, "class='$active'") . "\n"; + $menuItemHtml = "
  • " . html::a($link, $menuItem->text, $target) . "
  • \n"; + if($isMobile) $menuItemHtml = html::a($link, $menuItem->text, $target, "class='$class $active'") . "\n"; echo $menuItemHtml; } else { - echo $isMobile ? $menuItem->text : "
  • $menuItem->text
  • \n"; + echo $isMobile ? $menuItem->text : "
  • $menuItem->text
  • \n"; } } echo $isMobile ? '' : "\n"; @@ -1290,7 +1288,7 @@ EOD; if(!empty($app->user->admin)) return true; if($module == 'todo' and ($method == 'create' or $method == 'batchcreate')) return true; - if($module == 'effort' and $method == 'batchcreate') return true; + if($module == 'effort' and ($method == 'batchcreate' or $method == 'createforobject')) return true; // limited project $limitedProject = false; diff --git a/module/custom/model.php b/module/custom/model.php index 8a48482aaa..358b27fa52 100644 --- a/module/custom/model.php +++ b/module/custom/model.php @@ -209,11 +209,12 @@ class customModel extends model { if(is_object($item)) $item = (array)$item; - $label = ''; - $module = ''; - $method = ''; - $float = ''; - $fixed = ''; + $label = ''; + $module = ''; + $method = ''; + $class = ''; + $subModule = ''; + $alias = ''; $link = (is_array($item) and isset($item['link'])) ? $item['link'] : $item; /* The variable of item has not link and is not link then ignore it. */ @@ -235,31 +236,28 @@ class customModel extends model { $itemLink = array('module' => $module, 'method' => $method); if(isset($link[3])) $itemLink['vars'] = $link[3]; - if(is_array($item)) - { - if(isset($item['subModule'])) $itemLink['subModule'] = $item['subModule']; - if(isset($item['alias'])) $itemLink['alias'] = $item['alias']; - if(isset($item['target'])) $itemLink['target'] = $item['target']; - } + if(is_array($item) and isset($item['target'])) $itemLink['target'] = $item['target']; } if(is_array($item)) { - if(isset($item['float'])) $float = $item['float']; - if(isset($item['fixed'])) $fixed = $item['fixed']; + if(isset($item['class'])) $class = $item['class']; + if(isset($item['subModule'])) $subModule = $item['subModule']; + if(isset($item['alias'])) $alias = $item['alias']; } - $hidden = !$fixed && isset($customMenuMap[$name]) && isset($customMenuMap[$name]->hidden) && $customMenuMap[$name]->hidden; + $hidden = isset($customMenuMap[$name]) && isset($customMenuMap[$name]->hidden) && $customMenuMap[$name]->hidden; if(strpos($name, 'QUERY') === 0 and !isset($customMenuMap[$name])) $hidden = true; $menuItem = new stdclass(); $menuItem->name = $name; $menuItem->link = $itemLink; $menuItem->text = $label; - $menuItem->order = $fixed ? -1 : (isset($customMenuMap[$name]) && isset($customMenuMap[$name]->order) ? $customMenuMap[$name]->order : $order++); - if($float) $menuItem->float = $float; - if($fixed) $menuItem->fixed = $fixed; - if($hidden) $menuItem->hidden = $hidden; + $menuItem->order = (isset($customMenuMap[$name]) && isset($customMenuMap[$name]->order) ? $customMenuMap[$name]->order : $order++); + if($hidden) $menuItem->hidden = $hidden; + if($class) $menuItem->class = $class; + if($subModule)$menuItem->subModule = $subModule; + if($alias) $menuItem->alias = $alias; if($isTutorialMode) $menuItem->tutorial = true; /* Hidden menu by config in mobile. */ diff --git a/module/project/css/burn.css b/module/project/css/burn.css index 71404cdc9f..8f8e93dccf 100644 --- a/module/project/css/burn.css +++ b/module/project/css/burn.css @@ -1,7 +1,3 @@ -.container {max-width: 950px!important;} -.container .actions {margin-bottom: 10px; padding: 0} -.container .actions > .text {padding: 5px 5px 5px 15px; line-height: 20px} .mw-220px {max-width: 220px!important} -#wrap h1{font-size:14px;} #interval{margin-right:10px;} .canvas-wrapper {padding: 15px; border: 1px solid #ddd;} diff --git a/module/project/model.php b/module/project/model.php index b353612eb1..c15a5e7127 100644 --- a/module/project/model.php +++ b/module/project/model.php @@ -78,9 +78,9 @@ class projectModel extends model if($project and $project->type == 'ops') { unset($this->lang->project->menu->story); - unset($this->lang->project->menu->bug); - unset($this->lang->project->menu->build); - unset($this->lang->project->menu->testtask); + unset($this->lang->project->subMenu->qa->bug); + unset($this->lang->project->subMenu->qa->build); + unset($this->lang->project->subMenu->qa->testtask); } if($projects and !isset($projects[$projectID]) and !$this->checkPriv($project)) @@ -118,6 +118,36 @@ class projectModel extends model foreach($this->lang->project->menu as $key => $menu) { $replace = $projectID; + + /* Replace for dropdown submenu. */ + if(isset($this->lang->project->subMenu->$key)) + { + $dropTitle = ''; + $hasActive = false; + $replace = "'; + $replace = "$dropTitle " . $replace; + + $this->lang->project->menu->$key['class'] = 'dropdown'; + if($hasActive) $this->lang->project->menu->$key['class'] .= ' active'; + } common::setMenuVars($this->lang->project->menu, $key, $replace); } }