From 0733b9f177f249d0260a69a9a863cbd08b6b0f1a Mon Sep 17 00:00:00 2001 From: Catouse Date: Wed, 20 Apr 2016 14:06:23 +0800 Subject: [PATCH] * fix UI for feature menu. --- module/bug/view/browse.html.php | 6 +- module/custom/control.php | 6 +- module/custom/model.php | 227 +++++------------------ module/product/view/browse.html.php | 6 +- module/project/lang/zh-cn.php | 4 +- module/project/view/taskheader.html.php | 25 ++- module/testcase/view/caseheader.html.php | 7 +- module/testtask/view/caseheader.html.php | 7 +- 8 files changed, 82 insertions(+), 206 deletions(-) diff --git a/module/bug/view/browse.html.php b/module/bug/view/browse.html.php index 0948e1483a..5328e1e3f7 100644 --- a/module/bug/view/browse.html.php +++ b/module/bug/view/browse.html.php @@ -32,9 +32,9 @@ js::set('bugBrowseType', $this->session->bugBrowseType); ?> - customMenu['featurebar'] as $type => $featurebar):?> - -
  • createLink('bug', 'browse', "productid=$productID&branch=$branch&browseType=$type¶m=0"), $featurebar['link'])?>
  • + moduleName, $this->methodName) as $menuItem):?> + hidden) continue;?> +
  • createLink('bug', 'browse', "productid=$productID&branch=$branch&browseType=$menuItem->name¶m=0"), $menuItem->text)?>
  •  bug->byQuery;?>
  • diff --git a/module/custom/control.php b/module/custom/control.php index 1996d593c9..9e4a78ab16 100644 --- a/module/custom/control.php +++ b/module/custom/control.php @@ -188,15 +188,15 @@ class custom extends control * @access public * @return void */ - public function menu($module = 'main') + public function menu($module = 'main', $method = '') { - a(customModel::getModuleMenu($module)); global $config; if($_POST) { $config->menucustom->main = $_POST['menu']; $this->send(array('result' => 'success', 'menu' => $_POST['menu'])); } - $this->send(json_encode(customModel::getModuleMenu($module))); + $menu = empty($method) ? customModel::getFeatureMenu($module, $method) : customModel::getModuleMenu($module); + $this->send(array('result' => $menu ? 'success' : 'fail', 'menu' => $menu)); } } diff --git a/module/custom/model.php b/module/custom/model.php index ceedc558c8..157a252ed3 100644 --- a/module/custom/model.php +++ b/module/custom/model.php @@ -123,17 +123,17 @@ class customModel extends model ->beginIF($params['key'])->andWhere('`key`')->in($params['key'])->fi(); } - public static function getModuleMenu($module = 'main', $rebuild = false) + /** + * Build menu data from config + * @param object $allMenu + * @param string | array $menuConfig + * @access public + * @return array + */ + public static function buildMenuConfig($allMenu, $menuConfig) { - if(empty($module)) $module = 'main'; - - global $app, $lang, $config; - // if(empty($app->customMenu)) $app->customMenu = array(); - // if(!$rebuild && !empty($app->customMenu[$module])) return $app->customMenu[$module]; - - $menuConfig = $config->menucustom->$module; - if(!isset($menuConfig) && common::inNoviceMode()) $menuConfig = $config->menu->$module['novice']; $isSetMenuConfig = isset($menuConfig); + $menu = array(); if($isSetMenuConfig) { @@ -148,9 +148,6 @@ class customModel extends model } } - $menu = array(); - $allMenu = $module == 'main' ? $lang->menu : $lang->$module->menu; - foreach($allMenu as $name => $item) { $label = ''; @@ -193,183 +190,61 @@ class customModel extends model $menu[] = $menuItem; } } - // $app->customMenu[$module] = $menu; return $menu; } + /** + * Get module menu data, if module is 'main' then return main menu + * @param string $module + * @param boolean $rebuild + * @access public + * @return array + */ + public static function getModuleMenu($module = 'main', $rebuild = false) + { + if(empty($module)) $module = 'main'; + + global $app, $lang, $config; + if(empty($app->customMenu)) $app->customMenu = array(); + if(!$rebuild && !empty($app->customMenu[$module])) return $app->customMenu[$module]; + + $menuConfig = $config->menucustom->$module; + if(!isset($menuConfig) && common::inNoviceMode()) $menuConfig = $config->menu->$module['novice']; + + $allMenu = $module == 'main' ? $lang->menu : $lang->$module->menu; + $menu = self::buildMenuConfig($allMenu, $menuConfig); + + $app->customMenu[$module] = $menu; + return $menu; + } + + /** + * Get main menu data + * @param boolean $rebuild + * @access public + * @return array + */ public static function getMainMenu($rebuild = false) { return self::getModuleMenu('main', $rebuild); } + /** + * Get feature menu + * @param string $module + * @param string $method + * @access public + * @return array + */ public static function getFeatureMenu($module, $method) { global $app, $lang, $config; - $menucustomKey = 'menucustom' . $module; - $app->loadLang($module); - $featurebar = ''; - if(isset($lang->$module->featurebar[$method])) $featurebar = $lang->$module->featurebar[$method]; - $menucustomKey = 'menucustom' . $module; - return $featurebar; - if($featurebar) - { - $menuOrder = array(); - $menuStatus = array(); - if(isset($config->$menucustomKey->$method)) - { - $menuStatus = json_decode($config->$menucustomKey->$method, true); - foreach($menuStatus as $menuKey => $status) $menuOrder[] = $menuKey; - } + $configKey = 'menucustom' . $module; - /* Merge all menu. */ - $inOrderMenu = ',' . join(',', $menuOrder) . ','; - $notInOrderMenu = array(); - foreach($featurebar as $menuKey => $menuName) - { - if(strpos($inOrderMenu, ",$menuKey,") === false) $notInOrderMenu[] = $menuKey; - } - if($notInOrderMenu) - { - $order = count($menuOrder); - foreach($notInOrderMenu as $menuKey) - { - $menuOrder[$order] = $menuKey; - $order++; - } - } - ksort($menuOrder, SORT_ASC); + $menuConfig = $config->$configKey->$method; + $allMenu = $lang->$module->featurebar[$method]; - $processedMenu = new stdclass(); - foreach($menuOrder as $order => $menuKey) - { - $menuContent = $featurebar[$menuKey]; - $menuContent = array('link' => $menuContent); - $menuContent['status'] = isset($menuStatus[$menuKey]) ? $menuStatus[$menuKey] : 'show'; - $menuContent['order'] = ($order + 1) * 5; - - $processedMenu->$menuKey = $menuContent; - } - $processedMenus['featurebar'] = $processedMenu; - } - } - - public static function getCustomMenu($module, $method) - { - global $app, $lang, $config; - if(!isset($lang->$module->menu)) return array(); - $allMenu['main'] = $lang->menu; - $allMenu['module'] = $lang->$module->menu; - - /* Process main and module menu. */ - $processedMenus = array(); - foreach($allMenu as $type => $menu) - { - $menucustom = ''; - $menuOrder = array(); - $menuStatus = array(); - if($type == 'main') $menucustom = isset($config->menucustom->main) ? $config->menucustom->main : ''; - if($type == 'module')$menucustom = isset($config->menucustomModule->$module) ? $config->menucustomModule->$module : ''; - - /* Get order and status from config. */ - if($menucustom) - { - $menuStatus = json_decode($menucustom, true); - $i = 1; - foreach($menuStatus as $menuKey => $status) - { - $order = $i * 5; - $menuOrder[$order] = $menuKey; - $i++; - } - } - if(empty($menuOrder)) $menuOrder = $type == 'main' ? $lang->menuOrder : $lang->$module->menuOrder; - - /* Merge all menu. */ - $inOrderMenu = ',' . join(',', $menuOrder) . ','; - $notInOrderMenu = array(); - foreach($menu as $menuKey => $menuName) - { - if(strpos($inOrderMenu, ",$menuKey,") === false) $notInOrderMenu[] = $menuKey; - } - if($notInOrderMenu) - { - $order = count($menuOrder) * 5; - foreach($notInOrderMenu as $menuKey) - { - $order = $order + 5; - $menuOrder[$order] = $menuKey; - } - } - ksort($menuOrder, SORT_ASC); - - /* Rebuild menu. */ - $processedMenu = new stdclass(); - foreach($menuOrder as $order => $menuKey) - { - if(!isset($menu->$menuKey)) continue; - $menuContent = $menu->$menuKey; - if(is_string($menuContent)) $menuContent = array('link' => $menuContent); - $menuContent['status'] = isset($menuStatus[$menuKey]) ? $menuStatus[$menuKey] : 'show'; - $menuContent['order'] = $order; - - if(strpos($menuContent['link'], '|') !== false) - { - list($menuTitle, $menuModule, $menuMethod) = explode('|', $menuContent['link']); - if($menuContent['status'] == 'show' and !common::hasPriv($menuModule, $menuMethod)) $menuContent['status'] = 'hide'; - } - - $processedMenu->$menuKey = $menuContent; - } - $processedMenus[$type] = $processedMenu; - } - - /* Process featurebar. */ - $app->loadLang($module); - $featurebar = ''; - if(isset($lang->$module->featurebar[$method])) $featurebar = $lang->$module->featurebar[$method]; - $menucustomKey = 'menucustom' . $module; - if($featurebar) - { - $menuOrder = array(); - $menuStatus = array(); - if(isset($config->$menucustomKey->$method)) - { - $menuStatus = json_decode($config->$menucustomKey->$method, true); - foreach($menuStatus as $menuKey => $status) $menuOrder[] = $menuKey; - } - - /* Merge all menu. */ - $inOrderMenu = ',' . join(',', $menuOrder) . ','; - $notInOrderMenu = array(); - foreach($featurebar as $menuKey => $menuName) - { - if(strpos($inOrderMenu, ",$menuKey,") === false) $notInOrderMenu[] = $menuKey; - } - if($notInOrderMenu) - { - $order = count($menuOrder); - foreach($notInOrderMenu as $menuKey) - { - $menuOrder[$order] = $menuKey; - $order++; - } - } - ksort($menuOrder, SORT_ASC); - - $processedMenu = new stdclass(); - foreach($menuOrder as $order => $menuKey) - { - $menuContent = $featurebar[$menuKey]; - $menuContent = array('link' => $menuContent); - $menuContent['status'] = isset($menuStatus[$menuKey]) ? $menuStatus[$menuKey] : 'show'; - $menuContent['order'] = ($order + 1) * 5; - - $processedMenu->$menuKey = $menuContent; - } - $processedMenus['featurebar'] = $processedMenu; - } - - return $processedMenus; + return $allMenu ? self::buildMenuConfig($allMenu, $menuConfig) : null; } } diff --git a/module/product/view/browse.html.php b/module/product/view/browse.html.php index 2d2f202710..7cf61a914a 100644 --- a/module/product/view/browse.html.php +++ b/module/product/view/browse.html.php @@ -28,9 +28,9 @@ ?> - customMenu['featurebar'] as $type => $featurebar):?> - -
  • inlink('browse', "productID=$productID&branch=$branch&browseType=$type"), $featurebar['link']);?>
  • + moduleName, $this->methodName) as $menuItem):?> + hidden) continue;?> +
  • inlink('browse', "productID=$productID&branch=$branch&browseType=$menuItem->name"), $menuItem->text);?>
  • product->searchStory;?>
  • diff --git a/module/project/lang/zh-cn.php b/module/project/lang/zh-cn.php index c45c66fde4..409bb037f6 100644 --- a/module/project/lang/zh-cn.php +++ b/module/project/lang/zh-cn.php @@ -255,12 +255,14 @@ $lang->project->featurebar['task']['unclosed'] = $lang->project->unclosed; $lang->project->featurebar['task']['all'] = $lang->project->allTasks; $lang->project->featurebar['task']['kanban'] = $lang->project->kanban; $lang->project->featurebar['task']['burn'] = $lang->project->burn; +$lang->project->featurebar['task']['tree'] = $lang->project->tree; $lang->project->featurebar['task']['assignedtome'] = $lang->project->assignedToMe; $lang->project->featurebar['task']['status'] = $lang->project->statusSelects['']; $lang->project->featurebar['task']['group'] = $lang->project->groups['']; $lang->project->featurebar['grouptask'] = $lang->project->featurebar['task']; $lang->project->featurebar['kanban'] = $lang->project->featurebar['task']; -$lang->project->featurebar['burn'] = $lang->project->featurebar['task']; +$lang->project->featurebar['burn'] = $lang->project->featurebar['task']; +$lang->project->featurebar['tree'] = $lang->project->featurebar['task']; $lang->project->treeLevel = array(); $lang->project->treeLevel['product'] = array('icon' => 'icon-cube', 'text' => '产品视图'); diff --git a/module/project/view/taskheader.html.php b/module/project/view/taskheader.html.php index 1ae3223605..9cd5d2a4a2 100644 --- a/module/project/view/taskheader.html.php +++ b/module/project/view/taskheader.html.php @@ -32,27 +32,28 @@ $hasGroupTaskPriv = common::hasPriv('project', 'groupTask'); $hasTreePriv = common::hasPriv('project', 'tree'); ?> - customMenu['featurebar'] as $type => $featurebar):?> + moduleName, $this->methodName) as $menuItem):?> " . html::a(inlink('task', "project=$projectID&type=$type"), $featurebar['link']) . '' ; - if($hasKanbanPriv and $type == 'kanban') echo "
  • " . html::a(inlink('kanban', "projectID=$projectID"), $featurebar['link']) . '
  • '; - if($hasBurnPriv and $type == 'burn' and ($project->type == 'sprint' or $project->type == 'waterfall')) echo "
  • " . html::a(inlink('burn', "project=$projectID"), $featurebar['link']) . '
  • ' ; - if($hasTreePriv and $type == 'tree') echo "
  • "; common::printLink('project', 'tree', "projectID=$projectID", $lang->project->tree, '', '', false); echo '
  • '; + if($menuItem->hidden) continue; + $type = $menuItem->name; + if($hasBrowsePriv and ($type == 'unclosed' or $type == 'all' or $type == 'assignedtome')) echo "
  • " . html::a(inlink('task', "project=$projectID&type=$type"), $menuItem->text) . '
  • ' ; + if($hasKanbanPriv and $type == 'kanban') echo "
  • " . html::a(inlink('kanban', "projectID=$projectID"), $menuItem->text) . '
  • '; + if($hasBurnPriv and $type == 'burn' and ($project->type == 'sprint' or $project->type == 'waterfall')) echo "
  • " . html::a(inlink('burn', "project=$projectID"), $menuItem->text) . '
  • ' ; + if($hasTreePriv and $type == 'tree') echo "
  • " . html::a(inlink('project', 'tree', "projectID=$projectID"), $menuItem->text) . '
  • '; if($hasBrowsePriv and $type == 'status') { echo "'; } @@ -61,23 +62,19 @@ echo "'; } ?> - - methodName == 'task') echo "
  •  {$lang->project->byQuery}
  • "; - ?>
    diff --git a/module/testcase/view/caseheader.html.php b/module/testcase/view/caseheader.html.php index bb10d7233e..ecb7204a00 100644 --- a/module/testcase/view/caseheader.html.php +++ b/module/testcase/view/caseheader.html.php @@ -16,12 +16,13 @@ - customMenu['featurebar'] as $type => $featurebar):?> - + moduleName, $this->methodName) as $menuItem):?> hidden) continue; + $type = $menuItem->name; if(common::hasPriv('testcase', 'browse') and ($type == 'all' or $type == 'needconfirm')) { - echo "
  • " . html::a($this->createLink('testcase', 'browse', "productid=$productID&branch=$branch&browseType=$type"), $featurebar['link']) . "
  • "; + echo "
  • " . html::a($this->createLink('testcase', 'browse', "productid=$productID&branch=$branch&browseType=$type"), $menuItem->text) . "
  • "; } elseif($type == 'group' and common::hasPriv('testcase', 'groupcase')) { diff --git a/module/testtask/view/caseheader.html.php b/module/testtask/view/caseheader.html.php index 6b9c4c5155..fd2c93c5d2 100644 --- a/module/testtask/view/caseheader.html.php +++ b/module/testtask/view/caseheader.html.php @@ -3,12 +3,13 @@ " . html::icon($lang->icons['usecase']) . '' . $task->name . '';?>