MDL-62808 core_message: fixed 'useridto' being incorrectly set to 0
authorMark Nelson <markn@moodle.com>
Thu, 28 Jun 2018 09:19:00 +0000 (17:19 +0800)
committerMark Nelson <markn@moodle.com>
Mon, 9 Jul 2018 04:00:06 +0000 (12:00 +0800)
message/externallib.php
message/lib.php
message/tests/externallib_test.php

index 26c4ccd..5151adb 100644 (file)
@@ -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.
index 9143d13..48c3686 100644 (file)
@@ -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
index f5475d7..9ae8b7e 100644 (file)
@@ -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.
      */