diff --git a/mod/quiz/classes/structure.php b/mod/quiz/classes/structure.php index 968ad9cda51..f261ccce796 100644 --- a/mod/quiz/classes/structure.php +++ b/mod/quiz/classes/structure.php @@ -1853,12 +1853,18 @@ class structure { private function populate_question_sources(): void { global $DB; - $sql = 'SELECT c.id AS contextid, cm.id, cm.course - FROM {question_categories} qc - JOIN {context} c ON c.id = qc.contextid - JOIN {course_modules} cm ON cm.id = c.instanceid AND c.contextlevel = ' . CONTEXT_MODULE . ' - GROUP BY c.id, cm.id, cm.course'; - $this->questionsources = $DB->get_records_sql($sql); + $contextids = array_map(fn($question) => $question->contextid, $this->questions); + [$insql, $inparams] = $DB->get_in_or_equal(array_unique($contextids)); + + $sql = " + SELECT c.id as contextid, cm.id, cm.course + FROM {context} c + JOIN {course_modules} cm ON cm.id = c.instanceid AND c.contextlevel = ? + WHERE c.id {$insql} + "; + $params = array_merge([context_module::LEVEL], $inparams); + + $this->questionsources = $DB->get_records_sql($sql, $params); } /**