mirror of
https://github.com/moodle/moodle.git
synced 2025-08-05 00:46:50 +02:00

new function course_setup() thats does proper $CFG-> , locale and themes setup much sooner than print_header() originally (needed for MDL-8067), cleanup of forgotten global $course issues MDL-8067 Fixed several $HTTPSREQUIRED issues - html editor now loads from https (the old hack did not wotk with IE7, new hack is uglier but works), fixed formlibs images (we can not set them in library global scope, we must wait for httpsrequired() and require_login() and od that in function), fixed links in meta.php, fixed help images fixed setting of new $USER values in user edit forms
198 lines
7.5 KiB
PHP
198 lines
7.5 KiB
PHP
<?php // $Id$
|
|
|
|
require_once('../config.php');
|
|
require_once($CFG->libdir.'/gdlib.php');
|
|
require_once($CFG->libdir.'/adminlib.php');
|
|
require_once($CFG->dirroot.'/user/editadvanced_form.php');
|
|
require_once($CFG->dirroot.'/user/editlib.php');
|
|
require_once($CFG->dirroot.'/user/profile/lib.php');
|
|
|
|
httpsrequired();
|
|
|
|
$id = optional_param('id', $USER->id, PARAM_INT); // user id; -1 if creating new user
|
|
$course = optional_param('course', SITEID, PARAM_INT); // course id (defaults to Site)
|
|
|
|
if (!$course = get_record('course', 'id', $course)) {
|
|
error('Course ID was incorrect');
|
|
}
|
|
require_login($course->id);
|
|
|
|
if ($id == -1) {
|
|
// creating new user
|
|
require_capability('moodle/user:create', get_context_instance(CONTEXT_SYSTEM, SITEID));
|
|
$user = new object();
|
|
$user->id = -1;
|
|
$user->auth = 'manual';
|
|
$user->confirmed = 1;
|
|
} else {
|
|
// editing existing user
|
|
require_capability('moodle/user:update', get_context_instance(CONTEXT_SYSTEM, SITEID));
|
|
if (!$user = get_record('user', 'id', $id)) {
|
|
error('User ID was incorrect');
|
|
}
|
|
}
|
|
|
|
// remote users cannot be edited
|
|
if ($user->id != -1 and is_mnet_remote_user($user)) {
|
|
redirect($CFG->wwwroot . "/user/view.php?id=$id&course={$course->id}");
|
|
}
|
|
|
|
$mainadmin = get_admin();
|
|
if ($user->id != $USER->id and $user->id == $mainadmin->id) { // Can't edit primary admin
|
|
print_error('adminprimarynoedit');
|
|
}
|
|
|
|
if (isguestuser($user->id)) { // the real guest user can not be edited
|
|
print_error('guestnoeditprofileother');
|
|
}
|
|
|
|
//load user preferences
|
|
useredit_load_preferences($user);
|
|
|
|
//Load custom profile fields data
|
|
profile_load_data($user);
|
|
|
|
//create form
|
|
$userform = new user_editadvanced_form();
|
|
$userform->set_data($user);
|
|
|
|
if ($usernew = $userform->get_data()) {
|
|
add_to_log($course->id, 'user', 'update', "view.php?id=$user->id&course=$course->id", '');
|
|
|
|
if (empty($usernew->auth)) {
|
|
//user editing self
|
|
$authplugin = get_auth_plugin($user->auth);
|
|
unset($usernew->auth); //can not change/remove
|
|
} else {
|
|
$authplugin = get_auth_plugin($usernew->auth);
|
|
}
|
|
|
|
$usernew->username = trim($usernew->username);
|
|
$usernew->timemodified = time();
|
|
|
|
if ($usernew->id == -1) {
|
|
//TODO check out if it makes sense to create account with this auth plugin and what to do with the password
|
|
unset($usernew->id);
|
|
$usernew->mnethostid = $CFG->mnet_localhost_id; // always local user
|
|
$usernew->confirmed = 1;
|
|
$usernew->password = hash_internal_user_password($usernew->newpassword);
|
|
if (!$usernew->id = insert_record('user', $usernew)) {
|
|
error('Error creating user record');
|
|
}
|
|
} else {
|
|
if (!update_record('user', $usernew)) {
|
|
error('Error updating user record');
|
|
}
|
|
if (method_exists($authplugin, 'user_update')){
|
|
// pass a true $userold here
|
|
if (! $authplugin->user_update($user, $userform->get_data(false))) {
|
|
// auth update failed, rollback for moodle
|
|
update_record('user', addslashes_object($user));
|
|
error('Failed to update user data on external auth: '.$usernew->auth.
|
|
'. See the server logs for more details.');
|
|
}
|
|
};
|
|
|
|
//set new password if specified
|
|
if (!empty($usernew->newpassword)) {
|
|
if ($authplugin->can_change_password()) {
|
|
if (method_exists($authplugin, 'user_update_password')){
|
|
if (!$authplugin->user_update_password($user->username, $usernew->newpassword)){
|
|
error('Failed to update password on external auth: ' . $usernew->auth .
|
|
'. See the server logs for more details.');
|
|
}
|
|
} else {
|
|
error('Your external authentication module is misconfigued!');
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
//update preferences
|
|
useredit_update_user_preference($usernew);
|
|
|
|
//update user picture
|
|
if (!empty($CFG->gdversion)) {
|
|
useredit_update_picture($usernew, $userform);
|
|
}
|
|
|
|
// update mail bounces
|
|
useredit_update_bounces($user, $usernew);
|
|
|
|
/// update forum track preference
|
|
useredit_update_trackforums($user, $usernew);
|
|
|
|
// save custom profile fields data
|
|
profile_save_data($usernew);
|
|
|
|
if ($user->id == $USER->id) {
|
|
// Override old $USER session variable
|
|
$usernew = (array)get_record('user', 'id', $usernew->id); // reload from db
|
|
foreach ($usernew as $variable => $value) {
|
|
$USER->$variable = $value;
|
|
}
|
|
if (!empty($USER->newadminuser)) {
|
|
unset($USER->newadminuser);
|
|
// redirect to admin/ to continue with installation
|
|
redirect("$CFG->wwwroot/$CFG->admin/");
|
|
} else {
|
|
redirect("$CFG->wwwroot/user/view.php?id=$USER->id&course=$course->id");
|
|
}
|
|
} else {
|
|
redirect("$CFG->wwwroot/$CFG->admin/user.php");
|
|
}
|
|
//never reached
|
|
}
|
|
|
|
|
|
/// Display page header
|
|
if ($user->id == -1 or ($user->id != $USER->id)) {
|
|
$adminroot = admin_get_root();
|
|
if ($user->id == -1) {
|
|
admin_externalpage_setup('addnewuser', $adminroot);
|
|
admin_externalpage_print_header($adminroot);
|
|
} else {
|
|
admin_externalpage_setup('editusers', $adminroot);
|
|
admin_externalpage_print_header($adminroot);
|
|
$userfullname = fullname($user, true);
|
|
print_heading($userfullname);
|
|
}
|
|
} else if (!empty($USER->newadminuser)) {
|
|
print_header();
|
|
print_simple_box(get_string('configintroadmin', 'admin'), 'center', '50%');
|
|
echo '<br />';
|
|
} else {
|
|
$streditmyprofile = get_string('editmyprofile');
|
|
$strparticipants = get_string('participants');
|
|
$strnewuser = get_string('newuser');
|
|
$userfullname = fullname($user, true);
|
|
if ($course->id != SITEID) {
|
|
print_header("$course->shortname: $streditmyprofile", "$course->fullname: $streditmyprofile",
|
|
"<a href=\"$CFG->wwwroot/course/view.php?id=$course->id\">$course->shortname</a>
|
|
-> <a href=\"index.php?id=$course->id\">$strparticipants</a>
|
|
-> <a href=\"view.php?id=$user->id&course=$course->id\">$userfullname</a>
|
|
-> $streditmyprofile", "");
|
|
} else {
|
|
print_header("$course->shortname: $streditmyprofile", "$course->fullname",
|
|
"<a href=\"view.php?id=$user->id&course=$course->id\">$userfullname</a>
|
|
-> $streditmyprofile", "");
|
|
}
|
|
/// Print tabs at the top
|
|
$showroles = 1;
|
|
$currenttab = 'editprofile';
|
|
require('tabs.php');
|
|
}
|
|
|
|
/// Finally display THE form
|
|
$userform->display();
|
|
|
|
/// and proper footer
|
|
if ($user->id == -1 or ($user->id != $USER->id)) {
|
|
admin_externalpage_print_footer($adminroot);
|
|
} else if (!empty($USER->newadminuser)) {
|
|
print_footer('none');
|
|
} else {
|
|
print_footer($course);
|
|
}
|
|
|
|
?>
|