MDL-63898 core_message: fix for get_conversations message formatting
This used to return a text version of the message, but needs to return the message formatted with message_format_message_text().
This commit is contained in:
@@ -386,7 +386,8 @@ class api {
|
||||
$typesql = !is_null($type) ? " AND mc.type = :convtype " : "";
|
||||
|
||||
$sql = "SELECT m.id as messageid, mc.id as id, mc.name as conversationname, mc.type as conversationtype, m.useridfrom,
|
||||
m.smallmessage, m.timecreated, mc.component, mc.itemtype, mc.itemid
|
||||
m.smallmessage, m.fullmessage, m.fullmessageformat, m.fullmessagehtml, m.timecreated, mc.component,
|
||||
mc.itemtype, mc.itemid
|
||||
FROM {message_conversations} mc
|
||||
INNER JOIN {message_conversation_members} mcm
|
||||
ON (mcm.conversationid = mc.id AND mcm.userid = :userid3)
|
||||
@@ -568,7 +569,7 @@ class api {
|
||||
if ($conversation->smallmessage) {
|
||||
$msg = new \stdClass();
|
||||
$msg->id = $conversation->messageid;
|
||||
$msg->text = clean_param($conversation->smallmessage, PARAM_NOTAGS);
|
||||
$msg->text = message_format_message_text($conversation);
|
||||
$msg->useridfrom = $conversation->useridfrom;
|
||||
$msg->timecreated = $conversation->timecreated;
|
||||
$conv->messages[] = $msg;
|
||||
|
||||
@@ -552,7 +552,7 @@ class helper {
|
||||
$data->profileimageurl = $conv->members[$otheruser->id]->profileimageurl;
|
||||
$data->profileimageurlsmall = $conv->members[$otheruser->id]->profileimageurlsmall;
|
||||
$data->ismessaging = isset($conv->messages[0]->text) ? true : false;
|
||||
$data->lastmessage = $conv->messages[0]->text ?? null;
|
||||
$data->lastmessage = $conv->messages[0]->text ? clean_param($conv->messages[0]->text, PARAM_NOTAGS) : null;
|
||||
$data->messageid = $conv->messages[0]->id ?? null;
|
||||
$data->isonline = $conv->members[$otheruser->id]->isonline ?? null;
|
||||
$data->isblocked = $conv->members[$otheruser->id]->isblocked ?? null;
|
||||
|
||||
+51
-14
@@ -715,6 +715,7 @@ class core_message_api_testcase extends core_message_messagelib_testcase {
|
||||
* Test verifying get_conversations when no limits, offsets, type filters or favourite restrictions are used.
|
||||
*/
|
||||
public function test_get_conversations_no_restrictions() {
|
||||
global $DB;
|
||||
// No conversations should exist yet.
|
||||
$user1 = self::getDataGenerator()->create_user();
|
||||
$this->assertEquals([], \core_message\api::get_conversations($user1->id));
|
||||
@@ -741,7 +742,9 @@ class core_message_api_testcase extends core_message_messagelib_testcase {
|
||||
$this->assertCount(1, $conversations[0]->members);
|
||||
$this->assertEquals(4, $conversations[0]->membercount);
|
||||
$this->assertCount(1, $conversations[0]->messages);
|
||||
$this->assertEquals("Message 14", $conversations[0]->messages[0]->text);
|
||||
$message = $DB->get_record('messages', ['id' => $conversations[0]->messages[0]->id]);
|
||||
$expectedmessagetext = message_format_message_text($message);
|
||||
$this->assertEquals($expectedmessagetext, $conversations[0]->messages[0]->text);
|
||||
$this->assertEquals($user1->id, $conversations[0]->messages[0]->useridfrom);
|
||||
|
||||
$this->assertEquals($gc2->id, $conversations[1]->id);
|
||||
@@ -750,7 +753,9 @@ class core_message_api_testcase extends core_message_messagelib_testcase {
|
||||
$this->assertCount(1, $conversations[1]->members);
|
||||
$this->assertEquals(3, $conversations[1]->membercount);
|
||||
$this->assertCount(1, $conversations[1]->messages);
|
||||
$this->assertEquals("Message 11", $conversations[1]->messages[0]->text);
|
||||
$message = $DB->get_record('messages', ['id' => $conversations[1]->messages[0]->id]);
|
||||
$expectedmessagetext = message_format_message_text($message);
|
||||
$this->assertEquals($expectedmessagetext, $conversations[1]->messages[0]->text);
|
||||
$this->assertEquals($user4->id, $conversations[1]->messages[0]->useridfrom);
|
||||
|
||||
$this->assertEquals($ic2->id, $conversations[2]->id);
|
||||
@@ -760,7 +765,9 @@ class core_message_api_testcase extends core_message_messagelib_testcase {
|
||||
$this->assertEquals($user3->id, $conversations[2]->members[$user3->id]->id);
|
||||
$this->assertEquals(2, $conversations[2]->membercount);
|
||||
$this->assertCount(1, $conversations[2]->messages);
|
||||
$this->assertEquals("Message 4", $conversations[2]->messages[0]->text);
|
||||
$message = $DB->get_record('messages', ['id' => $conversations[2]->messages[0]->id]);
|
||||
$expectedmessagetext = message_format_message_text($message);
|
||||
$this->assertEquals($expectedmessagetext, $conversations[2]->messages[0]->text);
|
||||
$this->assertEquals($user1->id, $conversations[2]->messages[0]->useridfrom);
|
||||
|
||||
$this->assertEquals($ic1->id, $conversations[3]->id);
|
||||
@@ -769,7 +776,9 @@ class core_message_api_testcase extends core_message_messagelib_testcase {
|
||||
$this->assertCount(1, $conversations[3]->members);
|
||||
$this->assertEquals(2, $conversations[3]->membercount);
|
||||
$this->assertCount(1, $conversations[3]->messages);
|
||||
$this->assertEquals("Message 2", $conversations[3]->messages[0]->text);
|
||||
$message = $DB->get_record('messages', ['id' => $conversations[3]->messages[0]->id]);
|
||||
$expectedmessagetext = message_format_message_text($message);
|
||||
$this->assertEquals($expectedmessagetext, $conversations[3]->messages[0]->text);
|
||||
$this->assertEquals($user2->id, $conversations[3]->messages[0]->useridfrom);
|
||||
|
||||
// Of the groups without messages, we expect to see the most recently created first.
|
||||
@@ -818,6 +827,34 @@ class core_message_api_testcase extends core_message_messagelib_testcase {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Test verifying that html format messages are supported, and that message_format_message_text() is being called appropriately.
|
||||
*/
|
||||
public function test_get_conversations_message_format() {
|
||||
global $DB;
|
||||
// Create some users.
|
||||
$user1 = self::getDataGenerator()->create_user();
|
||||
$user2 = self::getDataGenerator()->create_user();
|
||||
|
||||
// Create conversation.
|
||||
$conversation = \core_message\api::create_conversation(
|
||||
\core_message\api::MESSAGE_CONVERSATION_TYPE_INDIVIDUAL,
|
||||
[$user1->id, $user2->id]
|
||||
);
|
||||
|
||||
// Send some messages back and forth.
|
||||
$time = 1;
|
||||
testhelper::send_fake_message_to_conversation($user2, $conversation->id, 'Sup mang?', $time + 1);
|
||||
$mid = testhelper::send_fake_message_to_conversation($user1, $conversation->id, '<a href="#">A link</a>', $time + 2);
|
||||
|
||||
// Verify the format of the html message.
|
||||
$message = $DB->get_record('messages', ['id' => $mid]);
|
||||
$expectedmessagetext = message_format_message_text($message);
|
||||
$conversations = \core_message\api::get_conversations($user1->id);
|
||||
$messages = $conversations[0]->messages;
|
||||
$this->assertEquals($expectedmessagetext, $messages[0]->text);
|
||||
}
|
||||
|
||||
/**
|
||||
* Tests retrieving conversations with a limit and offset to ensure pagination works correctly.
|
||||
*/
|
||||
@@ -1102,14 +1139,14 @@ class core_message_api_testcase extends core_message_messagelib_testcase {
|
||||
array(
|
||||
'messageposition' => 0,
|
||||
'with' => 'user3',
|
||||
'subject' => 'S5',
|
||||
'subject' => '<p>S5</p>',
|
||||
'unreadcount' => 0,
|
||||
),
|
||||
// User1 has also conversed with user2. The most recent message is S2.
|
||||
array(
|
||||
'messageposition' => 1,
|
||||
'with' => 'user2',
|
||||
'subject' => 'S2',
|
||||
'subject' => '<p>S2</p>',
|
||||
'unreadcount' => 1,
|
||||
),
|
||||
),
|
||||
@@ -1118,7 +1155,7 @@ class core_message_api_testcase extends core_message_messagelib_testcase {
|
||||
array(
|
||||
'messageposition' => 0,
|
||||
'with' => 'user1',
|
||||
'subject' => 'S2',
|
||||
'subject' => '<p>S2</p>',
|
||||
'unreadcount' => 2,
|
||||
),
|
||||
),
|
||||
@@ -1127,7 +1164,7 @@ class core_message_api_testcase extends core_message_messagelib_testcase {
|
||||
array(
|
||||
'messageposition' => 0,
|
||||
'with' => 'user1',
|
||||
'subject' => 'S5',
|
||||
'subject' => '<p>S5</p>',
|
||||
'unreadcount' => 0,
|
||||
),
|
||||
),
|
||||
@@ -1174,7 +1211,7 @@ class core_message_api_testcase extends core_message_messagelib_testcase {
|
||||
array(
|
||||
'messageposition' => 0,
|
||||
'with' => 'user2',
|
||||
'subject' => 'S4',
|
||||
'subject' => '<p>S4</p>',
|
||||
'unreadcount' => 0,
|
||||
),
|
||||
),
|
||||
@@ -1183,7 +1220,7 @@ class core_message_api_testcase extends core_message_messagelib_testcase {
|
||||
array(
|
||||
'messageposition' => 0,
|
||||
'with' => 'user1',
|
||||
'subject' => 'S4',
|
||||
'subject' => '<p>S4</p>',
|
||||
'unreadcount' => 2,
|
||||
),
|
||||
),
|
||||
@@ -1233,7 +1270,7 @@ class core_message_api_testcase extends core_message_messagelib_testcase {
|
||||
array(
|
||||
'messageposition' => 0,
|
||||
'with' => 'user2',
|
||||
'subject' => 'S2',
|
||||
'subject' => '<p>S2</p>',
|
||||
'unreadcount' => 0,
|
||||
),
|
||||
),
|
||||
@@ -1241,7 +1278,7 @@ class core_message_api_testcase extends core_message_messagelib_testcase {
|
||||
array(
|
||||
'messageposition' => 0,
|
||||
'with' => 'user1',
|
||||
'subject' => 'S2',
|
||||
'subject' => '<p>S2</p>',
|
||||
'unreadcount' => 2
|
||||
),
|
||||
),
|
||||
@@ -1318,7 +1355,7 @@ class core_message_api_testcase extends core_message_messagelib_testcase {
|
||||
array(
|
||||
'messageposition' => 0,
|
||||
'with' => 'user2',
|
||||
'subject' => 'S8',
|
||||
'subject' => '<p>S8</p>',
|
||||
'unreadcount' => 1,
|
||||
),
|
||||
),
|
||||
@@ -1326,7 +1363,7 @@ class core_message_api_testcase extends core_message_messagelib_testcase {
|
||||
array(
|
||||
'messageposition' => 0,
|
||||
'with' => 'user1',
|
||||
'subject' => 'S8',
|
||||
'subject' => '<p>S8</p>',
|
||||
'unreadcount' => 3,
|
||||
),
|
||||
),
|
||||
|
||||
@@ -4469,6 +4469,41 @@ class core_message_externallib_testcase extends externallib_advanced_testcase {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Test verifying that html format messages are supported, and that message_format_message_text() is being called appropriately.
|
||||
*/
|
||||
public function test_get_conversations_message_format() {
|
||||
$this->resetAfterTest();
|
||||
|
||||
global $DB;
|
||||
// Create some users.
|
||||
$user1 = self::getDataGenerator()->create_user();
|
||||
$user2 = self::getDataGenerator()->create_user();
|
||||
|
||||
// Create conversation.
|
||||
$conversation = \core_message\api::create_conversation(
|
||||
\core_message\api::MESSAGE_CONVERSATION_TYPE_INDIVIDUAL,
|
||||
[$user1->id, $user2->id]
|
||||
);
|
||||
|
||||
// Send some messages back and forth.
|
||||
$time = 1;
|
||||
testhelper::send_fake_message_to_conversation($user2, $conversation->id, 'Sup mang?', $time + 1);
|
||||
$mid = testhelper::send_fake_message_to_conversation($user1, $conversation->id, '<a href="#">A link</a>', $time + 2);
|
||||
$message = $DB->get_record('messages', ['id' => $mid]);
|
||||
|
||||
// The user in scope.
|
||||
$this->setUser($user1);
|
||||
|
||||
// Verify the format of the html message.
|
||||
$expectedmessagetext = message_format_message_text($message);
|
||||
$result = core_message_external::get_conversations($user1->id);
|
||||
$result = external_api::clean_returnvalue(core_message_external::get_conversations_returns(), $result);
|
||||
$conversations = $result['conversations'];
|
||||
$messages = $conversations[0]['messages'];
|
||||
$this->assertEquals($expectedmessagetext, $messages[0]['text']);
|
||||
}
|
||||
|
||||
/**
|
||||
* Tests retrieving conversations with a limit and offset to ensure pagination works correctly.
|
||||
*/
|
||||
|
||||
Reference in New Issue
Block a user