MDL-55956 calendar: Include courses parameter in subquery conditions
authorJun Pataleta <jun@moodle.com>
Wed, 8 Mar 2017 07:30:04 +0000 (15:30 +0800)
committerJun Pataleta <jun@moodle.com>
Wed, 8 Mar 2017 07:30:04 +0000 (15:30 +0800)
calendar/lib.php

index 929e82a..db9c11f 100644 (file)
@@ -850,11 +850,25 @@ function calendar_get_events($tstart, $tend, $users, $groups, $courses, $withdur
         $subqueryparams = array_merge($subqueryparams, $inusergroupparams);
     }
 
         $subqueryparams = array_merge($subqueryparams, $inusergroupparams);
     }
 
-    // Set filter condition for the user's courses.
+    // Get courses to be used for the subquery.
+    $subquerycourses = [];
+    if (is_array($courses)) {
+        $subquerycourses = $courses;
+    } else if (is_numeric($courses)) {
+        $subquerycourses[] = $courses;
+    }
+    // Merge with user courses, if necessary.
     if (!empty($usercourses)) {
     if (!empty($usercourses)) {
-        list($inusercourses, $inusercoursesparams) = $DB->get_in_or_equal($usercourses, SQL_PARAMS_NAMED);
-        $subqueryconditions[] = "(ev.groupid = 0 AND ev.courseid $inusercourses)";
-        $subqueryparams = array_merge($subqueryparams, $inusercoursesparams);
+        $subquerycourses = array_merge($subquerycourses, $usercourses);
+        // Make sure we remove duplicate values.
+        $subquerycourses = array_unique($subquerycourses);
+    }
+
+    // Set subquery filter condition for the courses.
+    if (!empty($subquerycourses)) {
+        list($incourses, $incoursesparams) = $DB->get_in_or_equal($subquerycourses, SQL_PARAMS_NAMED);
+        $subqueryconditions[] = "(ev.groupid = 0 AND ev.courseid $incourses)";
+        $subqueryparams = array_merge($subqueryparams, $incoursesparams);
     }
 
     // Build the WHERE condition for the sub-query.
     }
 
     // Build the WHERE condition for the sub-query.