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:
Jake Dallimore
2018-11-07 14:23:54 +08:00
parent 08c51ff080
commit 74fc14e5b2
4 changed files with 90 additions and 17 deletions
+3 -2
View File
@@ -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;
+1 -1
View File
@@ -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
View File
@@ -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,
),
),
+35
View File
@@ -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.
*/