NOBUG: Fixed file access permissions
[moodle.git] / mod / quiz / report / grading / renderer.php
1 <?php
2 // This file is part of Moodle - http://moodle.org/
3 //
4 // Moodle is free software: you can redistribute it and/or modify
5 // it under the terms of the GNU General Public License as published by
6 // the Free Software Foundation, either version 3 of the License, or
7 // (at your option) any later version.
8 //
9 // Moodle is distributed in the hope that it will be useful,
10 // but WITHOUT ANY WARRANTY; without even the implied warranty of
11 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12 // GNU General Public License for more details.
13 //
14 // You should have received a copy of the GNU General Public License
15 // along with Moodle.  If not, see <http://www.gnu.org/licenses/>.
17 /**
18  * Defines the renderer for the quiz_grading module.
19  *
20  * @package   quiz_grading
21  * @copyright 2018 Huong Nguyen <huongnv13@gmail.com>
22  * @license   http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
23  */
25 defined('MOODLE_INTERNAL') || die();
27 /**
28  * The renderer for the quiz_grading module.
29  *
30  * @copyright  2018 Huong Nguyen <huongnv13@gmail.com>
31  * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
32  */
33 class quiz_grading_renderer extends plugin_renderer_base {
35     /**
36      * Render no question notification.
37      *
38      * @param object $quiz The quiz settings.
39      * @param object $cm The course-module for this quiz.
40      * @param object $context The quiz context.
41      * @return string The HTML for the no questions message.
42      */
43     public function render_quiz_no_question_notification($quiz, $cm, $context) {
44         return quiz_no_questions_message($quiz, $cm, $context);
45     }
47     /**
48      * Render no question need to grade notification.
49      *
50      * @throws coding_exception
51      */
52     public function render_quiz_no_grade_question_notification() {
53         return $this->notification(get_string('nothingfound', 'quiz_grading'));
54     }
56     /**
57      * Render index display.
58      *
59      * @param string $linktext The text of the link.
60      * @param moodle_url $listquestionurl Url of the page that list all questions.
61      * @return string The HTML for the display heading.
62      * @throws coding_exception
63      */
64     public function render_display_index_heading($linktext, $listquestionurl) {
65         $output = '';
67         $output .= $this->heading(get_string('questionsthatneedgrading', 'quiz_grading'), 3);
68         $output .= html_writer::tag('p', html_writer::link($listquestionurl, $linktext), ['class' => 'toggleincludeauto']);
70         return $output;
71     }
73     /**
74      * Render questions list table.
75      *
76      * @param bool $includeauto True to show automatically graded questions.
77      * @param array $data List of questions.
78      * @param array $header List of table headers.
79      * @return string The HTML for the question table.
80      * @throws coding_exception
81      */
82     public function render_questions_table($includeauto, $data, $header) {
83         if (empty($data)) {
84             return $this->render_quiz_no_grade_question_notification();
85         }
86         $output = '';
88         $table = new html_table();
89         $table->class = 'generaltable';
90         $table->id = 'questionstograde';
91         $table->head = $header;
92         $table->data = $data;
94         $output .= html_writer::table($table);
96         return $output;
97     }
99     /**
100      * Render grade link for question.
101      *
102      * @param object $counts
103      * @param string $type Type of grade.
104      * @param string $gradestring Lang string.
105      * @param moodle_url $gradequestionurl Url to grade question.
106      * @return string The HTML for the question grade link.
107      * @throws coding_exception
108      */
109     public function render_grade_link($counts, $type, $gradestring, $gradequestionurl) {
110         $output = '';
111         if ($counts->$type > 0) {
112             $output .= ' ' . html_writer::link(
113                             $gradequestionurl,
114                             get_string($gradestring, 'quiz_grading'),
115                             ['class' => 'gradetheselink']);
116         }
117         return $output;
118     }
120     /**
121      * Render grading page.
122      *
123      * @param object $questioninfo Information of a question.
124      * @param moodle_url $listquestionsurl Url of the page that list all questions.
125      * @param quiz_grading_settings_form $filterform Question filter form.
126      * @param object $paginginfo Pagination information.
127      * @param object $pagingbar Pagination bar information.
128      * @param moodle_url $formaction Form submit url.
129      * @param array $hiddeninputs List of hidden input fields.
130      * @param string $gradequestioncontent HTML string of question content.
131      * @return string The HTML for the grading interface.
132      * @throws coding_exception
133      * @throws moodle_exception
134      */
135     public function render_grading_interface($questioninfo, $listquestionsurl, $filterform, $paginginfo, $pagingbar, $formaction,
136             $hiddeninputs, $gradequestioncontent) {
137         $output = '';
139         $output .= question_engine::initialise_js();
141         $output .= $this->heading(get_string('gradingquestionx', 'quiz_grading', $questioninfo), 3);
143         $output .= html_writer::tag('p', html_writer::link($listquestionsurl,
144                 get_string('backtothelistofquestions', 'quiz_grading')),
145                 ['class' => 'mdl-align']);
147         $output .= $filterform->render();
149         $output .= $this->heading(get_string('gradingattemptsxtoyofz', 'quiz_grading', $paginginfo), 3);
151         if ($pagingbar->count > $pagingbar->pagesize && $pagingbar->order != 'random') {
152             $output .= $this->paging_bar($pagingbar->count, $pagingbar->page, $pagingbar->pagesize, $pagingbar->pagingurl);
153         }
155         $output .= html_writer::start_tag('form', [
156                 'method' => 'post',
157                 'action' => $formaction,
158                 'class' => 'mform',
159                 'id' => 'manualgradingform'
160         ]);
161         $output .= html_writer::start_tag('div');
162         $output .= html_writer::input_hidden_params(new moodle_url('', $hiddeninputs));
164         $output .= $gradequestioncontent;
166         $output .= html_writer::tag('div', html_writer::empty_tag('input', [
167                 'type' => 'submit',
168                 'class' => 'btn btn-primary',
169                 'value' => get_string('saveandnext', 'quiz_grading')
170         ]), ['class' => 'mdl-align']);
171         $output .= html_writer::end_tag('div') . html_writer::end_tag('form');
173         return $output;
174     }
176     /**
177      * Render grade question content.
178      *
179      * @param question_usage_by_activity $questionusage The question usage that need to grade.
180      * @param int $slot the number used to identify this question within this usage.
181      * @param question_display_options $displayoptions the display options to use.
182      * @param int $questionnumber the number of the question to check.
183      * @param string $heading the question heading text.
184      * @return string The HTML for the question display.
185      */
186     public function render_grade_question($questionusage, $slot, $displayoptions, $questionnumber, $heading) {
187         $output = '';
189         if ($heading) {
190             $output .= $this->heading($heading, 4);
191         }
193         $output .= $questionusage->render_question($slot, $displayoptions, $questionnumber);
195         return $output;
196     }