Search moodle.org's
Developer Documentation

See Release Notes

  • Bug fixes for general core bugs in 4.2.x will end 22 April 2024 (12 months).
  • Bug fixes for security issues in 4.2.x will end 7 October 2024 (18 months).
  • PHP version: minimum PHP 8.0.0 Note: minimum PHP version has increased since Moodle 4.1. PHP 8.1.x is supported too.

Differences Between: [Versions 310 and 402] [Versions 311 and 402] [Versions 39 and 402] [Versions 400 and 402] [Versions 401 and 402] [Versions 402 and 403]

   1  <?php
   2  
   3  // This file defines settingpages and externalpages under the "appearance" category
   4  
   5  $capabilities = array(
   6      'moodle/my:configsyspages',
   7      'moodle/tag:manage'
   8  );
   9  
  10  if ($hassiteconfig or has_any_capability($capabilities, $systemcontext)) { // speedup for non-admins, add all caps used on this page
  11  
  12      $ADMIN->add('appearance', new admin_category('themes', new lang_string('themes')));
  13      // "themesettings" settingpage
  14      $temp = new admin_settingpage('themesettings', new lang_string('themesettings', 'admin'));
  15      $setting = new admin_setting_configtext('themelist', new lang_string('themelist', 'admin'),
  16          new lang_string('configthemelist', 'admin'), '', PARAM_NOTAGS);
  17      $setting->set_force_ltr(true);
  18      $temp->add($setting);
  19      $setting = new admin_setting_configcheckbox('themedesignermode', new lang_string('themedesignermode', 'admin'), new lang_string('configthemedesignermode', 'admin'), 0);
  20      $setting->set_updatedcallback('theme_reset_all_caches');
  21      $temp->add($setting);
  22      $temp->add(new admin_setting_configcheckbox('allowuserthemes', new lang_string('allowuserthemes', 'admin'), new lang_string('configallowuserthemes', 'admin'), 0));
  23      $temp->add(new admin_setting_configcheckbox('allowcoursethemes', new lang_string('allowcoursethemes', 'admin'), new lang_string('configallowcoursethemes', 'admin'), 0));
  24      $temp->add(new admin_setting_configcheckbox('allowcategorythemes',  new lang_string('allowcategorythemes', 'admin'), new lang_string('configallowcategorythemes', 'admin'), 0));
  25      $temp->add(new admin_setting_configcheckbox('allowcohortthemes',  new lang_string('allowcohortthemes', 'admin'), new lang_string('configallowcohortthemes', 'admin'), 0));
  26      $temp->add(new admin_setting_configcheckbox('allowthemechangeonurl',  new lang_string('allowthemechangeonurl', 'admin'), new lang_string('configallowthemechangeonurl', 'admin'), 0));
  27      $temp->add(new admin_setting_configcheckbox('allowuserblockhiding', new lang_string('allowuserblockhiding', 'admin'), new lang_string('configallowuserblockhiding', 'admin'), 1));
  28      $temp->add(new admin_setting_configcheckbox('langmenuinsecurelayout',
  29          new lang_string('langmenuinsecurelayout', 'admin'),
  30          new lang_string('langmenuinsecurelayout_desc', 'admin'), 0));
  31      $temp->add(new admin_setting_configcheckbox('logininfoinsecurelayout',
  32          new lang_string('logininfoinsecurelayout', 'admin'),
  33          new lang_string('logininfoinsecurelayout_desc', 'admin'), 0));
  34      $temp->add(new admin_setting_configtextarea('custommenuitems', new lang_string('custommenuitems', 'admin'),
  35          new lang_string('configcustommenuitems', 'admin'), '', PARAM_RAW, '50', '10'));
  36      $temp->add(new admin_setting_configtextarea(
  37          'customusermenuitems',
  38          new lang_string('customusermenuitems', 'admin'),
  39          new lang_string('configcustomusermenuitems', 'admin'),
  40          'profile,moodle|/user/profile.php
  41  grades,grades|/grade/report/mygrades.php
  42  calendar,core_calendar|/calendar/view.php?view=month
  43  privatefiles,moodle|/user/files.php
  44  reports,core_reportbuilder|/reportbuilder/index.php',
  45          PARAM_RAW,
  46          '50',
  47          '10'
  48      ));
  49      $temp->add(new admin_setting_configcheckbox('enabledevicedetection', new lang_string('enabledevicedetection', 'admin'), new lang_string('configenabledevicedetection', 'admin'), 1));
  50      $temp->add(new admin_setting_devicedetectregex('devicedetectregex', new lang_string('devicedetectregex', 'admin'), new lang_string('devicedetectregex_desc', 'admin'), ''));
  51      $ADMIN->add('themes', $temp);
  52      $ADMIN->add('themes', new admin_externalpage('themeselector', new lang_string('themeselector','admin'), $CFG->wwwroot . '/theme/index.php'));
  53  
  54      // settings for each theme
  55      foreach (core_component::get_plugin_list('theme') as $theme => $themedir) {
  56          $settings_path = "$themedir/settings.php";
  57          if (file_exists($settings_path)) {
  58              $settings = new admin_settingpage('themesetting'.$theme, new lang_string('pluginname', 'theme_'.$theme));
  59              include($settings_path);
  60              if ($settings) {
  61                  $ADMIN->add('themes', $settings);
  62              }
  63          }
  64      }
  65  
  66      // Logos section.
  67      $temp = new admin_settingpage('logos', new lang_string('logossettings', 'admin'));
  68  
  69      // Logo file setting.
  70      $title = get_string('logo', 'admin');
  71      $description = get_string('logo_desc', 'admin');
  72      $setting = new admin_setting_configstoredfile('core_admin/logo', $title, $description, 'logo', 0,
  73          ['maxfiles' => 1, 'accepted_types' => ['.jpg', '.png']]);
  74      $setting->set_updatedcallback('theme_reset_all_caches');
  75      $temp->add($setting);
  76  
  77      // Small logo file setting.
  78      $title = get_string('logocompact', 'admin');
  79      $description = get_string('logocompact_desc', 'admin');
  80      $setting = new admin_setting_configstoredfile('core_admin/logocompact', $title, $description, 'logocompact', 0,
  81          ['maxfiles' => 1, 'accepted_types' => ['.jpg', '.png']]);
  82      $setting->set_updatedcallback('theme_reset_all_caches');
  83      $temp->add($setting);
  84  
  85      // Favicon file setting.
  86      $title = get_string('favicon', 'admin');
  87      $description = get_string('favicon_desc', 'admin');
  88      $setting = new admin_setting_configstoredfile('core_admin/favicon', $title, $description, 'favicon', 0,
  89          ['maxfiles' => 1, 'accepted_types' => ['image']]);
  90      $setting->set_updatedcallback('theme_reset_all_caches');
  91      $temp->add($setting);
  92  
  93      $ADMIN->add('appearance', $temp);
  94  
  95      // Course colours section.
  96      $temp = new admin_settingpage('coursecolors', new lang_string('coursecolorsettings', 'admin'));
  97      $temp->add(new admin_setting_heading('coursecolorheading', '',
  98          new lang_string('coursecolorheading_desc', 'admin')));
  99  
 100      $basecolors = ['#81ecec', '#74b9ff', '#a29bfe', '#dfe6e9', '#00b894',
 101              '#0984e3', '#b2bec3', '#fdcb6e', '#fd79a8', '#6c5ce7'];
 102  
 103      foreach ($basecolors as $key => $color) {
 104          $number = $key + 1;
 105          $name = 'core_admin/coursecolor' . $number;
 106          $title = get_string('coursecolor', 'admin', $number);
 107          $setting = new admin_setting_configcolourpicker($name, $title, '', $color);
 108          $temp->add($setting);
 109      }
 110  
 111      $ADMIN->add('appearance', $temp);
 112  
 113      // Calendar settings.
 114      $temp = new admin_settingpage('calendar', new lang_string('calendarsettings','admin'));
 115  
 116      $temp->add(new admin_setting_configselect('calendartype', new lang_string('calendartype', 'admin'),
 117          new lang_string('calendartype_desc', 'admin'), 'gregorian', \core_calendar\type_factory::get_list_of_calendar_types()));
 118      $temp->add(new admin_setting_special_adminseesall());
 119      //this is hacky because we do not want to include the stuff from calendar/lib.php
 120      $temp->add(new admin_setting_configselect('calendar_site_timeformat', new lang_string('pref_timeformat', 'calendar'),
 121                                                new lang_string('explain_site_timeformat', 'calendar'), '0',
 122                                                array('0'        => new lang_string('default', 'calendar'),
 123                                                      '%I:%M %p' => new lang_string('timeformat_12', 'calendar'),
 124                                                      '%H:%M'    => new lang_string('timeformat_24', 'calendar'))));
 125      $temp->add(new admin_setting_configselect('calendar_startwday', new lang_string('configstartwday', 'admin'),
 126          new lang_string('helpstartofweek', 'admin'), get_string('firstdayofweek', 'langconfig'),
 127      array(
 128              0 => new lang_string('sunday', 'calendar'),
 129              1 => new lang_string('monday', 'calendar'),
 130              2 => new lang_string('tuesday', 'calendar'),
 131              3 => new lang_string('wednesday', 'calendar'),
 132              4 => new lang_string('thursday', 'calendar'),
 133              5 => new lang_string('friday', 'calendar'),
 134              6 => new lang_string('saturday', 'calendar')
 135          )));
 136      $temp->add(new admin_setting_special_calendar_weekend());
 137      $options = array(365 => new lang_string('numyear', '', 1),
 138              270 => new lang_string('nummonths', '', 9),
 139              180 => new lang_string('nummonths', '', 6),
 140              150 => new lang_string('nummonths', '', 5),
 141              120 => new lang_string('nummonths', '', 4),
 142              90  => new lang_string('nummonths', '', 3),
 143              60  => new lang_string('nummonths', '', 2),
 144              30  => new lang_string('nummonth', '', 1),
 145              21  => new lang_string('numweeks', '', 3),
 146              14  => new lang_string('numweeks', '', 2),
 147              7  => new lang_string('numweek', '', 1),
 148              6  => new lang_string('numdays', '', 6),
 149              5  => new lang_string('numdays', '', 5),
 150              4  => new lang_string('numdays', '', 4),
 151              3  => new lang_string('numdays', '', 3),
 152              2  => new lang_string('numdays', '', 2),
 153              1  => new lang_string('numday', '', 1));
 154      $temp->add(new admin_setting_configselect('calendar_lookahead', new lang_string('configlookahead', 'admin'), new lang_string('helpupcominglookahead', 'admin'), 21, $options));
 155      $options = array();
 156      for ($i=1; $i<=20; $i++) {
 157          $options[$i] = $i;
 158      }
 159      $temp->add(new admin_setting_configselect('calendar_maxevents',new lang_string('configmaxevents','admin'),new lang_string('helpupcomingmaxevents', 'admin'),10,$options));
 160      $temp->add(new admin_setting_configcheckbox('enablecalendarexport', new lang_string('enablecalendarexport', 'admin'), new lang_string('configenablecalendarexport','admin'), 1));
 161  
 162      // Calendar custom export settings.
 163      $days = array(365 => new lang_string('numdays', '', 365),
 164              180 => new lang_string('numdays', '', 180),
 165              150 => new lang_string('numdays', '', 150),
 166              120 => new lang_string('numdays', '', 120),
 167              90  => new lang_string('numdays', '', 90),
 168              60  => new lang_string('numdays', '', 60),
 169              30  => new lang_string('numdays', '', 30),
 170              5  => new lang_string('numdays', '', 5));
 171      $temp->add(new admin_setting_configcheckbox('calendar_customexport', new lang_string('configcalendarcustomexport', 'admin'), new lang_string('helpcalendarcustomexport','admin'), 1));
 172      $temp->add(new admin_setting_configselect('calendar_exportlookahead', new lang_string('configexportlookahead','admin'), new lang_string('helpexportlookahead', 'admin'), 365, $days));
 173      $temp->add(new admin_setting_configselect('calendar_exportlookback', new lang_string('configexportlookback','admin'), new lang_string('helpexportlookback', 'admin'), 5, $days));
 174      $temp->add(new admin_setting_configtext('calendar_exportsalt', new lang_string('calendarexportsalt','admin'), new lang_string('configcalendarexportsalt', 'admin'), random_string(60)));
 175      $temp->add(new admin_setting_configcheckbox('calendar_showicalsource', new lang_string('configshowicalsource', 'admin'), new lang_string('helpshowicalsource','admin'), 1));
 176      $ADMIN->add('appearance', $temp);
 177  
 178      // blog
 179      $temp = new admin_settingpage('blog', new lang_string('blog','blog'), 'moodle/site:config', empty($CFG->enableblogs));
 180      $temp->add(new admin_setting_configcheckbox('useblogassociations', new lang_string('useblogassociations', 'blog'), new lang_string('configuseblogassociations','blog'), 1));
 181      $temp->add(new admin_setting_bloglevel('bloglevel', new lang_string('bloglevel', 'admin'), new lang_string('configbloglevel', 'admin'), 4, array(BLOG_GLOBAL_LEVEL => new lang_string('worldblogs','blog'),
 182                                                                                                                                             BLOG_SITE_LEVEL => new lang_string('siteblogs','blog'),
 183                                                                                                                                             BLOG_USER_LEVEL => new lang_string('personalblogs','blog'))));
 184      $temp->add(new admin_setting_configcheckbox('useexternalblogs', new lang_string('useexternalblogs', 'blog'), new lang_string('configuseexternalblogs','blog'), 1));
 185      $temp->add(new admin_setting_configselect('externalblogcrontime', new lang_string('externalblogcrontime', 'blog'), new lang_string('configexternalblogcrontime', 'blog'), 86400,
 186          array(43200 => new lang_string('numhours', '', 12),
 187                86400 => new lang_string('numhours', '', 24),
 188                172800 => new lang_string('numdays', '', 2),
 189                604800 => new lang_string('numdays', '', 7))));
 190      $temp->add(new admin_setting_configtext('maxexternalblogsperuser', new lang_string('maxexternalblogsperuser','blog'), new lang_string('configmaxexternalblogsperuser', 'blog'), 1));
 191      $temp->add(new admin_setting_configcheckbox('blogusecomments', new lang_string('enablecomments', 'admin'), new lang_string('configenablecomments', 'admin'), 1));
 192      $temp->add(new admin_setting_configcheckbox('blogshowcommentscount', new lang_string('showcommentscount', 'admin'), new lang_string('configshowcommentscount', 'admin'), 1));
 193      $ADMIN->add('appearance', $temp);
 194  
 195      // Navigation settings
 196      $temp = new admin_settingpage('navigation', new lang_string('navigation'));
 197      $temp->add(new admin_setting_configcheckbox(
 198          'enabledashboard',
 199          new lang_string('enabledashboard', 'admin'),
 200          new lang_string('enabledashboard_help', 'admin'),
 201          1
 202      ));
 203  
 204      $choices = [HOMEPAGE_SITE => new lang_string('home')];
 205      if (!empty($CFG->enabledashboard)) {
 206          $choices[HOMEPAGE_MY] = new lang_string('mymoodle', 'admin');
 207      }
 208      $choices[HOMEPAGE_MYCOURSES] = new lang_string('mycourses', 'admin');
 209      $choices[HOMEPAGE_USER] = new lang_string('userpreference', 'admin');
 210      $temp->add(new admin_setting_configselect('defaulthomepage', new lang_string('defaulthomepage', 'admin'),
 211              new lang_string('configdefaulthomepage', 'admin'), get_default_home_page(), $choices));
 212      if (!empty($CFG->enabledashboard)) {
 213          $temp->add(new admin_setting_configcheckbox(
 214              'allowguestmymoodle',
 215              new lang_string('allowguestmymoodle', 'admin'),
 216              new lang_string('configallowguestmymoodle', 'admin'),
 217              1
 218          ));
 219      }
 220      $temp->add(new admin_setting_configcheckbox('navshowfullcoursenames', new lang_string('navshowfullcoursenames', 'admin'), new lang_string('navshowfullcoursenames_help', 'admin'), 0));
 221      $temp->add(new admin_setting_configcheckbox('navshowcategories', new lang_string('navshowcategories', 'admin'), new lang_string('confignavshowcategories', 'admin'), 1));
 222      $temp->add(new admin_setting_configcheckbox('navshowmycoursecategories', new lang_string('navshowmycoursecategories', 'admin'), new lang_string('navshowmycoursecategories_help', 'admin'), 0));
 223      $temp->add(new admin_setting_configcheckbox('navshowallcourses', new lang_string('navshowallcourses', 'admin'), new lang_string('confignavshowallcourses', 'admin'), 0));
 224      $sortoptions = array(
 225          'sortorder' => new lang_string('sort_sortorder', 'admin'),
 226          'fullname' => new lang_string('sort_fullname', 'admin'),
 227          'shortname' => new lang_string('sort_shortname', 'admin'),
 228          'idnumber' => new lang_string('sort_idnumber', 'admin'),
 229      );
 230      $temp->add(new admin_setting_configselect('navsortmycoursessort', new lang_string('navsortmycoursessort', 'admin'), new lang_string('navsortmycoursessort_help', 'admin'), 'sortorder', $sortoptions));
 231      $temp->add(new admin_setting_configcheckbox('navsortmycourseshiddenlast',
 232              new lang_string('navsortmycourseshiddenlast', 'admin'),
 233              new lang_string('navsortmycourseshiddenlast_help', 'admin'),
 234              1));
 235      $temp->add(new admin_setting_configtext('navcourselimit', new lang_string('navcourselimit', 'admin'),
 236          new lang_string('confignavcourselimit', 'admin'), 10, PARAM_INT));
 237      $temp->add(new admin_setting_configcheckbox('usesitenameforsitepages', new lang_string('usesitenameforsitepages', 'admin'), new lang_string('configusesitenameforsitepages', 'admin'), 0));
 238      $temp->add(new admin_setting_configcheckbox('linkadmincategories', new lang_string('linkadmincategories', 'admin'), new lang_string('linkadmincategories_help', 'admin'), 1));
 239      $temp->add(new admin_setting_configcheckbox('linkcoursesections', new lang_string('linkcoursesections', 'admin'), new lang_string('linkcoursesections_help', 'admin'), 1));
 240      $temp->add(new admin_setting_configcheckbox('navshowfrontpagemods', new lang_string('navshowfrontpagemods', 'admin'), new lang_string('navshowfrontpagemods_help', 'admin'), 1));
 241      $temp->add(new admin_setting_configcheckbox('navadduserpostslinks', new lang_string('navadduserpostslinks', 'admin'), new lang_string('navadduserpostslinks_help', 'admin'), 1));
 242  
 243      $ADMIN->add('appearance', $temp);
 244  
 245      // "htmlsettings" settingpage
 246      $temp = new admin_settingpage('htmlsettings', new lang_string('htmlsettings', 'admin'));
 247      $sitenameintitleoptions = [
 248          'shortname' => new lang_string('shortname'),
 249          'fullname' => new lang_string('fullname'),
 250      ];
 251      $sitenameintitleconfig = new admin_setting_configselect(
 252          'sitenameintitle',
 253          new lang_string('sitenameintitle', 'admin'),
 254          new lang_string('sitenameintitle_help', 'admin'),
 255          'shortname',
 256          $sitenameintitleoptions
 257      );
 258      $temp->add($sitenameintitleconfig);
 259      $temp->add(new admin_setting_configcheckbox('formatstringstriptags', new lang_string('stripalltitletags', 'admin'), new lang_string('configstripalltitletags', 'admin'), 1));
 260      $temp->add(new admin_setting_emoticons());
 261      $ADMIN->add('appearance', $temp);
 262      $ADMIN->add('appearance', new admin_externalpage('resetemoticons', new lang_string('emoticonsreset', 'admin'),
 263          new moodle_url('/admin/resetemoticons.php'), 'moodle/site:config', true));
 264  
 265      // "documentation" settingpage
 266      $temp = new admin_settingpage('documentation', new lang_string('moodledocs'));
 267      $temp->add(new admin_setting_configtext('docroot', new lang_string('docroot', 'admin'), new lang_string('configdocroot', 'admin'), 'https://docs.moodle.org', PARAM_URL));
 268      $ltemp = array('' => get_string('forceno'));
 269      $ltemp += get_string_manager()->get_list_of_translations(true);
 270      $temp->add(new admin_setting_configselect('doclang', get_string('doclang', 'admin'), get_string('configdoclang', 'admin'), '', $ltemp));
 271      $temp->add(new admin_setting_configcheckbox('doctonewwindow', new lang_string('doctonewwindow', 'admin'), new lang_string('configdoctonewwindow', 'admin'), 0));
 272      $temp->add(new admin_setting_configtext(
 273          'coursecreationguide',
 274          new lang_string('coursecreationguide', 'admin'),
 275          new lang_string('coursecreationguide_help', 'admin'),
 276          'https://moodle.academy/coursequickstart',
 277          PARAM_URL
 278      ));
 279      $ADMIN->add('appearance', $temp);
 280  
 281      if (!empty($CFG->enabledashboard)) {
 282          $temp = new admin_externalpage('mypage', new lang_string('mypage', 'admin'), $CFG->wwwroot . '/my/indexsys.php',
 283                  'moodle/my:configsyspages');
 284          $ADMIN->add('appearance', $temp);
 285      }
 286  
 287      $temp = new admin_externalpage('profilepage', new lang_string('myprofile', 'admin'), $CFG->wwwroot . '/user/profilesys.php',
 288              'moodle/my:configsyspages');
 289      $ADMIN->add('appearance', $temp);
 290  
 291      // coursecontact is the person responsible for course - usually manages enrolments, receives notification, etc.
 292      $temp = new admin_settingpage('coursecontact', new lang_string('courses'));
 293      $temp->add(new admin_setting_special_coursecontact());
 294      $temp->add(new admin_setting_configcheckbox('coursecontactduplicates',
 295              new lang_string('coursecontactduplicates', 'admin'),
 296              new lang_string('coursecontactduplicates_desc', 'admin'), 0));
 297      $temp->add(new admin_setting_configcheckbox('courselistshortnames',
 298              new lang_string('courselistshortnames', 'admin'),
 299              new lang_string('courselistshortnames_desc', 'admin'), 0));
 300      $temp->add(new admin_setting_configtext('coursesperpage', new lang_string('coursesperpage', 'admin'), new lang_string('configcoursesperpage', 'admin'), 20, PARAM_INT));
 301      $temp->add(new admin_setting_configtext('courseswithsummarieslimit', new lang_string('courseswithsummarieslimit', 'admin'), new lang_string('configcourseswithsummarieslimit', 'admin'), 10, PARAM_INT));
 302  
 303      $temp->add(new admin_setting_configtext('courseoverviewfileslimit', new lang_string('courseoverviewfileslimit'),
 304              new lang_string('configcourseoverviewfileslimit', 'admin'), 1, PARAM_INT));
 305      $temp->add(new admin_setting_filetypes('courseoverviewfilesext', new lang_string('courseoverviewfilesext'),
 306          new lang_string('configcourseoverviewfilesext', 'admin'), 'web_image'
 307      ));
 308  
 309      $temp->add(new admin_setting_configtext('coursegraceperiodbefore', new lang_string('coursegraceperiodbefore', 'admin'),
 310          new lang_string('configcoursegraceperiodbefore', 'admin'), 0, PARAM_INT));
 311      $temp->add(new admin_setting_configtext('coursegraceperiodafter', new lang_string('coursegraceperiodafter', 'admin'),
 312          new lang_string('configcoursegraceperiodafter', 'admin'), 0, PARAM_INT));
 313      $ADMIN->add('appearance', $temp);
 314  
 315      $temp = new admin_settingpage('ajax', new lang_string('ajaxuse'));
 316      $temp->add(new admin_setting_configcheckbox('yuicomboloading', new lang_string('yuicomboloading', 'admin'), new lang_string('configyuicomboloading', 'admin'), 1));
 317      $setting = new admin_setting_configcheckbox('cachejs', new lang_string('cachejs', 'admin'), new lang_string('cachejs_help', 'admin'), 1);
 318      $setting->set_updatedcallback('js_reset_all_caches');
 319      $temp->add($setting);
 320      $ADMIN->add('appearance', $temp);
 321  
 322      // Link to tag management interface.
 323      $url = new moodle_url('/tag/manage.php');
 324      $hidden = empty($CFG->usetags);
 325      $page = new admin_externalpage('managetags', new lang_string('managetags', 'tag'), $url, 'moodle/tag:manage', $hidden);
 326      $ADMIN->add('appearance', $page);
 327  
 328      $temp = new admin_settingpage('additionalhtml', new lang_string('additionalhtml', 'admin'));
 329      $temp->add(new admin_setting_heading('additionalhtml_heading', new lang_string('additionalhtml_heading', 'admin'), new lang_string('additionalhtml_desc', 'admin')));
 330      $temp->add(new admin_setting_configtextarea('additionalhtmlhead', new lang_string('additionalhtmlhead', 'admin'), new lang_string('additionalhtmlhead_desc', 'admin'), '', PARAM_RAW));
 331      $temp->add(new admin_setting_configtextarea('additionalhtmltopofbody', new lang_string('additionalhtmltopofbody', 'admin'), new lang_string('additionalhtmltopofbody_desc', 'admin'), '', PARAM_RAW));
 332      $temp->add(new admin_setting_configtextarea('additionalhtmlfooter', new lang_string('additionalhtmlfooter', 'admin'), new lang_string('additionalhtmlfooter_desc', 'admin'), '', PARAM_RAW));
 333      $ADMIN->add('appearance', $temp);
 334  
 335      $setting = new admin_setting_configcheckbox('cachetemplates', new lang_string('cachetemplates', 'admin'),
 336          new lang_string('cachetemplates_help', 'admin'), 1);
 337      $setting->set_updatedcallback('template_reset_all_caches');
 338      $temp = new admin_settingpage('templates', new lang_string('templates', 'admin'));
 339      $temp->add($setting);
 340      $ADMIN->add('appearance', $temp);
 341  } // end of speedup