• Модуль: im
  • Путь к файлу: ~/bitrix/modules/im/lib/call/conference.php
  • Класс: BitrixImCallConference
  • Вызов: Conference::validateFields
static function validateFields(array $fields): BitrixImV2Result
{
	$result = new BitrixImV2Result();
	$validatedFields = [];

	$fields = array_change_key_case($fields, CASE_UPPER);

	if (isset($fields['TITLE']) && is_string($fields['TITLE']))
	{
		$fields['TITLE'] = trim($fields['TITLE']);
		$validatedFields['TITLE'] = $fields['TITLE'];
	}

	if (isset($fields['PASSWORD']) && is_string($fields['PASSWORD']) && $fields['PASSWORD'] !== '')
	{
		$fields['PASSWORD'] = trim($fields['PASSWORD']);

		if (strlen($fields['PASSWORD']) < 3)
		{
			return $result->addError(
				new Error(
					Loc::getMessage('IM_CALL_CONFERENCE_ERROR_PASSWORD_LENGTH_NEW'),
					'PASSWORD_SHORT_ERROR'
				)
			);
		}

		$validatedFields['VIDEOCONF']['PASSWORD'] = $fields['PASSWORD'];
	}
	else
	{
		$validatedFields['VIDEOCONF']['PASSWORD'] = $fields['VIDEOCONF']['PASSWORD'] ?? '';
	}

	if (isset($fields['INVITATION']) && is_string($fields['INVITATION']))
	{
		$fields['INVITATION'] = trim($fields['INVITATION']);

		if (strlen($fields['INVITATION']) > 255)
		{
			return $result->addError(
				new Error(
					Loc::getMessage('IM_CALL_CONFERENCE_ERROR_INVITATION_LENGTH'),
					'INVITATION_LONG_ERROR'
				)
			);
		}

		$validatedFields['VIDEOCONF']['INVITATION'] = $fields['INVITATION'];
	}
	elseif (isset($fields['VIDEOCONF']['INVITATION']) && is_string($fields['VIDEOCONF']['INVITATION']))
	{
		$validatedFields['VIDEOCONF']['INVITATION'] = $fields['VIDEOCONF']['INVITATION'];
	}

	if (isset($fields['USERS']) && is_array($fields['USERS']))
	{
		$validatedFields['USERS'] = [];
		foreach ($fields['USERS'] as $userId)
		{
			$validatedFields['USERS'][] = (int)$userId;
		}
	}

	if (isset($fields['BROADCAST_MODE']) && $fields['BROADCAST_MODE'] === true && Settings::isBroadcastingEnabled())
	{
		if (count($fields['PRESENTERS']) === 0)
		{
			return $result->addError(
				new Error(
					Loc::getMessage('IM_CALL_CONFERENCE_ERROR_NO_PRESENTERS'),
					'PRESENTERS_EMPTY_ERROR'
				)
			);
		}

		if (count($fields['PRESENTERS']) > self::PRESENTERS_LIMIT)
		{
			return $result->addError(
				new Error(
					Loc::getMessage('IM_CALL_CONFERENCE_ERROR_TOO_MANY_PRESENTERS'),
					'PRESENTERS_TOO_MANY_ERROR'
				)
			);
		}

		$validatedFields['VIDEOCONF']['IS_BROADCAST'] = 'Y';
		$validatedFields['VIDEOCONF']['PRESENTERS'] = [];
		foreach ($fields['PRESENTERS'] as $userId)
		{
			$validatedFields['USERS'][] = (int)$userId;
			$validatedFields['VIDEOCONF']['PRESENTERS'][] = (int)$userId;
		}
	}
	else
	{
		$validatedFields['VIDEOCONF']['IS_BROADCAST'] = 'N';
	}

	if (isset($fields['ALIAS_DATA']))
	{
		if (static::isAliasCorrect($fields['ALIAS_DATA']))
		{
			$validatedFields['VIDEOCONF']['ALIAS_DATA'] = $fields['ALIAS_DATA'];
		}
		else
		{
			return $result->addError(
				new Error(
					Loc::getMessage('IM_CALL_CONFERENCE_ERROR_ALIAS'),
					'WRONG_ALIAS_ERROR'
				)
			);
		}
	}
	else
	{
		if (isset($fields['VIDEOCONF']['ALIAS_DATA']))
		{
			$validatedFields['VIDEOCONF']['ALIAS_DATA'] = $fields['VIDEOCONF']['ALIAS_DATA'];
		}
		else
		{
			$validatedFields['VIDEOCONF']['ALIAS_DATA'] = Alias::addUnique([
				"ENTITY_TYPE" => Alias::ENTITY_TYPE_VIDEOCONF,
				"ENTITY_ID" => 0
			]);
		}
	}

	$result->setData(['FIELDS' => $validatedFields]);

	return $result;
}