diff --git a/message/lib.php b/message/lib.php index a8342fb94f8..82d10d62c6c 100644 --- a/message/lib.php +++ b/message/lib.php @@ -242,7 +242,7 @@ function message_get_blocked_users($user1=null, $user2=null) { FROM {message_contacts} mc JOIN {user} u ON u.id = mc.contactid LEFT OUTER JOIN {message} m ON m.useridfrom = mc.contactid AND m.useridto = :user1id1 - WHERE mc.userid = :user1id2 AND mc.blocked = 1 + WHERE u.deleted = 0 AND mc.userid = :user1id2 AND mc.blocked = 1 GROUP BY $userfields ORDER BY u.firstname ASC"; $rs = $DB->get_recordset_sql($blockeduserssql, array('user1id1' => $user1->id, 'user1id2' => $user1->id)); @@ -339,7 +339,7 @@ function message_get_contacts($user1=null, $user2=null) { FROM {message_contacts} mc JOIN {user} u ON u.id = mc.contactid LEFT OUTER JOIN {message} m ON m.useridfrom = mc.contactid AND m.useridto = ? - WHERE mc.userid = ? AND mc.blocked = 0 + WHERE u.deleted = 0 AND mc.userid = ? AND mc.blocked = 0 GROUP BY $userfields ORDER BY u.firstname ASC"; @@ -365,7 +365,7 @@ function message_get_contacts($user1=null, $user2=null) { FROM {message} m JOIN {user} u ON u.id = m.useridfrom LEFT OUTER JOIN {message_contacts} mc ON mc.contactid = m.useridfrom AND mc.userid = m.useridto - WHERE mc.id IS NULL AND m.useridto = ? + WHERE u.deleted = 0 AND mc.id IS NULL AND m.useridto = ? GROUP BY $userfields ORDER BY u.firstname ASC"; diff --git a/message/tests/externallib_test.php b/message/tests/externallib_test.php index 0cfd90c0ad5..c46828cdffc 100644 --- a/message/tests/externallib_test.php +++ b/message/tests/externallib_test.php @@ -322,8 +322,19 @@ class core_message_externallib_testcase extends externallib_advanced_testcase { // Checking some of the fields returned. $stranger = array_pop($contacts['strangers']); + $this->assertEquals(core_user::NOREPLY_USER, $stranger['id']); $this->assertEquals(1, $stranger['unread']); + + // Check that deleted users are not returned. + delete_user($user_offline1); + delete_user($user_stranger); + delete_user($user_online); + $contacts = core_message_external::get_contacts(); + $contacts = external_api::clean_returnvalue(core_message_external::get_contacts_returns(), $contacts); + $this->assertCount(2, $contacts['offline']); + $this->assertCount(0, $contacts['online']); + $this->assertCount(1, $contacts['strangers']); } /** @@ -618,6 +629,12 @@ class core_message_externallib_testcase extends externallib_advanced_testcase { $blockedusers = external_api::clean_returnvalue(core_message_external::get_blocked_users_returns(), $blockedusers); $this->assertCount(1, $blockedusers['users']); + // Remove the $userblocked and check that the list now is empty. + delete_user($userblocked); + $blockedusers = core_message_external::get_blocked_users($user1->id); + $blockedusers = external_api::clean_returnvalue(core_message_external::get_blocked_users_returns(), $blockedusers); + $this->assertCount(0, $blockedusers['users']); + } /** diff --git a/message/tests/messagelib_test.php b/message/tests/messagelib_test.php index 38fc3fc6ce5..d4613474ffe 100644 --- a/message/tests/messagelib_test.php +++ b/message/tests/messagelib_test.php @@ -98,6 +98,10 @@ class core_message_messagelib_testcase extends advanced_testcase { // Block other user. message_block_contact($user1->id); $this->assertCount(2, message_get_blocked_users()); + + // Test deleting users. + delete_user($user1); + $this->assertCount(1, message_get_blocked_users()); } /** @@ -154,6 +158,15 @@ class core_message_messagelib_testcase extends advanced_testcase { $this->assertCount(0, $onlinecontacts); $this->assertCount(1, $offlinecontacts); $this->assertCount(2, $strangers); + + // Test deleting users. + delete_user($user1); + delete_user($user3); + + list($onlinecontacts, $offlinecontacts, $strangers) = message_get_contacts(); + $this->assertCount(0, $onlinecontacts); + $this->assertCount(0, $offlinecontacts); + $this->assertCount(1, $strangers); } /**