MDL-24578 removed duplicate user delete functions, fixed unenrol bugs

This commit is contained in:
Petr Skoda
2010-10-08 08:47:04 +00:00
parent 3726587ac0
commit 45fb2cf898
3 changed files with 19 additions and 61 deletions
+3 -3
View File
@@ -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
View File
@@ -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
View File
@@ -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);
}
/**