(MDL-8820) moodle/user:editprofile now works in user contexts - reverted previous fix, adding new one; merged from MOODLE_18_STABLE

This commit is contained in:
skodak
2007-03-14 23:37:28 +00:00
parent 9d200a16d7
commit b0c90e6ede
4 changed files with 66 additions and 36 deletions
+27 -7
View File
@@ -8,6 +8,7 @@
httpsrequired();
$userid = optional_param('id', $USER->id, PARAM_INT); // user id
$course = optional_param('course', SITEID, PARAM_INT); // course id (defaults to Site)
if (!$course = get_record('course', 'id', $course)) {
@@ -23,10 +24,11 @@
redirect($CFG->httpswwwroot.'/login/index.php');
}
if (isguest()) { //TODO: add proper capability to edit own profile and change password too
if (isguest()) { //TODO: add proper capability to edit own profile
print_error('guestnoeditprofile');
}
if (!$user = get_record('user', 'id', $USER->id)) {
if (!$user = get_record('user', 'id', $userid)) {
error('User ID was incorrect');
}
@@ -35,6 +37,22 @@
redirect($CFG->wwwroot . "/user/view.php?course={$course->id}");
}
// check access control
if ($user->id != $USER->id) {
// teachers, parents, etc.
$personalcontext = get_context_instance(CONTEXT_USER, $user->id);
require_capability('moodle/user:editprofile', $personalcontext);
// no editing of guest user account
if (isguestuser($user->id)) {
print_error('guestnoeditprofileother');
}
// no editing of primary admin!
$mainadmin = get_admin();
if ($user->id == $mainadmin->id) {
print_error('adminprimarynoedit');
}
}
//load user preferences
useredit_load_preferences($user);
@@ -83,13 +101,15 @@
// save custom profile fields data
profile_save_data($usernew);
// 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 ($USER->id == $user->id) {
// Override old $USER session variable if needed
$usernew = (array)get_record('user', 'id', $user->id); // reload from db
foreach ($usernew as $variable => $value) {
$USER->$variable = $value;
}
}
redirect("$CFG->wwwroot/user/view.php?id=$USER->id&course=$course->id");
redirect("$CFG->wwwroot/user/view.php?id=$user->id&course=$course->id");
}
+2 -2
View File
@@ -6,7 +6,7 @@ class user_edit_form extends moodleform {
// Define the form
function definition () {
global $USER, $CFG, $COURSE;
global $CFG, $COURSE;
$mform =& $this->_form;
$this->set_upload_manager(new upload_manager('imagefile', false, false, null, false, 0, true, true, false));
@@ -37,7 +37,7 @@ class user_edit_form extends moodleform {
}
function definition_after_data() {
global $USER, $CFG;
global $CFG;
$mform =& $this->_form;
$userid = $mform->getElementValue('id');
+5 -13
View File
@@ -19,20 +19,14 @@
if ($id == -1) {
// creating new user
require_capability('moodle/user:create', get_context_instance(CONTEXT_SYSTEM, SITEID));
require_capability('moodle/user:create', get_context_instance(CONTEXT_SYSTEM));
$user = new object();
$user->id = -1;
$user->auth = 'manual';
$user->confirmed = 1;
} else {
// editing existing user
if (!has_capability('moodle/user:update', get_context_instance(CONTEXT_SYSTEM, SITEID))
&& !has_capability('moodle/user:update', get_context_instance(CONTEXT_USER, $id))) {
error('nopermission');
}
require_capability('moodle/user:update', get_context_instance(CONTEXT_SYSTEM));
if (!$user = get_record('user', 'id', $id)) {
error('User ID was incorrect');
}
@@ -144,17 +138,15 @@
} else {
redirect("$CFG->wwwroot/user/view.php?id=$USER->id&course=$course->id");
}
} elseif (has_capability('moodle/user:update', get_context_instance(CONTEXT_SYSTEM, SITEID))) {
redirect("$CFG->wwwroot/$CFG->admin/user.php");
} else {
redirect($CFG->wwwroot . "/user/view.php?id=$id&course={$course->id}");
redirect("$CFG->wwwroot/$CFG->admin/user.php");
}
//never reached
}
/// Display page header
if ($user->id == -1 or has_capability('moodle/user:update', get_context_instance(CONTEXT_SYSTEM, SITEID))) {
if ($user->id == -1 or ($user->id != $USER->id)) {
$adminroot = admin_get_root();
if ($user->id == -1) {
admin_externalpage_setup('addnewuser', $adminroot);
@@ -196,7 +188,7 @@
$userform->display();
/// and proper footer
if ($user->id == -1 or has_capability('moodle/user:update', get_context_instance(CONTEXT_SYSTEM, SITEID))) {
if ($user->id == -1 or ($user->id != $USER->id)) {
admin_externalpage_print_footer($adminroot);
} else if (!empty($USER->newadminuser)) {
print_footer('none');
+32 -14
View File
@@ -87,7 +87,7 @@
$toprow[] = new tabobject('profile', $CFG->wwwroot.'/user/view.php?id='.$user->id.'&course='.$course->id, get_string('profile'));
$sitecontext = get_context_instance(CONTEXT_SYSTEM, SITEID);
$systemcontext = get_context_instance(CONTEXT_SYSTEM);
$coursecontext = get_context_instance(CONTEXT_COURSE, $course->id);
$personalcontext = get_context_instance(CONTEXT_USER, $user->id);
@@ -95,24 +95,42 @@
$mainadmin = get_admin();
if(empty($CFG->loginhttps)) {
$wwwroot = $CFG->wwwroot;
} else {
$wwwroot = str_replace('http:','https:',$CFG->wwwroot);
}
$edittype = 'none';
if (is_mnet_remote_user($user)) {
// cannot edit remote users
}
else if ((!empty($USER->id) and ($USER->id == $user->id) and !isguest()) or
((has_capability('moodle/user:update', $sitecontext) || has_capability('moodle/user:update', $personalcontext)) and ($user->id != $mainadmin->id)) ) {
if(empty($CFG->loginhttps)) {
$wwwroot = $CFG->wwwroot;
} else if (isguest() or !isloggedin()) {
// can not edit guest like accounts - TODO: add capability to edit own profile
} else if ($USER->id == $user->id) {
if (has_capability('moodle/user:update', $systemcontext)) {
$edittype = 'advanced';
} else {
$wwwroot = str_replace('http:','https:',$CFG->wwwroot);
$edittype = 'normal';
}
if ((has_capability('moodle/user:update', $sitecontext) || has_capability('moodle/user:update', $personalcontext))and ($user->id==$USER->id or $user->id != $mainadmin->id)) {
$toprow[] = new tabobject('editprofile', $wwwroot.'/user/editadvanced.php?id='.$user->id.'&course='.$course->id, get_string('editmyprofile'));
} else {
$toprow[] = new tabobject('editprofile', $wwwroot.'/user/edit.php?id='.$user->id.'&course='.$course->id, get_string('editmyprofile'));
} else if ($user->id != $mainadmin->id) {
//no editing of primary admin!
if (has_capability('moodle/user:update', $systemcontext)) {
$edittype = 'advanced';
} else if (has_capability('moodle/user:editprofile', $personalcontext)) {
//teachers, parents, etc.
$edittype = 'normal';
}
}
if ($edittype == 'advanced') {
$toprow[] = new tabobject('editprofile', $wwwroot.'/user/editadvanced.php?id='.$user->id.'&course='.$course->id, get_string('editmyprofile'));
} else if ($edittype == 'normal') {
$toprow[] = new tabobject('editprofile', $wwwroot.'/user/edit.php?id='.$user->id.'&course='.$course->id, get_string('editmyprofile'));
}
/// Everyone can see posts for this user
/// add logic to see course read posts permission
@@ -137,9 +155,9 @@
require_once($CFG->dirroot.'/blog/lib.php');
if ($CFG->bloglevel >= BLOG_USER_LEVEL and // blogs must be enabled
(has_capability('moodle/user:readuserblogs', $personalcontext) // can review posts (parents etc)
or has_capability('moodle/blog:manageentries', $sitecontext) // entry manager can see all posts
or ($user->id == $USER->id and has_capability('moodle/blog:create', $sitecontext)) // viewing self
or (has_capability('moodle/blog:view', $sitecontext) or has_capability('moodle/blog:view', $coursecontext))
or has_capability('moodle/blog:manageentries', $systemcontext) // entry manager can see all posts
or ($user->id == $USER->id and has_capability('moodle/blog:create', $systemcontext)) // viewing self
or (has_capability('moodle/blog:view', $systemcontext) or has_capability('moodle/blog:view', $coursecontext))
) // able to read blogs in site or course context
) { //end if