diff --git a/message/externallib.php b/message/externallib.php index 35aef7e9db1..9e4443e003f 100644 --- a/message/externallib.php +++ b/message/externallib.php @@ -749,6 +749,14 @@ class core_message_external extends external_api { } foreach ($messages as $mid => $message) { + // Do not return deleted messages. + if (($useridto == $USER->id and $message->timeusertodeleted) or + ($useridfrom == $USER->id and $message->timeuserfromdeleted)) { + + unset($messages[$mid]); + continue; + } + // We need to get the user from the query. if (empty($userfromfullname)) { // Check for non-reply and support users. diff --git a/message/lib.php b/message/lib.php index 52d2b7732dc..9ded749f2dc 100644 --- a/message/lib.php +++ b/message/lib.php @@ -2755,6 +2755,7 @@ function message_page_type_list($pagetype, $parentcontext, $currentcontext) { /** * Get messages sent or/and received by the specified users. + * Please note that this function return deleted messages too. * * @param int $useridto the user id who received the message * @param int $useridfrom the user id who sent the message. -10 or -20 for no-reply or support user diff --git a/message/tests/externallib_test.php b/message/tests/externallib_test.php index dff81e44530..f1e555b0e9f 100644 --- a/message/tests/externallib_test.php +++ b/message/tests/externallib_test.php @@ -408,7 +408,7 @@ class core_message_externallib_testcase extends externallib_advanced_testcase { * Test get_messages. */ public function test_get_messages() { - global $CFG; + global $CFG, $DB; $this->resetAfterTest(true); $this->preventResetByRollback(); @@ -434,6 +434,15 @@ class core_message_externallib_testcase extends externallib_advanced_testcase { $messages = external_api::clean_returnvalue(core_message_external::get_messages_returns(), $messages); $this->assertCount(1, $messages['messages']); + // Delete the message. + $message = array_shift($messages['messages']); + $messagetobedeleted = $DB->get_record('message_read', array('id' => $message['id'])); + message_delete_message($messagetobedeleted, $user1->id); + + $messages = core_message_external::get_messages($user2->id, $user1->id, 'conversations', true, true, 0, 0); + $messages = external_api::clean_returnvalue(core_message_external::get_messages_returns(), $messages); + $this->assertCount(0, $messages['messages']); + // Get unread conversations from user1 to user2. $messages = core_message_external::get_messages($user2->id, $user1->id, 'conversations', false, true, 0, 0); $messages = external_api::clean_returnvalue(core_message_external::get_messages_returns(), $messages); @@ -442,7 +451,7 @@ class core_message_externallib_testcase extends externallib_advanced_testcase { // Get read messages send from user1. $messages = core_message_external::get_messages(0, $user1->id, 'conversations', true, true, 0, 0); $messages = external_api::clean_returnvalue(core_message_external::get_messages_returns(), $messages); - $this->assertCount(2, $messages['messages']); + $this->assertCount(1, $messages['messages']); $this->setUser($user2); // Get read conversations from any user to user2. @@ -450,6 +459,20 @@ class core_message_externallib_testcase extends externallib_advanced_testcase { $messages = external_api::clean_returnvalue(core_message_external::get_messages_returns(), $messages); $this->assertCount(2, $messages['messages']); + // Conversations from user3 to user2. + $messages = core_message_external::get_messages($user2->id, $user3->id, 'conversations', true, true, 0, 0); + $messages = external_api::clean_returnvalue(core_message_external::get_messages_returns(), $messages); + $this->assertCount(1, $messages['messages']); + + // Delete the message. + $message = array_shift($messages['messages']); + $messagetobedeleted = $DB->get_record('message_read', array('id' => $message['id'])); + message_delete_message($messagetobedeleted, $user2->id); + + $messages = core_message_external::get_messages($user2->id, $user3->id, 'conversations', true, true, 0, 0); + $messages = external_api::clean_returnvalue(core_message_external::get_messages_returns(), $messages); + $this->assertCount(0, $messages['messages']); + $this->setUser($user3); // Get read notifications received by user3. $messages = core_message_external::get_messages($user3->id, 0, 'notifications', true, true, 0, 0);