diff --git a/public/mod/quiz/backup/moodle2/restore_quiz_stepslib.php b/public/mod/quiz/backup/moodle2/restore_quiz_stepslib.php index 9d8b5e663f3..7582f631633 100644 --- a/public/mod/quiz/backup/moodle2/restore_quiz_stepslib.php +++ b/public/mod/quiz/backup/moodle2/restore_quiz_stepslib.php @@ -368,8 +368,7 @@ class restore_quiz_activity_structure_step extends restore_questions_activity_st if ($question->qtype === 'random') { // Set reference data. $questionsetreference = new stdClass(); - $questionsetreference->usingcontextid = context_module::instance(get_coursemodule_from_instance( - "quiz", $module->id, $module->course)->id)->id; + $questionsetreference->usingcontextid = $this->task->get_contextid(); $questionsetreference->component = 'mod_quiz'; $questionsetreference->questionarea = 'slot'; $questionsetreference->itemid = $data->id; @@ -388,8 +387,7 @@ class restore_quiz_activity_structure_step extends restore_questions_activity_st } else { // Reference data. $questionreference = new \stdClass(); - $questionreference->usingcontextid = context_module::instance(get_coursemodule_from_instance( - "quiz", $module->id, $module->course)->id)->id; + $questionreference->usingcontextid = $this->task->get_contextid(); $questionreference->component = 'mod_quiz'; $questionreference->questionarea = 'slot'; $questionreference->itemid = $data->id; @@ -481,8 +479,12 @@ class restore_quiz_activity_structure_step extends restore_questions_activity_st } $tagstring = "{$data->tagid},{$data->tagname}"; - $setreferencedata = $DB->get_record('question_set_references', - ['itemid' => $slotid, 'component' => 'mod_quiz', 'questionarea' => 'slot']); + $setreferencedata = $DB->get_record('question_set_references', [ + 'usingcontextid' => $this->task->get_contextid(), + 'component' => 'mod_quiz', + 'questionarea' => 'slot', + 'itemid' => $slotid, + ]); $filtercondition = json_decode($setreferencedata->filtercondition); $filtercondition->tags[] = $tagstring; $setreferencedata->filtercondition = json_encode($filtercondition); diff --git a/public/mod/quiz/classes/structure.php b/public/mod/quiz/classes/structure.php index 2dfcaa6b28a..1951ac11feb 100644 --- a/public/mod/quiz/classes/structure.php +++ b/public/mod/quiz/classes/structure.php @@ -1060,17 +1060,26 @@ class structure { return; } $maxslot = $DB->get_field_sql('SELECT MAX(slot) FROM {quiz_slots} WHERE quizid = ?', [$this->get_quizid()]); + $contextid = $this->get_context()->id; $trans = $DB->start_delegated_transaction(); // Delete the reference if it is a question. - $questionreference = $DB->get_record('question_references', - ['component' => 'mod_quiz', 'questionarea' => 'slot', 'itemid' => $slot->id]); + $questionreference = $DB->get_record('question_references', [ + 'usingcontextid' => $contextid, + 'component' => 'mod_quiz', + 'questionarea' => 'slot', + 'itemid' => $slot->id, + ]); if ($questionreference) { $DB->delete_records('question_references', ['id' => $questionreference->id]); } // Delete the set reference if it is a random question. - $questionsetreference = $DB->get_record('question_set_references', - ['component' => 'mod_quiz', 'questionarea' => 'slot', 'itemid' => $slot->id]); + $questionsetreference = $DB->get_record('question_set_references', [ + 'usingcontextid' => $contextid, + 'component' => 'mod_quiz', + 'questionarea' => 'slot', + 'itemid' => $slot->id, + ]); if ($questionsetreference) { $DB->delete_records('question_set_references', ['id' => $questionsetreference->id, 'component' => 'mod_quiz', 'questionarea' => 'slot']); diff --git a/public/mod/quiz/lib.php b/public/mod/quiz/lib.php index d5342f482d1..74990c16ca9 100644 --- a/public/mod/quiz/lib.php +++ b/public/mod/quiz/lib.php @@ -2520,9 +2520,14 @@ function mod_quiz_output_fragment_add_random_question_form($args) { if (empty($slotid)) { $params = $args; } else { + $contextid = \core\context\module::instance(clean_param($args['quizcmid'], PARAM_INT))->id; // Load the stored filters for the current slot. - $setreference = $DB->get_record('question_set_references', - ['itemid' => $slotid, 'component' => 'mod_quiz', 'questionarea' => 'slot']); + $setreference = $DB->get_record('question_set_references', [ + 'usingcontextid' => $contextid, + 'component' => 'mod_quiz', + 'questionarea' => 'slot', + 'itemid' => $slotid, + ]); $filterconditions = json_decode($setreference->filtercondition, true); $filterconditions = \core_question\question_reference_manager::convert_legacy_set_reference_filter_condition( $filterconditions,