• Модуль: imopenlines
  • Путь к файлу: ~/bitrix/modules/imopenlines/lib/connector.php
  • Класс: BitrixImOpenLinesConnector
  • Вызов: Connector::onChatRead
static function onChatRead($params)
{
	if (!in_array($params['CHAT_ENTITY_TYPE'], Array('LINES', 'LIVECHAT')) || $params['BY_EVENT'])
	{
		return true;
	}

	if ($params['CHAT_ENTITY_TYPE'] == 'LINES')
	{
		//TODO: Replace with the method ImOpenLinesChat::parseLinesChatEntityId
		[$connectorId, $lineId, $connectorChatId, $connectorUserId] = explode('|', $params['CHAT_ENTITY_ID']);
	}
	else // LIVECHAT
	{
		$chatId = $params['CHAT_ID'];
		$connectorChatId = 0;
		$connectorId = self::TYPE_LIVECHAT;
		//TODO: Replace with the method ImOpenLinesChat::parseLiveChatEntityId
		[$lineId, $connectorUserId] = explode('|', $params['CHAT_ENTITY_ID']);
		$userCode = $connectorId.'|'.$lineId.'|'.$chatId.'|'.$connectorUserId;

		$orm = ModelSessionTable::getList(array(
			'select' => Array('ID', 'CHAT_ID'),
			'filter' => array(
				'=USER_CODE' => $userCode,
				'=CLOSED' => 'N'
			)
		));
		if ($session = $orm->fetch())
		{
			$connectorChatId = $session['CHAT_ID'];
			ImOpenLinesMail::removeSessionFromMailQueue($session['ID'], false);
			Session::setLastSendMailId(['ID' => $session['ID'], 'USER_CODE' => $userCode], (int)$params['END_ID']);
		}
		$connectorId = 'lines';
	}

	$event = $params;

	$connector = Array(
		'connector_id' => $connectorId,
		'line_id' => $lineId,
		'chat_id' => $connectorChatId,
	);

	$connection = BitrixMainApplication::getInstance()->getConnection();

	$params['END_ID'] = (int)$params['END_ID'];

	$messages = Array();
	$query = $connection->query("
		SELECT M.ID, MP.PARAM_VALUE
		FROM b_im_message M
		LEFT JOIN b_im_message_param MP ON MP.MESSAGE_ID = M.ID AND MP.PARAM_NAME = 'CONNECTOR_MID'
		WHERE
		M.CHAT_ID = ". (int)$params['CHAT_ID'] ." AND
		M.ID > ". (int)$params['START_ID'] .($params['END_ID']? " AND M.ID < ".((int)$params['END_ID'] + 1): "")."
	");
	while($row = $query->fetch())
	{
		$messages[] = $row['PARAM_VALUE'];
	}

	return (new self())->sendStatusRead($connector, $messages, $event);
}