MDL-87121 quiz: Fixed random question performance issue
This commit is contained in:
@@ -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);
|
||||
|
||||
@@ -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']);
|
||||
|
||||
@@ -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,
|
||||
|
||||
Reference in New Issue
Block a user