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