Merge branch 'MDL-56845-master' of git://github.com/damyon/moodle
[moodle.git] / admin / settings / appearance.php
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('allowthemechangeonurl',  new lang_string('allowthemechangeonurl', 'admin'), new lang_string('configallowthemechangeonurl', 'admin'), 0));
26     $temp->add(new admin_setting_configcheckbox('allowuserblockhiding', new lang_string('allowuserblockhiding', 'admin'), new lang_string('configallowuserblockhiding', 'admin'), 1));
27     $temp->add(new admin_setting_configcheckbox('allowblockstodock', new lang_string('allowblockstodock', 'admin'), new lang_string('configallowblockstodock', 'admin'), 1));
28     $temp->add(new admin_setting_configtextarea('custommenuitems', new lang_string('custommenuitems', 'admin'),
29         new lang_string('configcustommenuitems', 'admin'), '', PARAM_RAW, '50', '10'));
30     $temp->add(new admin_setting_configtextarea(
31         'customusermenuitems',
32         new lang_string('customusermenuitems', 'admin'),
33         new lang_string('configcustomusermenuitems', 'admin'),
34         'grades,grades|/grade/report/mygrades.php|grades
35 messages,message|/message/index.php|message
36 preferences,moodle|/user/preferences.php|preferences',
37         PARAM_RAW,
38         '50',
39         '10'
40     ));
41     $temp->add(new admin_setting_configcheckbox('enabledevicedetection', new lang_string('enabledevicedetection', 'admin'), new lang_string('configenabledevicedetection', 'admin'), 1));
42     $temp->add(new admin_setting_devicedetectregex('devicedetectregex', new lang_string('devicedetectregex', 'admin'), new lang_string('devicedetectregex_desc', 'admin'), ''));
43     $ADMIN->add('themes', $temp);
44     $ADMIN->add('themes', new admin_externalpage('themeselector', new lang_string('themeselector','admin'), $CFG->wwwroot . '/theme/index.php'));
46     // settings for each theme
47     foreach (core_component::get_plugin_list('theme') as $theme => $themedir) {
48         $settings_path = "$themedir/settings.php";
49         if (file_exists($settings_path)) {
50             $settings = new admin_settingpage('themesetting'.$theme, new lang_string('pluginname', 'theme_'.$theme));
51             include($settings_path);
52             if ($settings) {
53                 $ADMIN->add('themes', $settings);
54             }
55         }
56     }
58     // Logos section.
59     $temp = new admin_settingpage('logos', new lang_string('logossettings', 'admin'));
61     // Logo file setting.
62     $title = get_string('logo', 'admin');
63     $description = get_string('logo_desc', 'admin');
64     $setting = new admin_setting_configstoredfile('core_admin/logo', $title, $description, 'logo', 0,
65         ['maxfiles' => 1, 'accepted_types' => ['.jpg', '.png']]);
66     $setting->set_updatedcallback('theme_reset_all_caches');
67     $temp->add($setting);
69     // Small logo file setting.
70     $title = get_string('logocompact', 'admin');
71     $description = get_string('logocompact_desc', 'admin');
72     $setting = new admin_setting_configstoredfile('core_admin/logocompact', $title, $description, 'logocompact', 0,
73         ['maxfiles' => 1, 'accepted_types' => ['.jpg', '.png']]);
74     $setting->set_updatedcallback('theme_reset_all_caches');
75     $temp->add($setting);
77     $ADMIN->add('appearance', $temp);
79     // Calendar settings.
80     $temp = new admin_settingpage('calendar', new lang_string('calendarsettings','admin'));
82     $temp->add(new admin_setting_configselect('calendartype', new lang_string('calendartype', 'admin'),
83         new lang_string('calendartype_desc', 'admin'), 'gregorian', \core_calendar\type_factory::get_list_of_calendar_types()));
84     $temp->add(new admin_setting_special_adminseesall());
85     //this is hacky because we do not want to include the stuff from calendar/lib.php
86     $temp->add(new admin_setting_configselect('calendar_site_timeformat', new lang_string('pref_timeformat', 'calendar'),
87                                               new lang_string('explain_site_timeformat', 'calendar'), '0',
88                                               array('0'        => new lang_string('default', 'calendar'),
89                                                     '%I:%M %p' => new lang_string('timeformat_12', 'calendar'),
90                                                     '%H:%M'    => new lang_string('timeformat_24', 'calendar'))));
91     $temp->add(new admin_setting_configselect('calendar_startwday', new lang_string('configstartwday', 'admin'),
92         new lang_string('helpstartofweek', 'admin'), get_string('firstdayofweek', 'langconfig'),
93     array(
94             0 => new lang_string('sunday', 'calendar'),
95             1 => new lang_string('monday', 'calendar'),
96             2 => new lang_string('tuesday', 'calendar'),
97             3 => new lang_string('wednesday', 'calendar'),
98             4 => new lang_string('thursday', 'calendar'),
99             5 => new lang_string('friday', 'calendar'),
100             6 => new lang_string('saturday', 'calendar')
101         )));
102     $temp->add(new admin_setting_special_calendar_weekend());
103     $options = array(365 => new lang_string('numyear', '', 1),
104             270 => new lang_string('nummonths', '', 9),
105             180 => new lang_string('nummonths', '', 6),
106             150 => new lang_string('nummonths', '', 5),
107             120 => new lang_string('nummonths', '', 4),
108             90  => new lang_string('nummonths', '', 3),
109             60  => new lang_string('nummonths', '', 2),
110             30  => new lang_string('nummonth', '', 1),
111             21  => new lang_string('numweeks', '', 3),
112             14  => new lang_string('numweeks', '', 2),
113             7  => new lang_string('numweek', '', 1),
114             6  => new lang_string('numdays', '', 6),
115             5  => new lang_string('numdays', '', 5),
116             4  => new lang_string('numdays', '', 4),
117             3  => new lang_string('numdays', '', 3),
118             2  => new lang_string('numdays', '', 2),
119             1  => new lang_string('numday', '', 1));
120     $temp->add(new admin_setting_configselect('calendar_lookahead', new lang_string('configlookahead', 'admin'), new lang_string('helpupcominglookahead', 'admin'), 21, $options));
121     $options = array();
122     for ($i=1; $i<=20; $i++) {
123         $options[$i] = $i;
124     }
125     $temp->add(new admin_setting_configselect('calendar_maxevents',new lang_string('configmaxevents','admin'),new lang_string('helpupcomingmaxevents', 'admin'),10,$options));
126     $temp->add(new admin_setting_configcheckbox('enablecalendarexport', new lang_string('enablecalendarexport', 'admin'), new lang_string('configenablecalendarexport','admin'), 1));
128     // Calendar custom export settings.
129     $days = array(365 => new lang_string('numdays', '', 365),
130             180 => new lang_string('numdays', '', 180),
131             150 => new lang_string('numdays', '', 150),
132             120 => new lang_string('numdays', '', 120),
133             90  => new lang_string('numdays', '', 90),
134             60  => new lang_string('numdays', '', 60),
135             30  => new lang_string('numdays', '', 30),
136             5  => new lang_string('numdays', '', 5));
137     $temp->add(new admin_setting_configcheckbox('calendar_customexport', new lang_string('configcalendarcustomexport', 'admin'), new lang_string('helpcalendarcustomexport','admin'), 1));
138     $temp->add(new admin_setting_configselect('calendar_exportlookahead', new lang_string('configexportlookahead','admin'), new lang_string('helpexportlookahead', 'admin'), 365, $days));
139     $temp->add(new admin_setting_configselect('calendar_exportlookback', new lang_string('configexportlookback','admin'), new lang_string('helpexportlookback', 'admin'), 5, $days));
140     $temp->add(new admin_setting_configtext('calendar_exportsalt', new lang_string('calendarexportsalt','admin'), new lang_string('configcalendarexportsalt', 'admin'), random_string(60)));
141     $temp->add(new admin_setting_configcheckbox('calendar_showicalsource', new lang_string('configshowicalsource', 'admin'), new lang_string('helpshowicalsource','admin'), 1));
142     $ADMIN->add('appearance', $temp);
144     // blog
145     $temp = new admin_settingpage('blog', new lang_string('blog','blog'), 'moodle/site:config', empty($CFG->enableblogs));
146     $temp->add(new admin_setting_configcheckbox('useblogassociations', new lang_string('useblogassociations', 'blog'), new lang_string('configuseblogassociations','blog'), 1));
147     $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'),
148                                                                                                                                            BLOG_SITE_LEVEL => new lang_string('siteblogs','blog'),
149                                                                                                                                            BLOG_USER_LEVEL => new lang_string('personalblogs','blog'))));
150     $temp->add(new admin_setting_configcheckbox('useexternalblogs', new lang_string('useexternalblogs', 'blog'), new lang_string('configuseexternalblogs','blog'), 1));
151     $temp->add(new admin_setting_configselect('externalblogcrontime', new lang_string('externalblogcrontime', 'blog'), new lang_string('configexternalblogcrontime', 'blog'), 86400,
152         array(43200 => new lang_string('numhours', '', 12),
153               86400 => new lang_string('numhours', '', 24),
154               172800 => new lang_string('numdays', '', 2),
155               604800 => new lang_string('numdays', '', 7))));
156     $temp->add(new admin_setting_configtext('maxexternalblogsperuser', new lang_string('maxexternalblogsperuser','blog'), new lang_string('configmaxexternalblogsperuser', 'blog'), 1));
157     $temp->add(new admin_setting_configcheckbox('blogusecomments', new lang_string('enablecomments', 'admin'), new lang_string('configenablecomments', 'admin'), 1));
158     $temp->add(new admin_setting_configcheckbox('blogshowcommentscount', new lang_string('showcommentscount', 'admin'), new lang_string('configshowcommentscount', 'admin'), 1));
159     $ADMIN->add('appearance', $temp);
161     // Navigation settings
162     $temp = new admin_settingpage('navigation', new lang_string('navigation'));
163     $choices = array(
164         HOMEPAGE_SITE => new lang_string('site'),
165         HOMEPAGE_MY => new lang_string('mymoodle', 'admin'),
166         HOMEPAGE_USER => new lang_string('userpreference', 'admin')
167     );
168     $temp->add(new admin_setting_configselect('defaulthomepage', new lang_string('defaulthomepage', 'admin'),
169             new lang_string('configdefaulthomepage', 'admin'), HOMEPAGE_MY, $choices));
170     $temp->add(new admin_setting_configcheckbox('allowguestmymoodle', new lang_string('allowguestmymoodle', 'admin'), new lang_string('configallowguestmymoodle', 'admin'), 1));
171     $temp->add(new admin_setting_configcheckbox('navshowfullcoursenames', new lang_string('navshowfullcoursenames', 'admin'), new lang_string('navshowfullcoursenames_help', 'admin'), 0));
172     $temp->add(new admin_setting_configcheckbox('navshowcategories', new lang_string('navshowcategories', 'admin'), new lang_string('confignavshowcategories', 'admin'), 1));
173     $temp->add(new admin_setting_configcheckbox('navshowmycoursecategories', new lang_string('navshowmycoursecategories', 'admin'), new lang_string('navshowmycoursecategories_help', 'admin'), 0));
174     $temp->add(new admin_setting_configcheckbox('navshowallcourses', new lang_string('navshowallcourses', 'admin'), new lang_string('confignavshowallcourses', 'admin'), 0));
175     $sortoptions = array(
176         'sortorder' => new lang_string('sort_sortorder', 'admin'),
177         'fullname' => new lang_string('sort_fullname', 'admin'),
178         'shortname' => new lang_string('sort_shortname', 'admin'),
179         'idnumber' => new lang_string('sort_idnumber', 'admin'),
180     );
181     $temp->add(new admin_setting_configselect('navsortmycoursessort', new lang_string('navsortmycoursessort', 'admin'), new lang_string('navsortmycoursessort_help', 'admin'), 'sortorder', $sortoptions));
182     $temp->add(new admin_setting_configtext('navcourselimit',new lang_string('navcourselimit','admin'),new lang_string('confignavcourselimit', 'admin'),20,PARAM_INT));
183     $temp->add(new admin_setting_configcheckbox('usesitenameforsitepages', new lang_string('usesitenameforsitepages', 'admin'), new lang_string('configusesitenameforsitepages', 'admin'), 0));
184     $temp->add(new admin_setting_configcheckbox('linkadmincategories', new lang_string('linkadmincategories', 'admin'), new lang_string('linkadmincategories_help', 'admin'), 1));
185     $temp->add(new admin_setting_configcheckbox('linkcoursesections', new lang_string('linkcoursesections', 'admin'), new lang_string('linkcoursesections_help', 'admin'), 0));
186     $temp->add(new admin_setting_configcheckbox('navshowfrontpagemods', new lang_string('navshowfrontpagemods', 'admin'), new lang_string('navshowfrontpagemods_help', 'admin'), 1));
187     $temp->add(new admin_setting_configcheckbox('navadduserpostslinks', new lang_string('navadduserpostslinks', 'admin'), new lang_string('navadduserpostslinks_help', 'admin'), 1));
189     $ADMIN->add('appearance', $temp);
191     // "htmlsettings" settingpage
192     $temp = new admin_settingpage('htmlsettings', new lang_string('htmlsettings', 'admin'));
193     $temp->add(new admin_setting_configcheckbox('formatstringstriptags', new lang_string('stripalltitletags', 'admin'), new lang_string('configstripalltitletags', 'admin'), 1));
194     $temp->add(new admin_setting_emoticons());
195     $ADMIN->add('appearance', $temp);
196     $ADMIN->add('appearance', new admin_externalpage('resetemoticons', new lang_string('emoticonsreset', 'admin'),
197         new moodle_url('/admin/resetemoticons.php'), 'moodle/site:config', true));
199     // "documentation" settingpage
200     $temp = new admin_settingpage('documentation', new lang_string('moodledocs'));
201     $temp->add(new admin_setting_configtext('docroot', new lang_string('docroot', 'admin'), new lang_string('configdocroot', 'admin'), 'http://docs.moodle.org', PARAM_URL));
202     $ltemp = array('' => get_string('forceno'));
203     $ltemp += get_string_manager()->get_list_of_translations(true);
204     $temp->add(new admin_setting_configselect('doclang', get_string('doclang', 'admin'), get_string('configdoclang', 'admin'), '', $ltemp));
205     $temp->add(new admin_setting_configcheckbox('doctonewwindow', new lang_string('doctonewwindow', 'admin'), new lang_string('configdoctonewwindow', 'admin'), 0));
206     $ADMIN->add('appearance', $temp);
208     $temp = new admin_externalpage('mypage', new lang_string('mypage', 'admin'), $CFG->wwwroot . '/my/indexsys.php',
209             'moodle/my:configsyspages');
210     $ADMIN->add('appearance', $temp);
212     $temp = new admin_externalpage('profilepage', new lang_string('myprofile', 'admin'), $CFG->wwwroot . '/user/profilesys.php',
213             'moodle/my:configsyspages');
214     $ADMIN->add('appearance', $temp);
216     // coursecontact is the person responsible for course - usually manages enrolments, receives notification, etc.
217     $temp = new admin_settingpage('coursecontact', new lang_string('courses'));
218     $temp->add(new admin_setting_special_coursecontact());
219     $temp->add(new admin_setting_configcheckbox('courselistshortnames',
220             new lang_string('courselistshortnames', 'admin'),
221             new lang_string('courselistshortnames_desc', 'admin'), 0));
222     $temp->add(new admin_setting_configtext('coursesperpage', new lang_string('coursesperpage', 'admin'), new lang_string('configcoursesperpage', 'admin'), 20, PARAM_INT));
223     $temp->add(new admin_setting_configtext('courseswithsummarieslimit', new lang_string('courseswithsummarieslimit', 'admin'), new lang_string('configcourseswithsummarieslimit', 'admin'), 10, PARAM_INT));
224     $temp->add(new admin_setting_configtext('courseoverviewfileslimit', new lang_string('courseoverviewfileslimit'),
225             new lang_string('configcourseoverviewfileslimit', 'admin'), 1, PARAM_INT));
226     $temp->add(new admin_setting_configtext('courseoverviewfilesext', new lang_string('courseoverviewfilesext'),
227             new lang_string('configcourseoverviewfilesext', 'admin'), '.jpg,.gif,.png'));
228     $ADMIN->add('appearance', $temp);
230     $temp = new admin_settingpage('ajax', new lang_string('ajaxuse'));
231     $temp->add(new admin_setting_configcheckbox('useexternalyui', new lang_string('useexternalyui', 'admin'), new lang_string('configuseexternalyui', 'admin'), 0));
232     $temp->add(new admin_setting_configcheckbox('yuicomboloading', new lang_string('yuicomboloading', 'admin'), new lang_string('configyuicomboloading', 'admin'), 1));
233     $setting = new admin_setting_configcheckbox('cachejs', new lang_string('cachejs', 'admin'), new lang_string('cachejs_help', 'admin'), 1);
234     $setting->set_updatedcallback('js_reset_all_caches');
235     $temp->add($setting);
236     $temp->add(new admin_setting_configcheckbox('modchooserdefault', new lang_string('modchooserdefault', 'admin'), new lang_string('configmodchooserdefault', 'admin'), 1));
237     $ADMIN->add('appearance', $temp);
239     // Link to tag management interface.
240     $url = new moodle_url('/tag/manage.php');
241     $hidden = empty($CFG->usetags);
242     $page = new admin_externalpage('managetags', new lang_string('managetags', 'tag'), $url, 'moodle/tag:manage', $hidden);
243     $ADMIN->add('appearance', $page);
245     $temp = new admin_settingpage('additionalhtml', new lang_string('additionalhtml', 'admin'));
246     $temp->add(new admin_setting_heading('additionalhtml_heading', new lang_string('additionalhtml_heading', 'admin'), new lang_string('additionalhtml_desc', 'admin')));
247     $temp->add(new admin_setting_configtextarea('additionalhtmlhead', new lang_string('additionalhtmlhead', 'admin'), new lang_string('additionalhtmlhead_desc', 'admin'), '', PARAM_RAW));
248     $temp->add(new admin_setting_configtextarea('additionalhtmltopofbody', new lang_string('additionalhtmltopofbody', 'admin'), new lang_string('additionalhtmltopofbody_desc', 'admin'), '', PARAM_RAW));
249     $temp->add(new admin_setting_configtextarea('additionalhtmlfooter', new lang_string('additionalhtmlfooter', 'admin'), new lang_string('additionalhtmlfooter_desc', 'admin'), '', PARAM_RAW));
250     $ADMIN->add('appearance', $temp);
252 } // end of speedup