MDL-52570 message: Do not return deleted messages in WS

This commit is contained in:
Juan Leyva 2016-01-07 12:10:32 +01:00
parent ef343c3299
commit ea21d6370f
3 changed files with 34 additions and 2 deletions

View File

@ -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.

View File

@ -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

View File

@ -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);