Your IP : 3.128.94.125


Current Path : /var/www/www-root/data/www/monolith-realty.ru/bitrix/modules/landing/lib/site/update/
Upload File :
Current File : /var/www/www-root/data/www/monolith-realty.ru/bitrix/modules/landing/lib/site/update/domainby.php

<?php

namespace Bitrix\Landing\Site\Update;

use Bitrix\Landing\Internals\DomainTable;
use Bitrix\Landing\Manager;
use Bitrix\Main\SystemException;

/**
 * BY domains need to be created in a new online domain zone, replacing existing sites and shops.
 */
class DomainBy extends Update
{
	protected const DOMAIN_SITE_BY = '.bitrix24site.by';
	protected const DOMAIN_SHOP_BY = '.bitrix24shop.by';
	protected const DOMAIN_SITE_ONLINE = '.b24site.online';
	protected const DOMAIN_SHOP_ONLINE = '.b24shop.online';

	/**
	 * Entry point. Returns true on success.
	 *
	 * @param int $siteId Site id.
	 *
	 * @return bool
	 */
	public static function update(int $siteId): bool
	{
		$site = self::getId($siteId);
		$domainId = (int)$site['DOMAIN_ID'];
		$domainName = self::getDomainName($domainId);
		if ($domainName !== '')
		{
			$isNeedSiteDomainUpdate = self::isNeedSiteDomainUpdate($domainName);
			$isNeedShopDomainUpdate = self::isNeedShopDomainUpdate($domainName);
			if (!$isNeedSiteDomainUpdate && !$isNeedShopDomainUpdate)
			{
				return true;
			}

			if ($isNeedSiteDomainUpdate && !self::updateDomain($domainId, $domainName, 'site', $site))
			{
				return false;
			}
			if ($isNeedShopDomainUpdate && !self::updateDomain($domainId, $domainName, 'shop', $site))
			{
				return false;
			}
		}

		return true;
	}

	protected static function getDomainName(int $domainId): string
	{
		$res = DomainTable::getList([
			'select' => [
				'ID', 'DOMAIN',
			],
			'filter' => [
				'ID' => $domainId,
			],
		]);
		if (($row = $res->fetch()) && isset($row['DOMAIN']))
		{
			return $row['DOMAIN'];
		}

		return '';
	}

	/**
	 * Only .by domains, that created by Bitrix
	 *
	 * @param string $domainName
	 * @return bool
	 */
	protected static function isNeedSiteDomainUpdate(string $domainName): bool
	{
		if (str_ends_with($domainName, self::DOMAIN_SITE_BY))
		{
			return true;
		}

		return false;
	}

	/**
	 * Only .by domains, that created by Bitrix
	 *
	 * @param string $domainName
	 * @return bool
	 */
	protected static function isNeedShopDomainUpdate(string $domainName): bool
	{
		if (str_ends_with($domainName, self::DOMAIN_SHOP_BY))
		{
			return true;
		}

		return false;
	}

	/**
	 * Create new random domain, save in table
	 *
	 * @param int $domainId
	 * @param string $domainName
	 * @param string $type
	 * @param array $site - site data array
	 *
	 * @return bool
	 */
	protected static function updateDomain(int $domainId, string $domainName, string $type, array $site): bool
	{
		try
		{
			$siteController = Manager::getExternalSiteController();
			$publicUrl = Manager::getPublicationPath($site['ID']);
			if ($siteController)
			{
				$prevDomainName = $domainName;
				if ($type === 'site')
				{
					$domainName = str_replace(self::DOMAIN_SITE_BY, self::DOMAIN_SITE_ONLINE, $domainName);
				}
				if ($type === 'shop')
				{
					$domainName = str_replace(self::DOMAIN_SHOP_BY, self::DOMAIN_SHOP_ONLINE, $domainName);
				}

				if ($domainName && !$siteController::isDomainExists($domainName))
				{
					$resDomain = DomainTable::update($domainId, [
						'DOMAIN' => $domainName,
						'PREV_DOMAIN' => $prevDomainName,
					]);

					$siteController::updateDomain(
						$prevDomainName,
						$domainName,
						$publicUrl
					);

					return $resDomain->isSuccess();
				}

				$domainName = $siteController::addRandomDomain(
					$publicUrl,
					$site['TYPE'],
					'by'
				);
				$resDomain = DomainTable::update($domainId, [
					'DOMAIN' => $domainName,
					'PREV_DOMAIN' => $prevDomainName,
				]);

				$siteController::updateDomain(
					$prevDomainName,
					$domainName,
					$publicUrl
				);

				return $resDomain->isSuccess();
			}
		}
		catch (SystemException)
		{
		}

		return false;
	}
}