diff --git a/message/externallib.php b/message/externallib.php index 26c4ccdf619..5151adb5e31 100644 --- a/message/externallib.php +++ b/message/externallib.php @@ -1537,8 +1537,6 @@ class core_message_external extends external_api { } } - $message->useridto = $useridto; - // 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 9143d130a52..48c3686ad49 100644 --- a/message/lib.php +++ b/message/lib.php @@ -688,14 +688,16 @@ function message_get_messages($useridto, $useridfrom = 0, $notifications = -1, $ // If the 'useridto' value is empty then we are going to retrieve messages sent by the useridfrom to any user. if (empty($useridto)) { $userfields = get_all_user_name_fields(true, 'u', '', 'userto'); + $messageuseridtosql = 'u.id as useridto'; } else { $userfields = get_all_user_name_fields(true, 'u', '', 'userfrom'); + $messageuseridtosql = "$useridto as useridto"; } // Create the SQL we will be using. $messagesql = "SELECT mr.*, $userfields, 0 as notification, '' as contexturl, '' as contexturlname, mua.timecreated as timeusertodeleted, mua2.timecreated as timeread, - mua3.timecreated as timeuserfromdeleted + mua3.timecreated as timeuserfromdeleted, $messageuseridtosql FROM {messages} mr INNER JOIN {message_conversations} mc ON mc.id = mr.conversationid diff --git a/message/tests/externallib_test.php b/message/tests/externallib_test.php index f5475d79b8d..9ae8b7ed814 100644 --- a/message/tests/externallib_test.php +++ b/message/tests/externallib_test.php @@ -671,6 +671,74 @@ class core_message_externallib_testcase extends externallib_advanced_testcase { } + /** + * Test get_messages where we want all messages from a user, sent to any user. + */ + public function test_get_messages_useridto_all() { + $this->resetAfterTest(true); + + $user1 = self::getDataGenerator()->create_user(); + $user2 = self::getDataGenerator()->create_user(); + $user3 = self::getDataGenerator()->create_user(); + + $this->setUser($user1); + + // Send a message from user 1 to two other users. + $this->send_message($user1, $user2, 'some random text 1', 0, 1); + $this->send_message($user1, $user3, 'some random text 2', 0, 2); + + // Get messages sent from user 1. + $messages = core_message_external::get_messages(0, $user1->id, 'conversations', false, false, 0, 0); + $messages = external_api::clean_returnvalue(core_message_external::get_messages_returns(), $messages); + + // Confirm the data is correct. + $messages = $messages['messages']; + $this->assertCount(2, $messages); + + $message1 = array_shift($messages); + $message2 = array_shift($messages); + + $this->assertEquals($user1->id, $message1['useridfrom']); + $this->assertEquals($user2->id, $message1['useridto']); + + $this->assertEquals($user1->id, $message2['useridfrom']); + $this->assertEquals($user3->id, $message2['useridto']); + } + + /** + * Test get_messages where we want all messages to a user, sent by any user. + */ + public function test_get_messages_useridfrom_all() { + $this->resetAfterTest(); + + $user1 = self::getDataGenerator()->create_user(); + $user2 = self::getDataGenerator()->create_user(); + $user3 = self::getDataGenerator()->create_user(); + + $this->setUser($user1); + + // Send a message to user 1 from two other users. + $this->send_message($user2, $user1, 'some random text 1', 0, 1); + $this->send_message($user3, $user1, 'some random text 2', 0, 2); + + // Get messages sent to user 1. + $messages = core_message_external::get_messages($user1->id, 0, 'conversations', false, false, 0, 0); + $messages = external_api::clean_returnvalue(core_message_external::get_messages_returns(), $messages); + + // Confirm the data is correct. + $messages = $messages['messages']; + $this->assertCount(2, $messages); + + $message1 = array_shift($messages); + $message2 = array_shift($messages); + + $this->assertEquals($user2->id, $message1['useridfrom']); + $this->assertEquals($user1->id, $message1['useridto']); + + $this->assertEquals($user3->id, $message2['useridfrom']); + $this->assertEquals($user1->id, $message2['useridto']); + } + /** * Test get_blocked_users. */