See Release Notes
Long Term Support Release
Differences Between: [Versions 401 and 402] [Versions 401 and 403]
1 <?php 2 // This file is part of Moodle - http://moodle.org/ 3 // 4 // Moodle is free software: you can redistribute it and/or modify 5 // it under the terms of the GNU General Public License as published by 6 // the Free Software Foundation, either version 3 of the License, or 7 // (at your option) any later version. 8 // 9 // Moodle is distributed in the hope that it will be useful, 10 // but WITHOUT ANY WARRANTY; without even the implied warranty of 11 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 // GNU General Public License for more details. 13 // 14 // You should have received a copy of the GNU General Public License 15 // along with Moodle. If not, see <http://www.gnu.org/licenses/>. 16 17 namespace tool_admin_presets\local\action; 18 19 use context_system; 20 use moodle_url; 21 use core_adminpresets\manager; 22 use tool_admin_presets\output\presets_list; 23 use tool_admin_presets\output\export_import; 24 25 /** 26 * Admin tool presets main controller class. 27 * 28 * @package tool_admin_presets 29 * @copyright 2021 Pimenko <support@pimenko.com><pimenko.com> 30 * @author Jordan Kesraoui | Sylvain Revenu | Pimenko based on David MonllaĆ³ <david.monllao@urv.cat> code 31 * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later 32 */ 33 class base { 34 35 /** @var array Array map for the events. **/ 36 protected static $eventsactionsmap = [ 37 'base' => 'presets_listed', 38 'delete' => 'preset_deleted', 39 'export' => 'preset_exported', 40 'import' => 'preset_imported', 41 'preview' => 'preset_previewed', 42 'load' => 'preset_loaded', 43 'rollback' => 'preset_reverted', 44 'download_xml' => 'preset_downloaded' 45 ]; 46 47 /** @var string The main action (delete, export, import, load...). **/ 48 protected $action; 49 50 /** @var string The mode (show, execute...). **/ 51 protected $mode; 52 53 /** @var int Admin preset identifier. **/ 54 protected $id; 55 56 /** @var int The output content to display in the page. **/ 57 protected $outputs; 58 59 /** @var int The moodle form to display in the page. **/ 60 protected $moodleform; 61 62 /** @var manager The manager helper class instance. **/ 63 protected $manager; 64 65 /** 66 * Loads common class attributes. 67 */ 68 public function __construct() { 69 $this->manager = new manager(); 70 $this->action = optional_param('action', 'base', PARAM_ALPHA); 71 $this->mode = optional_param('mode', 'show', PARAM_ALPHAEXT); 72 $this->id = optional_param('id', false, PARAM_INT); 73 } 74 75 /** 76 * Method to list the presets available on the system 77 * 78 * It allows users to access the different preset 79 * actions (preview, load, download, delete and rollback) 80 */ 81 public function show(): void { 82 global $DB, $OUTPUT; 83 84 $options = new export_import(); 85 $this->outputs = $OUTPUT->render($options); 86 87 $presets = $DB->get_records('adminpresets'); 88 $list = new presets_list($presets, true); 89 $this->outputs .= $OUTPUT->render($list); 90 } 91 92 /** 93 * Main display method 94 * 95 * Prints the block header and the common block outputs, the 96 * selected action outputs, his form and the footer 97 * 98 * $outputs value depends on $mode and $action selected 99 */ 100 public function display(): void { 101 global $OUTPUT; 102 103 $this->display_header(); 104 105 // Other outputs. 106 if (!empty($this->outputs)) { 107 echo $this->outputs; 108 } 109 110 // Form. 111 if ($this->moodleform) { 112 $this->moodleform->display(); 113 } 114 115 // Footer. 116 echo $OUTPUT->footer(); 117 } 118 119 /** 120 * Displays the header 121 */ 122 protected function display_header(): void { 123 global $PAGE, $OUTPUT, $SITE; 124 125 // Strings. 126 $titlestr = get_string('pluginname', 'tool_admin_presets'); 127 128 // Header. 129 $PAGE->set_title($titlestr); 130 $PAGE->set_heading($SITE->fullname); 131 132 $title = $this->get_title(); 133 $text = $this->get_explanatory_description(); 134 135 // Only add it to the navbar if it's different to the plugin name (to avoid duplicates in the navbar). 136 if ($title != get_string('pluginname', 'tool_admin_presets')) { 137 $PAGE->navbar->add($title); 138 } 139 140 if ($node = $PAGE->settingsnav->find('tool_admin_presets', \navigation_node::TYPE_SETTING)) { 141 $node->make_active(); 142 } 143 144 echo $OUTPUT->header(); 145 echo $OUTPUT->heading($title); 146 if ($text) { 147 echo $OUTPUT->box($text); 148 } 149 } 150 151 /** 152 * Get page title for this action. 153 * 154 * @return string The page title to display into the page. 155 */ 156 protected function get_title(): string { 157 if ($this->action == 'base') { 158 return get_string('pluginname', 'tool_admin_presets'); 159 } 160 161 return get_string($this->action . $this->mode, 'tool_admin_presets'); 162 } 163 164 /** 165 * Get explanatory description to be displayed below the heading. It's optional and might change depending on the 166 * action and the mode. 167 * 168 * @return string|null The explanatory description for the current action and mode. 169 */ 170 protected function get_explanatory_description(): ?string { 171 $text = null; 172 if ($this->action == 'base') { 173 $text = get_string('basedescription', 'tool_admin_presets'); 174 } 175 176 return $text; 177 } 178 179 /** 180 * Trigger an event based on the current action. 181 * 182 * @return void 183 */ 184 public function log(): void { 185 // The only read action we store is list presets and preview. 186 $islist = ($this->action == 'base' && $this->mode == 'show'); 187 $ispreview = ($this->action == 'load' && $this->mode == 'show'); 188 if ($this->mode != 'show' || $islist || $ispreview) { 189 $action = $this->action; 190 if ($ispreview) { 191 $action = 'preview'; 192 } 193 194 if ($this->mode != 'execute' && $this->mode != 'show') { 195 $action = $this->mode; 196 } 197 198 if (array_key_exists($action, self::$eventsactionsmap)) { 199 $eventnamespace = '\\tool_admin_presets\\event\\' . self::$eventsactionsmap[$action]; 200 $eventdata = [ 201 'context' => context_system::instance(), 202 'objectid' => $this->id 203 ]; 204 $event = $eventnamespace::create($eventdata); 205 $event->trigger(); 206 } 207 } 208 } 209 }
title
Description
Body
title
Description
Body
title
Description
Body
title
Body