• Модуль: imopenlines
  • Путь к файлу: ~/bitrix/modules/imopenlines/lib/session.php
  • Класс: BitrixImOpenLinesSession
  • Вызов: Session::voteAsHead
static function voteAsHead($sessionId, $voteValue = null, $commentValue = null, $userId = null)
{
	$result = false;

	$sessionData = ModelSessionTable::getByIdPerformance($sessionId)->fetch();

	if ($sessionData)
	{
		$userId = (int)$userId;
		if (!$userId)
		{
			$userId = $GLOBALS['USER']->GetId();
		}

		$configManager = new BitrixImOpenLinesConfig();
		$resultPermissions = $configManager->canVoteAsHead($sessionData['CONFIG_ID']);

		if ($resultPermissions)
		{
			$fieldsUpdate = [];

			$pullMessage = [
				'module_id' => 'imopenlines',
				'command' => 'voteHead',
				'expiry' => 60,
				'params' => [
					'sessionId' => $sessionId,
				],
			];

			if (!empty($commentValue))
			{
				if (mb_strlen($commentValue) > 10000)
				{
					$commentValue = mb_substr($commentValue, 0, 10000).'...';
				}

				$commentValueSafely = htmlspecialcharsbx($commentValue);
			}

			if ($voteValue !== null && $commentValue !== null)
			{
				$voteValue = $voteValue == 1 || $voteValue <= 5? $voteValue: 0;

				$fieldsUpdate['VOTE_HEAD'] = $voteValue;

				$fieldsUpdate['COMMENT_HEAD'] = $commentValue;

				if ($voteValue > 0)
				{
					BitrixImOpenLinesChat::sendRatingNotify(
						BitrixImOpenLinesChat::RATING_TYPE_HEAD_AND_COMMENT,
						$sessionData['ID'],
						['vote' => $voteValue, 'comment' => $commentValue],
						$sessionData['OPERATOR_ID'],
						$userId
					);
				}
				else
				{
					BitrixImOpenLinesChat::sendRatingNotify(
						BitrixImOpenLinesChat::RATING_TYPE_COMMENT,
						$sessionData['ID'],
						$commentValue,
						$sessionData['OPERATOR_ID'],
						$userId
					);
				}

				$result = true;
			}
			elseif($voteValue !== null)
			{
				$voteValue = $voteValue == 1 || $voteValue <= 5? $voteValue: 0;

				$fieldsUpdate['VOTE_HEAD'] = $voteValue;

				if ($voteValue > 0)
				{
					BitrixImOpenLinesChat::sendRatingNotify(
						BitrixImOpenLinesChat::RATING_TYPE_HEAD,
						$sessionData['ID'],
						$voteValue,
						$sessionData['OPERATOR_ID'],
						$userId
					);
				}

				$result = true;
			}
			elseif($commentValue !== null)
			{
				$fieldsUpdate['COMMENT_HEAD'] = $commentValue;

				BitrixImOpenLinesChat::sendRatingNotify(
					BitrixImOpenLinesChat::RATING_TYPE_COMMENT,
					$sessionData['ID'],
					$commentValue,
					$sessionData['OPERATOR_ID'],
					$userId
				);

				$result = true;
			}

			if (!empty($fieldsUpdate))
			{
				ModelSessionTable::update($sessionId, $fieldsUpdate);
			}

			if (Loader::includeModule("pull") && ($voteValue !==null || $commentValue !==null))
			{
				$paramsPull = [
					'IMOL_VOTE_SID' => $sessionData['ID']
				];

				if ($voteValue !==null)
				{
					$pullMessage['params']['voteValue'] = $voteValue;
					$paramsPull['IMOL_VOTE_HEAD'] = $voteValue;
				}

				if ($commentValue !==null)
				{
					$pullMessage['params']['commentValue'] = $commentValueSafely;
					$paramsPull['IMOL_COMMENT_HEAD']['text'] = $commentValueSafely;
				}

				$pullUsers = CIMChat::GetRelationById($sessionData['CHAT_ID'], false, true, false);
				$pullUsers[] = $userId;

				BitrixPullEvent::add($pullUsers, $pullMessage);

				if ($voteValue !==null)
				{
					$pullMessage['skip_users'] = $pullUsers;
					unset($pullMessage['params']['commentValue']);
					CPullWatch::AddToStack('IMOL_STATISTICS', $pullMessage);
				}

				if ($sessionData['END_ID'] > 0)
				{
					CIMMessageParam::Set($sessionData['END_ID'], $paramsPull);
					CIMMessageParam::SendPull($sessionData['END_ID'], array_keys($paramsPull));
				}
			}
		}
	}

	return $result;
}