From 5c713da067bb144ccb0ad1dea67c99276a1d6fb0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Petr=20S=CC=8Ckoda?= Date: Fri, 24 May 2013 21:14:53 +0200 Subject: [PATCH] MDL-39802 fix sloppy user deleting and creating in imsenterprise plugin --- enrol/imsenterprise/lib.php | 24 ++++++++++++++++-------- 1 file changed, 16 insertions(+), 8 deletions(-) diff --git a/enrol/imsenterprise/lib.php b/enrol/imsenterprise/lib.php index 073e76a8499..391fba7f0f2 100644 --- a/enrol/imsenterprise/lib.php +++ b/enrol/imsenterprise/lib.php @@ -514,13 +514,19 @@ function process_person_tag($tagcontents){ // Now if the recstatus is 3, we should delete the user if-and-only-if the setting for delete users is turned on - // In the "users" table we can do this by setting deleted=1 if($recstatus==3){ if($imsdeleteusers){ // If we're allowed to delete user records - // Make sure their "deleted" field is set to one - $DB->set_field('user', 'deleted', 1, array('username'=>$person->username)); - $this->log_line("Marked user record for user '$person->username' (ID number $person->idnumber) as deleted."); + // Do not dare to hack the user.deleted field directly in database!!! + if ($user = $DB->get_record('user', array('username'=>$person->username, 'mnethostid'=>$CFG->mnet_localhost_id, 'deleted'=>0))) { + if (delete_user($user)) { + $this->log_line("Deleted user '$person->username' (ID number $person->idnumber)."); + } else { + $this->log_line("Error deleting '$person->username' (ID number $person->idnumber)."); + } + } else { + $this->log_line("Can not delete user '$person->username' (ID number $person->idnumber) - user does not exist."); + } }else{ $this->log_line("Ignoring deletion request for user '$person->username' (ID number $person->idnumber)."); } @@ -539,8 +545,10 @@ function process_person_tag($tagcontents){ } else { // If they don't exist and they have a defined username, and $createnewusers == true, we create them. - $person->lang = 'manual'; //TODO: this needs more work due tu multiauth changes - $person->auth = $CFG->auth; + $person->lang = $CFG->lang; + $auth = explode(',', $CFG->auth); //TODO: this needs more work due tu multiauth changes, use first auth for now + $auth = reset($auth); + $person->auth = $auth; $person->confirmed = 1; $person->timemodified = time(); $person->mnethostid = $CFG->mnet_localhost_id; @@ -568,8 +576,8 @@ function process_person_tag($tagcontents){ } elseif ($createnewusers) { $this->log_line("User record already exists for user '$person->username' (ID number $person->idnumber)."); - // Make sure their "deleted" field is set to zero. - $DB->set_field('user', 'deleted', 0, array('idnumber'=>$person->idnumber)); + // It is totally wrong to mess with deleted users flag directly in database!!! + // There is no official way to undelete user, sorry.. }else{ $this->log_line("No user record found for '$person->username' (ID number $person->idnumber)."); }