From e6d1218ade7a64196fe336d24af8a9b5e784386e Mon Sep 17 00:00:00 2001 From: Jerome Mouneyrac Date: Wed, 20 Jun 2012 15:49:20 +0800 Subject: [PATCH] MDL-33776 Web services: get_categories - subcategories should be checked against visible/theme keys --- course/externallib.php | 23 ++++++++++++++++++----- 1 file changed, 18 insertions(+), 5 deletions(-) diff --git a/course/externallib.php b/course/externallib.php index e14ce90a12f..41c5ab4fce9 100644 --- a/course/externallib.php +++ b/course/externallib.php @@ -904,9 +904,10 @@ class core_course_external extends external_api { '"parent" (int) the parent category id,'. '"idnumber" (string) category idnumber'. ' - user must have \'moodle/category:manage\' to search on idnumber,'. - '"visible" (int) whether the category is visible or not'. + '"visible" (int) whether the returned categories must be visible or hidden. If the key is not passed, + then the function return all categories that the user can see.'. ' - user must have \'moodle/category:manage\' or \'moodle/category:viewhiddencategories\' to search on visible,'. - '"theme" (string) category theme'. + '"theme" (string) only return the categories having this theme'. ' - user must have \'moodle/category:manage\' to search on theme'), 'value' => new external_value(PARAM_RAW, 'the value to match') ) @@ -1017,10 +1018,22 @@ class core_course_external extends external_api { if ($categories and !empty($params['addsubcategories'])) { $newcategories = array(); + // Check if we required visible/theme checks. + $additionalselect = ''; + $additionalparams = array(); + if (isset($conditions['visible'])) { + $additionalselect .= ' AND visible = :visible'; + $additionalparams['visible'] = $conditions['visible']; + } + if (isset($conditions['theme'])) { + $additionalselect .= ' AND theme= :theme'; + $additionalparams['theme'] = $conditions['theme']; + } + foreach ($categories as $category) { - $sqllike = $DB->sql_like('path', ':path'); - $sqlparams = array('path' => $category->path.'/%'); // It will NOT include the specified category. - $subcategories = $DB->get_records_select('course_categories', $sqllike, $sqlparams); + $sqlselect = $DB->sql_like('path', ':path') . $additionalselect; + $sqlparams = array('path' => $category->path.'/%') + $additionalparams; // It will NOT include the specified category. + $subcategories = $DB->get_records_select('course_categories', $sqlselect, $sqlparams); $newcategories = $newcategories + $subcategories; // Both arrays have integer as keys. } $categories = $categories + $newcategories;