• Модуль: main
  • Путь к файлу: ~/bitrix/modules/main/lib/rating/internal/action.php
  • Класс: BitrixMainRatingInternalAction
  • Вызов: Action::vote
static function vote(array $params = []): array
{
	global $APPLICATION;

	$voteList = [];

	$allowVoteData = CRatings::checkAllowVote($params);
	if (!$allowVoteData['RESULT'])
	{
		return $voteList;
	}

	$APPLICATION->RestartBuffer();
	$userData = [];
	$remoteAddr = $params['REMOTE_ADDR'];

	if (in_array($params['ACTION'], [ 'plus', 'minus' ]))
	{
		$userData = CRatings::addRatingVote([
			'ENTITY_TYPE_ID' => $params['ENTITY_TYPE_ID'],
			'ENTITY_ID' => $params['ENTITY_ID'],
			'VALUE' => $params['ACTION'] === 'plus' ? 1 : -1,
			'USER_IP' => $remoteAddr,
			'USER_ID' => $params['CURRENT_USER_ID'],
			'REACTION' => (
				$params['ACTION'] === 'plus'
				&& !empty($params['REACTION'])
					? $params['REACTION']
					: CAllRatings::REACTION_DEFAULT
			),
		]);

	}
	elseif ($params['ACTION'] === 'change')
	{
		$userData = CRatings::changeRatingVote([
			'ENTITY_TYPE_ID' => $params['ENTITY_TYPE_ID'],
			'ENTITY_ID' => $params['ENTITY_ID'],
			'USER_IP' => $remoteAddr,
			'USER_ID' => $params['CURRENT_USER_ID'],
			'REACTION' => (
			!empty($params['REACTION'])
				? $params['REACTION']
				: CAllRatings::REACTION_DEFAULT
			)
		]);
	}
	else if ($params['ACTION'] === 'cancel')
	{
		$userData = CRatings::cancelRatingVote([
			'ENTITY_TYPE_ID' => $params['ENTITY_TYPE_ID'],
			'ENTITY_ID' => $params['ENTITY_ID'],
			'USER_ID' => $params['CURRENT_USER_ID'],
		]);
	}

	$voteList = CRatings::getRatingVoteList([
		'ENTITY_TYPE_ID' => $params['ENTITY_TYPE_ID'],
		'ENTITY_ID' => $params['ENTITY_ID'],
		'LIST_LIMIT' => 0,
		'LIST_TYPE' => ($params['ACTION'] === 'minus' ? 'minus' : 'plus'),
	]);

	if ($params['RATING_RESULT'] === 'Y')
	{
		$voteList = array_merge(
			$voteList,
			self::getVoteResult($params['ENTITY_TYPE_ID'], $params['ENTITY_ID'])
		);
	}

	$voteList['action'] = $params['ACTION'];
	$voteList['user_data'] = $userData;

	return $voteList;
}