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/>. 16 17/** 18 * Displays the Single view 19 * 20 * @package gradereport_singleview 21 * @copyright 2014 Moodle Pty Ltd (http://moodle.com) 22 * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later 23 */ 24 25define('NO_OUTPUT_BUFFERING', true); 26 27require_once('../../../config.php'); 28require_once($CFG->dirroot.'/lib/gradelib.php'); 29require_once($CFG->dirroot.'/grade/lib.php'); 30require_once($CFG->dirroot.'/grade/report/singleview/lib.php'); 31 32$courseid = required_param('id', PARAM_INT); 33$groupid = optional_param('group', null, PARAM_INT); 34 35// Making this work with profile reports. 36$userid = optional_param('userid', null, PARAM_INT); 37 38$defaulttype = $userid ? 'user' : 'select'; 39 40$itemid = optional_param('itemid', null, PARAM_INT); 41$itemtype = optional_param('item', $defaulttype, PARAM_TEXT); 42$page = optional_param('page', 0, PARAM_INT); 43$perpage = optional_param('perpage', 100, PARAM_INT); 44 45if (empty($itemid)) { 46 $itemid = $userid; 47 $itemtype = $defaulttype; 48} 49 50$courseparams = array('id' => $courseid); 51$pageparams = array( 52 'id' => $courseid, 53 'group' => $groupid, 54 'userid' => $userid, 55 'itemid' => $itemid, 56 'item' => $itemtype, 57 'page' => $page, 58 'perpage' => $perpage, 59 ); 60$PAGE->set_url(new moodle_url('/grade/report/singleview/index.php', $pageparams)); 61$PAGE->set_pagelayout('incourse'); 62 63if (!$course = $DB->get_record('course', $courseparams)) { 64 print_error('invalidcourseid'); 65} 66 67require_login($course); 68 69if (!in_array($itemtype, gradereport_singleview::valid_screens())) { 70 print_error('notvalid', 'gradereport_singleview', '', $itemtype); 71} 72 73$context = context_course::instance($course->id); 74 75// This is the normal requirements. 76require_capability('gradereport/singleview:view', $context); 77require_capability('moodle/grade:viewall', $context); 78require_capability('moodle/grade:edit', $context); 79 80$gpr = new grade_plugin_return(array( 81 'type' => 'report', 82 'plugin' => 'singleview', 83 'courseid' => $courseid 84)); 85 86// Last selected report session tracking. 87if (!isset($USER->grade_last_report)) { 88 $USER->grade_last_report = array(); 89} 90$USER->grade_last_report[$course->id] = 'singleview'; 91 92// First make sure we have proper final grades. 93grade_regrade_final_grades_if_required($course); 94 95$report = new gradereport_singleview($courseid, $gpr, $context, $itemtype, $itemid); 96 97$reportname = $report->screen->heading(); 98 99$pluginname = get_string('pluginname', 'gradereport_singleview'); 100 101$pageparams = array( 102 'id' => $courseid, 103 'itemid' => $itemid, 104 'item' => $itemtype, 105 'userid' => $userid, 106 'group' => $groupid, 107 'page' => $page, 108 'perpage' => $perpage 109); 110 111$currentpage = new moodle_url('/grade/report/singleview/index.php', $pageparams); 112 113if ($data = data_submitted()) { 114 $PAGE->set_pagelayout('redirect'); 115 $PAGE->set_title(get_string('savegrades', 'gradereport_singleview')); 116 echo $OUTPUT->header(); 117 118 require_sesskey(); // Must have a sesskey for all actions. 119 $result = $report->process_data($data); 120 121 if (!empty($result->warnings)) { 122 foreach ($result->warnings as $warning) { 123 echo $OUTPUT->notification($warning); 124 } 125 } 126 echo $OUTPUT->notification(get_string('savegradessuccess', 'gradereport_singleview', count ((array)$result->changecount))); 127 echo $OUTPUT->continue_button($currentpage); 128 echo $OUTPUT->footer(); 129 die(); 130} 131 132$PAGE->set_pagelayout('report'); 133if ($itemtype == 'user') { 134 print_grade_page_head($course->id, 'report', 'singleview', $reportname, false, false, true, null, null, $report->screen->item); 135} else { 136 print_grade_page_head($course->id, 'report', 'singleview', $reportname); 137} 138 139$graderrightnav = $graderleftnav = null; 140 141$options = $report->screen->options(); 142 143if (!empty($options)) { 144 145 $optionkeys = array_keys($options); 146 $optionitemid = array_shift($optionkeys); 147 148 $relreport = new gradereport_singleview( 149 $courseid, $gpr, $context, 150 $report->screen->item_type(), $optionitemid 151 ); 152 $reloptions = $relreport->screen->options(); 153 $reloptionssorting = array_keys($relreport->screen->options()); 154 155 $i = array_search($itemid, $reloptionssorting); 156 $navparams = array('item' => $itemtype, 'id' => $courseid, 'group' => $groupid); 157 if ($i > 0) { 158 $navparams['itemid'] = $reloptionssorting[$i - 1]; 159 $link = new moodle_url('/grade/report/singleview/index.php', $navparams); 160 $navprev = html_writer::link($link, $OUTPUT->larrow() . ' ' . $reloptions[$reloptionssorting[$i - 1]]); 161 $graderleftnav = html_writer::tag('div', $navprev, array('class' => 'itemnav previtem')); 162 } 163 if ($i < count($reloptionssorting) - 1) { 164 $navparams['itemid'] = $reloptionssorting[$i + 1]; 165 $link = new moodle_url('/grade/report/singleview/index.php', $navparams); 166 $navnext = html_writer::link($link, $reloptions[$reloptionssorting[$i + 1]] . ' ' . $OUTPUT->rarrow()); 167 $graderrightnav = html_writer::tag('div', $navnext, array('class' => 'itemnav nextitem')); 168 } 169} 170 171if (!is_null($graderleftnav)) { 172 echo $graderleftnav; 173} 174if (!is_null($graderrightnav)) { 175 echo $graderrightnav; 176} 177 178if ($report->screen->supports_paging()) { 179 echo $report->screen->pager(); 180} 181 182if ($report->screen->display_group_selector()) { 183 echo $report->group_selector; 184} 185 186echo $report->output(); 187 188if ($report->screen->supports_paging()) { 189 echo $report->screen->perpage_select(); 190 echo $report->screen->pager(); 191} 192 193if (!is_null($graderleftnav)) { 194 echo $graderleftnav; 195} 196if (!is_null($graderrightnav)) { 197 echo $graderrightnav; 198} 199 200$event = \gradereport_singleview\event\grade_report_viewed::create( 201 array( 202 'context' => $context, 203 'courseid' => $courseid, 204 'relateduserid' => $USER->id, 205 ) 206); 207$event->trigger(); 208 209echo $OUTPUT->footer(); 210