See Release Notes
Long Term Support Release
<?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;} }