Permalink
Browse files

fix for MDL-9238, users assigned to a role at category-level don't vi…

…ew the courses of the subcategories
  • Loading branch information...
1 parent cf4a318 commit ac326d2f3b1d59abe8cb21b272221d85dfe9dcf1 toyomoyo committed Apr 10, 2007
Showing with 51 additions and 1 deletion.
  1. +51 −1 lib/datalib.php
View
@@ -700,7 +700,7 @@ function get_my_courses($userid, $sort='visible DESC,sortorder ASC', $fields='*'
// Check root permissions
$sitecontext = get_context_instance(CONTEXT_SYSTEM, SITEID);
- if(has_capability('moodle/course:view',$sitecontext,$userid,$doanything)) {
+ if (has_capability('moodle/course:view',$sitecontext,$userid,$doanything)) {
// User can view all courses, although there might be exceptions
// which we will filter later.
$rs = get_recordset('course c', '', '', $sort, $fields);
@@ -770,6 +770,56 @@ function get_my_courses($userid, $sort='visible DESC,sortorder ASC', $fields='*'
}
}
+ /// MDL-9238, course in sub categories are not shown
+ // if the user has course:view at system level, then he can view all course
+ // skip this part
+ if (!has_capability('moodle/course:view',$sitecontext,$userid,$doanything)) {
+
+ // get all course categories with an assignment
+ $SQL = "SELECT a.id, a.id FROM {$CFG->prefix}role_assignments ra
+ INNER JOIN {$CFG->prefix}context x ON x.id=ra.contextid
+ INNER JOIN {$CFG->prefix}course_categories a ON x.instanceid=a.id AND x.contextlevel=40
+ WHERE ra.userid=$userid";
+
+ if ($mcoursecats = get_records_sql($SQL)) {
+ foreach ($mcoursecats as $mcoursecat) {
+
+ // run the sql to get the path, find all courses in each sub (sub) categories
+ $pathsql = "SELECT $fields
+ FROM {$CFG->prefix}course_categories cc,
+ {$CFG->prefix}course c
+ WHERE cc.path LIKE '%".$mcoursecat->id."/%'
+ AND c.category = cc.id";
+
+ if ($scourses = get_records_sql($pathsql)) {
+
+ // add each course in sub category, if correct permissions are set
+ // and if the course is not added to my courses list yet
+ foreach ($scourses as $scourse) {
+ $context = get_context_instance(CONTEXT_COURSE, $scourse->id);
+ if (!isset($mycourses[$scourse->id]) &&
+ has_capability('moodle/course:view', $context, $userid, $doanything) &&
+ !has_capability('moodle/legacy:guest', $context, $userid, false) &&
+ ($scourse->visible ||
+ has_capability('moodle/course:viewhiddencourses', $context, $userid))) {
+ // add it to my course array
+ $mycourses[$scourse->id] = $scourse;
+ }
+
+ // Only return a limited number of courses if limit is set
+ if($limit>0) {
+ $limit--;
+ if($limit==0) {
+ // breaks the 2 foreach loops
+ break 2;
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+
if (!empty($USER->id) && ($USER->id == $userid)) {
$USER->mycourses[$doanything] = $mycourses;
}

0 comments on commit ac326d2

Please sign in to comment.