From 9565d68bc55062e3a2a22913be8a58bcf664f01b Mon Sep 17 00:00:00 2001 From: wilsonge Date: Mon, 12 Sep 2016 19:31:49 +0100 Subject: [PATCH] Fix no menu item pages giving wrong links --- libraries/cms/component/router/rules/menu.php | 8 +++++++- .../router/rules/JComponentRouterRulesMenuTest.php | 5 +++++ 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/libraries/cms/component/router/rules/menu.php b/libraries/cms/component/router/rules/menu.php index da5304f31d29a..b338ee23a2acb 100644 --- a/libraries/cms/component/router/rules/menu.php +++ b/libraries/cms/component/router/rules/menu.php @@ -55,7 +55,13 @@ public function __construct(JComponentRouterView $router) */ public function preprocess(&$query) { - if (isset($query['Itemid']) && $this->router->menu->getActive() && $query['Itemid'] != $this->router->menu->getActive()->id) + /** + * If the active item id is not the same as the supplied item id or we have a supplied item id and no active + * menu item then we just use the supplied menu item and continue + */ + if (isset($query['Itemid']) + && (($this->router->menu->getActive() && $query['Itemid'] != $this->router->menu->getActive()->id) + || ($this->router->menu->getActive() === null))) { return; } diff --git a/tests/unit/suites/libraries/cms/component/router/rules/JComponentRouterRulesMenuTest.php b/tests/unit/suites/libraries/cms/component/router/rules/JComponentRouterRulesMenuTest.php index 38176227a76d3..90ce5ae894394 100644 --- a/tests/unit/suites/libraries/cms/component/router/rules/JComponentRouterRulesMenuTest.php +++ b/tests/unit/suites/libraries/cms/component/router/rules/JComponentRouterRulesMenuTest.php @@ -198,6 +198,11 @@ public function testPreprocessLanguage() $this->object->preprocess($query); $this->assertEquals(array('Itemid' => '47'), $query); + // If we inject a item id and we have no active menu item we should get the injected item id + $query = array('Itemid' => '50'); + $this->object->preprocess($query); + $this->assertEquals(array('Itemid' => '50'), $query); + // Test if the correct default item is used based on the language $query = array('lang' => 'en-GB'); $this->object->preprocess($query);