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 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(); } } } }