• Модуль: imconnector
  • Путь к файлу: ~/bitrix/modules/imconnector/lib/provider/network/input.php
  • Класс: BitrixImConnectorProviderNetworkInput
  • Вызов: Input::processingSessionVote
protected function processingSessionVote(array $params): Result
{
	$result = clone $this->result;
	$messageParams = [];

	if (!Loader::includeModule('imopenlines'))
	{
		$result->addError(new Error(
			'Failed to load the imopenlines module',
			'ERROR_IMCONNECTOR_FAILED_LOAD_IMOPENLINES',
			__METHOD__
		));
	}

	if ($result->isSuccess())
	{
		$resultProcessing = Connector::initConnectorHandler($this->connector)->processingInputSessionVote($params, $this->line);

		if ($resultProcessing->isSuccess())
		{
			$params = $resultProcessing->getResult()['PARAMS'];
			$messageParams = $resultProcessing->getResult()['MESSAGE_PARAMS'];
		}
		else
		{
			$result->addErrors($resultProcessing->getErrors());
		}
	}

	if ($result->isSuccess())
	{
		$params['ACTION'] = $params['ACTION'] === 'dislike' ? 'dislike': 'like';

		$resultVote = false;
		/** @var BitrixImOpenLinesServicesSessionManager $sessionManager */
		$sessionManager = ServiceLocator::getInstance()->get('ImOpenLines.Services.SessionManager');
		if ($sessionManager instanceof BitrixImOpenLinesServicesSessionManager)
		{
			$resultVote = $sessionManager->voteAsUser((int)$messageParams['IMOL_VOTE'], $params['ACTION']);
		}

		if ($resultVote)
		{
			$messageParamService = ServiceLocator::getInstance()->get('Im.Services.MessageParam');
			if ($messageParamService instanceof BitrixImServicesMessageParam)
			{
				$messageParamService->setParam((int)$params['MESSAGE_ID'], 'IMOL_VOTE', $params['ACTION'], true);

				global $USER_FIELD_MANAGER;
				if (
					defined('IMOL_FDC')
					&& isset($params['VOTE_IP'])
					&& is_string($params['VOTE_IP'])
					&& $USER_FIELD_MANAGER instanceof CUserTypeManager
					&& array_key_exists('UF_IMOPENLINES_SESSION_VOTE_IP', $USER_FIELD_MANAGER->GetUserFields(SessionTable::getUfId()))
				)
				{
					$USER_FIELD_MANAGER->Update(SessionTable::getUfId(), $params['SESSION_ID'], ['UF_IMOPENLINES_SESSION_VOTE_IP' => $params['VOTE_IP']]);
				}
			}
		}
		else
		{
			$result->addError(new Error(
				'Voting error',
				'ERROR_IMCONNECTOR_VOTING_ERROR',
				__METHOD__,
				$params
			));
		}
	}

	return $result;
}