403Webshell
Server IP : 80.87.202.40  /  Your IP : 216.73.216.169
Web Server : Apache
System : Linux rospirotorg.ru 5.14.0-539.el9.x86_64 #1 SMP PREEMPT_DYNAMIC Thu Dec 5 22:26:13 UTC 2024 x86_64
User : bitrix ( 600)
PHP Version : 8.2.27
Disable Function : NONE
MySQL : OFF |  cURL : ON |  WGET : ON |  Perl : ON |  Python : OFF |  Sudo : ON |  Pkexec : ON
Directory :  /home/bitrix/ext_www/rospirotorg.ru/bitrix/modules/landing/lib/site/update/

Upload File :
current_dir [ Writeable] document_root [ Writeable]

 

Command :


[ Back ]     

Current File : /home/bitrix/ext_www/rospirotorg.ru/bitrix/modules/landing/lib/site/update/chatsales.php
<?php

namespace Bitrix\Landing\Site\Update;

use Bitrix\Landing\Block;
use Bitrix\Landing\Folder;
use Bitrix\Landing\Internals\BlockTable;
use Bitrix\Landing\Landing;
use Bitrix\Landing\Site;
use Bitrix\Landing\Syspage;
use Bitrix\Landing\Template;
use Bitrix\Landing\TemplateRef;
use Bitrix\Main\Localization\Loc;

Loc::loadMessages(__FILE__);
Loc::loadMessages(\Bitrix\Landing\Manager::getDocRoot() . '/bitrix/components/bitrix/landing.demo/data/page/store-chats-dark/catalog/.description.php');

class ChatSales extends Update
{
	/**
	 * This updater expects only this code.
	 */
	private const ONLY_CODES = [
		'store-chats-dark',
		'store-chats-light',
		'store-chats',
	];

	private const FOOTER_LINKS_MAP = [
		'store-chats-dark/about' => '#landing1',
		'store-chats-dark/contacts' => '#landing2',
		'store-chats-dark/cutaway' => '#landing3',
		'store-chats-dark/payinfo' => '#landing8',
		'store-chats-dark/webform' => '#landing9',
	];
	private const FOOTER_BLOCK_CODE = '55.1.list_of_links';

	/**
	 * Creates catalog's folder if not exists. If exists, return it id.
	 * @param int $siteId Site id.
	 * @return int|null
	 */
	private static function createFolder(int $siteId): ?int
	{
		$catalogFolderId = null;

		$folders = Site::getFolders($siteId);
		$translitCode = \CUtil::translit(
			Loc::getMessage('LANDING_DEMO_STORE_CHATS_CATALOG-NAME'),
			LANGUAGE_ID,
			[
				'replace_space' => '',
				'replace_other' => ''
			]
		);
		foreach ($folders as $folder)
		{
			if (
				$folder['CODE'] === 'catalog'
				|| $folder['CODE'] === 'katalog'
				|| $folder['CODE'] === $translitCode
			)
			{
				$catalogFolderId = $folder['ID'];
			}
		}

		if (!$catalogFolderId)
		{
			$res = Site::addFolder($siteId, [
				'TITLE' => Loc::getMessage('LANDING_SITE_UPDATE_CHAT_SALE_FOLDER_NAME'),
				'CODE' => 'catalog',
			]);
			if (!$res->isSuccess())
			{
				return false;
			}
			$catalogFolderId = $res->getId();
		}

		return $catalogFolderId;
	}

	/**
	 * Creates page by code if not exists. Returns page's id.
	 * @param int $siteId Site id.
	 * @param int $catalogFolderId Folder id.
	 * @param string $code Page code.
	 * @return int|null
	 */
	private static function createPageIfNotExists(int $siteId, int $catalogFolderId, string $code): ?int
	{
		// find or create
		$res = Landing::getList([
			'select' => [
				'ID',
			],
			'filter' => [
				'DELETED' => 'N',
				'SITE_ID' => $siteId,
				'=TPL_CODE' => $code,
				'CHECK_PERMISSIONS' => 'N',
			],
		]);
		if ($row = $res->fetch())
		{
			$pageId = $row['ID'];

			return $pageId;
		}

		$res = Landing::addByTemplate($siteId, $code, [
			'FOLDER_ID' => $catalogFolderId,
			'SITE_TYPE' => 'STORE',
		]);
		$pageId = $res->getId();

		if (
			$pageId
			&& Landing::createInstance($pageId)->publication()
		)
		{
			return $pageId;
		}

		return null;
	}

	private static function setTemplateToLanding(int $landingId, string $templateName, array $templateReferences): bool
	{
		$resTemplate = Template::getList([
			'select' => [
				'ID', 'XML_ID',
			],
			'filter' => [
				'XML_ID' => $templateName,
			],
		]);
		if ($template = $resTemplate->fetch())
		{
			$resUpdate = Landing::update($landingId, [
				'TPL_ID' => $template['ID'],
			]);

			if ($resUpdate->isSuccess())
			{
				TemplateRef::setForLanding($landingId, $templateReferences);

				return true;
			}
		}

		return false;
	}

	private static function setIndexToFolder(int $folderId, int $indexId): void
	{
		$landing = Landing::createInstance($indexId);
		if ($landing)
		{
			Folder::update($folderId, [
				'INDEX_ID' => $indexId,
			]);
		}
	}

	/**
	 * Entry point. Returns true on success.
	 * @param int $siteId Site id.
	 * @return bool
	 */
	public static function update(int $siteId): bool
	{
		$site = self::getId($siteId);

		if (!$site || !in_array($site['TPL_CODE'], self::ONLY_CODES, true))
		{
			return true;
		}

		$catalogFolderId = self::createFolder($siteId);
		if (!$catalogFolderId)
		{
			return false;
		}

		if (
			!($orderId = self::createPageIfNotExists($siteId, $catalogFolderId, 'store-chats-dark/catalog_order'))
			|| !($detailId = self::createPageIfNotExists($siteId, $catalogFolderId, 'store-chats-dark/catalog_detail'))
			|| !($catalogId = self::createPageIfNotExists($siteId, $catalogFolderId, 'store-chats-dark/catalog'))
			|| !($headerId = self::createPageIfNotExists($siteId, $catalogFolderId, 'store-chats-dark/catalog_header'))
			|| !($footerId = self::createPageIfNotExists($siteId, $catalogFolderId, 'store-chats-dark/catalog_footer'))
		)
		{
			return false;
		}

		Syspage::set($siteId, 'catalog', $catalogId);
		self::setIndexToFolder($catalogFolderId, $catalogId);
		self::setTemplateToLanding($catalogId, 'header_footer', [1 => $headerId, 2 => $footerId]);
		self::setTemplateToLanding($detailId, 'header_footer', [1 => $headerId, 2 => $footerId]);
		self::setTemplateToLanding($orderId, 'header_footer', [1 => $headerId, 2 => $footerId]);

		self::replaceFooterLinks($footerId, $siteId);

		return true;
	}

	private static function replaceFooterLinks(int $footerId, int $siteId): void
	{
		$replaceCodes = array_keys(self::FOOTER_LINKS_MAP);
		$replaces = [];

		$landings = Landing::getList([
			'select' => ['ID', 'TPL_CODE'],
			'filter' => ['SITE_ID' => $siteId],
		]);
		while ($landing = $landings->fetch())
		{
			$tpl = $landing['TPL_CODE'];
			if (in_array($tpl, $replaceCodes, true))
			{
				$replaces['"' . self::FOOTER_LINKS_MAP[$tpl] . '"'] = '"#landing' . $landing['ID'] . '"';
			}
		}

		if (!empty($replaces))
		{
			$blocks = BlockTable::getList([
				'select' => ['ID', 'CONTENT'],
				'filter' => [
					'LID' => $footerId,
					'CODE' => self::FOOTER_BLOCK_CODE,
				],
			]);
			while ($block = $blocks->fetch())
			{
				$newContent = str_replace(
					array_keys($replaces),
					array_values($replaces),
					$block['CONTENT']
				);
				BlockTable::update($block['ID'], [
					'CONTENT' => $newContent
				]);
			}
		}
	}
}

Youez - 2016 - github.com/yon3zu
LinuXploit