MDL-10110 Adding validation for multichoice option single and multianswer
[moodle.git] / user / editadvanced.php
CommitLineData
ad6226fb 1<?php // $Id$
2
3 require_once('../config.php');
4 require_once($CFG->libdir.'/gdlib.php');
5 require_once($CFG->libdir.'/adminlib.php');
6 require_once($CFG->dirroot.'/user/editadvanced_form.php');
14a6b7e1 7 require_once($CFG->dirroot.'/user/editlib.php');
d8734783 8 require_once($CFG->dirroot.'/user/profile/lib.php');
2044a2b2 9 require_once($CFG->libdir .'/messagelib.php'); // Messagelib functions
ad6226fb 10
dcf6d93c 11 httpsrequired();
12
ad6226fb 13 $id = optional_param('id', $USER->id, PARAM_INT); // user id; -1 if creating new user
14 $course = optional_param('course', SITEID, PARAM_INT); // course id (defaults to Site)
15
5d910388 16 if (!$course = $DB->get_record('course', array('id'=>$course))) {
4e244ba8 17 print_error('invalidcourseid');
ad6226fb 18 }
29750da1 19 if (!empty($USER->newadminuser)) {
20 $PAGE->set_course($SITE);
d4a03c00 21 $PAGE->set_generaltype('maintenance');
29750da1 22 } else {
23 require_login($course);
24 }
ad6226fb 25
bb9a123a 26 if ($course->id == SITEID) {
27 $coursecontext = get_context_instance(CONTEXT_SYSTEM); // SYSTEM context
28 } else {
29 $coursecontext = get_context_instance(CONTEXT_COURSE, $course->id); // Course context
30 }
31 $systemcontext = get_context_instance(CONTEXT_SYSTEM);
32
ad6226fb 33 if ($id == -1) {
34 // creating new user
bb9a123a 35 require_capability('moodle/user:create', $systemcontext);
ad6226fb 36 $user = new object();
37 $user->id = -1;
38 $user->auth = 'manual';
39 $user->confirmed = 1;
80775ff3 40 $user->deleted = 0;
ad6226fb 41 } else {
42 // editing existing user
bb9a123a 43 require_capability('moodle/user:update', $systemcontext);
5d910388 44 if (!$user = $DB->get_record('user', array('id'=>$id))) {
4e244ba8 45 print_error('invaliduserid');
ad6226fb 46 }
47 }
48
49 // remote users cannot be edited
50 if ($user->id != -1 and is_mnet_remote_user($user)) {
51 redirect($CFG->wwwroot . "/user/view.php?id=$id&course={$course->id}");
52 }
53
fc4b2dec 54 if ($user->id != $USER->id and is_primary_admin($user->id)) { // Can't edit primary admin
ad6226fb 55 print_error('adminprimarynoedit');
56 }
57
58 if (isguestuser($user->id)) { // the real guest user can not be edited
59 print_error('guestnoeditprofileother');
60 }
61
f5fc83e8 62 if ($user->deleted) {
caa8363f 63 echo $OUTPUT->header();
8fa89bfd 64 echo $OUTPUT->heading(get_string('userdeleted'));
0ab75c34 65 echo $OUTPUT->footer();
f5fc83e8 66 die;
67 }
68
320c5e7b 69 if ($user->id == -1) {
70 admin_externalpage_setup('addnewuser', '', array('id' => -1));
71 } else if ($user->id != $USER->id) {
72 admin_externalpage_setup('editusers', '', array('id' => $user->id, 'course' => SITEID), $CFG->wwwroot . '/user/editadvanced.php');
73 }
74
14a6b7e1 75 //load user preferences
76 useredit_load_preferences($user);
77
bb6d3d34 78 //Load custom profile fields data
79 profile_load_data($user);
ad6226fb 80
c060fc6a 81 //User interests
1e1c51a3 82 if (!empty($CFG->usetags)) {
83 require_once($CFG->dirroot.'/tag/lib.php');
c060fc6a 84 $user->interests = tag_get_tags_array('user', $id);
1e1c51a3 85 }
86
ad6226fb 87 //create form
d8734783 88 $userform = new user_editadvanced_form();
ad6226fb 89 $userform->set_data($user);
90
294ce987 91 if ($usernew = $userform->get_data()) {
ad6226fb 92 add_to_log($course->id, 'user', 'update', "view.php?id=$user->id&course=$course->id", '');
93
d8734783 94 if (empty($usernew->auth)) {
95 //user editing self
96 $authplugin = get_auth_plugin($user->auth);
14a6b7e1 97 unset($usernew->auth); //can not change/remove
d8734783 98 } else {
99 $authplugin = get_auth_plugin($usernew->auth);
100 }
ad6226fb 101
04f639a0 102 $usernew->username = trim($usernew->username);
ad6226fb 103 $usernew->timemodified = time();
104
105 if ($usernew->id == -1) {
14a6b7e1 106 //TODO check out if it makes sense to create account with this auth plugin and what to do with the password
ad6226fb 107 unset($usernew->id);
108 $usernew->mnethostid = $CFG->mnet_localhost_id; // always local user
d8734783 109 $usernew->confirmed = 1;
bb6d3d34 110 $usernew->password = hash_internal_user_password($usernew->newpassword);
2a7eff41 111 $usernew->id = $DB->insert_record('user', $usernew);
2942a5cd 112 $usercreated = true;
5e61d1a4 113
ad6226fb 114 } else {
2a7eff41 115 $DB->update_record('user', $usernew);
6bc1e5d5 116 // pass a true $userold here
294ce987 117 if (! $authplugin->user_update($user, $userform->get_data())) {
6bc1e5d5 118 // auth update failed, rollback for moodle
5d910388 119 $DB->update_record('user', $user);
4e244ba8 120 print_error('cannotupdateuseronexauth', '', '', $user->auth);
6bc1e5d5 121 }
bb6d3d34 122
123 //set new password if specified
124 if (!empty($usernew->newpassword)) {
125 if ($authplugin->can_change_password()) {
6bc1e5d5 126 if (!$authplugin->user_update_password($usernew, $usernew->newpassword)){
4e244ba8 127 print_error('cannotupdatepasswordonextauth', '', '', $usernew->auth);
ad6226fb 128 }
ad6226fb 129 }
130 }
2942a5cd 131 $usercreated = false;
ad6226fb 132 }
133
98bc6446 134 $usercontext = get_context_instance(CONTEXT_USER, $usernew->id);
98bc6446 135
ad6226fb 136 //update preferences
14a6b7e1 137 useredit_update_user_preference($usernew);
ad6226fb 138
1e1c51a3 139 // update tags
140 if (!empty($CFG->usetags)) {
141 useredit_update_interests($usernew, $usernew->interests);
142 }
143
ad6226fb 144 //update user picture
d8734783 145 if (!empty($CFG->gdversion)) {
14a6b7e1 146 useredit_update_picture($usernew, $userform);
ad6226fb 147 }
148
149 // update mail bounces
14a6b7e1 150 useredit_update_bounces($user, $usernew);
ad6226fb 151
1e1c51a3 152 // update forum track preference
14a6b7e1 153 useredit_update_trackforums($user, $usernew);
ad6226fb 154
bb6d3d34 155 // save custom profile fields data
156 profile_save_data($usernew);
ad6226fb 157
2942a5cd 158 // reload from db
159 $usernew = $DB->get_record('user', array('id'=>$usernew->id));
5e61d1a4 160
2942a5cd 161 // trigger events
162 if ($usercreated) {
2044a2b2 163 //set default message preferences
164 if (!message_set_default_message_preferences( $usernew )){
818dc096 165 print_error('cannotsavemessageprefs', 'message');
3b120e46 166 }
2942a5cd 167 events_trigger('user_created', $usernew);
168 } else {
169 events_trigger('user_updated', $usernew);
170 }
171
ad6226fb 172 if ($user->id == $USER->id) {
173 // Override old $USER session variable
2942a5cd 174 foreach ((array)$usernew as $variable => $value) {
ad6226fb 175 $USER->$variable = $value;
176 }
177 if (!empty($USER->newadminuser)) {
178 unset($USER->newadminuser);
220a90c5 179 // apply defaults again - some of them might depend on admin user info, backup, roles, etc.
180 admin_apply_default_settings(NULL , false);
ad6226fb 181 // redirect to admin/ to continue with installation
182 redirect("$CFG->wwwroot/$CFG->admin/");
14a6b7e1 183 } else {
ad6226fb 184 redirect("$CFG->wwwroot/user/view.php?id=$USER->id&course=$course->id");
5e61d1a4 185 }
afb5b0ae 186 } else {
e8656bef 187 session_gc(); // remove stale sessions
b0c90e6e 188 redirect("$CFG->wwwroot/$CFG->admin/user.php");
ad6226fb 189 }
190 //never reached
191 }
192
193
194/// Display page header
b0c90e6e 195 if ($user->id == -1 or ($user->id != $USER->id)) {
ad6226fb 196 if ($user->id == -1) {
1ae083e4 197 admin_externalpage_print_header();
ad6226fb 198 } else {
1ae083e4 199 admin_externalpage_print_header();
ad6226fb 200 $userfullname = fullname($user, true);
8fa89bfd 201 echo $OUTPUT->heading($userfullname);
ad6226fb 202 }
203 } else if (!empty($USER->newadminuser)) {
770f0cea 204 $strinstallation = get_string('installation', 'install');
e2d84bf3 205 $strprimaryadminsetup = get_string('primaryadminsetup');
caa8363f 206
207 $PAGE->navbar->add($strprimaryadminsetup);
208 $PAGE->set_title($strinstallation);
209 $PAGE->set_heading($strinstallation);
210 $PAGE->set_cacheable(false);
211
212 echo $OUTPUT->header();
5e61d1a4 213 echo $OUTPUT->box(get_string('configintroadmin', 'admin'), 'generalbox boxwidthnormal boxaligncenter');
ad6226fb 214 echo '<br />';
215 } else {
216 $streditmyprofile = get_string('editmyprofile');
d8734783 217 $strparticipants = get_string('participants');
218 $strnewuser = get_string('newuser');
219 $userfullname = fullname($user, true);
0be6f678 220
caa8363f 221 $link = null;
bb9a123a 222 if (has_capability('moodle/course:viewparticipants', $coursecontext) || has_capability('moodle/site:viewparticipants', $systemcontext)) {
caa8363f 223 $link = new moodle_url($CFG->wwwroot."/user/index.php", array('id'=>$course->id));
bb9a123a 224 }
91152a35 225 $PAGE->navbar->add($strparticipants, $link);
caa8363f 226 $link = new moodle_url($CFG->wwwroot.'/user/view.php', array('id'=>$user->id, 'course'=>$course->id));
91152a35 227 $PAGE->navbar->add($userfullname, $link);
caa8363f 228 $PAGE->navbar->add($streditmyprofile);
229
230 $PAGE->set_title("$course->shortname: $streditmyprofile");
231 $PAGE->set_heading($course->fullname);
0be6f678 232
caa8363f 233 echo $OUTPUT->header();
ad6226fb 234 /// Print tabs at the top
235 $showroles = 1;
236 $currenttab = 'editprofile';
237 require('tabs.php');
238 }
239
240/// Finally display THE form
241 $userform->display();
242
243/// and proper footer
0ab75c34 244 echo $OUTPUT->footer();
ad6226fb 245
246?>