- Модуль: im
- Путь к файлу: ~/bitrix/modules/im/classes/general/im_contact_list.php
- Класс: CAllIMContactList
- Вызов: CAllIMContactList::SetRecent
static function SetRecent($arParams)
{
$messageDateParam = $arParams['MESSAGE_DATE'] ?? null;
$userId = (int)($arParams['USER_ID'] ?? 0);
$itemId = (int)($arParams['ENTITY_ID'] ?? 0);
$chatId = (int)($arParams['CHAT_ID'] ?? 0);
$relationId = (int)($arParams['RELATION_ID'] ?? 0);
$sessionId = (int)($arParams['SESSION_ID'] ?? 0);
$pinned = isset($arParams['PINNED']) && $arParams['PINNED'] === 'Y' ? 'Y': 'N';
$messageId = (int)($arParams['MESSAGE_ID'] ?? 0);
$dateMessage = $messageDateParam instanceof BitrixMainTypeDateTime ? $messageDateParam : new BitrixMainTypeDateTime();
$dateUpdate = new BitrixMainTypeDateTime();
$arParams['ENTITY_TYPE'] = $arParams['CHAT_TYPE'] ?? $arParams['ENTITY_TYPE'] ?? IM_MESSAGE_PRIVATE;
if (in_array($arParams['ENTITY_TYPE'], [IM_MESSAGE_OPEN, IM_MESSAGE_CHAT, IM_MESSAGE_OPEN_LINE], true))
{
$itemType = $arParams['ENTITY_TYPE'];
}
else
{
$itemType = IM_MESSAGE_PRIVATE;
}
if ($itemId <= 0)
{
return false;
}
$connection = BitrixMainApplication::getInstance()->getConnection();
$isUserAlreadyInRecent = $connection->queryScalar("SELECT 1 FROM b_im_recent WHERE USER_ID = ".$userId);
$merge = $connection->getSqlHelper()->prepareMerge(
"b_im_recent",
['USER_ID', 'ITEM_TYPE', 'ITEM_ID'],
[
'USER_ID' => $userId,
'ITEM_TYPE' => $itemType,
'ITEM_ID' => $itemId,
'ITEM_MID' => $messageId,
'ITEM_CID' => $chatId,
'ITEM_RID' => $relationId,
'ITEM_OLID' => $sessionId,
'PINNED' => $pinned,
'DATE_MESSAGE' => $dateMessage,
'DATE_UPDATE' => $dateUpdate,
],
[
'ITEM_MID' => $messageId,
'ITEM_CID' => $chatId,
'ITEM_RID' => $relationId,
'ITEM_OLID' => $sessionId,
'DATE_MESSAGE' => $dateMessage,
'DATE_UPDATE' => $dateUpdate,
]
);
if ($merge && $merge[0] != "")
{
$connection->query($merge[0]);
}
if (!$isUserAlreadyInRecent)
{
$event = new BitrixMainEvent("im", "OnAfterRecentAdd", array(
"user_id" => $userId,
));
$event->send();
}
return true;
}