mirror of
https://github.com/moodle/moodle.git
synced 2025-03-14 12:40:01 +01:00
MDL-81301 quiz: improve performance of deleting a quiz
This commit is contained in:
parent
b621a7e4b3
commit
22e4cc9204
@ -2434,24 +2434,24 @@ function mod_quiz_core_calendar_get_event_action_string(string $eventtype): stri
|
||||
}
|
||||
|
||||
/**
|
||||
* Delete question reference data.
|
||||
* Delete all question references for a quiz.
|
||||
*
|
||||
* @param int $quizid The id of quiz.
|
||||
*/
|
||||
function quiz_delete_references($quizid): void {
|
||||
global $DB;
|
||||
$slots = $DB->get_records('quiz_slots', ['quizid' => $quizid]);
|
||||
foreach ($slots as $slot) {
|
||||
$params = [
|
||||
'itemid' => $slot->id,
|
||||
'component' => 'mod_quiz',
|
||||
'questionarea' => 'slot'
|
||||
];
|
||||
// Delete any set references.
|
||||
$DB->delete_records('question_set_references', $params);
|
||||
// Delete any references.
|
||||
$DB->delete_records('question_references', $params);
|
||||
}
|
||||
|
||||
$cm = get_coursemodule_from_instance('quiz', $quizid);
|
||||
$context = context_module::instance($cm->id);
|
||||
|
||||
$conditions = [
|
||||
'usingcontextid' => $context->id,
|
||||
'component' => 'mod_quiz',
|
||||
'questionarea' => 'slot',
|
||||
];
|
||||
|
||||
$DB->delete_records('question_references', $conditions);
|
||||
$DB->delete_records('question_set_references', $conditions);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -24,6 +24,7 @@
|
||||
*/
|
||||
namespace mod_quiz;
|
||||
|
||||
use context_module;
|
||||
use core_external\external_api;
|
||||
use mod_quiz\quiz_settings;
|
||||
|
||||
@ -106,6 +107,7 @@ class lib_test extends \advanced_testcase {
|
||||
// Setup a quiz with 1 standard and 1 random question.
|
||||
$quizgenerator = $this->getDataGenerator()->get_plugin_generator('mod_quiz');
|
||||
$quiz = $quizgenerator->create_instance(['course' => $SITE->id, 'questionsperpage' => 3, 'grade' => 100.0]);
|
||||
$context = context_module::instance($quiz->cmid);
|
||||
|
||||
$questiongenerator = $this->getDataGenerator()->get_plugin_generator('core_question');
|
||||
$cat = $questiongenerator->create_question_category();
|
||||
@ -121,20 +123,20 @@ class lib_test extends \advanced_testcase {
|
||||
|
||||
// Check that the random question was deleted.
|
||||
if ($randomq) {
|
||||
$count = $DB->count_records('question', ['id' => $randomq->id]);
|
||||
$this->assertEquals(0, $count);
|
||||
$this->assertEquals(0, $DB->count_records('question', ['id' => $randomq->id]));
|
||||
}
|
||||
// Check that the standard question was not deleted.
|
||||
$count = $DB->count_records('question', ['id' => $standardq->id]);
|
||||
$this->assertEquals(1, $count);
|
||||
$this->assertEquals(1, $DB->count_records('question', ['id' => $standardq->id]));
|
||||
|
||||
// Check that all the slots were removed.
|
||||
$count = $DB->count_records('quiz_slots', ['quizid' => $quiz->id]);
|
||||
$this->assertEquals(0, $count);
|
||||
$this->assertEquals(0, $DB->count_records('quiz_slots', ['quizid' => $quiz->id]));
|
||||
|
||||
// Check that the quiz was removed.
|
||||
$count = $DB->count_records('quiz', ['id' => $quiz->id]);
|
||||
$this->assertEquals(0, $count);
|
||||
$this->assertEquals(0, $DB->count_records('quiz', ['id' => $quiz->id]));
|
||||
|
||||
// Check that any question references linked to this quiz are gone.
|
||||
$this->assertEquals(0, $DB->count_records('question_references', ['usingcontextid' => $context->id]));
|
||||
$this->assertEquals(0, $DB->count_records('question_set_references', ['usingcontextid' => $context->id]));
|
||||
}
|
||||
|
||||
public function test_quiz_get_user_attempts() {
|
||||
|
Loading…
x
Reference in New Issue
Block a user