Revert change from #1315, fixes original issue, write tests

This commit is contained in:
Samuel Georges 2015-07-28 18:52:12 +10:00
parent fa0d110ecf
commit bb4c2da404
4 changed files with 101 additions and 4 deletions

View File

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

View File

@ -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) ?>

View File

@ -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']
],
]
]
];
}
} }

View File

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