Merge branch 'MDL-46232-29' of git://github.com/FMCorz/moodle into MOODLE_29_STABLE

This commit is contained in:
Andrew Nicols
2015-07-27 15:58:04 +08:00
2 changed files with 32 additions and 1 deletions
+4 -1
View File
@@ -3984,8 +3984,11 @@ function delete_user(stdClass $user) {
// Force logout - may fail if file based sessions used, sorry.
\core\session\manager::kill_user_sessions($user->id);
// Generate username from email address, or a fake email.
$delemail = !empty($user->email) ? $user->email : $user->username . '.' . $user->id . '@unknownemail.invalid';
$delname = clean_param($delemail . "." . time(), PARAM_USERNAME);
// Workaround for bulk deletes of users with the same email address.
$delname = clean_param($user->email . "." . time(), PARAM_USERNAME);
while ($DB->record_exists('user', array('username' => $delname))) { // No need to use mnethostid here.
$delname++;
}
+28
View File
@@ -1882,6 +1882,10 @@ class core_moodlelib_testcase extends advanced_testcase {
$user = $this->getDataGenerator()->create_user(array('idnumber'=>'abc'));
$user2 = $this->getDataGenerator()->create_user(array('idnumber'=>'xyz'));
$usersharedemail1 = $this->getDataGenerator()->create_user(array('email' => '[email protected]'));
$usersharedemail2 = $this->getDataGenerator()->create_user(array('email' => '[email protected]'));
$useremptyemail1 = $this->getDataGenerator()->create_user(array('email' => ''));
$useremptyemail2 = $this->getDataGenerator()->create_user(array('email' => ''));
// Delete user and capture event.
$sink = $this->redirectEvents();
@@ -1947,6 +1951,30 @@ class core_moodlelib_testcase extends advanced_testcase {
$result = delete_user($admin);
$this->assertFalse($result);
// Simultaneously deleting users with identical email addresses.
$result1 = delete_user($usersharedemail1);
$result2 = delete_user($usersharedemail2);
$usersharedemail1after = $DB->get_record('user', array('id' => $usersharedemail1->id));
$usersharedemail2after = $DB->get_record('user', array('id' => $usersharedemail2->id));
$this->assertTrue($result1);
$this->assertTrue($result2);
$this->assertStringStartsWith($usersharedemail1->email . '.', $usersharedemail1after->username);
$this->assertStringStartsWith($usersharedemail2->email . '.', $usersharedemail2after->username);
// Simultaneously deleting users without email addresses.
$result1 = delete_user($useremptyemail1);
$result2 = delete_user($useremptyemail2);
$useremptyemail1after = $DB->get_record('user', array('id' => $useremptyemail1->id));
$useremptyemail2after = $DB->get_record('user', array('id' => $useremptyemail2->id));
$this->assertTrue($result1);
$this->assertTrue($result2);
$this->assertStringStartsWith($useremptyemail1->username . '.' . $useremptyemail1->id . '@unknownemail.invalid.',
$useremptyemail1after->username);
$this->assertStringStartsWith($useremptyemail2->username . '.' . $useremptyemail2->id . '@unknownemail.invalid.',
$useremptyemail2after->username);
$this->resetDebugging();
}