diff --git a/modules/backend/classes/NavigationManager.php b/modules/backend/classes/NavigationManager.php index 1e90c9490..1957b3bf7 100644 --- a/modules/backend/classes/NavigationManager.php +++ b/modules/backend/classes/NavigationManager.php @@ -47,7 +47,7 @@ class NavigationManager 'url' => null, 'counter' => null, 'counterLabel'=> null, - 'order' => 100, + 'order' => -1, 'attributes' => [], 'permissions' => [] ]; @@ -100,7 +100,9 @@ class NavigationManager /* * Sort menu items */ - usort($this->items, 'self::sortMenu'); + usort($this->items, function ($a, $b) { + return $a->order - $b->order; + }); /* * Filter items user lacks permission for @@ -113,28 +115,29 @@ class NavigationManager continue; } - usort($item->sideMenu, 'self::sortMenu'); + /* + * Apply incremental default orders + */ + $orderCount = 0; + foreach ($item->sideMenu as $sideMenuItem) { + if ($sideMenuItem->order !== -1) continue; + $sideMenuItem->order = ($orderCount += 100); + } + /* + * Sort side menu items + */ + usort($item->sideMenu, function ($a, $b) { + return $a->order - $b->order; + }); + + /* + * Filter items user lacks permission for + */ $item->sideMenu = $this->filterItemPermissions($user, $item->sideMenu); } } - /** - * Callback method used by usort() to compare menu items. - * Should be referenced with 'self::sortMenu' as the second parameter to usort(). - * @param object $a First menu item to compare - * @param object $b Second menu item to compare - * @return integer Returns 1, 0 or -1 depending on order - */ - protected static function sortMenu($a, $b) - { - if ($a->order < $b->order) { - return -1; - } - - return (int) $a->order > $b->order; - } - /** * Registers a callback function that defines menu items. * The callback function should register menu items by calling the manager's diff --git a/modules/cms/ServiceProvider.php b/modules/cms/ServiceProvider.php index 559fdf54d..1f02ab57f 100644 --- a/modules/cms/ServiceProvider.php +++ b/modules/cms/ServiceProvider.php @@ -40,7 +40,6 @@ class ServiceProvider extends ModuleServiceProvider 'label' => 'cms::lang.page.menu_label', 'icon' => 'icon-copy', 'url' => 'javascript:;', - 'order' => 100, 'attributes' => ['data-menu-item' => 'pages'], 'permissions' => ['cms.manage_pages'], 'counterLabel' => 'cms::lang.page.unsaved_label' @@ -49,7 +48,6 @@ class ServiceProvider extends ModuleServiceProvider 'label' => 'cms::lang.partial.menu_label', 'icon' => 'icon-tags', 'url' => 'javascript:;', - 'order' => 200, 'attributes' => ['data-menu-item' => 'partials'], 'permissions' => ['cms.manage_partials'], 'counterLabel' => 'cms::lang.partial.unsaved_label' @@ -58,7 +56,6 @@ class ServiceProvider extends ModuleServiceProvider 'label' => 'cms::lang.layout.menu_label', 'icon' => 'icon-th-large', 'url' => 'javascript:;', - 'order' => 300, 'attributes' => ['data-menu-item' => 'layouts'], 'permissions' => ['cms.manage_layouts'], 'counterLabel' => 'cms::lang.layout.unsaved_label' @@ -67,7 +64,6 @@ class ServiceProvider extends ModuleServiceProvider 'label' => 'cms::lang.content.menu_label', 'icon' => 'icon-file-text-o', 'url' => 'javascript:;', - 'order' => 400, 'attributes' => ['data-menu-item' => 'content'], 'permissions' => ['cms.manage_content'], 'counterLabel' => 'cms::lang.content.unsaved_label' @@ -76,7 +72,6 @@ class ServiceProvider extends ModuleServiceProvider 'label' => 'cms::lang.asset.menu_label', 'icon' => 'icon-picture-o', 'url' => 'javascript:;', - 'order' => 500, 'attributes' => ['data-menu-item' => 'assets'], 'permissions' => ['cms.manage_assets'], 'counterLabel' => 'cms::lang.asset.unsaved_label' @@ -85,7 +80,6 @@ class ServiceProvider extends ModuleServiceProvider 'label' => 'cms::lang.component.menu_label', 'icon' => 'icon-puzzle-piece', 'url' => 'javascript:;', - 'order' => 600, 'attributes' => ['data-menu-item' => 'components'], 'permissions' => ['cms.manage_pages', 'cms.manage_layouts', 'cms.manage_partials'] ]