From 1c8d021a358fc6ee17da422ccd99fe570ce7912f Mon Sep 17 00:00:00 2001 From: Samuel Georges Date: Sat, 12 Sep 2015 08:45:58 +1000 Subject: [PATCH] Adds the ability to remove navigation items Included tests Refs #1413 --- modules/backend/classes/NavigationManager.php | 23 +++++++ .../backend/classes/NavigationManagerTest.php | 69 ++++++++++++++++++- 2 files changed, 91 insertions(+), 1 deletion(-) diff --git a/modules/backend/classes/NavigationManager.php b/modules/backend/classes/NavigationManager.php index 764b1f83d..907ec2b01 100644 --- a/modules/backend/classes/NavigationManager.php +++ b/modules/backend/classes/NavigationManager.php @@ -246,6 +246,15 @@ class NavigationManager } } + /** + * Removes a single main menu item + */ + public function removeMainMenuItem($owner, $code) + { + $itemKey = $this->makeItemKey($owner, $code); + unset($this->items[$itemKey]); + } + /** * Dynamically add an array of side menu items * @param string $owner @@ -287,6 +296,20 @@ class NavigationManager $this->items[$itemKey]->sideMenu[$sideCode] = $item; } + /** + * Removes a single main menu item + */ + public function removeSideMenuItem($owner, $code, $sideCode) + { + $itemKey = $this->makeItemKey($owner, $code); + if (!isset($this->items[$itemKey])) { + return false; + } + + $mainItem = $this->items[$itemKey]; + unset($mainItem->sideMenu[$sideCode]); + } + /** * Returns a list of the main menu items. * @return array diff --git a/tests/unit/backend/classes/NavigationManagerTest.php b/tests/unit/backend/classes/NavigationManagerTest.php index 416972f3d..04ca2f183 100644 --- a/tests/unit/backend/classes/NavigationManagerTest.php +++ b/tests/unit/backend/classes/NavigationManagerTest.php @@ -79,6 +79,51 @@ class NavigationManagerTest extends TestCase $this->assertEquals(200, $items['categories']->order); } + public function testAddMainMenuItems() + { + $manager = NavigationManager::instance(); + $manager->addMainMenuItems('October.Tester', [ + 'print' => [ + 'label' => 'Print', + 'icon' => 'icon-print', + 'url' => 'javascript:window.print()' + ] + ]); + + $items = $manager->listMainMenuItems(); + + $this->assertInternalType('array', $items); + $this->assertArrayHasKey('OCTOBER.TESTER.PRINT', $items); + + $item = $items['OCTOBER.TESTER.PRINT']; + $this->assertEquals('print', $item->code); + $this->assertEquals('Print', $item->label); + $this->assertEquals('icon-print', $item->icon); + $this->assertEquals('javascript:window.print()', $item->url); + $this->assertEquals(500, $item->order); + $this->assertEquals('October.Tester', $item->owner); + } + + public function testRemoveMainMenuItem() + { + $manager = NavigationManager::instance(); + $manager->addMainMenuItems('October.Tester', [ + 'close' => [ + 'label' => 'Close', + 'icon' => 'icon-times', + 'url' => 'javascript:window.close()' + ] + ]); + + $items = $manager->listMainMenuItems(); + $this->assertArrayHasKey('OCTOBER.TESTER.CLOSE', $items); + + $manager->removeMainMenuItem('October.Tester', 'close'); + + $items = $manager->listMainMenuItems(); + $this->assertArrayNotHasKey('OCTOBER.TESTER.CLOSE', $items); + } + public function testAddSideMenuItems() { $manager = NavigationManager::instance(); @@ -116,4 +161,26 @@ class NavigationManagerTest extends TestCase $this->assertContains('october.tester.access_foo', $items['foo']->permissions); $this->assertContains('october.tester.access_bar', $items['foo']->permissions); } -} \ No newline at end of file + + public function testRemoveSideMenuItem() + { + $manager = NavigationManager::instance(); + $manager->addSideMenuItems('October.Tester', 'blog', [ + 'bar' => [ + 'label' => 'Bar', + 'icon' => 'icon-bars', + 'url' => 'http://yahoo.com' + ] + ]); + + $manager->setContext('October.Tester', 'blog'); + + $items = $manager->listSideMenuItems(); + $this->assertArrayHasKey('bar', $items); + + $manager->removeSideMenuItem('October.Tester', 'blog', 'bar'); + + $items = $manager->listSideMenuItems(); + $this->assertArrayNotHasKey('bar', $items); + } +}