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 | ?> |