From c12ff3d5f3de849cba39dcd6f2dd584d97b95d3d Mon Sep 17 00:00:00 2001 From: Tim Hunt Date: Mon, 27 Feb 2023 17:43:32 +0000 Subject: [PATCH] MDL-76897 quiz: get the context more efficiently where possible --- .../external/submit_question_version.php | 4 ++-- .../classes/local/structure/slot_random.php | 4 +++- mod/quiz/classes/output/edit_renderer.php | 2 +- mod/quiz/classes/quiz_attempt.php | 23 +++++++++++++------ mod/quiz/classes/structure.php | 10 ++++++++ mod/quiz/comment.php | 2 +- mod/quiz/edit_rest.php | 2 +- mod/quiz/editrandom.php | 2 +- mod/quiz/grade.php | 2 +- 9 files changed, 36 insertions(+), 15 deletions(-) diff --git a/mod/quiz/classes/external/submit_question_version.php b/mod/quiz/classes/external/submit_question_version.php index 788e10f7573..5facc34a8e7 100644 --- a/mod/quiz/classes/external/submit_question_version.php +++ b/mod/quiz/classes/external/submit_question_version.php @@ -64,14 +64,14 @@ class submit_question_version extends external_api { 'newversion' => $newversion ]; $params = self::validate_parameters(self::execute_parameters(), $params); - $response = ['result' => false]; + $response = []; // Get the required data. $referencedata = $DB->get_record('question_references', ['itemid' => $params['slotid'], 'component' => 'mod_quiz', 'questionarea' => 'slot']); $slotdata = $DB->get_record('quiz_slots', ['id' => $slotid]); // Capability check. - list($course, $cm) = get_course_and_cm_from_instance($slotdata->quizid, 'quiz'); + [, $cm] = get_course_and_cm_from_instance($slotdata->quizid, 'quiz'); $context = \context_module::instance($cm->id); self::validate_context($context); require_capability('mod/quiz:manage', $context); diff --git a/mod/quiz/classes/local/structure/slot_random.php b/mod/quiz/classes/local/structure/slot_random.php index 644e521e384..f2e116e63a6 100644 --- a/mod/quiz/classes/local/structure/slot_random.php +++ b/mod/quiz/classes/local/structure/slot_random.php @@ -16,6 +16,8 @@ namespace mod_quiz\local\structure; +use context_module; + /** * Class slot_random, represents a random question slot type. * @@ -210,7 +212,7 @@ class slot_random { // Log slot created event. $cm = get_coursemodule_from_instance('quiz', $quiz->id); $event = \mod_quiz\event\slot_created::create([ - 'context' => \context_module::instance($cm->id), + 'context' => context_module::instance($cm->id), 'objectid' => $this->record->id, 'other' => [ 'quizid' => $quiz->id, diff --git a/mod/quiz/classes/output/edit_renderer.php b/mod/quiz/classes/output/edit_renderer.php index 85d735b0cc7..0195f31599f 100644 --- a/mod/quiz/classes/output/edit_renderer.php +++ b/mod/quiz/classes/output/edit_renderer.php @@ -751,7 +751,7 @@ class edit_renderer extends \plugin_renderer_base { if ($structure->can_display_number_be_customised($slot)) { $questionnumbercustomised = $this->output->render($structure->make_slot_display_number_in_place_editable( - $slotid, \context_module::instance($structure->get_cmid()))); + $slotid, $structure->get_context())); $questionnumber = $questionnumbercustomised; } else { $questionnumber = $structure->get_displayed_number_for_slot($slot); diff --git a/mod/quiz/classes/quiz_attempt.php b/mod/quiz/classes/quiz_attempt.php index a692c65b66a..0d25fa69085 100644 --- a/mod/quiz/classes/quiz_attempt.php +++ b/mod/quiz/classes/quiz_attempt.php @@ -363,6 +363,15 @@ class quiz_attempt { return $this->quizobj->get_cmid(); } + /** + * Get the quiz context. + * + * @return context_module the context of the quiz this attempt belongs to. + */ + public function get_context(): context_module { + return $this->quizobj->get_context(); + } + /** * Is the current user is someone who previews the quiz, rather than attempting it? * @@ -2108,7 +2117,7 @@ class quiz_attempt { 'objectid' => $this->get_attemptid(), 'relateduserid' => $this->get_userid(), 'courseid' => $this->get_courseid(), - 'context' => context_module::instance($this->get_cmid()), + 'context' => $this->get_context(), 'other' => [ 'quizid' => $this->get_quizid(), 'page' => $this->get_currentpage() @@ -2129,7 +2138,7 @@ class quiz_attempt { 'objectid' => $this->get_attemptid(), 'relateduserid' => $this->get_userid(), 'courseid' => $this->get_courseid(), - 'context' => context_module::instance($this->get_cmid()), + 'context' => $this->get_context(), 'other' => [ 'quizid' => $this->get_quizid(), 'page' => $this->get_currentpage() @@ -2150,7 +2159,7 @@ class quiz_attempt { 'objectid' => $this->get_attemptid(), 'relateduserid' => $this->get_userid(), 'courseid' => $this->get_courseid(), - 'context' => context_module::instance($this->get_cmid()), + 'context' => $this->get_context(), 'other' => [ 'quizid' => $this->get_quizid(), 'page' => $this->get_currentpage() @@ -2173,7 +2182,7 @@ class quiz_attempt { 'objectid' => $this->get_attemptid(), 'relateduserid' => $this->get_userid(), 'courseid' => $this->get_courseid(), - 'context' => context_module::instance($this->get_cmid()), + 'context' => $this->get_context(), 'other' => [ 'quizid' => $this->get_quizid(), 'page' => $this->get_currentpage(), @@ -2197,7 +2206,7 @@ class quiz_attempt { 'objectid' => $this->get_attemptid(), 'relateduserid' => $this->get_userid(), 'courseid' => $this->get_courseid(), - 'context' => context_module::instance($this->get_cmid()), + 'context' => $this->get_context(), 'other' => [ 'quizid' => $this->get_quizid() ] @@ -2218,7 +2227,7 @@ class quiz_attempt { 'objectid' => $this->get_attemptid(), 'relateduserid' => $this->get_userid(), 'courseid' => $this->get_courseid(), - 'context' => context_module::instance($this->get_cmid()), + 'context' => $this->get_context(), 'other' => [ 'quizid' => $this->get_quizid() ] @@ -2236,7 +2245,7 @@ class quiz_attempt { 'objectid' => $this->get_attemptid(), 'relateduserid' => $this->get_userid(), 'courseid' => $this->get_courseid(), - 'context' => context_module::instance($this->get_cmid()), + 'context' => $this->get_context(), 'other' => [ 'quizid' => $this->get_quizid() ] diff --git a/mod/quiz/classes/structure.php b/mod/quiz/classes/structure.php index 49a375b7444..fd21a0665d7 100644 --- a/mod/quiz/classes/structure.php +++ b/mod/quiz/classes/structure.php @@ -16,6 +16,7 @@ namespace mod_quiz; +use context_module; use mod_quiz\question\bank\qbank_helper; use mod_quiz\question\qubaids_for_quiz; use stdClass; @@ -341,6 +342,15 @@ class structure { return $this->quizobj->get_cmid(); } + /** + * Get the quiz context. + * + * @return context_module the context of the quiz that this is the structure of. + */ + public function get_context(): context_module { + return $this->quizobj->get_context(); + } + /** * Get id of the quiz. * diff --git a/mod/quiz/comment.php b/mod/quiz/comment.php index fbb9255d1a2..0c3f2f27010 100644 --- a/mod/quiz/comment.php +++ b/mod/quiz/comment.php @@ -90,7 +90,7 @@ if (data_submitted() && confirm_sesskey()) { $params = [ 'objectid' => $attemptobj->get_question_attempt($slot)->get_question_id(), 'courseid' => $attemptobj->get_courseid(), - 'context' => context_module::instance($attemptobj->get_cmid()), + 'context' => $attemptobj->get_quizobj()->get_context(), 'other' => [ 'quizid' => $attemptobj->get_quizid(), 'attemptid' => $attemptobj->get_attemptid(), diff --git a/mod/quiz/edit_rest.php b/mod/quiz/edit_rest.php index 6be9565cade..e9f7009fd8f 100644 --- a/mod/quiz/edit_rest.php +++ b/mod/quiz/edit_rest.php @@ -62,7 +62,7 @@ require_login($course, false, $cm); $structure = $quizobj->get_structure(); $gradecalculator = $quizobj->get_grade_calculator(); -$modcontext = context_module::instance($cm->id); +$modcontext = $quizobj->get_context(); echo $OUTPUT->header(); // Send headers. diff --git a/mod/quiz/editrandom.php b/mod/quiz/editrandom.php index bc9f24a23ed..155edfb9de0 100644 --- a/mod/quiz/editrandom.php +++ b/mod/quiz/editrandom.php @@ -64,7 +64,7 @@ if (!$category = $DB->get_record('question_categories', ['id' => $filterconditio $catcontext = context::instance_by_id($category->contextid); require_capability('moodle/question:useall', $catcontext); -$thiscontext = context_module::instance($cm->id); +$thiscontext = $quizobj->get_context(); $contexts = new core_question\local\bank\question_edit_contexts($thiscontext); // Create the editing form. diff --git a/mod/quiz/grade.php b/mod/quiz/grade.php index 703e3ac2547..77b68585977 100644 --- a/mod/quiz/grade.php +++ b/mod/quiz/grade.php @@ -41,7 +41,7 @@ $cm = $quizobj->get_cm(); $course = $quizobj->get_course(); require_login($course, false, $cm); -$reportlist = quiz_report_list(context_module::instance($cm->id)); +$reportlist = quiz_report_list($quizobj->get_context()); if (empty($reportlist) || $userid == $USER->id) { // If the user cannot see reports, or can see reports but is looking // at their own grades, redirect them to the view.php page.