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;
}