- Модуль: im
- Путь к файлу: ~/bitrix/modules/im/classes/general/im_chat.php
- Класс: CIMChat
- Вызов: CIMChat::GetLastSendMessage
public function GetLastSendMessage($arParams)
{
global $DB;
if (!isset($arParams['ID']))
return false;
$chatId = $arParams['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;
$bTimeZone = isset($arParams['USE_TIME_ZONE']) && $arParams['USE_TIME_ZONE'] == 'N'? false: true;
$arChatId = Array();
if (is_array($chatId))
{
foreach ($chatId as $val)
$arChatId[] = intval($val);
}
else
{
$arChatId[] = intval($chatId);
}
if (empty($arChatId))
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,
C.TITLE CHAT_TITLE,
C.COLOR CHAT_COLOR,
C.ENTITY_TYPE CHAT_ENTITY_TYPE,
C.ENTITY_DATA_1 CHAT_ENTITY_DATA_1,
C.ENTITY_DATA_2 CHAT_ENTITY_DATA_2,
C.ENTITY_DATA_3 CHAT_ENTITY_DATA_3,
".$DB->DatetimeToTimestampFunction('C.DATE_CREATE')." CHAT_DATE_CREATE,
C.TYPE CHAT_TYPE,
R.ID RID
FROM b_im_message M
INNER JOIN b_im_chat C ON C.ID = M.CHAT_ID AND C.LAST_MESSAGE_ID = M.ID
LEFT JOIN b_im_relation R ON R.CHAT_ID = M.CHAT_ID AND R.USER_ID = ".$fromUserId."
WHERE
M.ID = C.LAST_MESSAGE_ID
AND M.CHAT_ID IN (".implode(",",$arChatId).")
".$sqlLimit."
";
if (!$bTimeZone)
CTimeZone::Enable();
$arMessages = Array();
$enableOpenChat = CIMMessenger::CheckEnableOpenChat();
$dbRes = $DB->Query($strSql, false, "File: ".__FILE__."
Line: ".__LINE__);
while ($arRes = $dbRes->Fetch())
{
$arRes['CHAT_TYPE'] = trim($arRes['CHAT_TYPE']);
if ($arRes['CHAT_TYPE'] == IM_MESSAGE_OPEN)
{
if (!$enableOpenChat)
{
continue;
}
else if (intval($arRes['RID']) <= 0 && IMUser::getInstance($this->user_id)->isExtranet())
{
continue;
}
}
else if (intval($arRes['RID']) <= 0)
{
continue;
}
$chatType = BitrixImChat::getType($arRes);
$arMessages[$arRes['CHAT_ID']] = Array(
'id' => $arRes['ID'],
'senderId' => $arRes['AUTHOR_ID'],
'recipientId' => $arRes['CHAT_ID'],
'chatTitle' => BitrixImText::decodeEmoji($arRes['CHAT_TITLE']),
'date' => BitrixMainTypeDateTime::createFromTimestamp($arRes['DATE_CREATE']),
'color' => $arRes["CHAT_COLOR"] == ""? IMColor::getColorByNumber($arRes['CHAT_ID']): IMColor::getColor($arRes['CHAT_COLOR']),
'type' => $chatType,
'messageType' => $arRes["CHAT_TYPE"],
'text' => BitrixImText::parse($arRes['MESSAGE']),
'textLegacy' => BitrixImText::parseLegacyFormat($arRes['MESSAGE']),
);
}
return $arMessages;
}