MDL-32340 Improve performance of calendar selection
authorAndrew Robert Nicols <andrew.nicols@luns.net.uk>
Wed, 9 May 2012 16:34:12 +0000 (17:34 +0100)
committerAndrew Robert Nicols <andrew.nicols@luns.net.uk>
Thu, 10 May 2012 15:05:37 +0000 (16:05 +0100)
calendar/lib.php

index 7280f14..99c9f81 100644 (file)
@@ -1508,15 +1508,16 @@ function calendar_get_default_courses() {
     }
 
     $courses = array();
-    if (!empty($CFG->calendar_adminseesall) && has_capability('moodle/calendar:manageentries', get_context_instance(CONTEXT_SYSTEM))) {
+    if (!empty($CFG->calendar_adminseesall) && has_capability('moodle/calendar:manageentries', context_system::instance())) {
         list ($select, $join) = context_instance_preload_sql('c.id', CONTEXT_COURSE, 'ctx');
-        $sql = "SELECT DISTINCT c.* $select
+        $sql = "SELECT c.* $select
                   FROM {course} c
-                  JOIN {event} e ON e.courseid = c.id
-                  $join";
+                  $join
+                  WHERE EXISTS (SELECT 1 FROM {event} e WHERE e.courseid = c.id)
+                  ";
         $courses = $DB->get_records_sql($sql, null, 0, 20);
         foreach ($courses as $course) {
-            context_instance_preload($course);
+            context_helper::preload_from_record($course);
         }
         return $courses;
     }