• Модуль: landing
  • Путь к файлу: ~/bitrix/modules/landing/lib/internals/domain.php
  • Класс: BitrixLandingInternalsDomainTable
  • Вызов: DomainTable::prepareChange
static function prepareChange(EntityEvent $event): EntityEventResult
{
	$result = new EntityEventResult();
	$fields = $event->getParameter('fields');
	$primary = $event->getParameter('primary');
	$update = array();

	if ($fields['DOMAIN'] ?? null)
	{
		if (
			Manager::isB24() &&
			!Manager::isExtendedSMN() &&
			mb_strtolower($fields['DOMAIN']) !== Manager::getHttpHost() &&
			!DomainCore::getBitrix24Subdomain($fields['DOMAIN'])
		)
		{
			BitrixLandingAgent::addUniqueAgent('removeBadDomain', [], 86400);
		}
	}

	// prepare CODE - base part of URL
	if (array_key_exists('DOMAIN', $fields))
	{
		$url = parse_url($fields['DOMAIN']);
		if (isset($url['host']))
		{
			$fields['DOMAIN'] = $url['host'];
		}
		else
		{
			$fields['DOMAIN'] = trim($fields['DOMAIN']);
		}
		$prevDomain = null;
		$res = self::getList(array(
			'select' => array(
				'*'
			),
			'filter' => array(
				'LOGIC' => 'OR',
				'ID' => $primary['ID'] ?? 0,
				'=DOMAIN' => $fields['DOMAIN']
			)
		));
		while ($rowDomain = $res->fetch())
		{
			if ($rowDomain['ID'] == ($primary['ID'] ?? 0))
			{
				$prevDomain = $rowDomain['DOMAIN'];
				continue;
			}
			$result->setErrors(array(
				new EntityEntityError(
					Loc::getMessage('LANDING_TABLE_ERROR_DOMAIN_IS_NOT_UNIQUE'),
					'DOMAIN_IS_NOT_UNIQUE'
				)
			));
			return $result;
		}
		$update['DOMAIN'] = $fields['DOMAIN'];
		if ($prevDomain !== $fields['DOMAIN'])
		{
			$update['PREV_DOMAIN'] = $prevDomain;
		}
	}

	// force set protocol
	$fields['PROTOCOL'] = Manager::isHttps()
						? self::PROTOCOL_HTTPS
						: self::PROTOCOL_HTTP;
	$update['PROTOCOL'] = $fields['PROTOCOL'];

	// modify fields
	if (!empty($update))
	{
		$result->modifyFields($update);
	}

	return $result;
}