1
0
mirror of https://github.com/moodle/moodle.git synced 2025-04-25 10:26:17 +02:00

Merge branch 'MDL-57370-master-int-fix-1' of git://github.com/ryanwyllie/moodle

This commit is contained in:
Dan Poltawski 2017-02-08 09:14:07 +00:00
commit a06677a3b5

@ -309,7 +309,7 @@ class api {
$conversationssql = "SELECT $convosig, max(timecreated) as timecreated
FROM ($allmessages) x
GROUP BY $convocase
ORDER BY max(timecreated) DESC, max(id) DESC";
ORDER BY timecreated DESC, max(id) DESC";
$conversationrecords = $DB->get_records_sql($conversationssql, $allmessagesparams, $limitfrom, $limitnum);
// This user has no conversations so we can return early here.
@ -360,12 +360,12 @@ class api {
OR
(useridfrom = ? AND timeuserfromdeleted = 0 AND notification = 0)
AND timecreated $timecreatedsql";
$messageidsql = "SELECT max(id)
$messageidsql = "SELECT $convosig, max(id) as id, timecreated
FROM ($allmessagestimecreated) x
WHERE $messageidwhere
GROUP BY $convocase, timecreated";
$messageidparams = array_merge([$userid, $userid], $timecreatedparams, [$userid, $userid], $timecreatedparams);
$messageids = array_keys($DB->get_records_sql($messageidsql, $messageidparams));
$messageidrecords = $DB->get_records_sql($messageidsql, $messageidparams);
// Ok, let's recap. We've pulled a descending ordered list of conversations by latest time created
// for the given user. For each of those conversations we've grabbed the max id for messages
@ -373,16 +373,19 @@ class api {
//
// So at this point we have the list of ids for the most recent message in each of the user's most
// recent conversations. Now we need to pull all of the message and user data for each message id.
list($idsql, $idparams) = $DB->get_in_or_equal($messageids);
$whereclauses = [];
foreach ($messageidrecords as $record) {
$whereclauses[] = "(m.id = {$record->id} AND timecreated = {$record->timecreated})";
}
$messagewhere = implode(' OR ', $whereclauses);
$messagesql = "SELECT $convosig, m.smallmessage, m.id, m.useridto, m.useridfrom, m.timeread
FROM ($allmessages) m
WHERE m.id $idsql";
$messageparams = array_merge($allmessagesparams, $idparams);
WHERE $messagewhere";
// We need to handle the case where the $messageids contains two ids from the same conversation
// (which can happen because there can be id clashes between the read and unread tables). In
// this case we will prioritise the unread message.
$messageset = $DB->get_recordset_sql($messagesql, $messageparams);
$messageset = $DB->get_recordset_sql($messagesql, $allmessagesparams);
$messages = [];
foreach ($messageset as $message) {
$id = $message->convo_signature;
@ -481,7 +484,7 @@ class api {
$conversation->isread = true;
}
$arrconversations[$message->convo_signature] = helper::create_contact($conversation);
$arrconversations[$otheruserid] = helper::create_contact($conversation);
}
return $arrconversations;