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/cvetdv.ru/bitrix/modules/catalog/lib/component/

Upload File :
current_dir [ Writeable] document_root [ Writeable]

 

Command :


[ Back ]     

Current File : /home/bitrix/ext_www/cvetdv.ru/bitrix/modules/catalog/lib/component/variationform.php
<?php

namespace Bitrix\Catalog\Component;

use Bitrix\Catalog\Config\State;
use Bitrix\Catalog\v2\Property\Property;
use Bitrix\Currency\CurrencyManager;
use Bitrix\Main\Component\ParameterSigner;
use Bitrix\Main\Localization\Loc;
use Bitrix\Catalog;

class VariationForm extends BaseForm
{
	/** @var \Bitrix\Catalog\v2\Sku\BaseSku */
	protected $entity;

	public static function formatFieldName($name): string
	{
		return $name;
	}

	public function getControllers(): array
	{
		$controllers = parent::getControllers();

		$controllers[] = [
			'name' => 'VARIATION_GRID_CONTROLLER',
			'type' => 'variation_grid',
			'config' => [
				'reloadUrl' => '/bitrix/components/bitrix/catalog.productcard.variation.grid/list.ajax.php',
				'signedParameters' => $this->getVariationGridSignedParameters(),
				'gridId' => $this->getVariationGridId(),
			],
		];
		$controllers[] = [
			'name' => 'IBLOCK_SECTION_CONTROLLER',
			'type' => 'iblock_section',
			'config' => [],
		];

		return $controllers;
	}

	protected function getPropertyDescription(Property $property): array
	{
		$description = parent::getPropertyDescription($property);

		$propertyFeatureOfferTree = $property->getPropertyFeatureCollection()->findByFeatureId('OFFER_TREE');
		$offerTreeParams = $propertyFeatureOfferTree ? $propertyFeatureOfferTree->getSettings() : null;

		if ($offerTreeParams)
		{
			$description['isEnabledOfferTree'] = $offerTreeParams['IS_ENABLED'] === 'Y';
		}

		return $description;
	}

	public function collectFieldConfigs(): array
	{
		$config = parent::collectFieldConfigs();

		$config['right']['elements'][] = [
			'name' => 'variation_grid',
			'title' => 'Variation grid',
			'type' => 'included_area',
			'data' => [
				'isRemovable' => false,
				'type' => 'component',
				'componentName' => $this->getVariationGridComponentName(),
				'action' => 'getProductGrid',
				'mode' => 'ajax',
				'signedParametersName' => 'VARIATION_GRID_SIGNED_PARAMETERS',
			],
			'sort' => 100,
		];

		return $config;
	}

	protected function getVariationGridComponentName(): string
	{
		return 'bitrix:catalog.productcard.variation.grid';
	}

	protected function getVariationGridParameters(): array
	{
		$variationIdList = null;
		$variationId = $this->params['VARIATION_ID'] ?? null;
		if (!empty($variationId))
		{
			$variationIdList = [$this->params['VARIATION_ID']];
		}

		return [
			'IBLOCK_ID' => $this->params['IBLOCK_ID'] ?? null,
			'PRODUCT_ID' => $this->params['PRODUCT_ID'] ?? null,
			'VARIATION_ID_LIST' => $variationIdList,
			'COPY_PRODUCT_ID' => $this->params['COPY_PRODUCT_ID'] ?? null,
			'EXTERNAL_FIELDS' => $this->params['EXTERNAL_FIELDS'] ?? null,
			'PATH_TO' => $this->params['PATH_TO'] ?? [],
		];
	}

	protected function getVariationGridSignedParameters(): string
	{
		return ParameterSigner::signParameters(
			$this->getVariationGridComponentName(),
			$this->getVariationGridParameters()
		);
	}

	protected function getCardSettingsItems(): array
	{
		return GridVariationForm::getGridCardSettingsItems();
	}

	protected function showCatalogProductFields(): bool
	{
		return true;
	}

	protected function showSpecificCatalogParameters(): bool
	{
		return true;
	}

	protected function buildDescriptions(): array
	{
		return array_merge(
			parent::buildDescriptions(),
			$this->getPriceDescriptions(),
			$this->getMeasureRatioDescription(),
			$this->getNameCodeDescription()
		);
	}

	protected function getPriceDescriptions(): array
	{
		$descriptions = [];
		$priceTypeList = Catalog\GroupTable::getTypeList();

		if (!empty($priceTypeList))
		{
			foreach ($priceTypeList as $priceType)
			{
				$title = !empty($priceType['NAME_LANG']) ? $priceType['NAME_LANG'] : $priceType['NAME'];
				$priceFieldName = static::formatFieldName(BaseForm::PRICE_FIELD_PREFIX.$priceType['ID']);

				$descriptions[] = $this->preparePriceDescription([
					'NAME' => $priceFieldName.'_FIELD',
					'TYPE_ID' => (int)$priceType['ID'],
					'TITLE' => $title,
					'PRICE_FIELD' => $priceFieldName,
					'CURRENCY_FIELD' => static::formatFieldName(BaseForm::CURRENCY_FIELD_PREFIX.$priceType['ID']),
				]);
			}
		}

		$purchasingPriceFieldName = static::formatFieldName('PURCHASING_PRICE');
		if ($this->isPurchasingPriceAllowed())
		{
			$purchasingPriceDescription = $this->preparePriceDescription([
				'NAME' => $purchasingPriceFieldName.'_FIELD',
				'TYPE_ID' => 'PURCHASING_PRICE',
				'TITLE' => Loc::getMessage('CATALOG_C_F_VARIATION_SETTINGS_PURCHASING_PRICE_FIELD_TITLE'),
				'PRICE_FIELD' => $purchasingPriceFieldName,
				'CURRENCY_FIELD' => static::formatFieldName('PURCHASING_CURRENCY'),
			]);

			if (State::isUsedInventoryManagement())
			{
				$purchasingPriceDescription['editable'] = false;
			}

			$descriptions[] = $purchasingPriceDescription;
		}

		return $descriptions;
	}

	protected function preparePriceDescription(array $fields = []): array
	{
		return [
			'name' => $fields['NAME'],
			'title' => $fields['TITLE'],
			'type' => 'money',
			'entity' => 'money',
			'priceTypeId' => $fields['TYPE_ID'],
			'editable' => $this->isPricesEditable(),
			'data' => [
				'affectedFields' => [
					$fields['PRICE_FIELD'],
					$fields['CURRENCY_FIELD'],
				],
				'currency' => [
					'name' => $fields['CURRENCY_FIELD'],
					'items' => $this->getCurrencyList(),
				],
				'amount' => $fields['PRICE_FIELD'],
				'formatted' => 'FORMATTED_'.$fields['PRICE_FIELD'].'_PRICE',
				'formattedWithCurrency' => 'FORMATTED_'.$fields['PRICE_FIELD'].'_WITH_CURRENCY',
			],
		];
	}

	protected function getMeasureRatioDescription(): array
	{
		return [
			[
				'entity' => 'measure_ratio',
				'name' => static::formatFieldName('MEASURE_RATIO'),
				'title' => Loc::getMessage('CATALOG_C_F_VARIATION_SETTINGS_MEASURE_RATIO_TITLE'),
				'type' => 'number',
				'editable' => $this->isAllowedEditFields(),
				'required' => false,
				'defaultValue' => 1,
			],
		];
	}

	protected function getFieldValue(array $field)
	{
		if ($field['entity'] === 'price')
		{
			return $this->getPriceFieldValue($field);
		}

		if ($field['entity'] === 'currency')
		{
			return $this->getCurrencyFieldValue($field);
		}

		if ($field['entity'] === 'measure_ratio')
		{
			return $this->getMeasureRatioFieldValue();
		}

		return parent::getFieldValue($field);
	}

	protected function getHiddenPropertyCodes(): array
	{
		return [self::MORE_PHOTO];
	}

	protected function getPriceFieldValue(array $field)
	{
		if ($field['priceTypeId'] === 'PURCHASING_PRICE')
		{
			return $this->entity->getField('PURCHASING_PRICE');
		}

		$price = $this->entity
			->getPriceCollection()
			->findByGroupId($field['priceTypeId'])
		;

		return $price ? $price->getPrice() : null;
	}

	protected function getCurrencyFieldValue(array $field): string
	{
		$currency = null;

		if ($field['priceTypeId'] === 'PURCHASING_PRICE')
		{
			$currency = $this->entity->getField('PURCHASING_CURRENCY');
		}
		else
		{
			$price = $this->entity
				->getPriceCollection()
				->findByGroupId($field['priceTypeId'])
			;
			if ($price)
			{
				$currency = $price->getCurrency();
			}
		}

		return $currency ?: (string)CurrencyManager::getBaseCurrency();
	}

	protected function getMeasureRatioFieldValue()
	{
		$measureRatio = $this->entity
			->getMeasureRatioCollection()
			->findDefault()
		;

		return $measureRatio ? $measureRatio->getRatio() : null;
	}

	protected function getAdditionalValues(array $values, array $descriptions = []): array
	{
		$additionalValues = parent::getAdditionalValues($values, $descriptions);
		foreach ($descriptions as $description)
		{
			if ($description['entity'] === 'money' && \Bitrix\Main\Loader::includeModule('currency'))
			{
				$amount = $this->getPriceFieldValue($description);
				$currency = $this->getCurrencyFieldValue($description);

				$descriptionData = $description['data'];
				$additionalValues[$descriptionData['currency']['name']] = $currency;
				$additionalValues[$descriptionData['amount']] = $amount;
				$additionalValues[$descriptionData['formatted']] = \CCurrencyLang::CurrencyFormat($amount, $currency, false);
				$additionalValues[$descriptionData['formattedWithCurrency']] = \CCurrencyLang::CurrencyFormat($amount, $currency, true);
			}
		}

		$additionalValues['VARIATION_GRID_SIGNED_PARAMETERS'] = $this->getVariationGridSignedParameters();

		return $additionalValues;
	}

	protected function getCatalogProductFieldsList(): array
	{
		$fieldList = parent::getCatalogProductFieldsList();
		$fieldList[] = 'AVAILABLE';

		return $fieldList;
	}
}

Youez - 2016 - github.com/yon3zu
LinuXploit