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 tool_admin_presets\local\action; use context_system; use moodle_url; use core_adminpresets\manager; use tool_admin_presets\output\presets_list; use tool_admin_presets\output\export_import; /** * Admin tool presets main controller class. * * @package tool_admin_presets * @copyright 2021 Pimenko <support@pimenko.com><pimenko.com> * @author Jordan Kesraoui | Sylvain Revenu | Pimenko based on David MonllaĆ³ <david.monllao@urv.cat> code * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ class base { /** @var array Array map for the events. **/ protected static $eventsactionsmap = [ 'base' => 'presets_listed', 'delete' => 'preset_deleted', 'export' => 'preset_exported', 'import' => 'preset_imported', 'preview' => 'preset_previewed', 'load' => 'preset_loaded', 'rollback' => 'preset_reverted', 'download_xml' => 'preset_downloaded' ]; /** @var string The main action (delete, export, import, load...). **/ protected $action; /** @var string The mode (show, execute...). **/ protected $mode; /** @var int Admin preset identifier. **/ protected $id; /** @var int The output content to display in the page. **/ protected $outputs;< /** @var int The moodle form to display in the page. **/> /** @var \moodleform The moodle form to display in the page. **/protected $moodleform; /** @var manager The manager helper class instance. **/ protected $manager; /** * Loads common class attributes. */ public function __construct() { $this->manager = new manager(); $this->action = optional_param('action', 'base', PARAM_ALPHA); $this->mode = optional_param('mode', 'show', PARAM_ALPHAEXT); $this->id = optional_param('id', false, PARAM_INT); } /** * Method to list the presets available on the system * * It allows users to access the different preset * actions (preview, load, download, delete and rollback) */ public function show(): void { global $DB, $OUTPUT; $options = new export_import(); $this->outputs = $OUTPUT->render($options); $presets = $DB->get_records('adminpresets'); $list = new presets_list($presets, true); $this->outputs .= $OUTPUT->render($list); } /** * Main display method * * Prints the block header and the common block outputs, the * selected action outputs, his form and the footer * * $outputs value depends on $mode and $action selected */ public function display(): void { global $OUTPUT; $this->display_header(); // Other outputs. if (!empty($this->outputs)) { echo $this->outputs; } // Form. if ($this->moodleform) { $this->moodleform->display(); } // Footer. echo $OUTPUT->footer(); } /** * Displays the header */ protected function display_header(): void { global $PAGE, $OUTPUT, $SITE; // Strings. $titlestr = get_string('pluginname', 'tool_admin_presets'); // Header. $PAGE->set_title($titlestr); $PAGE->set_heading($SITE->fullname); $title = $this->get_title(); $text = $this->get_explanatory_description(); // Only add it to the navbar if it's different to the plugin name (to avoid duplicates in the navbar). if ($title != get_string('pluginname', 'tool_admin_presets')) { $PAGE->navbar->add($title); } if ($node = $PAGE->settingsnav->find('tool_admin_presets', \navigation_node::TYPE_SETTING)) { $node->make_active(); } echo $OUTPUT->header(); echo $OUTPUT->heading($title); if ($text) { echo $OUTPUT->box($text); } } /** * Get page title for this action. * * @return string The page title to display into the page. */ protected function get_title(): string { if ($this->action == 'base') { return get_string('pluginname', 'tool_admin_presets'); } return get_string($this->action . $this->mode, 'tool_admin_presets'); } /** * Get explanatory description to be displayed below the heading. It's optional and might change depending on the * action and the mode. * * @return string|null The explanatory description for the current action and mode. */ protected function get_explanatory_description(): ?string { $text = null; if ($this->action == 'base') { $text = get_string('basedescription', 'tool_admin_presets'); } return $text; } /** * Trigger an event based on the current action. * * @return void */ public function log(): void { // The only read action we store is list presets and preview. $islist = ($this->action == 'base' && $this->mode == 'show'); $ispreview = ($this->action == 'load' && $this->mode == 'show'); if ($this->mode != 'show' || $islist || $ispreview) { $action = $this->action; if ($ispreview) { $action = 'preview'; } if ($this->mode != 'execute' && $this->mode != 'show') { $action = $this->mode; } if (array_key_exists($action, self::$eventsactionsmap)) { $eventnamespace = '\\tool_admin_presets\\event\\' . self::$eventsactionsmap[$action]; $eventdata = [ 'context' => context_system::instance(), 'objectid' => $this->id ]; $event = $eventnamespace::create($eventdata); $event->trigger(); } } } }