Search moodle.org's
Developer Documentation

See Release Notes

  • Bug fixes for general core bugs in 3.11.x will end 14 Nov 2022 (12 months plus 6 months extension).
  • Bug fixes for security issues in 3.11.x will end 13 Nov 2023 (18 months plus 12 months extension).
  • PHP version: minimum PHP 7.3.0 Note: minimum PHP version has increased since Moodle 3.10. PHP 7.4.x is supported too.
<?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/>.

/**
< * Base lib class for singleview functionality.
> * Singleview report generic functions
* * @package gradereport_singleview
< * @copyright 2014 Moodle Pty Ltd (http://moodle.com)
> * @copyright 2023 Ilya Tregubov
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */
< defined('MOODLE_INTERNAL') || die; < < require_once($CFG->dirroot . '/grade/report/lib.php'); < < /** < * This class is the main class that must be implemented by a grade report plugin. < * < * @package gradereport_singleview < * @copyright 2014 Moodle Pty Ltd (http://moodle.com) < * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later < */ < class gradereport_singleview extends grade_report { <
/**
< * Return the list of valid screens, used to validate the input.
> * Returns link to singleview report for the current element
*
< * @return array List of screens. < */ < public static function valid_screens() { < // This is a list of all the known classes representing a screen in this plugin. < return array('user', 'select', 'grade');
> * @param context_course $context Course context > * @param int $courseid Course ID > * @param array $element An array representing an element in the grade_tree > * @param grade_plugin_return $gpr A grade_plugin_return object > * @param string $mode Mode - gradeitem or user > * @param ?stdClass $templatecontext Template context > * @return stdClass|null > */ > function gradereport_singleview_get_report_link(context_course $context, int $courseid, > array $element, grade_plugin_return $gpr, string $mode, ?stdClass $templatecontext): ?stdClass { > > $reportstring = get_string('singleviewreport_' . $mode, 'gradereport_singleview'); > if (!isset($templatecontext)) { > $templatecontext = new stdClass(); > } > > if ($mode == 'gradeitem') { > // View all grades items. > // FIXME: MDL-52678 This is extremely hacky we should have an API for inserting grade column links. > if (get_capability_info('gradereport/singleview:view')) { > if (has_all_capabilities(['gradereport/singleview:view', 'moodle/grade:viewall', > 'moodle/grade:edit'], $context)) { > > $url = new moodle_url('/grade/report/singleview/index.php', [ > 'id' => $courseid, > 'item' => 'grade', > 'itemid' => $element['object']->id > ]); > $gpr->add_url_params($url); > $templatecontext->reporturl0 = html_writer::link($url, $reportstring, > ['class' => 'dropdown-item', 'aria-label' => $reportstring, 'role' => 'menuitem']); > return $templatecontext; > } > } > } else if ($mode == 'user') { > // FIXME: MDL-52678 This get_capability_info is hacky and we should have an API for inserting grade row links instead. > $canseesingleview = false; > if (get_capability_info('gradereport/singleview:view')) { > $canseesingleview = has_all_capabilities(['gradereport/singleview:view', > 'moodle/grade:viewall', 'moodle/grade:edit'], $context); > } > > if ($canseesingleview) { > $url = new moodle_url('/grade/report/singleview/index.php', > ['id' => $courseid, 'itemid' => $element['userid'], 'item' => 'user']); > $gpr->add_url_params($url); > $templatecontext->reporturl0 = html_writer::link($url, $reportstring, > ['class' => 'dropdown-item', 'aria-label' => $reportstring, 'role' => 'menuitem']); > return $templatecontext;
}
< < /** < * Process data from a form submission. Delegated to the current screen. < * < * @param array $data The data from the form < * @return array List of warnings < */ < public function process_data($data) { < if (has_capability('moodle/grade:edit', $this->context)) { < return $this->screen->process($data);
}
> return null;
}
< < /** < * Unused - abstract function declared in the parent class. < * < * @param string $target < * @param string $action < */ < public function process_action($target, $action) { < } < < /** < * Constructor for this report. Creates the appropriate screen class based on itemtype. < * < * @param int $courseid The course id. < * @param object $gpr grade plugin return tracking object < * @param context_course $context < * @param string $itemtype Should be user, select or grade < * @param int $itemid The id of the user or grade item < * @param string $unused Used to be group id but that was removed and this is now unused. < */ < public function __construct($courseid, $gpr, $context, $itemtype, $itemid, $unused = null) { < parent::__construct($courseid, $gpr, $context); < < $base = '/grade/report/singleview/index.php'; < < $idparams = array('id' => $courseid); < < $this->baseurl = new moodle_url($base, $idparams); < < $this->pbarurl = new moodle_url($base, $idparams + array( < 'item' => $itemtype, < 'itemid' => $itemid < )); < < // The setup_group method is used to validate group mode and permissions and define the currentgroup value. < $this->setup_groups(); < < $screenclass = "\\gradereport_singleview\\local\\screen\\${itemtype}"; < < $this->screen = new $screenclass($courseid, $itemid, $this->currentgroup); < < // Load custom or predifined js. < $this->screen->js(); < } < < /** < * Build the html for the screen. < * @return string HTML to display < */ < public function output() { < global $OUTPUT; < return $OUTPUT->container($this->screen->html(), 'reporttable'); < } < } <