AutorÃa | Ultima modificación | Ver Log |
<?php// This file is part of Moodle - http://moodle.org///// Moodle is free software: you can redistribute it and/or modify// it under the terms of the GNU General Public License as published by// the Free Software Foundation, either version 3 of the License, or// (at your option) any later version.//// Moodle is distributed in the hope that it will be useful,// but WITHOUT ANY WARRANTY; without even the implied warranty of// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the// GNU General Public License for more details.//// You should have received a copy of the GNU General Public License// along with Moodle. If not, see <http://www.gnu.org/licenses/>.namespace mod_quiz\output;use mod_quiz\structure;use renderable;use renderer_base;use templatable;/*** Represents the page where teachers can set up additional grade items.** @package mod_quiz* @category output* @copyright 2023 The Open University* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later*/class edit_grading_page implements renderable, templatable {/*** Constructor.** @param structure $structure*/public function __construct(/** @var structure structure of the quiz for which to display the grade edit page. */protected readonly structure $structure,) {}public function export_for_template(renderer_base $output) {global $PAGE;/** @var edit_renderer $editrenderer */$editrenderer = $PAGE->get_renderer('mod_quiz', 'edit');// Get the list of grade items, but to be the choices for a slot, and the list to be edited.$gradeitemchoices = [0 => ['id' => 0,'choice' => get_string('gradeitemnoneselected', 'quiz'),'isselected' => false,],];$selectdgradeitemchoices = [];$gradeitems = [];foreach ($this->structure->get_grade_items() as $gradeitem) {$gradeitem = clone($gradeitem);unset($gradeitem->quizid);$gradeitem->displayname = format_string($gradeitem->name);$gradeitem->isused = $this->structure->is_grade_item_used($gradeitem->id);$gradeitem->summarks = $gradeitem->isused ?$this->structure->formatted_grade_item_sum_marks($gradeitem->id) :'-';$gradeitems[] = $gradeitem;$gradeitemchoices[$gradeitem->id] = (object) ['id' => $gradeitem->id,'choice' => $gradeitem->displayname,'isselected' => false,];$selectdgradeitemchoices[$gradeitem->id] = clone($gradeitemchoices[$gradeitem->id]);$selectdgradeitemchoices[$gradeitem->id]->isselected = true;}// Get the list of quiz sections.$sections = [];foreach ($this->structure->get_sections() as $section) {$sections[$section->id] = (object) ['displayname' => $section->heading ? format_string($section->heading) : get_string('sectionnoname', 'quiz'),'slots' => [],];}// Add the relevant slots ot each section.foreach ($this->structure->get_slots() as $slot) {if (!$this->structure->is_real_question($slot->slot)) {continue;}// Mark the right choice as selected.$choices = $gradeitemchoices;if ($slot->quizgradeitemid) {$choices[$slot->quizgradeitemid] = $selectdgradeitemchoices[$slot->quizgradeitemid];}$sections[$slot->section->id]->slots[] = (object) ['id' => $slot->id,'displaynumber' => $this->structure->get_displayed_number_for_slot($slot->slot),'displayname' => $editrenderer->get_question_name_for_slot($this->structure, $slot->slot, $PAGE->url),'maxmark' => $this->structure->formatted_question_grade($slot->slot),'choices' => array_values($choices),];}return ['quizid' => $this->structure->get_quizid(),'hasgradeitems' => !empty($gradeitems),'gradeitems' => $gradeitems,'hasslots' => $this->structure->has_questions(),'sections' => array_values($sections),'hasmultiplesections' => count($sections) > 1,'nogradeitems' => ['message' => get_string('gradeitemsnoneyet', 'quiz')],'noslots' => ['message' => get_string('gradeitemnoslots', 'quiz')],];}}