- Модуль: im
- Путь к файлу: ~/bitrix/modules/im/classes/general/im_message.php
- Класс: CIMMessage
- Вызов: CIMMessage::GetLastSendMessage
function GetLastSendMessage($arParams)
{
global $DB;
if (!isset($arParams['TO_USER_ID']))
return false;
$toUserId = $arParams['TO_USER_ID'];
$fromUserId = isset($arParams['FROM_USER_ID']) && intval($arParams['FROM_USER_ID'])>0? intval($arParams['FROM_USER_ID']): $this->user_id;
$limit = isset($arParams['LIMIT']) && intval($arParams['LIMIT'])>0? intval($arParams['LIMIT']): false;
$order = isset($arParams['ORDER']) && $arParams['ORDER'] == 'ASC'? 'ASC': 'DESC';
$bTimeZone = isset($arParams['USE_TIME_ZONE']) && $arParams['USE_TIME_ZONE'] == 'N'? false: true;
$arToUserId = Array();
if (is_array($toUserId))
{
foreach ($toUserId as $userId)
$arToUserId[] = intval($userId);
}
else
{
$arToUserId[] = intval($toUserId);
}
if (empty($arToUserId))
return Array();
$sqlLimit = '';
if ($limit)
{
if ($DB->type == "MYSQL")
$sqlLimit = " AND M.DATE_CREATE > DATE_SUB(NOW(), INTERVAL ".$limit." DAY)";
elseif ($DB->type == "MSSQL")
$sqlLimit = " AND M.DATE_CREATE > dateadd(day, -".$limit.", getdate())";
elseif ($DB->type == "ORACLE")
$sqlLimit = " AND M.DATE_CREATE > SYSDATE-".$limit;
}
if (!$bTimeZone)
CTimeZone::Disable();
$strSql = "
SELECT
M.ID,
M.CHAT_ID,
M.MESSAGE,
".$DB->DatetimeToTimestampFunction('M.DATE_CREATE')." DATE_CREATE,
M.AUTHOR_ID,
R1.USER_ID R1_USER_ID,
R2.USER_ID R2_USER_ID
FROM b_im_relation R1
INNER JOIN b_im_relation R2 on R2.CHAT_ID = R1.CHAT_ID
INNER JOIN b_im_message M ON M.ID >= R1.START_ID
AND M.ID >= R1.LAST_ID
AND M.ID >= R2.LAST_ID
AND M.CHAT_ID = R1.CHAT_ID
".$sqlLimit."
WHERE
R1.USER_ID = ".$fromUserId."
AND R2.USER_ID IN (".implode(",",$arToUserId).")
AND R1.MESSAGE_TYPE = '".IM_MESSAGE_PRIVATE."'
".($order == 'DESC'? "ORDER BY M.DATE_CREATE DESC, M.ID DESC": "");
if (!$bTimeZone)
CTimeZone::Enable();
$arMessages = Array();
$dbRes = $DB->Query($strSql, false, "File: ".__FILE__."
Line: ".__LINE__);
while ($arRes = $dbRes->Fetch())
{
if ($fromUserId == $arRes['AUTHOR_ID'])
{
$arRes['TO_USER_ID'] = $arRes['R2_USER_ID'];
$arRes['FROM_USER_ID'] = $arRes['R1_USER_ID'];
$convId = $arRes['TO_USER_ID'];
}
else
{
$arRes['TO_USER_ID'] = $arRes['R1_USER_ID'];
$arRes['FROM_USER_ID'] = $arRes['R2_USER_ID'];
$convId = $arRes['FROM_USER_ID'];
}
if (!isset($arMessages[$convId]) || (isset($arMessages[$convId]) && $arMessages[$convId]['date'] < $arRes['DATE_CREATE']))
{
$arMessages[$convId] = Array(
'id' => $arRes['ID'],
'senderId' => $arRes['FROM_USER_ID'],
'recipientId' => $arRes['TO_USER_ID'],
'date' => BitrixMainTypeDateTime::createFromTimestamp($arRes['DATE_CREATE']),
'text' => $arRes['MESSAGE']
);
}
}
foreach ($arMessages as $key => $value)
{
$value['text'] = BitrixImText::parse($value['text']);
$arMessages[$key] = $value;
}
return $arMessages;
}