- Модуль: im
- Путь к файлу: ~/bitrix/modules/im/classes/general/im_messenger.php
- Класс: CIMMessenger
- Вызов: CIMMessenger::LinesSessionVote
static function LinesSessionVote($dialogId, $messageId, $action, $userId = null)
{
global $USER;
$userId = is_null($userId) ? $USER->getId(): (int)$userId;
$messageId = (int)$messageId;
if ($userId <= 0 || $messageId <= 0 || $dialogId == '')
{
return false;
}
$message = self::getById($messageId);
if (!$message)
{
return false;
}
// only messages from network bots
if (!BitrixImUser::getInstance($message['AUTHOR_ID'])->isBot() || !BitrixImUser::getInstance($message['AUTHOR_ID'])->isNetwork())
{
return false;
}
$sessionId = (int)$message['PARAMS']['IMOL_VOTE'];
if ($sessionId <= 0)
{
return false;
}
$timeToVote = (int)$message['PARAMS']['IMOL_TIME_LIMIT_VOTE'];
if ($timeToVote > 0 && ($message['DATE_CREATE'] + $timeToVote < time()))
{
// expired
return false;
}
$relations = self::getRelationById($messageId);
if (!isset($relations[$userId]))
{
return false;
}
$action = $action == 'dislike' ? 'dislike': 'like';
CIMMessageParam::set($messageId, Array('IMOL_VOTE' => $action));
CIMMessageParam::sendPull($messageId, Array('IMOL_VOTE'));
$chat = BitrixImModelChatTable::getByPrimary($message['CHAT_ID'])->fetch();
if ($chat['ENTITY_TYPE'] == 'LIVECHAT')
{
CIMMessageParam::set($message['PARAMS']['CONNECTOR_MID'][0], Array('IMOL_VOTE' => $action));
CIMMessageParam::sendPull($message['PARAMS']['CONNECTOR_MID'][0], Array('IMOL_VOTE'));
if (BitrixMainLoader::includeModule('imopenlines'))
{
BitrixImOpenlinesSession::voteAsUser($sessionId, $action);
}
}
foreach(GetModuleEvents('im', 'OnSessionVote', true) as $arEvent)
{
ExecuteModuleEventEx($arEvent, array(array(
'DIALOG_ID' => $dialogId,
'MESSAGE_ID' => $messageId,
'SESSION_ID' => $sessionId,
'MESSAGE' => $message,
'ACTION' => $action,
'CHAT' => $chat,
'RELATION' => $relations,
'USER_ID' => $userId
)));
}
return true;
}