- Модуль: im
- Путь к файлу: ~/bitrix/modules/im/classes/general/im_history.php
- Класс: CIMHistory
- Вызов: CIMHistory::SearchDateChatMessage
function SearchDateChatMessage($searchDate, $chatId, $bTimeZone = true)
{
global $DB;
$chatId = intval($chatId);
$sqlHelper = BitrixMainApplication::getInstance()->getConnection()->getSqlHelper();
try
{
$dateStart = BitrixMainTypeDateTime::createFromUserTime($searchDate);
$sqlDateStart = $sqlHelper->getCharToDateFunction($dateStart->format("Y-m-d H:i:s"));
$dateEnd = $dateStart->add('1 DAY');
$sqlDateEnd = $sqlHelper->getCharToDateFunction($dateEnd->format("Y-m-d H:i:s"));
}
catch(BitrixMainObjectException $e)
{
$GLOBALS["APPLICATION"]->ThrowException(GetMessage("IM_HISTORY_SEARCH_DATE_EMPTY"), "ERROR_SEARCH_EMPTY");
return false;
}
$limitById = '';
$ar = CIMChat::GetRelationById($chatId, $this->user_id, true, false);
if ($ar && $ar['START_ID'] > 0)
{
$limitById = 'AND M.ID >= '.intval($ar['START_ID']);
}
if (!$bTimeZone)
CTimeZone::Disable();
$strSql ="
SELECT
M.ID,
M.CHAT_ID,
M.MESSAGE,
".$DB->DatetimeToTimestampFunction('M.DATE_CREATE')." DATE_CREATE,
M.AUTHOR_ID
FROM b_im_relation R1
INNER JOIN b_im_message M ON M.CHAT_ID = R1.CHAT_ID
WHERE
R1.CHAT_ID = ".$chatId."
AND R1.USER_ID = ".$this->user_id."
AND M.DATE_CREATE >= ".$sqlDateStart."
AND M.DATE_CREATE <= ".$sqlDateEnd."
".$limitById."
ORDER BY M.DATE_CREATE DESC, M.ID DESC
";
if (!$bTimeZone)
CTimeZone::Enable();
$dbRes = $DB->Query($strSql, false, "File: ".__FILE__."
Line: ".__LINE__);
$arMessages = Array();
$arMessageId = Array();
$arUnreadMessage = Array();
$usersMessage = Array();
while ($arRes = $dbRes->Fetch())
{
$arMessages[$arRes['ID']] = Array(
'id' => $arRes['ID'],
'chatId' => $arRes['CHAT_ID'],
'senderId' => $arRes['AUTHOR_ID'],
'recipientId' => $arRes['CHAT_ID'],
'date' => BitrixMainTypeDateTime::createFromTimestamp($arRes['DATE_CREATE']),
'text' => BitrixImText::parse($arRes['MESSAGE']),
'textLegacy' => BitrixImText::parseLegacyFormat($arRes['MESSAGE'])
);
$usersMessage[$arRes['CHAT_ID']][] = $arRes['ID'];
$arMessageId[] = $arRes['ID'];
}
$params = CIMMessageParam::Get($arMessageId);
$arFiles = Array();
foreach ($params as $messageId => $param)
{
$arMessages[$messageId]['params'] = $param;
if (isset($param['FILE_ID']))
{
foreach ($param['FILE_ID'] as $fileId)
{
$arFiles[$fileId] = $fileId;
}
}
}
$arMessageFiles = CIMDisk::GetFiles($chatId, $arFiles);
$arMessages = CIMMessageLink::prepareShow($arMessages, $params);
return Array('chatId' => $chatId, 'message' => $arMessages, 'unreadMessage' => $arUnreadMessage, 'usersMessage' => $usersMessage, 'files' => $arMessageFiles);
}