From 07bd5864922880036e154478978ba0e97c90e4d9 Mon Sep 17 00:00:00 2001 From: Tim Price Date: Mon, 8 Dec 2014 09:23:56 +1100 Subject: [PATCH 1/2] MDL-48421 navigation: correctly load child categories if parent is loaded --- lib/navigationlib.php | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/lib/navigationlib.php b/lib/navigationlib.php index 717b3909fcf..a304c5a14aa 100644 --- a/lib/navigationlib.php +++ b/lib/navigationlib.php @@ -1639,7 +1639,9 @@ class global_navigation extends navigation_node { } else if (array_key_exists($categoryid, $this->addedcategories)) { // The category itself has been loaded already so we just need to ensure its subcategories // have been loaded - list($sql, $params) = $DB->get_in_or_equal(array_keys($this->addedcategories), SQL_PARAMS_NAMED, 'parent', false); + $addedcategories = $this->addedcategories; + unset($addedcategories[$categoryid]); + list($sql, $params) = $DB->get_in_or_equal(array_keys($addedcategories), SQL_PARAMS_NAMED, 'parent', false); if ($showbasecategories) { // We need to include categories with parent = 0 as well $sqlwhere .= " AND (cc.parent = :categoryid OR cc.parent = 0) AND cc.parent {$sql}"; From 4105c6c32954e9a9fd861ce1a2176952cc600cfd Mon Sep 17 00:00:00 2001 From: Tim Price Date: Tue, 16 Dec 2014 11:45:10 +1100 Subject: [PATCH 2/2] MDL-48421 navigation: accounting for potential regression --- lib/navigationlib.php | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/lib/navigationlib.php b/lib/navigationlib.php index a304c5a14aa..ee7be972b05 100644 --- a/lib/navigationlib.php +++ b/lib/navigationlib.php @@ -1639,15 +1639,17 @@ class global_navigation extends navigation_node { } else if (array_key_exists($categoryid, $this->addedcategories)) { // The category itself has been loaded already so we just need to ensure its subcategories // have been loaded - $addedcategories = $this->addedcategories; - unset($addedcategories[$categoryid]); - list($sql, $params) = $DB->get_in_or_equal(array_keys($addedcategories), SQL_PARAMS_NAMED, 'parent', false); - if ($showbasecategories) { - // We need to include categories with parent = 0 as well - $sqlwhere .= " AND (cc.parent = :categoryid OR cc.parent = 0) AND cc.parent {$sql}"; - } else { - // All we need is categories that match the parent - $sqlwhere .= " AND cc.parent = :categoryid AND cc.parent {$sql}"; + $addedcategories = $this->addedcategories; + unset($addedcategories[$categoryid]); + if (count($addedcategories) > 0) { + list($sql, $params) = $DB->get_in_or_equal(array_keys($addedcategories), SQL_PARAMS_NAMED, 'parent', false); + if ($showbasecategories) { + // We need to include categories with parent = 0 as well + $sqlwhere .= " AND (cc.parent = :categoryid OR cc.parent = 0) AND cc.parent {$sql}"; + } else { + // All we need is categories that match the parent + $sqlwhere .= " AND cc.parent = :categoryid AND cc.parent {$sql}"; + } } $params['categoryid'] = $categoryid; } else {