MDL-62277 Theme boost: add badge criteria layout
[moodle.git] / admin / settings / users.php
1 <?php
3 // This file defines settingpages and externalpages under the "users" category
5 $ADMIN->add('users', new admin_category('accounts', new lang_string('accounts', 'admin')));
6 $ADMIN->add('users', new admin_category('roles', new lang_string('permissions', 'role')));
7 $ADMIN->add('users', new admin_category('privacy', new lang_string('privacyandpolicies', 'admin')));
9 if ($hassiteconfig
10  or has_capability('moodle/user:create', $systemcontext)
11  or has_capability('moodle/user:update', $systemcontext)
12  or has_capability('moodle/user:delete', $systemcontext)
13  or has_capability('moodle/role:manage', $systemcontext)
14  or has_capability('moodle/role:assign', $systemcontext)
15  or has_capability('moodle/cohort:manage', $systemcontext)
16  or has_capability('moodle/cohort:view', $systemcontext)) { // speedup for non-admins, add all caps used on this page
19     // stuff under the "accounts" subcategory
20     $ADMIN->add('accounts', new admin_externalpage('editusers', new lang_string('userlist','admin'), "$CFG->wwwroot/$CFG->admin/user.php", array('moodle/user:update', 'moodle/user:delete')));
21     $ADMIN->add('accounts', new admin_externalpage('userbulk', new lang_string('userbulk','admin'), "$CFG->wwwroot/$CFG->admin/user/user_bulk.php", array('moodle/user:update', 'moodle/user:delete')));
22     $ADMIN->add('accounts', new admin_externalpage('addnewuser', new lang_string('addnewuser'), "$CFG->wwwroot/user/editadvanced.php?id=-1", 'moodle/user:create'));
24     // "User default preferences" settingpage.
25     $temp = new admin_settingpage('userdefaultpreferences', new lang_string('userdefaultpreferences', 'admin'));
26     if ($ADMIN->fulltree) {
27         $choices = array();
28         $choices['0'] = new lang_string('emaildisplayno');
29         $choices['1'] = new lang_string('emaildisplayyes');
30         $choices['2'] = new lang_string('emaildisplaycourse');
31         $temp->add(new admin_setting_configselect('defaultpreference_maildisplay', new lang_string('emaildisplay'),
32             new lang_string('emaildisplay_help'), 2, $choices));
34         $choices = array();
35         $choices['0'] = new lang_string('textformat');
36         $choices['1'] = new lang_string('htmlformat');
37         $temp->add(new admin_setting_configselect('defaultpreference_mailformat', new lang_string('emailformat'), '', 1, $choices));
39         $choices = array();
40         $choices['0'] = new lang_string('emaildigestoff');
41         $choices['1'] = new lang_string('emaildigestcomplete');
42         $choices['2'] = new lang_string('emaildigestsubjects');
43         $temp->add(new admin_setting_configselect('defaultpreference_maildigest', new lang_string('emaildigest'),
44             new lang_string('emaildigest_help'), 0, $choices));
47         $choices = array();
48         $choices['1'] = new lang_string('autosubscribeyes');
49         $choices['0'] = new lang_string('autosubscribeno');
50         $temp->add(new admin_setting_configselect('defaultpreference_autosubscribe', new lang_string('autosubscribe'),
51             '', 1, $choices));
53         $choices = array();
54         $choices['0'] = new lang_string('trackforumsno');
55         $choices['1'] = new lang_string('trackforumsyes');
56         $temp->add(new admin_setting_configselect('defaultpreference_trackforums', new lang_string('trackforums'),
57             '', 0, $choices));
58     }
59     $ADMIN->add('accounts', $temp);
61     $ADMIN->add('accounts', new admin_externalpage('profilefields', new lang_string('profilefields','admin'), "$CFG->wwwroot/user/profile/index.php", 'moodle/site:config'));
62     $ADMIN->add('accounts', new admin_externalpage('cohorts', new lang_string('cohorts', 'cohort'), $CFG->wwwroot . '/cohort/index.php', array('moodle/cohort:manage', 'moodle/cohort:view')));
65     // stuff under the "roles" subcategory
67     // "userpolicies" settingpage
68     $temp = new admin_settingpage('userpolicies', new lang_string('userpolicies', 'admin'));
69     if ($ADMIN->fulltree) {
70         if (!during_initial_install()) {
71             $context = context_system::instance();
73             $otherroles      = array();
74             $guestroles      = array();
75             $userroles       = array();
76             $creatornewroles = array();
78             $defaultteacherid = null;
79             $defaultuserid    = null;
80             $defaultguestid   = null;
82             $roles = role_fix_names(get_all_roles(), null, ROLENAME_ORIGINALANDSHORT);
83             foreach ($roles as $role) {
84                 $rolename = $role->localname;
85                 switch ($role->archetype) {
86                     case 'manager':
87                         $creatornewroles[$role->id] = $rolename;
88                         break;
89                     case 'coursecreator':
90                         break;
91                     case 'editingteacher':
92                         $defaultteacherid = isset($defaultteacherid) ? $defaultteacherid : $role->id;
93                         $creatornewroles[$role->id] = $rolename;
94                         break;
95                     case 'teacher':
96                         $creatornewroles[$role->id] = $rolename;
97                         break;
98                     case 'student':
99                         break;
100                     case 'guest':
101                         $defaultguestid = isset($defaultguestid) ? $defaultguestid : $role->id;
102                         $guestroles[$role->id] = $rolename;
103                         break;
104                     case 'user':
105                         $defaultuserid = isset($defaultuserid) ? $defaultuserid : $role->id;
106                         $userroles[$role->id] = $rolename;
107                         break;
108                     case 'frontpage':
109                         break;
110                     default:
111                         $creatornewroles[$role->id] = $rolename;
112                         $otherroles[$role->id] = $rolename;
113                         break;
114                 }
115             }
117             if (empty($guestroles)) {
118                 $guestroles[0] = new lang_string('none');
119                 $defaultguestid = 0;
120             }
122             if (empty($userroles)) {
123                 $userroles[0] = new lang_string('none');
124                 $defaultuserid = 0;
125             }
127             $restorersnewrole = $creatornewroles;
128             $restorersnewrole[0] = new lang_string('none');
130             $temp->add(new admin_setting_configselect('notloggedinroleid', new lang_string('notloggedinroleid', 'admin'),
131                           new lang_string('confignotloggedinroleid', 'admin'), $defaultguestid, ($guestroles + $otherroles)));
132             $temp->add(new admin_setting_configselect('guestroleid', new lang_string('guestroleid', 'admin'),
133                           new lang_string('guestroleid_help', 'admin'), $defaultguestid, ($guestroles + $otherroles)));
134             $temp->add(new admin_setting_configselect('defaultuserroleid', new lang_string('defaultuserroleid', 'admin'),
135                           new lang_string('configdefaultuserroleid', 'admin'), $defaultuserid, ($userroles + $otherroles)));
136             $temp->add(new admin_setting_configselect('creatornewroleid', new lang_string('creatornewroleid', 'admin'),
137                           new lang_string('creatornewroleid_help', 'admin'), $defaultteacherid, $creatornewroles));
138             $temp->add(new admin_setting_configselect('restorernewroleid', new lang_string('restorernewroleid', 'admin'),
139                           new lang_string('restorernewroleid_help', 'admin'), $defaultteacherid, $restorersnewrole));
141             // release memory
142             unset($otherroles);
143             unset($guestroles);
144             unset($userroles);
145             unset($creatornewroles);
146             unset($restorersnewrole);
147         }
149         $temp->add(new admin_setting_configcheckbox('autologinguests', new lang_string('autologinguests', 'admin'), new lang_string('configautologinguests', 'admin'), 0));
151         $temp->add(new admin_setting_configmultiselect('hiddenuserfields', new lang_string('hiddenuserfields', 'admin'),
152                    new lang_string('confighiddenuserfields', 'admin'), array(),
153                        array('description' => new lang_string('description'),
154                              'email' => new lang_string('email'),
155                              'city' => new lang_string('city'),
156                              'country' => new lang_string('country'),
157                              'timezone' => new lang_string('timezone'),
158                              'webpage' => new lang_string('webpage'),
159                              'icqnumber' => new lang_string('icqnumber'),
160                              'skypeid' => new lang_string('skypeid'),
161                              'yahooid' => new lang_string('yahooid'),
162                              'aimid' => new lang_string('aimid'),
163                              'msnid' => new lang_string('msnid'),
164                              'firstaccess' => new lang_string('firstaccess'),
165                              'lastaccess' => new lang_string('lastaccess'),
166                              'lastip' => new lang_string('lastip'),
167                              'mycourses' => new lang_string('mycourses'),
168                              'groups' => new lang_string('groups'),
169                              'suspended' => new lang_string('suspended', 'auth'),
170                        )));
172         // Select fields to display as part of user identity (only to those
173         // with moodle/site:viewuseridentity).
174         // Options include fields from the user table that might be helpful to
175         // distinguish when adding or listing users ('I want to add the John
176         // Smith from Science faculty').
177         // Username is not included as an option because in some sites, it might
178         // be a security problem to reveal usernames even to trusted staff.
179         // Custom user profile fields are not currently supported.
180         $temp->add(new admin_setting_configmulticheckbox('showuseridentity',
181                 new lang_string('showuseridentity', 'admin'),
182                 new lang_string('showuseridentity_desc', 'admin'), array('email' => 1), array(
183                     'idnumber'    => new lang_string('idnumber'),
184                     'email'       => new lang_string('email'),
185                     'phone1'      => new lang_string('phone1'),
186                     'phone2'      => new lang_string('phone2'),
187                     'department'  => new lang_string('department'),
188                     'institution' => new lang_string('institution'),
189                     'city'        => new lang_string('city'),
190                     'country'     => new lang_string('country'),
191                 )));
192         $setting = new admin_setting_configtext('fullnamedisplay', new lang_string('fullnamedisplay', 'admin'),
193             new lang_string('configfullnamedisplay', 'admin'), 'language', PARAM_TEXT, 50);
194         $setting->set_force_ltr(true);
195         $temp->add($setting);
196         $temp->add(new admin_setting_configtext('alternativefullnameformat', new lang_string('alternativefullnameformat', 'admin'),
197                 new lang_string('alternativefullnameformat_desc', 'admin'),
198                 'language', PARAM_RAW, 50));
199         $temp->add(new admin_setting_configtext('maxusersperpage', new lang_string('maxusersperpage','admin'), new lang_string('configmaxusersperpage','admin'), 100, PARAM_INT));
200         $temp->add(new admin_setting_configcheckbox('enablegravatar', new lang_string('enablegravatar', 'admin'), new lang_string('enablegravatar_help', 'admin'), 0));
201         $temp->add(new admin_setting_configtext('gravatardefaulturl', new lang_string('gravatardefaulturl', 'admin'), new lang_string('gravatardefaulturl_help', 'admin'), 'mm'));
202     }
204     $ADMIN->add('roles', $temp);
206     if (is_siteadmin()) {
207         $ADMIN->add('roles', new admin_externalpage('admins', new lang_string('siteadministrators', 'role'), "$CFG->wwwroot/$CFG->admin/roles/admins.php"));
208     }
209     $ADMIN->add('roles', new admin_externalpage('defineroles', new lang_string('defineroles', 'role'), "$CFG->wwwroot/$CFG->admin/roles/manage.php", 'moodle/role:manage'));
210     $ADMIN->add('roles', new admin_externalpage('assignroles', new lang_string('assignglobalroles', 'role'), "$CFG->wwwroot/$CFG->admin/roles/assign.php?contextid=".$systemcontext->id, 'moodle/role:assign'));
211     $ADMIN->add('roles', new admin_externalpage('checkpermissions', new lang_string('checkglobalpermissions', 'role'), "$CFG->wwwroot/$CFG->admin/roles/check.php?contextid=".$systemcontext->id, array('moodle/role:assign', 'moodle/role:safeoverride', 'moodle/role:override', 'moodle/role:manage')));
213 } // end of speedup
215 // Privacy settings.
216 if ($hassiteconfig) {
217     $temp = new admin_settingpage('privacysettings', new lang_string('privacysettings', 'admin'));
219     $options = array(
220         0 => get_string('no'),
221         1 => get_string('yes')
222     );
223     $url = new moodle_url('/admin/settings.php?section=supportcontact');
224     $url = $url->out();
225     $setting = new admin_setting_configselect('agedigitalconsentverification',
226         new lang_string('agedigitalconsentverification', 'admin'),
227         new lang_string('agedigitalconsentverification_desc', 'admin', $url), 0, $options);
228     $setting->set_force_ltr(true);
229     $temp->add($setting);
231     $setting = new admin_setting_agedigitalconsentmap('agedigitalconsentmap',
232         new lang_string('ageofdigitalconsentmap', 'admin'),
233         new lang_string('ageofdigitalconsentmap_desc', 'admin'),
234         // See {@link https://gdpr-info.eu/art-8-gdpr/}.
235         implode(PHP_EOL, [
236             '*, 16',
237             'AT, 14',
238             'CZ, 13',
239             'DE, 14',
240             'DK, 13',
241             'ES, 13',
242             'FI, 15',
243             'GB, 13',
244             'HU, 14',
245             'IE, 13',
246             'LT, 16',
247             'LU, 16',
248             'NL, 16',
249             'PL, 13',
250             'SE, 13',
251         ]),
252         PARAM_RAW
253     );
254     $temp->add($setting);
256     $ADMIN->add('privacy', $temp);
258     // Policy settings.
259     $temp = new admin_settingpage('policysettings', new lang_string('policysettings', 'admin'));
260     $temp->add(new admin_settings_sitepolicy_handler_select('sitepolicyhandler', new lang_string('sitepolicyhandler', 'core_admin'),
261         new lang_string('sitepolicyhandler_desc', 'core_admin')));
262     $temp->add(new admin_setting_configtext('sitepolicy', new lang_string('sitepolicy', 'core_admin'),
263         new lang_string('sitepolicy_help', 'core_admin'), '', PARAM_RAW));
264     $temp->add(new admin_setting_configtext('sitepolicyguest', new lang_string('sitepolicyguest', 'core_admin'),
265         new lang_string('sitepolicyguest_help', 'core_admin'), (isset($CFG->sitepolicy) ? $CFG->sitepolicy : ''), PARAM_RAW));
267     $ADMIN->add('privacy', $temp);