Search moodle.org's
Developer Documentation

See Release Notes

  • Bug fixes for general core bugs in 4.0.x will end 8 May 2023 (12 months).
  • Bug fixes for security issues in 4.0.x will end 13 November 2023 (18 months).
  • PHP version: minimum PHP 7.3.0 Note: the minimum PHP version has increased since Moodle 3.10. PHP 7.4.x is also supported.
<?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 core_grades\output;

use moodle_url;
> use core\output\select_menu;
/** * Renderable class for the general action bar in the gradebook pages. * * This class is responsible for rendering the general navigation select menu in the gradebook pages. * * @package core_grades * @copyright 2021 Mihail Geshoski <mihail@moodle.com> * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ class general_action_bar extends action_bar { /** @var moodle_url $activeurl The URL that should be set as active in the URL selector element. */ protected $activeurl; /** * The type of the current gradebook page (report, settings, import, export, scales, outcomes, letters). * * @var string $activetype */ protected $activetype; /** @var string $activeplugin The plugin of the current gradebook page (grader, fullview, ...). */ protected $activeplugin; /** * The class constructor. * * @param \context $context The context object. * @param moodle_url $activeurl The URL that should be set as active in the URL selector element. * @param string $activetype The type of the current gradebook page (report, settings, import, export, scales, * outcomes, letters). * @param string $activeplugin The plugin of the current gradebook page (grader, fullview, ...). */ public function __construct(\context $context, moodle_url $activeurl, string $activetype, string $activeplugin) { parent::__construct($context); $this->activeurl = $activeurl; $this->activetype = $activetype; $this->activeplugin = $activeplugin; } /** * Export the data for the mustache template. * * @param \renderer_base $output renderer to be used to render the action bar elements. * @return array */ public function export_for_template(\renderer_base $output): array {
< $urlselect = $this->get_action_selector();
> $selectmenu = $this->get_action_selector();
< if (is_null($urlselect)) {
> if (is_null($selectmenu)) {
return []; } return [
< 'generalnavselector' => $urlselect->export_for_template($output),
> 'generalnavselector' => $selectmenu->export_for_template($output),
]; } /** * Returns the template for the action bar. * * @return string */ public function get_template(): string { return 'core_grades/general_action_bar'; } /** * Returns the URL selector object. *
< * @return \url_select|null The URL select object.
> * @return \select_menu|null The URL select object.
*/
< private function get_action_selector(): ?\url_select {
> private function get_action_selector(): ?select_menu {
if ($this->context->contextlevel !== CONTEXT_COURSE) { return null; } $courseid = $this->context->instanceid; $plugininfo = grade_get_plugin_info($courseid, $this->activetype, $this->activeplugin); $menu = []; $viewgroup = []; $setupgroup = []; $moregroup = []; foreach ($plugininfo as $plugintype => $plugins) { // Skip if the plugintype value is 'strings'. This particular item only returns an array of strings // which we do not need. if ($plugintype == 'strings') { continue; } // If $plugins is actually the definition of a child-less parent link. if (!empty($plugins->id)) { $string = $plugins->string; if (!empty($plugininfo[$this->activetype]->parent)) { $string = $plugininfo[$this->activetype]->parent->string; } $menu[$plugins->link->out(false)] = $string; continue; } foreach ($plugins as $key => $plugin) { // Depending on the plugin type, include the plugin to the appropriate item group for the URL selector // element. switch ($plugintype) { case 'report': $viewgroup[$plugin->link->out(false)] = $plugin->string; break; case 'settings': $setupgroup[$plugin->link->out(false)] = $plugin->string; break; case 'scale': // We only need the link to the 'view scales' page, otherwise skip and continue to the next // plugin. if ($key !== 'view') { continue 2; } $moregroup[$plugin->link->out(false)] = get_string('scales'); break; case 'outcome': // We only need the link to the 'outcomes used in course' page, otherwise skip and continue to // the next plugin. if ($key !== 'course') { continue 2; } $moregroup[$plugin->link->out(false)] = get_string('outcomes', 'grades'); break; case 'letter': // We only need the link to the 'view grade letters' page, otherwise skip and continue to the // next plugin. if ($key !== 'view') { continue 2; } $moregroup[$plugin->link->out(false)] = get_string('gradeletters', 'grades'); break; case 'import': $link = new moodle_url('/grade/import/index.php', ['id' => $courseid]); // If the link to the grade import options is already added to the group, skip and continue to // the next plugin. if (array_key_exists($link->out(false), $moregroup)) { continue 2; } $moregroup[$link->out(false)] = get_string('import', 'grades'); break; case 'export': $link = new moodle_url('/grade/export/index.php', ['id' => $courseid]); // If the link to the grade export options is already added to the group, skip and continue to // the next plugin. if (array_key_exists($link->out(false), $moregroup)) { continue 2; } $moregroup[$link->out(false)] = get_string('export', 'grades'); break; } } } if (!empty($viewgroup)) { $menu[][get_string('view')] = $viewgroup; } if (!empty($setupgroup)) { $menu[][get_string('setup', 'grades')] = $setupgroup; } if (!empty($moregroup)) { $menu[][get_string('moremenu')] = $moregroup; }
< return new \url_select($menu, $this->activeurl->out(false), null, 'gradesactionselect');
> $selectmenu = new select_menu('gradesactionselect', $menu, $this->activeurl->out(false)); > $selectmenu->set_label(get_string('gradebooknavigationmenu', 'grades'), ['class' => 'sr-only']); > > return $selectmenu;
} }