MDL-39802 fix sloppy user deleting and creating in imsenterprise plugin

This commit is contained in:
Petr Škoda
2013-05-24 21:20:45 +02:00
parent f7da02f3b0
commit 5c713da067
+16 -8
View File
@@ -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).");
}