Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Browse files

MDL-33776 Web services: get_categories - subcategories should be chec…

…ked against visible/theme keys
  • Loading branch information...
commit 6b5ce20c169f26e3059da98f0a7761e01156d3de 1 parent 800fb75
@mouneyrac mouneyrac authored danpoltawski committed
Showing with 18 additions and 5 deletions.
  1. +18 −5 course/externallib.php
View
23 course/externallib.php
@@ -904,9 +904,10 @@ public static function get_categories_parameters() {
'"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 @@ public static function get_categories($criteria = array(), $addsubcategories = t
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;
Please sign in to comment.
Something went wrong with that request. Please try again.