Merge branch 'w03_MDL-31053_m23_contextpreloading' of git://github.com/skodak/moodle
authorEloy Lafuente (stronk7) <stronk7@moodle.org>
Tue, 17 Jan 2012 01:18:46 +0000 (02:18 +0100)
committerEloy Lafuente (stronk7) <stronk7@moodle.org>
Tue, 17 Jan 2012 01:18:46 +0000 (02:18 +0100)
1  2 
lib/accesslib.php

diff --combined lib/accesslib.php
@@@ -1002,7 -1002,6 +1002,7 @@@ function get_empty_accessdata() 
      $accessdata['rdef_lcc']   = 0;       // rdef_count during the last compression
      $accessdata['loaded']     = array(); // loaded course contexts
      $accessdata['time']       = time();
 +    $accessdata['rsw']        = array();
  
      return $accessdata;
  }
@@@ -1150,7 -1149,7 +1150,7 @@@ function reload_all_capabilities() 
  
      // copy switchroles
      $sw = array();
 -    if (isset($USER->access['rsw'])) {
 +    if (!empty($USER->access['rsw'])) {
          $sw = $USER->access['rsw'];
      }
  
@@@ -3860,22 -3859,21 +3860,21 @@@ function get_user_capability_course($ca
      // Note the result can be used directly as a context (we are going to), the course
      // fields are just appended.
  
+     $contextpreload = context_helper::get_preload_record_columns_sql('x');
      $courses = array();
-     $rs = $DB->get_recordset_sql("SELECT x.*, c.id AS courseid $fieldlist
+     $rs = $DB->get_recordset_sql("SELECT c.id $fieldlist, $contextpreload
                                      FROM {course} c
-                                    INNER JOIN {context} x
-                                          ON (c.id=x.instanceid AND x.contextlevel=".CONTEXT_COURSE.")
+                                     JOIN {context} x ON (c.id=x.instanceid AND x.contextlevel=".CONTEXT_COURSE.")
                                  $orderby");
      // Check capability for each course in turn
-     foreach ($rs as $coursecontext) {
-         if (has_capability($capability, $coursecontext, $userid, $doanything)) {
+     foreach ($rs as $course) {
+         context_helper::preload_from_record($course);
+         $context = context_course::instance($course->id);
+         if (has_capability($capability, $context, $userid, $doanything)) {
              // We've got the capability. Make the record look like a course record
              // and store it
-             $coursecontext->id = $coursecontext->courseid;
-             unset($coursecontext->courseid);
-             unset($coursecontext->contextlevel);
-             unset($coursecontext->instanceid);
-             $courses[] = $coursecontext;
+             $courses[] = $course;
          }
      }
      $rs->close();
@@@ -3942,14 -3940,16 +3941,14 @@@ function role_switch($roleid, context $
      //
      // Note: it is not possible to switch to roles that do not have course:view
  
 -    // Add the switch RA
 -    if (!isset($USER->access['rsw'])) {
 -        $USER->access['rsw'] = array();
 +    if (!isset($USER->access)) {
 +        load_all_capabilities();
      }
  
 +
 +    // Add the switch RA
      if ($roleid == 0) {
          unset($USER->access['rsw'][$context->path]);
 -        if (empty($USER->access['rsw'])) {
 -            unset($USER->access['rsw']);
 -        }
          return true;
      }