diff --git a/lib/enrollib.php b/lib/enrollib.php index e579019ab79..0d930a751f7 100644 --- a/lib/enrollib.php +++ b/lib/enrollib.php @@ -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); } diff --git a/lib/moodlelib.php b/lib/moodlelib.php index bf96cc516de..b59361dffb8 100644 --- a/lib/moodlelib.php +++ b/lib/moodlelib.php @@ -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 diff --git a/user/lib.php b/user/lib.php index 24f8bcae6a8..92ffdf7c2a2 100644 --- a/user/lib.php +++ b/user/lib.php @@ -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); } /**