--- c:\api.php 2021-09-23 18:21:56.000000000 +0200 +++ c:\api_new.php 2022-01-16 07:47:07.366669700 +0200 @@ -1611,32 +1611,74 @@ $favservice = \core_favourites\service_factory::get_service_for_user_context($usercontext); list($favsql, $favparams) = $favservice->get_join_sql_by_type('core_message', 'message_conversations', 'fav', 'mc.id'); - $sql = "SELECT mc.type, fav.itemtype, COUNT(DISTINCT mc.id) as count, MAX(maxvisibleconvmessage.convid) as maxconvidmessage + $sql = " + SELECT * FROM ( + SELECT mc.type, fav.itemtype, COUNT(DISTINCT mc.id) as count, MAX(m.conversationid) as maxconvidmessage FROM {message_conversations} mc INNER JOIN {message_conversation_members} mcm ON mcm.conversationid = mc.id - LEFT JOIN ( - SELECT m.conversationid as convid, MAX(m.timecreated) as maxtime - FROM {messages} m - INNER JOIN {message_conversation_members} mcm - ON mcm.conversationid = m.conversationid - LEFT JOIN {message_user_actions} mua - ON (mua.messageid = m.id AND mua.userid = :userid AND mua.action = :action) - WHERE mua.id is NULL - AND mcm.userid = :userid2 - GROUP BY m.conversationid - ) maxvisibleconvmessage - ON maxvisibleconvmessage.convid = mc.id + LEFT JOIN + mdl_messages m ON (m.conversationid = mcm.conversationid) + LEFT OUTER JOIN + mdl_messages m2 ON (m2.conversationid = mcm.conversationid AND (m2.id < m.id)) + LEFT JOIN + mdl_message_user_actions mua ON (m2.id is null AND mua.messageid = m.id AND mua.userid = :userid3 AND mua.action = :action) + $favsql WHERE mcm.userid = :userid3 + AND m2.id is null + AND mua.id is null + AND mc.enabled = :enabled + AND ( + (mc.type = :individualtype AND maxvisibleconvmessage.convid IS NOT NULL) + ) + GROUP BY mc.type, fav.itemtype + ORDER BY mc.type ASC + ) AS TEMP0 + UNION ALL + SELECT * FROM ( + SELECT mc.type, fav.itemtype, COUNT(DISTINCT mc.id) as count, MAX(m.conversationid) as maxconvidmessage + FROM {message_conversations} mc + INNER JOIN {message_conversation_members} mcm + ON mcm.conversationid = mc.id + + + + $favsql + WHERE mcm.userid = :userid3 + AND m2.id is null + AND mua.id is null + AND mc.enabled = :enabled + AND ( + (mc.type = :grouptype) + ) + GROUP BY mc.type, fav.itemtype + ORDER BY mc.type ASC + ) AS TEMP1 + UNION ALL + SELECT * FROM ( + SELECT mc.type, fav.itemtype, COUNT(DISTINCT mc.id) as count, MAX(m.conversationid) as maxconvidmessage + FROM {message_conversations} mc + INNER JOIN {message_conversation_members} mcm + ON mcm.conversationid = mc.id + + + + + $favsql + WHERE mcm.userid = :userid3 + AND m2.id is null + AND mua.id is null AND mc.enabled = :enabled AND ( - (mc.type = :individualtype AND maxvisibleconvmessage.convid IS NOT NULL) OR - (mc.type = :grouptype) OR (mc.type = :selftype) ) GROUP BY mc.type, fav.itemtype - ORDER BY mc.type ASC"; + ORDER BY mc.type ASC + ) AS TEMP2 + + + "; $params = [ 'userid' => $userid,