Revert change from #1315, fixes original issue, write tests
This commit is contained in:
parent
fa0d110ecf
commit
bb4c2da404
|
|
@ -100,7 +100,7 @@ class NavigationManager
|
||||||
/*
|
/*
|
||||||
* Sort menu items
|
* Sort menu items
|
||||||
*/
|
*/
|
||||||
usort($this->items, function ($a, $b) {
|
uasort($this->items, function ($a, $b) {
|
||||||
return $a->order - $b->order;
|
return $a->order - $b->order;
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
@ -127,7 +127,7 @@ class NavigationManager
|
||||||
/*
|
/*
|
||||||
* Sort side menu items
|
* Sort side menu items
|
||||||
*/
|
*/
|
||||||
usort($item->sideMenu, function ($a, $b) {
|
uasort($item->sideMenu, function ($a, $b) {
|
||||||
return $a->order - $b->order;
|
return $a->order - $b->order;
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
@ -461,6 +461,10 @@ class NavigationManager
|
||||||
*/
|
*/
|
||||||
protected function filterItemPermissions($user, array $items)
|
protected function filterItemPermissions($user, array $items)
|
||||||
{
|
{
|
||||||
|
if (!$user) {
|
||||||
|
return $items;
|
||||||
|
}
|
||||||
|
|
||||||
$items = array_filter($items, function ($item) use ($user) {
|
$items = array_filter($items, function ($item) use ($user) {
|
||||||
if (!$item->permissions || !count($item->permissions)) {
|
if (!$item->permissions || !count($item->permissions)) {
|
||||||
return true;
|
return true;
|
||||||
|
|
|
||||||
|
|
@ -11,7 +11,7 @@
|
||||||
<div class="layout-relative">
|
<div class="layout-relative">
|
||||||
<nav class="layout-sidenav" id="layout-sidenav" data-control="sidenav">
|
<nav class="layout-sidenav" id="layout-sidenav" data-control="sidenav">
|
||||||
<ul class="nav">
|
<ul class="nav">
|
||||||
<?php foreach ($sideMenuItems as $item): ?>
|
<?php foreach ($sideMenuItems as $sideItemCode => $item): ?>
|
||||||
<li
|
<li
|
||||||
class="<?= BackendMenu::isSideMenuItemActive($item) ? 'active' : null ?>"
|
class="<?= BackendMenu::isSideMenuItemActive($item) ? 'active' : null ?>"
|
||||||
<?= HTML::attributes($item->attributes) ?>
|
<?= HTML::attributes($item->attributes) ?>
|
||||||
|
|
@ -21,7 +21,7 @@
|
||||||
</a>
|
</a>
|
||||||
<span
|
<span
|
||||||
class="counter <?= $item->counter === null ? 'empty' : null ?>"
|
class="counter <?= $item->counter === null ? 'empty' : null ?>"
|
||||||
data-menu-id="<?= e($context->mainMenuCode.'/'.$item->code) ?>"
|
data-menu-id="<?= e($context->mainMenuCode.'/'.$sideItemCode) ?>"
|
||||||
<?php if ($item->counterLabel): ?>title="<?= e(trans($item->counterLabel)) ?>"<?php endif ?>
|
<?php if ($item->counterLabel): ?>title="<?= e(trans($item->counterLabel)) ?>"<?php endif ?>
|
||||||
>
|
>
|
||||||
<?= e($item->counter) ?>
|
<?= e($item->counter) ?>
|
||||||
|
|
|
||||||
|
|
@ -32,4 +32,32 @@ class Plugin extends PluginBase
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function registerNavigation()
|
||||||
|
{
|
||||||
|
return [
|
||||||
|
'blog' => [
|
||||||
|
'label' => 'Blog',
|
||||||
|
'url' => 'http://rainlab.tld/blog/posts',
|
||||||
|
'icon' => 'icon-pencil',
|
||||||
|
'permissions' => ['rainlab.blog.*'],
|
||||||
|
'order' => 500,
|
||||||
|
|
||||||
|
'sideMenu' => [
|
||||||
|
'posts' => [
|
||||||
|
'label' => 'Posts',
|
||||||
|
'icon' => 'icon-copy',
|
||||||
|
'url' => 'http://rainlab.tld/blog/posts',
|
||||||
|
'permissions' => ['rainlab.blog.access_posts']
|
||||||
|
],
|
||||||
|
'categories' => [
|
||||||
|
'label' => 'Categories',
|
||||||
|
'icon' => 'icon-list-ul',
|
||||||
|
'url' => 'http://rainlab.tld/blog/categories',
|
||||||
|
'permissions' => ['rainlab.blog.access_categories']
|
||||||
|
],
|
||||||
|
]
|
||||||
|
]
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
@ -0,0 +1,65 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
use Backend\Classes\Controller;
|
||||||
|
use Backend\Classes\NavigationManager;
|
||||||
|
|
||||||
|
class NavigationManagerTest extends TestCase
|
||||||
|
{
|
||||||
|
public function testRegisterMenuItems()
|
||||||
|
{
|
||||||
|
$manager = NavigationManager::instance();
|
||||||
|
$items = $manager->listMainMenuItems();
|
||||||
|
$this->assertArrayNotHasKey('OCTOBER.TEST.DASHBOARD', $items);
|
||||||
|
|
||||||
|
$manager->registerMenuItems('October.Test', [
|
||||||
|
'dashboard' => [
|
||||||
|
'label' => 'Dashboard',
|
||||||
|
'icon' => 'icon-dashboard',
|
||||||
|
'url' => 'http://dashboard.tld',
|
||||||
|
'order' => 100
|
||||||
|
]
|
||||||
|
]);
|
||||||
|
|
||||||
|
$items = $manager->listMainMenuItems();
|
||||||
|
$this->assertArrayHasKey('OCTOBER.TEST.DASHBOARD', $items);
|
||||||
|
|
||||||
|
$item = $items['OCTOBER.TEST.DASHBOARD'];
|
||||||
|
$this->assertObjectHasAttribute('code', $item);
|
||||||
|
$this->assertObjectHasAttribute('label', $item);
|
||||||
|
$this->assertObjectHasAttribute('icon', $item);
|
||||||
|
$this->assertObjectHasAttribute('url', $item);
|
||||||
|
$this->assertObjectHasAttribute('owner', $item);
|
||||||
|
$this->assertObjectHasAttribute('order', $item);
|
||||||
|
$this->assertObjectHasAttribute('permissions', $item);
|
||||||
|
$this->assertObjectHasAttribute('sideMenu', $item);
|
||||||
|
|
||||||
|
$this->assertEquals('dashboard', $item->code);
|
||||||
|
$this->assertEquals('Dashboard', $item->label);
|
||||||
|
$this->assertEquals('icon-dashboard', $item->icon);
|
||||||
|
$this->assertEquals('http://dashboard.tld', $item->url);
|
||||||
|
$this->assertEquals(100, $item->order);
|
||||||
|
$this->assertEquals('October.Test', $item->owner);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testListMainMenuItems()
|
||||||
|
{
|
||||||
|
$manager = NavigationManager::instance();
|
||||||
|
$items = $manager->listMainMenuItems();
|
||||||
|
|
||||||
|
$this->assertArrayHasKey('OCTOBER.TESTER.BLOG', $items);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testListSideMenuItems()
|
||||||
|
{
|
||||||
|
$manager = NavigationManager::instance();
|
||||||
|
|
||||||
|
$items = $manager->listSideMenuItems();
|
||||||
|
$this->assertEmpty($items);
|
||||||
|
|
||||||
|
$manager->setContext('October.Tester', 'blog');
|
||||||
|
|
||||||
|
$items = $manager->listSideMenuItems();
|
||||||
|
$this->assertArrayHasKey('posts', $items);
|
||||||
|
$this->assertArrayHasKey('categories', $items);
|
||||||
|
}
|
||||||
|
}
|
||||||
Loading…
Reference in New Issue