|
Moodle
2.2.1
http://www.collinsharper.com
|
00001 <?php 00002 00003 // This file is part of Moodle - http://moodle.org/ 00004 // 00005 // Moodle is free software: you can redistribute it and/or modify 00006 // it under the terms of the GNU General Public License as published by 00007 // the Free Software Foundation, either version 3 of the License, or 00008 // (at your option) any later version. 00009 // 00010 // Moodle is distributed in the hope that it will be useful, 00011 // but WITHOUT ANY WARRANTY; without even the implied warranty of 00012 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 00013 // GNU General Public License for more details. 00014 // 00015 // You should have received a copy of the GNU General Public License 00016 // along with Moodle. If not, see <http://www.gnu.org/licenses/>. 00017 00026 require_once('../config.php'); 00027 require_once($CFG->libdir.'/gdlib.php'); 00028 require_once($CFG->libdir.'/adminlib.php'); 00029 require_once($CFG->dirroot.'/user/editadvanced_form.php'); 00030 require_once($CFG->dirroot.'/user/editlib.php'); 00031 require_once($CFG->dirroot.'/user/profile/lib.php'); 00032 00033 //HTTPS is required in this page when $CFG->loginhttps enabled 00034 $PAGE->https_required(); 00035 00036 $id = optional_param('id', $USER->id, PARAM_INT); // user id; -1 if creating new user 00037 $course = optional_param('course', SITEID, PARAM_INT); // course id (defaults to Site) 00038 00039 $PAGE->set_url('/user/editadvanced.php', array('course'=>$course, 'id'=>$id)); 00040 00041 $course = $DB->get_record('course', array('id'=>$course), '*', MUST_EXIST); 00042 00043 if (!empty($USER->newadminuser)) { 00044 $PAGE->set_course($SITE); 00045 $PAGE->set_pagelayout('maintenance'); 00046 } else { 00047 require_login($course); 00048 $PAGE->set_pagelayout('admin'); 00049 } 00050 00051 if ($course->id == SITEID) { 00052 $coursecontext = get_context_instance(CONTEXT_SYSTEM); // SYSTEM context 00053 } else { 00054 $coursecontext = get_context_instance(CONTEXT_COURSE, $course->id); // Course context 00055 } 00056 $systemcontext = get_context_instance(CONTEXT_SYSTEM); 00057 00058 if ($id == -1) { 00059 // creating new user 00060 $user = new stdClass(); 00061 $user->id = -1; 00062 $user->auth = 'manual'; 00063 $user->confirmed = 1; 00064 $user->deleted = 0; 00065 require_capability('moodle/user:create', $systemcontext); 00066 admin_externalpage_setup('addnewuser', '', array('id' => -1)); 00067 } else { 00068 // editing existing user 00069 require_capability('moodle/user:update', $systemcontext); 00070 $user = $DB->get_record('user', array('id'=>$id), '*', MUST_EXIST); 00071 $PAGE->set_context(get_context_instance(CONTEXT_USER, $user->id)); 00072 if ($user->id == $USER->id) { 00073 if ($course->id != SITEID && $node = $PAGE->navigation->find($course->id, navigation_node::TYPE_COURSE)) { 00074 $node->make_active(); 00075 $PAGE->navbar->includesettingsbase = true; 00076 } 00077 } else { 00078 $PAGE->navigation->extend_for_user($user); 00079 } 00080 } 00081 00082 // remote users cannot be edited 00083 if ($user->id != -1 and is_mnet_remote_user($user)) { 00084 redirect($CFG->wwwroot . "/user/view.php?id=$id&course={$course->id}"); 00085 } 00086 00087 if ($user->id != $USER->id and is_siteadmin($user) and !is_siteadmin($USER)) { // Only admins may edit other admins 00088 print_error('useradmineditadmin'); 00089 } 00090 00091 if (isguestuser($user->id)) { // the real guest user can not be edited 00092 print_error('guestnoeditprofileother'); 00093 } 00094 00095 if ($user->deleted) { 00096 echo $OUTPUT->header(); 00097 echo $OUTPUT->heading(get_string('userdeleted')); 00098 echo $OUTPUT->footer(); 00099 die; 00100 } 00101 00102 //load user preferences 00103 useredit_load_preferences($user); 00104 00105 //Load custom profile fields data 00106 profile_load_data($user); 00107 00108 //User interests 00109 if (!empty($CFG->usetags)) { 00110 require_once($CFG->dirroot.'/tag/lib.php'); 00111 $user->interests = tag_get_tags_array('user', $id); 00112 } 00113 00114 if ($user->id !== -1) { 00115 $usercontext = get_context_instance(CONTEXT_USER, $user->id); 00116 $editoroptions = array( 00117 'maxfiles' => EDITOR_UNLIMITED_FILES, 00118 'maxbytes' => $CFG->maxbytes, 00119 'trusttext' => false, 00120 'forcehttps' => false, 00121 'context' => $usercontext 00122 ); 00123 00124 $user = file_prepare_standard_editor($user, 'description', $editoroptions, $usercontext, 'user', 'profile', 0); 00125 } else { 00126 $usercontext = null; 00127 // This is a new user, we don't want to add files here 00128 $editoroptions = array( 00129 'maxfiles'=>0, 00130 'maxbytes'=>0, 00131 'trusttext'=>false, 00132 'forcehttps'=>false, 00133 'context' => $coursecontext 00134 ); 00135 } 00136 00137 //create form 00138 $userform = new user_editadvanced_form(null, array('editoroptions'=>$editoroptions)); 00139 $userform->set_data($user); 00140 00141 if ($usernew = $userform->get_data()) { 00142 add_to_log($course->id, 'user', 'update', "view.php?id=$user->id&course=$course->id", ''); 00143 00144 if (empty($usernew->auth)) { 00145 //user editing self 00146 $authplugin = get_auth_plugin($user->auth); 00147 unset($usernew->auth); //can not change/remove 00148 } else { 00149 $authplugin = get_auth_plugin($usernew->auth); 00150 } 00151 00152 $usernew->timemodified = time(); 00153 00154 if ($usernew->id == -1) { 00155 //TODO check out if it makes sense to create account with this auth plugin and what to do with the password 00156 unset($usernew->id); 00157 $usernew = file_postupdate_standard_editor($usernew, 'description', $editoroptions, null, 'user', 'profile', null); 00158 $usernew->mnethostid = $CFG->mnet_localhost_id; // always local user 00159 $usernew->confirmed = 1; 00160 $usernew->timecreated = time(); 00161 $usernew->password = hash_internal_user_password($usernew->newpassword); 00162 $usernew->id = $DB->insert_record('user', $usernew); 00163 $usercreated = true; 00164 00165 } else { 00166 $usernew = file_postupdate_standard_editor($usernew, 'description', $editoroptions, $usercontext, 'user', 'profile', 0); 00167 $DB->update_record('user', $usernew); 00168 // pass a true $userold here 00169 if (! $authplugin->user_update($user, $userform->get_data())) { 00170 // auth update failed, rollback for moodle 00171 $DB->update_record('user', $user); 00172 print_error('cannotupdateuseronexauth', '', '', $user->auth); 00173 } 00174 00175 //set new password if specified 00176 if (!empty($usernew->newpassword)) { 00177 if ($authplugin->can_change_password()) { 00178 if (!$authplugin->user_update_password($usernew, $usernew->newpassword)){ 00179 print_error('cannotupdatepasswordonextauth', '', '', $usernew->auth); 00180 } 00181 unset_user_preference('create_password', $usernew); // prevent cron from generating the password 00182 } 00183 } 00184 00185 // force logout if user just suspended 00186 if (isset($usernew->suspended) and $usernew->suspended and !$user->suspended) { 00187 session_kill_user($user->id); 00188 } 00189 00190 $usercreated = false; 00191 } 00192 00193 $usercontext = get_context_instance(CONTEXT_USER, $usernew->id); 00194 00195 //update preferences 00196 useredit_update_user_preference($usernew); 00197 00198 // update tags 00199 if (!empty($CFG->usetags) and empty($USER->newadminuser)) { 00200 useredit_update_interests($usernew, $usernew->interests); 00201 } 00202 00203 //update user picture 00204 if (!empty($CFG->gdversion) and empty($USER->newadminuser)) { 00205 useredit_update_picture($usernew, $userform); 00206 } 00207 00208 // update mail bounces 00209 useredit_update_bounces($user, $usernew); 00210 00211 // update forum track preference 00212 useredit_update_trackforums($user, $usernew); 00213 00214 // save custom profile fields data 00215 profile_save_data($usernew); 00216 00217 // reload from db 00218 $usernew = $DB->get_record('user', array('id'=>$usernew->id)); 00219 00220 // trigger events 00221 if ($usercreated) { 00222 events_trigger('user_created', $usernew); 00223 } else { 00224 events_trigger('user_updated', $usernew); 00225 } 00226 00227 if ($user->id == $USER->id) { 00228 // Override old $USER session variable 00229 foreach ((array)$usernew as $variable => $value) { 00230 $USER->$variable = $value; 00231 } 00232 // preload custom fields 00233 profile_load_custom_fields($USER); 00234 00235 if (!empty($USER->newadminuser)) { 00236 unset($USER->newadminuser); 00237 // apply defaults again - some of them might depend on admin user info, backup, roles, etc. 00238 admin_apply_default_settings(NULL , false); 00239 // redirect to admin/ to continue with installation 00240 redirect("$CFG->wwwroot/$CFG->admin/"); 00241 } else { 00242 redirect("$CFG->wwwroot/user/view.php?id=$USER->id&course=$course->id"); 00243 } 00244 } else { 00245 session_gc(); // remove stale sessions 00246 redirect("$CFG->wwwroot/$CFG->admin/user.php"); 00247 } 00248 //never reached 00249 } 00250 00251 // make sure we really are on the https page when https login required 00252 $PAGE->verify_https_required(); 00253 00254 00256 if ($user->id == -1 or ($user->id != $USER->id)) { 00257 if ($user->id == -1) { 00258 echo $OUTPUT->header(); 00259 } else { 00260 $PAGE->set_heading($SITE->fullname); 00261 echo $OUTPUT->header(); 00262 $userfullname = fullname($user, true); 00263 echo $OUTPUT->heading($userfullname); 00264 } 00265 } else if (!empty($USER->newadminuser)) { 00266 $strinstallation = get_string('installation', 'install'); 00267 $strprimaryadminsetup = get_string('primaryadminsetup'); 00268 00269 $PAGE->navbar->add($strprimaryadminsetup); 00270 $PAGE->set_title($strinstallation); 00271 $PAGE->set_heading($strinstallation); 00272 $PAGE->set_cacheable(false); 00273 00274 echo $OUTPUT->header(); 00275 echo $OUTPUT->box(get_string('configintroadmin', 'admin'), 'generalbox boxwidthnormal boxaligncenter'); 00276 echo '<br />'; 00277 } else { 00278 $streditmyprofile = get_string('editmyprofile'); 00279 $strparticipants = get_string('participants'); 00280 $strnewuser = get_string('newuser'); 00281 $userfullname = fullname($user, true); 00282 00283 $PAGE->set_title("$course->shortname: $streditmyprofile"); 00284 $PAGE->set_heading($course->fullname); 00285 00286 echo $OUTPUT->header(); 00287 echo $OUTPUT->heading($userfullname); 00288 } 00289 00291 $userform->display(); 00292 00294 echo $OUTPUT->footer(); 00295