From 3616569d45a4f7635fc6b2e6c1f59d3cebe1264b Mon Sep 17 00:00:00 2001 From: Eric Merrill Date: Thu, 29 May 2014 14:20:26 -0400 Subject: [PATCH] MDL-20154 quiz: Remove unused random questions When a random question is removed from a quiz, and it is not in use elsewhere, it should be deleted. Conflicts: mod/quiz/editlib.php mod/quiz/lib.php --- mod/quiz/editlib.php | 6 ++++++ mod/quiz/lib.php | 13 +++++++++++++ 2 files changed, 19 insertions(+) diff --git a/mod/quiz/editlib.php b/mod/quiz/editlib.php index b395d91a96d..0f245312015 100644 --- a/mod/quiz/editlib.php +++ b/mod/quiz/editlib.php @@ -76,6 +76,12 @@ function quiz_remove_question($quiz, $questionid) { $DB->set_field('quiz', 'questions', $quiz->questions, array('id' => $quiz->id)); $DB->delete_records('quiz_question_instances', array('quiz' => $quiz->instance, 'question' => $questionid)); + + $qtype = $DB->get_field('question', 'qtype', array('id' => $questionid)); + if ($qtype === 'random') { + // This function automatically checks if the question is in use, and won't delete if it is. + question_delete_question($questionid); + } } /** diff --git a/mod/quiz/lib.php b/mod/quiz/lib.php index d2ad58df4d8..84b80a06bc1 100644 --- a/mod/quiz/lib.php +++ b/mod/quiz/lib.php @@ -170,7 +170,20 @@ function quiz_delete_instance($id) { quiz_delete_all_attempts($quiz); quiz_delete_all_overrides($quiz); + // Look for random questions that may no longer be used when this quiz is gone. + $sql = "SELECT q.id + FROM {quiz_question_instances} instance + JOIN {question} q ON q.id = instance.question + WHERE instance.quiz = ? AND q.qtype = ?"; + $questionids = $DB->get_fieldset_sql($sql, array($quiz->id, 'random')); + + // We need to do this before we try and delete randoms, otherwise they would still be 'in use'. $DB->delete_records('quiz_question_instances', array('quiz' => $quiz->id)); + + foreach ($questionids as $questionid) { + question_delete_question($questionid); + } + $DB->delete_records('quiz_feedback', array('quizid' => $quiz->id)); quiz_access_manager::delete_settings($quiz);