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/catalog/lib/url/

Upload File :
current_dir [ Writeable] document_root [ Writeable]

 

Command :


[ Back ]     

Current File : /home/bitrix/ext_www/rospirotorg.ru/bitrix/modules/catalog/lib/url/shopbuilder.php
<?php
namespace Bitrix\Catalog\Url;

use Bitrix\Catalog;
use Bitrix\Catalog\Access\AccessController;
use Bitrix\Catalog\Access\ActionDictionary;
use Bitrix\Main\Loader;
use Bitrix\Main\Localization\Loc;
use Bitrix\Main\UI\Extension;

class ShopBuilder extends AdminPage\CatalogBuilder
{
	public const TYPE_ID = 'SHOP';

	public const OPEN_SETTINGS_PARAM = 'open_settings_page';

	public const PAGE_CSV_IMPORT = 'csvImport';

	protected const TYPE_WEIGHT = 300;

	protected const PATH_PREFIX = '/shop/settings/';

	protected const PATH_DETAIL_CARD_PREFIX = '/shop/catalog/';

	public function __construct()
	{
		parent::__construct();
	}

	/**
	 * Returns true if the current product's grid is open in the inventory section.
	 *
	 * @return bool
	 */
	public function use(): bool
	{
		if (defined('CATALOG_PRODUCT') && defined('SELF_FOLDER_URL'))
		{
			return true;
		}
		if (!$this->request->isAdminSection())
		{
			if ($this->checkCurrentPage([
				self::PATH_PREFIX,
				self::PATH_DETAIL_CARD_PREFIX
			]))
			{
				return true;
			}
		}

		return false;
	}

	/**
	 * Returns grid context menu for public inventory section.
	 *
	 * @param string $pageType
	 * @param array $items
	 * @param array $options
	 * @return array|null
	 */
	public function getContextMenuItems(string $pageType, array $items = [], array $options = []): ?array
	{
		if ($pageType !== self::PAGE_ELEMENT_LIST && $pageType !== self::PAGE_SECTION_LIST)
		{
			return null;
		}

		if (!Loader::includeModule('crm'))
		{
			return null;
		}

		$result = [];

		Extension::load(['catalog.config.settings']);

		if (AccessController::getCurrent()->check(ActionDictionary::ACTION_CATALOG_SETTINGS_ACCESS))
		{
			if (!\CCrmSaleHelper::isWithOrdersMode())
			{
				$result[] = [
					'TEXT' => Loc::getMessage('CATALOG_SHOP_BUILDER_CONTEXT_MENU_ITEM_INVENTORY_MANAGEMENT_SETTINGS'),
					'TITLE' => Loc::getMessage('CATALOG_SHOP_BUILDER_CONTEXT_MENU_ITEM_INVENTORY_MANAGEMENT_SETTINGS'),
					'ONCLICK' => 'BX.Catalog.Config.Slider.open(\'shop\')',
				];
			}
		}

		if (Catalog\Config\Feature::isAccessControllerCheckingEnabled())
		{
			Extension::load('sidepanel');

			$result[] = [
				'TEXT' => Loc::getMessage('CATALOG_SHOP_BUILDER_CONTEXT_MENU_ITEM_ACCESS_RIGHTS'),
				'TITLE' => Loc::getMessage('CATALOG_SHOP_BUILDER_CONTEXT_MENU_ITEM_ACCESS_RIGHTS'),
				'ONCLICK' => 'BX.Catalog.Config.Slider.openRigthsSlider()',
			];
		}
		else
		{
			$helpLink = Catalog\Config\Feature::getAccessControllerHelpLink();
			if (!empty($helpLink))
			{
				Catalog\Config\Feature::initUiHelpScope();
				$result[] = [
					'TEXT' => Loc::getMessage('CATALOG_SHOP_BUILDER_CONTEXT_MENU_ITEM_ACCESS_RIGHTS'),
					'TITLE' => Loc::getMessage('CATALOG_SHOP_BUILDER_CONTEXT_MENU_ITEM_ACCESS_RIGHTS'),
					$helpLink['TYPE'] => $helpLink['LINK'],
				];
			}
			unset($helpLink);
		}

		$result[] = [
			'TEXT' => Loc::getMessage('CATALOG_SHOP_BUILDER_CONTEXT_MENU_ITEM_SEO'),
			'TITLE' => Loc::getMessage('CATALOG_SHOP_BUILDER_CONTEXT_MENU_ITEM_SEO'),
			'ONCLICK' => "BX.Catalog.Config.Slider.openSeoSlider('"
				. \CUtil::JSEscape($this->getCatalogSeoUrl())
				. "')"
			,
		];

		if (!empty($items))
		{
			$result = array_merge($result, $items);
		}

		return (!empty($result) ? $result: null);
	}

	/**
	 * Url builder config initialization.
	 *
	 * @return void
	 */
	protected function initConfig(): void
	{
		parent::initConfig();
		$this->config['UI_CATALOG'] = Catalog\Config\State::isProductCardSliderEnabled();
	}

	/**
	 * Returns true, if enabled new product card.
	 *
	 * @return bool
	 */
	protected function isUiCatalog(): bool
	{
		return (isset($this->config['UI_CATALOG']) && $this->config['UI_CATALOG']);
	}

	public function getDetailPageSlider(): string
	{
		$path = $this->getSliderPath();
		if (!$this->checkSliderPath($path))
		{
			return '';
		}
		$path = \CUtil::JSEscape($path);

		$listUrl = \CUtil::JSEscape($this->getElementListUrl(0));

		return<<<HTML
			<script>
				window.history.replaceState({}, '', '$path');
				BX.Event.ready(function(){
					BX.SidePanel.Instance.open(
						'$path',
						{
							events: {
								onCloseComplete: function(event) {
									window.location = '$listUrl';
								}
							}
						}
					);
				});
			</script>
			HTML
		;
	}

	/**
	 * Fill url templates list.
	 *
	 * @return void
	 */
	protected function initUrlTemplates(): void
	{
		$this->urlTemplates[self::PAGE_SECTION_LIST] =
			'/shop/catalog/#IBLOCK_ID#/section/#PARENT_ID#/'
			. '?#ADDITIONAL_PARAMETERS#'
		;
		$this->urlTemplates[self::PAGE_ELEMENT_LIST] =
			'/shop/catalog/#IBLOCK_ID#/'
		;

		$this->urlTemplates[self::PAGE_SECTION_DETAIL] =
			'#PATH_PREFIX#'
			. 'cat_section_edit/'
			. '?#BASE_PARAMS#'
			. '&ID=#ENTITY_ID#'
			. '&publicSidePanel=Y'
			. '#ADDITIONAL_PARAMETERS#'
		;
		$this->urlTemplates[self::PAGE_SECTION_COPY] =
			$this->urlTemplates[self::PAGE_SECTION_DETAIL]
			. $this->getCopyAction()
		;
		$this->urlTemplates[self::PAGE_SECTION_SAVE] =
			'#PATH_PREFIX#'
			. 'cat_section_edit.php'
			. '?#BASE_PARAMS#'
			. '#ADDITIONAL_PARAMETERS#'
		;
		$this->urlTemplates[self::PAGE_SECTION_SEARCH] =
			'/bitrix/tools/iblock/section_search.php'
			. '?#LANGUAGE#'
			. '#ADDITIONAL_PARAMETERS#'
		;

		if ($this->isUiCatalog())
		{
			$this->urlTemplates[self::PAGE_ELEMENT_DETAIL] =
				self::PATH_DETAIL_CARD_PREFIX
				. '#IBLOCK_ID#/product/#ENTITY_ID#/'
				. '?#ADDITIONAL_PARAMETERS#'
			;
			$this->urlTemplates[self::PAGE_ELEMENT_COPY] =
				self::PATH_DETAIL_CARD_PREFIX
				. '#IBLOCK_ID#/product/0/copy/#ENTITY_ID#/'
			;
			$this->urlTemplates[self::PAGE_ELEMENT_SAVE] = $this->urlTemplates[self::PAGE_ELEMENT_DETAIL];
			$this->urlTemplates[self::PAGE_OFFER_DETAIL] =
				'/shop/catalog/'
				. '#PRODUCT_IBLOCK_ID#/product/#PRODUCT_ID#/'
				. 'variation/#ENTITY_ID#/'
			;
		}
		else
		{
			$this->urlTemplates[self::PAGE_ELEMENT_DETAIL] =
				'#PATH_PREFIX#'
				. 'cat_product_edit/'
				. '?#BASE_PARAMS#'
				. '&ID=#ENTITY_ID#'
				. '&publicSidePanel=Y'
				. '#ADDITIONAL_PARAMETERS#'
			;
			$this->urlTemplates[self::PAGE_ELEMENT_COPY] =
				$this->urlTemplates[self::PAGE_ELEMENT_DETAIL]
				. $this->getCopyAction()
			;
			$this->urlTemplates[self::PAGE_ELEMENT_SAVE] =
				'#PATH_PREFIX#'
				. 'cat_product_edit.php'
				. '?#BASE_PARAMS#'
				. '#ADDITIONAL_PARAMETERS#'
			;
			$this->urlTemplates[self::PAGE_OFFER_DETAIL] = $this->urlTemplates[self::PAGE_ELEMENT_DETAIL];
		}
		$this->urlTemplates[self::PAGE_ELEMENT_SEARCH] =
			'/bitrix/tools/iblock/element_search.php'
			. '?#LANGUAGE#'
			. '#ADDITIONAL_PARAMETERS#'
		;
		$this->urlTemplates[self::PAGE_CATALOG_SEO] = self::PATH_DETAIL_CARD_PREFIX . '#IBLOCK_ID#/seo/';
		$this->urlTemplates[self::PAGE_ELEMENT_SEO] = self::PATH_DETAIL_CARD_PREFIX . '#IBLOCK_ID#/seo/product/#PRODUCT_ID#/';
		$this->urlTemplates[self::PAGE_SECTION_SEO] = self::PATH_DETAIL_CARD_PREFIX . '#IBLOCK_ID#/seo/section/#SECTION_ID#/';
	}

	/**
	 * Returns regular expression's list for check urls.
	 *
	 * @return string[]
	 */
	protected function getSliderPathTemplates(): array
	{
		return [
			'/^\/shop\/catalog\/[0-9]+\/product\/[0-9]+\/$/',
			'/^\/shop\/catalog\/[0-9]+\/product\/[0-9]+\/variation\/[0-9]+\/$/',
		];
	}

	public function openSettingsPage(): void
	{
		if
		(
			$this->request->get('open_settings_page')
			&& (int)$this->request->get('open_settings_page') === 1
		)
		{
			echo $this->getSettingsSlider();
		}
	}

	protected function getSettingsSlider(): string
	{
		\Bitrix\Main\UI\Extension::load(['catalog.config.settings']);

		return '<script>'
			. 'BX.ready(function() {' . "\n"
			. ' BX.Catalog.Config.Slider.open(\'shop\');' . "\n"
			. '});' . "\n"
			. '</script>'
			;
	}

	public function subscribeOnAfterSettingsSave(): void
	{
		$saveEventName = static::getOnSaveEventName();

		if ($saveEventName !== '')
		{
			$saveEventName = \CUtil::JSEscape($saveEventName);

			echo '<script>'
				. 'BX.addCustomEvent(\'' . $saveEventName . '\', function() {' . "\n"
				. ' var href = window.top.location.href;' . "\n"
				. ' window.top.location.replace(href.replace(/' . \CUtil::JSEscape(static::OPEN_SETTINGS_PARAM) . '.*&?/, \'\'));' . "\n"
				. '});' . "\n"
				. '</script>'
			;
		}
	}

	protected static function getOnSaveEventName(): string
	{
		return 'onCatalogSettingsSave';
	}
}

Youez - 2016 - github.com/yon3zu
LinuXploit