diff --git a/lib/accesslib.php b/lib/accesslib.php index f340b1f8641..ff6b39ee747 100644 --- a/lib/accesslib.php +++ b/lib/accesslib.php @@ -6211,13 +6211,14 @@ class context_helper extends context { } /** - * Preloads context information from db record and strips the cached info. + * Preloads context cache with information from db record and strips the cached info. * * The db request has to contain all columns from context_helper::get_preload_record_columns(). * * @static * @param stdClass $rec - * @return void (modifies $rec) + * @return void This is intentional. See MDL-37115. You will need to get the context + * in the normal way, but it is now cached, so that will be fast. */ public static function preload_from_record(stdClass $rec) { context::preload_from_record($rec); diff --git a/question/bank/statistics/classes/helper.php b/question/bank/statistics/classes/helper.php index 7b5e62cdf41..e694a484e15 100644 --- a/question/bank/statistics/classes/helper.php +++ b/question/bank/statistics/classes/helper.php @@ -51,11 +51,14 @@ class helper { [$questionidcondition, $params] = $DB->get_in_or_equal($questionids); // The MIN(qu.id) is just to ensure that the rows have a unique key. $places = $DB->get_records_sql(" - SELECT MIN(qu.id) AS somethingunique, qu.component, qu.contextid + SELECT MIN(qu.id) AS somethingunique, qu.component, qu.contextid, " . + \context_helper::get_preload_record_columns_sql('ctx') . " FROM {question_usages} qu - JOIN {question_attempts} qatt ON qatt.questionusageid = qu.id - WHERE qatt.questionid $questionidcondition - GROUP BY qu.component, qu.contextid + JOIN {question_attempts} qa ON qa.questionusageid = qu.id + JOIN {context} ctx ON ctx.id = qu.contextid + WHERE qa.questionid $questionidcondition + GROUP BY qu.component, qu.contextid, " . + implode(', ', array_keys(\context_helper::get_preload_record_columns('ctx'))) . " ORDER BY qu.contextid ASC ", $params); @@ -63,6 +66,7 @@ class helper { $places = array_values($places); foreach ($places as $place) { unset($place->somethingunique); + \context_helper::preload_from_record($place); } return $places;