mirror of
https://github.com/moodle/moodle.git
synced 2025-08-04 16:36:37 +02:00
MDL-18293 exception and DML cleanup
This commit is contained in:
parent
013376dec4
commit
9c6972d630
1 changed files with 46 additions and 48 deletions
|
@ -2856,22 +2856,20 @@ function create_user_record($username, $password, $auth='manual') {
|
||||||
// or $user->lang is not an installed language
|
// or $user->lang is not an installed language
|
||||||
$sitelangs = array_keys(get_list_of_languages());
|
$sitelangs = array_keys(get_list_of_languages());
|
||||||
if (empty($newuser->lang) || !in_array($newuser->lang, $sitelangs)) {
|
if (empty($newuser->lang) || !in_array($newuser->lang, $sitelangs)) {
|
||||||
$newuser -> lang = $CFG->lang;
|
$newuser->lang = $CFG->lang;
|
||||||
}
|
}
|
||||||
$newuser->confirmed = 1;
|
$newuser->confirmed = 1;
|
||||||
$newuser->lastip = getremoteaddr();
|
$newuser->lastip = getremoteaddr();
|
||||||
$newuser->timemodified = time();
|
$newuser->timemodified = time();
|
||||||
$newuser->mnethostid = $CFG->mnet_localhost_id;
|
$newuser->mnethostid = $CFG->mnet_localhost_id;
|
||||||
|
|
||||||
if ($DB->insert_record('user', $newuser)) {
|
$DB->insert_record('user', $newuser);
|
||||||
$user = get_complete_user_data('username', $newuser->username);
|
$user = get_complete_user_data('username', $newuser->username);
|
||||||
if(!empty($CFG->{'auth_'.$newuser->auth.'_forcechangepassword'})){
|
if(!empty($CFG->{'auth_'.$newuser->auth.'_forcechangepassword'})){
|
||||||
set_user_preference('auth_forcepasswordchange', 1, $user->id);
|
set_user_preference('auth_forcepasswordchange', 1, $user->id);
|
||||||
}
|
|
||||||
update_internal_user_password($user, $password);
|
|
||||||
return $user;
|
|
||||||
}
|
}
|
||||||
return false;
|
update_internal_user_password($user, $password);
|
||||||
|
return $user;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -2909,8 +2907,7 @@ function update_user_record($username, $authplugin) {
|
||||||
// nothing_ for this field. Thus it makes sense to let this value
|
// nothing_ for this field. Thus it makes sense to let this value
|
||||||
// stand in until LDAP is giving a value for this field.
|
// stand in until LDAP is giving a value for this field.
|
||||||
if (!(empty($value) && $lockval === 'unlockedifempty')) {
|
if (!(empty($value) && $lockval === 'unlockedifempty')) {
|
||||||
$DB->set_field('user', $key, $value, 'username', $username)
|
$DB->set_field('user', $key, $value, 'username', $username);
|
||||||
|| error_log("Error updating $key for $username");
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -2963,55 +2960,60 @@ function delete_user($user) {
|
||||||
require_once($CFG->libdir.'/grouplib.php');
|
require_once($CFG->libdir.'/grouplib.php');
|
||||||
require_once($CFG->libdir.'/gradelib.php');
|
require_once($CFG->libdir.'/gradelib.php');
|
||||||
|
|
||||||
|
// TODO: decide if this transaction is really needed
|
||||||
$DB->begin_sql();
|
$DB->begin_sql();
|
||||||
|
|
||||||
// delete all grades - backup is kept in grade_grades_history table
|
try {
|
||||||
if ($grades = grade_grade::fetch_all(array('userid'=>$user->id))) {
|
// delete all grades - backup is kept in grade_grades_history table
|
||||||
foreach ($grades as $grade) {
|
if ($grades = grade_grade::fetch_all(array('userid'=>$user->id))) {
|
||||||
$grade->delete('userdelete');
|
foreach ($grades as $grade) {
|
||||||
|
$grade->delete('userdelete');
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
// remove from all groups
|
// remove from all groups
|
||||||
$DB->delete_records('groups_members', array('userid'=>$user->id));
|
$DB->delete_records('groups_members', array('userid'=>$user->id));
|
||||||
|
|
||||||
// unenrol from all roles in all contexts
|
// unenrol from all roles in all contexts
|
||||||
role_unassign(0, $user->id); // this might be slow but it is really needed - modules might do some extra cleanup!
|
role_unassign(0, $user->id); // this might be slow but it is really needed - modules might do some extra cleanup!
|
||||||
|
|
||||||
// now do a final accesslib cleanup - removes all role assingments in user context and context itself
|
// now do a final accesslib cleanup - removes all role assingments in user context and context itself
|
||||||
delete_context(CONTEXT_USER, $user->id);
|
delete_context(CONTEXT_USER, $user->id);
|
||||||
|
|
||||||
require_once($CFG->dirroot.'/tag/lib.php');
|
require_once($CFG->dirroot.'/tag/lib.php');
|
||||||
tag_set('user', $user->id, array());
|
tag_set('user', $user->id, array());
|
||||||
|
|
||||||
// workaround for bulk deletes of users with the same email address
|
// workaround for bulk deletes of users with the same email address
|
||||||
$delname = "$user->email.".time();
|
$delname = "$user->email.".time();
|
||||||
while ($DB->record_exists('user', array('username'=>$delname))) { // no need to use mnethostid here
|
while ($DB->record_exists('user', array('username'=>$delname))) { // no need to use mnethostid here
|
||||||
$delname++;
|
$delname++;
|
||||||
}
|
}
|
||||||
|
|
||||||
// mark internal user record as "deleted"
|
// mark internal user record as "deleted"
|
||||||
$updateuser = new object();
|
$updateuser = new object();
|
||||||
$updateuser->id = $user->id;
|
$updateuser->id = $user->id;
|
||||||
$updateuser->deleted = 1;
|
$updateuser->deleted = 1;
|
||||||
$updateuser->username = $delname; // Remember it just in case
|
$updateuser->username = $delname; // Remember it just in case
|
||||||
$updateuser->email = ''; // Clear this field to free it up
|
$updateuser->email = ''; // Clear this field to free it up
|
||||||
$updateuser->idnumber = ''; // Clear this field to free it up
|
$updateuser->idnumber = ''; // Clear this field to free it up
|
||||||
$updateuser->timemodified = time();
|
$updateuser->timemodified = time();
|
||||||
|
|
||||||
|
$DB->update_record('user', $updateuser);
|
||||||
|
|
||||||
if ($DB->update_record('user', $updateuser)) {
|
|
||||||
$DB->commit_sql();
|
$DB->commit_sql();
|
||||||
|
|
||||||
// notify auth plugin - do not block the delete even when plugin fails
|
// notify auth plugin - do not block the delete even when plugin fails
|
||||||
$authplugin = get_auth_plugin($user->auth);
|
$authplugin = get_auth_plugin($user->auth);
|
||||||
$authplugin->user_delete($user);
|
$authplugin->user_delete($user);
|
||||||
|
|
||||||
events_trigger('user_deleted', $user);
|
events_trigger('user_deleted', $user);
|
||||||
return true;
|
|
||||||
|
|
||||||
} else {
|
} catch (Exception $e) {
|
||||||
$DB->rollback_sql();
|
$DB->rollback_sql();
|
||||||
return false;
|
throw $e;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -3259,7 +3261,8 @@ function update_internal_user_password(&$user, $password) {
|
||||||
$hashedpassword = hash_internal_user_password($password);
|
$hashedpassword = hash_internal_user_password($password);
|
||||||
}
|
}
|
||||||
|
|
||||||
return $DB->set_field('user', 'password', $hashedpassword, array('id'=>$user->id));
|
$DB->set_field('user', 'password', $hashedpassword, array('id'=>$user->id));
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -3457,12 +3460,7 @@ function delete_course($courseorid, $showfeedback = true) {
|
||||||
$result = false;
|
$result = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!$DB->delete_records("course", array("id"=>$courseid))) {
|
$DB->delete_records("course", array("id"=>$courseid));
|
||||||
if ($showfeedback) {
|
|
||||||
notify("An error occurred while deleting the main course record.");
|
|
||||||
}
|
|
||||||
$result = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Delete all roles and overiddes in the course context
|
/// Delete all roles and overiddes in the course context
|
||||||
if (!delete_context(CONTEXT_COURSE, $courseid)) {
|
if (!delete_context(CONTEXT_COURSE, $courseid)) {
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue