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