• Модуль: landing
  • Путь к файлу: ~/bitrix/modules/landing/lib/internals/landing.php
  • Класс: BitrixLandingInternalsLandingTable
  • Вызов: LandingTable::revertCode
static function revertCode(EntityEvent $event): void
{
	$primary = $event->getParameter('primary');
	$fields = $event->getParameter('fields');

	if (!Landing::isCheckUniqueAddress())
	{
		return;
	}

	if (isset($primary['ID']) && array_key_exists('CODE', $fields))
	{
		$landingId = (int)$primary['ID'];
		$updateCode = false;

		Landing::disableCheckDeleted();

		$landing = Landing::createInstance($landingId);

		if ($landing->getMeta()['RULE'])
		{
			Landing::enableCheckDeleted();
			return;
		}

		if ($landing->exist())
		{
			if ($fields['FOLDER_ID'] ?? null)
			{
				$res = self::getList([
					'select' => [
						'ID'
					],
					'filter' => [
						'!ID' => $primary['ID'],
						'FOLDER_ID' => $fields['FOLDER_ID'],
						'=CODE' => $fields['CODE']
					]
				]);
				if ($res->fetch())
				{
					$updateCode = true;
				}
			}
			else
			{
				$landingUrl = $landing->getPublicUrl(false, false);
				$resolvedId = Landing::resolveIdByPublicUrl($landingUrl, $landing->getSiteId());
				if ($resolvedId && $landingId !== $resolvedId)
				{
					$updateCode = true;
				}
			}
		}

		Landing::enableCheckDeleted();

		if ($updateCode)
		{
			Landing::disableCheckUniqueAddress();
			$reUpdate = [
				'CODE' => $fields['CODE'] . '_' . Manager::getRandomString(4)
			];
			if (self::$additionalFields)
			{
				$reUpdate['ADDITIONAL_FIELDS'] = self::$additionalFields;
			}
			parent::update($landingId, $reUpdate);
			Landing::enableCheckUniqueAddress();
		}
	}
}