diff --git a/module/common/model.php b/module/common/model.php index 77ba607de0..a160c47190 100644 --- a/module/common/model.php +++ b/module/common/model.php @@ -510,6 +510,8 @@ class commonModel extends model /* Print sub menus. */ if(isset($menuItem->subMenu)) { + $link = ''; + $label = ''; foreach($menuItem->subMenu as $subMenuItem) { if($subMenuItem->hidden) continue; @@ -525,16 +527,16 @@ class commonModel extends model $subLink = helper::createLink($subModule, $subMethod, $subParams); - if($currentModule == strtolower($subModule) && $currentMethod == strtolower($subMethod)) - { - $link = $subLink; - $label = $subLabel; - $subActive = 'active'; - } + if($currentModule == strtolower($subModule) && $currentMethod == strtolower($subMethod)) $subActive = 'active'; $subMenu .= "
  • " . html::a($subLink, $subLabel) . '
  • '; + + if(!$link) $link = $subLink; + if(!$label) $label = $subLabel; } + if(!$link or !$label) continue; + if($subMenu) { $label .= ""; diff --git a/module/custom/js/ajaxmenu.js b/module/custom/js/ajaxmenu.js index e98383bb46..09adfbc0f0 100644 --- a/module/custom/js/ajaxmenu.js +++ b/module/custom/js/ajaxmenu.js @@ -45,9 +45,10 @@ $(function() if(!item.text || item.fixed) return; var $a = $('').append(item.text); $a.data('menu', item).append(''); - $('
  • ').attr('data-id', item.name).toggleClass('right', item.float === 'right').toggleClass('menu-hidden', !!item.hidden).append($a).appendTo($nav); + var hidden = !!item.hidden; if(item.subMenu) { + hidden = true; $a.addClass('dropdown dropdown-hover').append(""); var $dropmenu = $a.find('.dropdown-menu'); $.each(item.subMenu, function(subIdx, subItem) @@ -56,6 +57,8 @@ $(function() var $subA = $('').append(subItem.text); $subA.data('menu', subItem).append(''); $('
  • ').attr('data-id', subItem.name).toggleClass('right', subItem.float === 'right').toggleClass('menu-hidden', !!subItem.hidden).append($subA).appendTo($dropmenu); + + hidden = subItem.hidden && hidden; }); var $aInner = $a.children('a'); if ($aInner.length) @@ -69,6 +72,7 @@ $(function() $dropmenu.remove(); } } + $('
  • ').attr('data-id', item.name).toggleClass('right', item.float === 'right').toggleClass('menu-hidden', hidden).append($a).appendTo($nav); }); $nav.sortable({finish: function(e) { @@ -134,17 +138,19 @@ $(function() var data = {name: item.name, order: parseInt(item.order)}; if(item.hidden) data.hidden = true; if(item.float) data.float = item.float; - dataList.push(data); - if (item.subMenu) + if(item.subMenu) { + var subMenu = []; $.each(item.subMenu, function(sIdx, subItem) { var subData = {name: subItem.name, order: parseInt(subItem.order)}; if(subItem.hidden) subData.hidden = true; if(subItem.float) subData.float = subItem.float; - dataList.push(subData); + subMenu.push(subData); }); + data.subMenu = subMenu; } + dataList.push(data); }); return dataList; }; @@ -221,9 +227,11 @@ $(function() } }).on('click', '.nav>li>a,.dropdown-menu>li>a', function(e) { - var $a = $(this); - var item = $a.data('menu'); - if (!item) return; + var $a = $(this); + var item = $a.data('menu'); + if(!item) return; + if($a.find('.dropdown-menu').length) return; + var $menu = $a.closest('nav'); var moduleName = item.link && item.link['module'] ? item.link['module'] : item.name; var methodName = item.link && item.link['method'] ? item.link['method'] : ''; @@ -234,6 +242,19 @@ $(function() methodName = item.name; } $a.parent().toggleClass('menu-hidden', item.hidden); + + /* Update parent menu by sub menu. */ + if($a.parent().parent().hasClass('dropdown-menu')) + { + var hidden = true; + $a.parent().parent().children().each(function() + { + hidden = $(this).hasClass('menu-hidden') && hidden; + }); + + $a.parent().parent().parent().parent().toggleClass('menu-hidden', item.hidden); + } + updateConfig($menu); e.stopPropagation(); }); diff --git a/module/custom/model.php b/module/custom/model.php index 7963d8a248..cb28b96ca8 100644 --- a/module/custom/model.php +++ b/module/custom/model.php @@ -201,8 +201,8 @@ class customModel extends model /* Merge fileMenu and customMenu. */ foreach($customMenuMap as $name => $item) { - if(is_object($allMenu) and !isset($allMenu->$name))$allMenu->$name = $item; - if(is_array($allMenu) and !isset($allMenu[$name]))$allMenu[$name] = $item; + if(is_object($allMenu) and !isset($allMenu->$name)) $allMenu->$name = $item; + if(is_array($allMenu) and !isset($allMenu[$name])) $allMenu[$name] = $item; } foreach($allMenu as $name => $item) @@ -249,6 +249,15 @@ class customModel extends model } $hidden = isset($customMenuMap[$name]) && isset($customMenuMap[$name]->hidden) && $customMenuMap[$name]->hidden; + + if(isset($item['subMenu']) && isset($customMenuMap[$name]->subMenu)) + { + foreach($customMenuMap[$name]->subMenu as $subItem) + { + if(isset($subItem->hidden) && $subItem->hidden && isset($item['subMenu'][$subItem->name])) $item['subMenu'][$subItem->name]->hidden = true; + } + } + if(strpos($name, 'QUERY') === 0 and !isset($customMenuMap[$name])) $hidden = true; $menuItem = new stdclass(); diff --git a/module/project/model.php b/module/project/model.php index 8202b69cb0..fe4434e2d8 100644 --- a/module/project/model.php +++ b/module/project/model.php @@ -146,7 +146,7 @@ class projectModel extends model /* Replace for dropdown submenu. */ if(isset($this->lang->project->subMenu->$key)) { - $subMenu = array(); + $subMenu = array(); foreach($this->lang->project->subMenu->$key as $subMenuKey => $subMenuLink) { if(isset($subMenuLink['link'])) $subMenuLink = $subMenuLink['link']; @@ -163,7 +163,7 @@ class projectModel extends model $menu->link = $link; $menu->text = $subMenuName; $menu->hidden = false; - $subMenu[] = $menu; + $subMenu[$subMenuKey] = $menu; }