From 182f5cc6f61f43e665db9ef1803e8d477b460c99 Mon Sep 17 00:00:00 2001 From: Petr Skoda Date: Sat, 14 Jan 2012 21:36:02 +0100 Subject: [PATCH] MDL-31053 fix invalid context preloading in get_user_capability_course() --- lib/accesslib.php | 19 +++++++++---------- 1 file changed, 9 insertions(+), 10 deletions(-) diff --git a/lib/accesslib.php b/lib/accesslib.php index 18eddedc9b5c2..f604714c5ac32 100644 --- a/lib/accesslib.php +++ b/lib/accesslib.php @@ -3859,22 +3859,21 @@ function get_user_capability_course($capability, $userid = null, $doanything = t // 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();