MDL-77046 availability: validate profile field in condition.
[moodle.git] / admin / settings / appearance.php
blobe89c09a1f90f3beba6d3c7e23f96484c0b12f5ac
1 <?php
3 // This file defines settingpages and externalpages under the "appearance" category
5 $capabilities = array(
6 'moodle/my:configsyspages',
7 'moodle/tag:manage'
8 );
10 if ($hassiteconfig or has_any_capability($capabilities, $systemcontext)) { // speedup for non-admins, add all caps used on this page
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'));
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);
66 // Logos section.
67 $temp = new admin_settingpage('logos', new lang_string('logossettings', 'admin'));
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);
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);
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);
93 $ADMIN->add('appearance', $temp);
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')));
100 $basecolors = ['#81ecec', '#74b9ff', '#a29bfe', '#dfe6e9', '#00b894',
101 '#0984e3', '#b2bec3', '#fdcb6e', '#fd79a8', '#6c5ce7'];
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);
111 $ADMIN->add('appearance', $temp);
113 // Calendar settings.
114 $temp = new admin_settingpage('calendar', new lang_string('calendarsettings','admin'));
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;
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));
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);
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);
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'),
204 $choices = [HOMEPAGE_SITE => new lang_string('home')];
205 if (!empty($CFG->enabledashboard)) {
206 $choices[HOMEPAGE_MY] = new lang_string('mymoodle', 'admin');
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'),
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'),
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));
243 $ADMIN->add('appearance', $temp);
245 // "htmlsettings" settingpage
246 $temp = new admin_settingpage('htmlsettings', new lang_string('htmlsettings', 'admin'));
247 $temp->add(new admin_setting_configcheckbox('formatstringstriptags', new lang_string('stripalltitletags', 'admin'), new lang_string('configstripalltitletags', 'admin'), 1));
248 $temp->add(new admin_setting_emoticons());
249 $ADMIN->add('appearance', $temp);
250 $ADMIN->add('appearance', new admin_externalpage('resetemoticons', new lang_string('emoticonsreset', 'admin'),
251 new moodle_url('/admin/resetemoticons.php'), 'moodle/site:config', true));
253 // "documentation" settingpage
254 $temp = new admin_settingpage('documentation', new lang_string('moodledocs'));
255 $temp->add(new admin_setting_configtext('docroot', new lang_string('docroot', 'admin'), new lang_string('configdocroot', 'admin'), 'https://docs.moodle.org', PARAM_URL));
256 $ltemp = array('' => get_string('forceno'));
257 $ltemp += get_string_manager()->get_list_of_translations(true);
258 $temp->add(new admin_setting_configselect('doclang', get_string('doclang', 'admin'), get_string('configdoclang', 'admin'), '', $ltemp));
259 $temp->add(new admin_setting_configcheckbox('doctonewwindow', new lang_string('doctonewwindow', 'admin'), new lang_string('configdoctonewwindow', 'admin'), 0));
260 $ADMIN->add('appearance', $temp);
262 if (!empty($CFG->enabledashboard)) {
263 $temp = new admin_externalpage('mypage', new lang_string('mypage', 'admin'), $CFG->wwwroot . '/my/indexsys.php',
264 'moodle/my:configsyspages');
265 $ADMIN->add('appearance', $temp);
268 $temp = new admin_externalpage('profilepage', new lang_string('myprofile', 'admin'), $CFG->wwwroot . '/user/profilesys.php',
269 'moodle/my:configsyspages');
270 $ADMIN->add('appearance', $temp);
272 // coursecontact is the person responsible for course - usually manages enrolments, receives notification, etc.
273 $temp = new admin_settingpage('coursecontact', new lang_string('courses'));
274 $temp->add(new admin_setting_special_coursecontact());
275 $temp->add(new admin_setting_configcheckbox('coursecontactduplicates',
276 new lang_string('coursecontactduplicates', 'admin'),
277 new lang_string('coursecontactduplicates_desc', 'admin'), 0));
278 $temp->add(new admin_setting_configcheckbox('courselistshortnames',
279 new lang_string('courselistshortnames', 'admin'),
280 new lang_string('courselistshortnames_desc', 'admin'), 0));
281 $temp->add(new admin_setting_configtext('coursesperpage', new lang_string('coursesperpage', 'admin'), new lang_string('configcoursesperpage', 'admin'), 20, PARAM_INT));
282 $temp->add(new admin_setting_configtext('courseswithsummarieslimit', new lang_string('courseswithsummarieslimit', 'admin'), new lang_string('configcourseswithsummarieslimit', 'admin'), 10, PARAM_INT));
284 $temp->add(new admin_setting_configtext('courseoverviewfileslimit', new lang_string('courseoverviewfileslimit'),
285 new lang_string('configcourseoverviewfileslimit', 'admin'), 1, PARAM_INT));
286 $temp->add(new admin_setting_filetypes('courseoverviewfilesext', new lang_string('courseoverviewfilesext'),
287 new lang_string('configcourseoverviewfilesext', 'admin'), 'web_image'
290 $temp->add(new admin_setting_configtext('coursegraceperiodbefore', new lang_string('coursegraceperiodbefore', 'admin'),
291 new lang_string('configcoursegraceperiodbefore', 'admin'), 0, PARAM_INT));
292 $temp->add(new admin_setting_configtext('coursegraceperiodafter', new lang_string('coursegraceperiodafter', 'admin'),
293 new lang_string('configcoursegraceperiodafter', 'admin'), 0, PARAM_INT));
294 $ADMIN->add('appearance', $temp);
296 $temp = new admin_settingpage('ajax', new lang_string('ajaxuse'));
297 $temp->add(new admin_setting_configcheckbox('useexternalyui', new lang_string('useexternalyui', 'admin'), new lang_string('configuseexternalyui', 'admin'), 0));
298 $temp->add(new admin_setting_configcheckbox('yuicomboloading', new lang_string('yuicomboloading', 'admin'), new lang_string('configyuicomboloading', 'admin'), 1));
299 $setting = new admin_setting_configcheckbox('cachejs', new lang_string('cachejs', 'admin'), new lang_string('cachejs_help', 'admin'), 1);
300 $setting->set_updatedcallback('js_reset_all_caches');
301 $temp->add($setting);
302 $ADMIN->add('appearance', $temp);
304 // Link to tag management interface.
305 $url = new moodle_url('/tag/manage.php');
306 $hidden = empty($CFG->usetags);
307 $page = new admin_externalpage('managetags', new lang_string('managetags', 'tag'), $url, 'moodle/tag:manage', $hidden);
308 $ADMIN->add('appearance', $page);
310 $temp = new admin_settingpage('additionalhtml', new lang_string('additionalhtml', 'admin'));
311 $temp->add(new admin_setting_heading('additionalhtml_heading', new lang_string('additionalhtml_heading', 'admin'), new lang_string('additionalhtml_desc', 'admin')));
312 $temp->add(new admin_setting_configtextarea('additionalhtmlhead', new lang_string('additionalhtmlhead', 'admin'), new lang_string('additionalhtmlhead_desc', 'admin'), '', PARAM_RAW));
313 $temp->add(new admin_setting_configtextarea('additionalhtmltopofbody', new lang_string('additionalhtmltopofbody', 'admin'), new lang_string('additionalhtmltopofbody_desc', 'admin'), '', PARAM_RAW));
314 $temp->add(new admin_setting_configtextarea('additionalhtmlfooter', new lang_string('additionalhtmlfooter', 'admin'), new lang_string('additionalhtmlfooter_desc', 'admin'), '', PARAM_RAW));
315 $ADMIN->add('appearance', $temp);
317 $setting = new admin_setting_configcheckbox('cachetemplates', new lang_string('cachetemplates', 'admin'),
318 new lang_string('cachetemplates_help', 'admin'), 1);
319 $setting->set_updatedcallback('template_reset_all_caches');
320 $temp = new admin_settingpage('templates', new lang_string('templates', 'admin'));
321 $temp->add($setting);
322 $ADMIN->add('appearance', $temp);
323 } // end of speedup