Differences Between: [Versions 400 and 403] [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 core_adminpresets; 18 19 /** 20 * Admin presets helper class. 21 * 22 * @package core_adminpresets 23 * @copyright 2021 Sara Arjona (sara@moodle.com) 24 * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later 25 */ 26 class helper { 27 28 /** 29 * Create an empty preset. 30 * 31 * @param array $data Preset data. Supported values: 32 * - name. To define the preset name. 33 * - comments. To change the comments field. 34 * - author. To update the author field. 35 * - iscore. Whether the preset is a core preset or not. Valid values on \core_adminpresets\manager class. 36 * @return int The identifier of the preset created. 37 */ 38 public static function create_preset(array $data): int { 39 global $CFG, $USER, $DB; 40 41 $name = array_key_exists('name', $data) ? $data['name'] : ''; 42 $comments = array_key_exists('comments', $data) ? $data['comments'] : ''; 43 $author = array_key_exists('author', $data) ? $data['author'] : fullname($USER); 44 $iscore = array_key_exists('iscore', $data) ? $data['iscore'] : manager::NONCORE_PRESET; 45 46 // Validate iscore value. 47 $allowed = [manager::NONCORE_PRESET, manager::STARTER_PRESET, manager::FULL_PRESET]; 48 if (!in_array($iscore, $allowed)) { 49 $iscore = manager::NONCORE_PRESET; 50 } 51 52 $preset = [ 53 'userid' => $USER->id, 54 'name' => $name, 55 'comments' => $comments, 56 'site' => $CFG->wwwroot, 57 'author' => $author, 58 'moodleversion' => $CFG->version, 59 'moodlerelease' => $CFG->release, 60 'iscore' => $iscore, 61 'timecreated' => time(), 62 'timeimported' => 0, 63 ]; 64 65 $presetid = $DB->insert_record('adminpresets', $preset); 66 return $presetid; 67 } 68 69 /** 70 * Helper method to add a setting item to a preset. 71 * 72 * @param int $presetid Preset identifier where the item will belong. 73 * @param string $name Item name. 74 * @param string $value Item value. 75 * @param string|null $plugin Item plugin. 76 * @param string|null $advname If the item is an advanced setting, the name of the advanced setting should be specified here. 77 * @param string|null $advvalue If the item is an advanced setting, the value of the advanced setting should be specified here. 78 * @return int The item identificator. 79 */ 80 public static function add_item(int $presetid, string $name, string $value, ?string $plugin = 'none', 81 ?string $advname = null, ?string $advvalue = null): int { 82 global $DB; 83 84 $presetitem = [ 85 'adminpresetid' => $presetid, 86 'plugin' => $plugin, 87 'name' => $name, 88 'value' => $value, 89 ]; 90 $itemid = $DB->insert_record('adminpresets_it', $presetitem); 91 92 if (!empty($advname)) { 93 $presetadv = [ 94 'itemid' => $itemid, 95 'name' => $advname, 96 'value' => $advvalue, 97 ]; 98 $DB->insert_record('adminpresets_it_a', $presetadv); 99 } 100 101 return $itemid; 102 } 103 104 /** 105 * Helper method to add a plugin to a preset. 106 * 107 * @param int $presetid Preset identifier where the item will belong. 108 * @param string $plugin Plugin type. 109 * @param string $name Plugin name. 110 * @param int $enabled Whether the plugin will be enabled or not. 111 * @return int The plugin identificator. 112 */ 113 public static function add_plugin(int $presetid, string $plugin, string $name, int $enabled): int { 114 global $DB; 115 116 $pluginentry = [ 117 'adminpresetid' => $presetid, 118 'plugin' => $plugin, 119 'name' => $name, 120 'enabled' => $enabled, 121 ]; 122 $pluginid = $DB->insert_record('adminpresets_plug', $pluginentry); 123 124 return $pluginid; 125 } 126 127 /** 128 * Apply the given preset. If it's a filename, the preset will be imported and then applied. 129 * 130 * @param string $presetnameorfile The preset name to be applied or a valid preset file to be imported and applied. 131 * @return int|null The preset identifier that has been applied or null if the given value was not valid. 132 */ 133 public static function change_default_preset(string $presetnameorfile): ?int { 134 global $DB; 135 136 $presetid = null; 137 138 // Check if the given variable points to a valid preset file to be imported and applied. 139 if (is_readable($presetnameorfile)) { 140 $xmlcontent = file_get_contents($presetnameorfile); 141 $manager = new manager(); 142 list($xmlnotused, $preset) = $manager->import_preset($xmlcontent); 143 if (!is_null($preset)) { 144 list($applied) = $manager->apply_preset($preset->id); 145 if (!empty($applied)) { 146 $presetid = $preset->id; 147 } 148 } 149 } else { 150 // Check if the given preset exists; if that's the case, it will be applied. 151 $stringmanager = get_string_manager(); 152 if ($stringmanager->string_exists($presetnameorfile . 'preset', 'core_adminpresets')) { 153 $params = ['name' => get_string($presetnameorfile . 'preset', 'core_adminpresets')]; 154 } else { 155 $params = ['name' => $presetnameorfile]; 156 } 157 if ($preset = $DB->get_record('adminpresets', $params)) { 158 $manager = new manager(); 159 list($applied) = $manager->apply_preset($preset->id); 160 if (!empty($applied)) { 161 $presetid = $preset->id; 162 } 163 } 164 } 165 166 return $presetid; 167 } 168 169 /** 170 * Helper method to create default site admin presets and initialize them. 171 */ 172 public static function create_default_presets(): void { 173 // Create the "Starter" site admin preset. 174 $data = [ 175 'name' => get_string('starterpreset', 'core_adminpresets'), 176 'comments' => get_string('starterpresetdescription', 'core_adminpresets'), 177 'iscore' => manager::STARTER_PRESET, 178 ]; 179 $presetid = static::create_preset($data); 180 181 // Add settings to the "Starter" site admin preset. 182 static::add_item($presetid, 'usecomments', '0'); 183 static::add_item($presetid, 'usetags', '0'); 184 static::add_item($presetid, 'enablenotes', '0'); 185 static::add_item($presetid, 'enableblogs', '0'); 186 static::add_item($presetid, 'enablebadges', '0'); 187 static::add_item($presetid, 'enableanalytics', '0'); 188 static::add_item($presetid, 'enabled', '0', 'core_competency'); 189 static::add_item($presetid, 'pushcourseratingstouserplans', '0', 'core_competency'); 190 static::add_item($presetid, 'showdataretentionsummary', '0', 'tool_dataprivacy'); 191 static::add_item($presetid, 'forum_maxattachments', '3'); 192 static::add_item($presetid, 'guestloginbutton', '0'); 193 // Set Activity chooser tabs to "Starred, Recommended, All". 194 static::add_item($presetid, 'activitychoosertabmode', '4'); 195 196 // Modules: Hide chat, database, external tool (lti), IMS content package (imscp), lesson, SCORM, survey, wiki, workshop. 197 static::add_plugin($presetid, 'mod', 'chat', false); 198 static::add_plugin($presetid, 'mod', 'data', false); 199 static::add_plugin($presetid, 'mod', 'lti', false); 200 static::add_plugin($presetid, 'mod', 'imscp', false); 201 static::add_plugin($presetid, 'mod', 'lesson', false); 202 static::add_plugin($presetid, 'mod', 'scorm', false); 203 static::add_plugin($presetid, 'mod', 'survey', false); 204 static::add_plugin($presetid, 'mod', 'wiki', false); 205 static::add_plugin($presetid, 'mod', 'workshop', false); 206 207 // Availability restrictions: Hide Grouping, User profile. 208 static::add_plugin($presetid, 'availability', 'grouping', false); 209 static::add_plugin($presetid, 'availability', 'profile', false); 210 211 // Blocks: Hide Activities, Blog menu, Blog tags, Comments, Course completion status, Courses, Flickr, 212 // Global search, Latest badges, Learning plans, Logged in user, Login, Main menu, Mentees, Network servers, Online users, 213 // Private files, Recent blog entries, Recently accessed courses, Search forums, Section links, Social activities, 214 // Starred courses, Tags, YouTube. 215 // Hidden by default: Course/site summary, RSS feeds, Self completion, Feedback. 216 static::add_plugin($presetid, 'block', 'activity_modules', false); 217 static::add_plugin($presetid, 'block', 'blog_menu', false); 218 static::add_plugin($presetid, 'block', 'blog_tags', false); 219 static::add_plugin($presetid, 'block', 'comments', false); 220 static::add_plugin($presetid, 'block', 'completionstatus', false); 221 static::add_plugin($presetid, 'block', 'course_summary', false); 222 static::add_plugin($presetid, 'block', 'course_list', false); 223 static::add_plugin($presetid, 'block', 'tag_flickr', false); 224 static::add_plugin($presetid, 'block', 'globalsearch', false); 225 static::add_plugin($presetid, 'block', 'badges', false); 226 static::add_plugin($presetid, 'block', 'lp', false); 227 static::add_plugin($presetid, 'block', 'myprofile', false); 228 static::add_plugin($presetid, 'block', 'login', false); 229 static::add_plugin($presetid, 'block', 'site_main_menu', false); 230 static::add_plugin($presetid, 'block', 'mentees', false); 231 static::add_plugin($presetid, 'block', 'mnet_hosts', false); 232 static::add_plugin($presetid, 'block', 'private_files', false); 233 static::add_plugin($presetid, 'block', 'blog_recent', false); 234 static::add_plugin($presetid, 'block', 'rss_client', false); 235 static::add_plugin($presetid, 'block', 'search_forums', false); 236 static::add_plugin($presetid, 'block', 'section_links', false); 237 static::add_plugin($presetid, 'block', 'selfcompletion', false); 238 static::add_plugin($presetid, 'block', 'social_activities', false); 239 static::add_plugin($presetid, 'block', 'tags', false); 240 static::add_plugin($presetid, 'block', 'tag_youtube', false); 241 static::add_plugin($presetid, 'block', 'feedback', false); 242 static::add_plugin($presetid, 'block', 'online_users', false); 243 static::add_plugin($presetid, 'block', 'recentlyaccessedcourses', false); 244 static::add_plugin($presetid, 'block', 'starredcourses', false); 245 246 // Course formats: Disable Social format. 247 static::add_plugin($presetid, 'format', 'social', false); 248 249 // Data formats: Disable Javascript Object Notation (.json). 250 static::add_plugin($presetid, 'dataformat', 'json', false); 251 252 // Enrolments: Disable Cohort sync, Guest access. 253 static::add_plugin($presetid, 'enrol', 'cohort', false); 254 static::add_plugin($presetid, 'enrol', 'guest', false); 255 256 // Filter: Disable MathJax, Activity names auto-linking. 257 static::add_plugin($presetid, 'filter', 'mathjaxloader', TEXTFILTER_DISABLED); 258 static::add_plugin($presetid, 'filter', 'activitynames', TEXTFILTER_DISABLED); 259 260 // Question behaviours: Disable Adaptive mode (no penalties), Deferred feedback with CBM, Immediate feedback with CBM. 261 static::add_plugin($presetid, 'qbehaviour', 'adaptivenopenalty', false); 262 static::add_plugin($presetid, 'qbehaviour', 'deferredcbm', false); 263 static::add_plugin($presetid, 'qbehaviour', 'immediatecbm', false); 264 265 // Question types: Disable Calculated, Calculated multichoice, Calculated simple, Drag and drop markers, 266 // Drag and drop onto image, Embedded answers (Cloze), Numerical, Random short-answer matching. 267 static::add_plugin($presetid, 'qtype', 'calculated', false); 268 static::add_plugin($presetid, 'qtype', 'calculatedmulti', false); 269 static::add_plugin($presetid, 'qtype', 'calculatedsimple', false); 270 static::add_plugin($presetid, 'qtype', 'ddmarker', false); 271 static::add_plugin($presetid, 'qtype', 'ddimageortext', false); 272 static::add_plugin($presetid, 'qtype', 'multianswer', false); 273 static::add_plugin($presetid, 'qtype', 'numerical', false); 274 static::add_plugin($presetid, 'qtype', 'randomsamatch', false); 275 276 // Repositories: Disable Server files, URL downloader, Wikimedia. 277 static::add_plugin($presetid, 'repository', 'local', false); 278 static::add_plugin($presetid, 'repository', 'url', false); 279 static::add_plugin($presetid, 'repository', 'wikimedia', false); 280 281 // Create the "Full" site admin preset. 282 $data = [ 283 'name' => get_string('fullpreset', 'core_adminpresets'), 284 'comments' => get_string('fullpresetdescription', 'core_adminpresets'), 285 'iscore' => manager::FULL_PRESET, 286 ]; 287 $presetid = static::create_preset($data); 288 289 // Add settings to the "Full" site admin preset. 290 static::add_item($presetid, 'usecomments', '1'); 291 static::add_item($presetid, 'usetags', '1'); 292 static::add_item($presetid, 'enablenotes', '1'); 293 static::add_item($presetid, 'enableblogs', '1'); 294 static::add_item($presetid, 'enablebadges', '1'); 295 static::add_item($presetid, 'enableanalytics', '1'); 296 static::add_item($presetid, 'enabled', '1', 'core_competency'); 297 static::add_item($presetid, 'pushcourseratingstouserplans', '1', 'core_competency'); 298 static::add_item($presetid, 'showdataretentionsummary', '1', 'tool_dataprivacy'); 299 static::add_item($presetid, 'forum_maxattachments', '9'); 300 static::add_item($presetid, 'guestloginbutton', '1'); 301 // Set Activity chooser tabs to the default value ("Starred, Recommended, All, Activities, Resources"). 302 static::add_item($presetid, 'activitychoosertabmode', '3'); 303 304 // Modules: Enable chat, database, external tool (lti), IMS content package (imscp), lesson, SCORM, survey, wiki, workshop. 305 static::add_plugin($presetid, 'mod', 'chat', true); 306 static::add_plugin($presetid, 'mod', 'data', true); 307 static::add_plugin($presetid, 'mod', 'lti', true); 308 static::add_plugin($presetid, 'mod', 'imscp', true); 309 static::add_plugin($presetid, 'mod', 'lesson', true); 310 static::add_plugin($presetid, 'mod', 'scorm', true); 311 static::add_plugin($presetid, 'mod', 'survey', true); 312 static::add_plugin($presetid, 'mod', 'wiki', true); 313 static::add_plugin($presetid, 'mod', 'workshop', true); 314 315 // Availability restrictions: Enable Grouping, User profile. 316 static::add_plugin($presetid, 'availability', 'grouping', true); 317 static::add_plugin($presetid, 'availability', 'profile', true); 318 319 // Blocks: Enable Activities, Blog menu, Blog tags, Comments, Course completion status, Courses, Flickr, 320 // Global search, Latest badges, Learning plans, Logged in user, Login, Main menu, Mentees, Network servers, Online users, 321 // Private files, Recent blog entries, Recently accessed courses, Search forums, Section links, Social activities, 322 // Starred courses, Tags, YouTube. 323 // Hidden by default: Course/site summary, RSS feeds, Self completion, Feedback. 324 static::add_plugin($presetid, 'block', 'activity_modules', true); 325 static::add_plugin($presetid, 'block', 'blog_menu', true); 326 static::add_plugin($presetid, 'block', 'blog_tags', true); 327 static::add_plugin($presetid, 'block', 'comments', true); 328 static::add_plugin($presetid, 'block', 'completionstatus', true); 329 static::add_plugin($presetid, 'block', 'course_list', true); 330 static::add_plugin($presetid, 'block', 'tag_flickr', true); 331 static::add_plugin($presetid, 'block', 'globalsearch', true); 332 static::add_plugin($presetid, 'block', 'badges', true); 333 static::add_plugin($presetid, 'block', 'lp', true); 334 static::add_plugin($presetid, 'block', 'myprofile', true); 335 static::add_plugin($presetid, 'block', 'login', true); 336 static::add_plugin($presetid, 'block', 'site_main_menu', true); 337 static::add_plugin($presetid, 'block', 'mentees', true); 338 static::add_plugin($presetid, 'block', 'mnet_hosts', true); 339 static::add_plugin($presetid, 'block', 'private_files', true); 340 static::add_plugin($presetid, 'block', 'blog_recent', true); 341 static::add_plugin($presetid, 'block', 'search_forums', true); 342 static::add_plugin($presetid, 'block', 'section_links', true); 343 static::add_plugin($presetid, 'block', 'social_activities', true); 344 static::add_plugin($presetid, 'block', 'tags', true); 345 static::add_plugin($presetid, 'block', 'online_users', true); 346 static::add_plugin($presetid, 'block', 'recentlyaccessedcourses', true); 347 static::add_plugin($presetid, 'block', 'starredcourses', true); 348 349 // Course formats: Enable Social format. 350 static::add_plugin($presetid, 'format', 'social', true); 351 352 // Data formats: Enable Javascript Object Notation (.json). 353 static::add_plugin($presetid, 'dataformat', 'json', true); 354 355 // Enrolments: Enable Cohort sync, Guest access. 356 static::add_plugin($presetid, 'enrol', 'cohort', true); 357 static::add_plugin($presetid, 'enrol', 'guest', true); 358 359 // Filter: Enable MathJax, Activity names auto-linking. 360 static::add_plugin($presetid, 'filter', 'mathjaxloader', TEXTFILTER_ON); 361 static::add_plugin($presetid, 'filter', 'activitynames', TEXTFILTER_ON); 362 363 // Question behaviours: Enable Adaptive mode (no penalties), Deferred feedback with CBM, Immediate feedback with CBM. 364 static::add_plugin($presetid, 'qbehaviour', 'adaptivenopenalty', true); 365 static::add_plugin($presetid, 'qbehaviour', 'deferredcbm', true); 366 static::add_plugin($presetid, 'qbehaviour', 'immediatecbm', true); 367 368 // Question types: Enable Calculated, Calculated multichoice, Calculated simple, Drag and drop markers, 369 // Drag and drop onto image, Embedded answers (Cloze), Numerical, Random short-answer matching. 370 static::add_plugin($presetid, 'qtype', 'calculated', true); 371 static::add_plugin($presetid, 'qtype', 'calculatedmulti', true); 372 static::add_plugin($presetid, 'qtype', 'calculatedsimple', true); 373 static::add_plugin($presetid, 'qtype', 'ddmarker', true); 374 static::add_plugin($presetid, 'qtype', 'ddimageortext', true); 375 static::add_plugin($presetid, 'qtype', 'multianswer', true); 376 static::add_plugin($presetid, 'qtype', 'numerical', true); 377 static::add_plugin($presetid, 'qtype', 'randomsamatch', true); 378 379 // Repositories: Enable Server files, URL downloader, Wikimedia. 380 static::add_plugin($presetid, 'repository', 'local', true); 381 static::add_plugin($presetid, 'repository', 'url', true); 382 static::add_plugin($presetid, 'repository', 'wikimedia', true); 383 } 384 }
title
Description
Body
title
Description
Body
title
Description
Body
title
Body