MDL-24578 removed duplicate user delete functions, fixed unenrol bugs
This commit is contained in:
+3
-3
@@ -1431,11 +1431,11 @@ abstract class enrol_plugin {
|
||||
|
||||
$sql = "SELECT e.*
|
||||
FROM {enrol} e
|
||||
JOIN {user_enrolments} ue ON (ue.courseid = e.courseid)
|
||||
WHERE e.enrol = :meta AND ue.userid = :userid";
|
||||
JOIN {user_enrolments} ue ON (ue.enrolid = e.id)
|
||||
WHERE e.enrol = :name AND ue.userid = :userid";
|
||||
$params = array('name'=>$this->get_name(), 'userid'=>$user->id);
|
||||
|
||||
$rs = $DB->get_records_recordset($sql, $params);
|
||||
$rs = $DB->get_recordset_sql($sql, $params);
|
||||
foreach($rs as $instance) {
|
||||
$this->unenrol_user($instance, $user->id);
|
||||
}
|
||||
|
||||
+15
-4
@@ -3521,6 +3521,7 @@ function delete_user($user) {
|
||||
require_once($CFG->libdir.'/grouplib.php');
|
||||
require_once($CFG->libdir.'/gradelib.php');
|
||||
require_once($CFG->dirroot.'/message/lib.php');
|
||||
require_once($CFG->dirroot.'/tag/lib.php');
|
||||
|
||||
// delete all grades - backup is kept in grade_grades_history table
|
||||
grade_user_delete($user->id);
|
||||
@@ -3528,6 +3529,19 @@ function delete_user($user) {
|
||||
//move unread messages from this user to read
|
||||
message_move_userfrom_unread2read($user->id);
|
||||
|
||||
// TODO: remove from cohorts using standard API here
|
||||
|
||||
// remove user tags
|
||||
tag_set('user', $user->id, array());
|
||||
|
||||
// unconditionally unenrol from all courses
|
||||
enrol_user_delete($user);
|
||||
|
||||
// unenrol from all roles in all contexts
|
||||
role_unassign_all(array('userid'=>$user->id)); // this might be slow but it is really needed - modules might do some extra cleanup!
|
||||
|
||||
//now do a brute force cleanup
|
||||
|
||||
// remove from all cohorts
|
||||
$DB->delete_records('cohort_members', array('userid'=>$user->id));
|
||||
|
||||
@@ -3546,12 +3560,9 @@ function delete_user($user) {
|
||||
// last course access not necessary either
|
||||
$DB->delete_records('user_lastaccess', array('userid'=>$user->id));
|
||||
|
||||
// final accesslib cleanup - removes all role assignments in user context and context itself, files, etc.
|
||||
// now do a final accesslib cleanup - removes all role assignments in user context and context itself
|
||||
delete_context(CONTEXT_USER, $user->id);
|
||||
|
||||
require_once($CFG->dirroot.'/tag/lib.php');
|
||||
tag_set('user', $user->id, array());
|
||||
|
||||
// workaround for bulk deletes of users with the same email address
|
||||
$delname = "$user->email.".time();
|
||||
while ($DB->record_exists('user', array('username'=>$delname))) { // no need to use mnethostid here
|
||||
|
||||
+1
-54
@@ -83,60 +83,7 @@ function user_update_user($user) {
|
||||
* @return boolean success
|
||||
*/
|
||||
function user_delete_user($user) {
|
||||
global $CFG, $DB;
|
||||
require_once($CFG->libdir.'/grouplib.php');
|
||||
require_once($CFG->libdir.'/gradelib.php');
|
||||
require_once($CFG->dirroot.'/message/lib.php');
|
||||
|
||||
// delete all grades - backup is kept in grade_grades_history table
|
||||
if ($grades = grade_grade::fetch_all(array('userid'=>$user->id))) {
|
||||
foreach ($grades as $grade) {
|
||||
$grade->delete('userdelete');
|
||||
}
|
||||
}
|
||||
|
||||
//move unread messages from this user to read
|
||||
message_move_userfrom_unread2read($user->id);
|
||||
|
||||
// unconditionally unenrol from all courses
|
||||
enrol_user_delete($user);
|
||||
|
||||
// remove from all groups
|
||||
$DB->delete_records('groups_members', array('userid'=>$user->id));
|
||||
|
||||
// unenrol from all roles in all contexts
|
||||
role_unassign_all(array('userid'=>$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
|
||||
delete_context(CONTEXT_USER, $user->id);
|
||||
|
||||
require_once($CFG->dirroot.'/tag/lib.php');
|
||||
tag_set('user', $user->id, array());
|
||||
|
||||
// workaround for bulk deletes of users with the same email address
|
||||
$delname = "$user->email.".time();
|
||||
while ($DB->record_exists('user', array('username'=>$delname))) { // no need to use mnethostid here
|
||||
$delname++;
|
||||
}
|
||||
|
||||
// mark internal user record as "deleted"
|
||||
$updateuser = new stdClass();
|
||||
$updateuser->id = $user->id;
|
||||
$updateuser->deleted = 1;
|
||||
$updateuser->username = $delname; // Remember it just in case
|
||||
$updateuser->email = md5($user->username);// Store hash of username, useful importing/restoring users
|
||||
$updateuser->idnumber = ''; // Clear this field to free it up
|
||||
$updateuser->timemodified = time();
|
||||
|
||||
$DB->update_record('user', $updateuser);
|
||||
|
||||
// notify auth plugin - do not block the delete even when plugin fails
|
||||
$authplugin = get_auth_plugin($user->auth);
|
||||
$authplugin->user_delete($user);
|
||||
|
||||
events_trigger('user_deleted', $user);
|
||||
|
||||
return true;
|
||||
return delete_user($user);
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
Reference in New Issue
Block a user