• Модуль: 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;
}