- Модуль: im
- Путь к файлу: ~/bitrix/modules/im/classes/general/im_history.php
- Класс: CIMHistory
- Вызов: CIMHistory::GetMoreMessage
function GetMoreMessage($pageId, $toUserId, $fromUserId = false, $bTimeZone = true)
{
global $DB;
$iNumPage = 1;
if (intval($pageId) > 0)
$iNumPage = intval($pageId);
$fromUserId = intval($fromUserId);
if ($fromUserId <= 0)
$fromUserId = $this->user_id;
$toUserId = intval($toUserId);
if ($toUserId <= 0)
{
$GLOBALS["APPLICATION"]->ThrowException(GetMessage("IM_HISTORY_ERROR_TO_USER_ID"), "ERROR_TO_USER_ID");
return false;
}
$chatId = 0;
$arMessages = Array();
$arMessageId = Array();
$arUnreadMessage = Array();
$arMessageFiles = Array();
$arUsers = Array();
$limitById = '';
if ($toUserId == $fromUserId)
{
$chat = new CIMChat();
$chatId = $chat->GetPersonalChat();
if (!$chatId)
{
return false;
}
$startId = 0;
}
else
{
$arRelation = CIMChat::GetPrivateRelation($fromUserId, $toUserId);
$chatId = $arRelation['CHAT_ID'] ?? null;
$startId = $arRelation['START_ID'];
}
if ($chatId > 0)
{
if ($startId > 0)
{
$limitById = 'AND M.ID >= '.intval($startId);
}
$sqlStr = "
SELECT COUNT(M.ID) as CNT
FROM b_im_message M
WHERE M.CHAT_ID = ".$chatId."
".$limitById."
";
$res_cnt = $DB->Query($sqlStr);
$res_cnt = $res_cnt->Fetch();
$cnt = $res_cnt["CNT"];
if ($cnt > 0 && ceil($cnt/30) >= $iNumPage)
{
if (!$bTimeZone)
CTimeZone::Disable();
$strSql ="
SELECT
M.ID,
M.CHAT_ID,
M.MESSAGE,
".$DB->DatetimeToTimestampFunction('M.DATE_CREATE')." DATE_CREATE,
M.AUTHOR_ID,
M.NOTIFY_EVENT,
".$fromUserId." R1_USER_ID,
".$toUserId." R2_USER_ID
FROM b_im_message M
WHERE
M.CHAT_ID = ".$chatId."
".$limitById."
ORDER BY M.DATE_CREATE DESC, M.ID DESC
";
if (!$bTimeZone)
CTimeZone::Enable();
$dbRes = new CDBResult();
$dbRes->NavQuery($strSql, $cnt, Array('iNumPage' => $iNumPage, 'nPageSize' => 30));
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'];
}
$arMessages[$arRes['ID']] = Array(
'id' => $arRes['ID'],
'chatId' => $arRes['CHAT_ID'],
'senderId' => $arRes['FROM_USER_ID'],
'recipientId' => $arRes['TO_USER_ID'],
'date' => BitrixMainTypeDateTime::createFromTimestamp($arRes['DATE_CREATE']),
'system' => $arRes['NOTIFY_EVENT'] == 'private'? 'N': 'Y',
'text' => BitrixImText::parse($arRes['MESSAGE']),
'textLegacy' => BitrixImText::parseLegacyFormat($arRes['MESSAGE'])
);
$arUsers[$convId][] = $arRes['ID'];
$arMessageId[] = $arRes['ID'];
$chatId = $arRes['CHAT_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, 'usersMessage' => $arUsers, 'files' => $arMessageFiles);
}