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/product/systemfield/

Upload File :
current_dir [ Writeable] document_root [ Writeable]

 

Command :


[ Back ]     

Current File : /home/bitrix/ext_www/cvetdv.ru/bitrix/modules/catalog/lib/product/systemfield/productmapping.php
<?php

namespace Bitrix\Catalog\Product\SystemField;

use Bitrix\Catalog\Access\AccessController;
use Bitrix\Catalog\Access\ActionDictionary;
use Bitrix\Catalog\Grid\Panel\ProductGroupAction;
use Bitrix\Main;
use Bitrix\Main\Localization\Loc;
use Bitrix\Catalog;
use Bitrix\UI;

class ProductMapping extends Highloadblock
{
	public const FIELD_ID = 'PRODUCT_MAPPING';

	public const TYPE_ID = Catalog\Product\SystemField\Type\HighloadBlock::class;

	public const MAP_LANDING = 'LANDING';
	public const MAP_FACEBOOK = 'FACEBOOK';

	protected const VALUE_NAME_PREFIX = 'PRODUCT_MAPPING_TYPE_';

	public static function getConfig(): ?array
	{
		if (!static::isAllowed())
		{
			return null;
		}

		/** @var Catalog\Product\SystemField\Type\HighloadBlock $className */
		$className = static::getTypeId();
		$fieldId = static::getFieldId();

		$result = [
			'HIGHLOADBLOCK' => [
				'TABLE_NAME' => $className::getTableName($fieldId),
				'NAME' => $className::getName($fieldId),
				'FIELDS' => static::getHighloadblockFields(),
				'RIGHTS' => $className::getDefaultRights(),
				'VALUES' => static::getHighloadblockValues(),
			],
			'FIELD' => self::getUserFieldBaseParam() + [
				'SORT' => 200,
				'SHOW_FILTER' => 'S',
				'SHOW_IN_LIST' => 'Y',
				'EDIT_IN_LIST' => 'Y',
				'IS_SEARCHABLE' => 'N',
				'SETTINGS' => $className::getDefaultSettings(),
			],
			'FIELD_CONFIG' => [
				'HLFIELD_ID' => 'UF_NAME',
			],
		];

		$result['FIELD']['SETTINGS']['DEFAULT_VALUE'] = [
			static::MAP_LANDING,
//			static::MAP_FACEBOOK,
		];

		$titles = static::getMessages(
			__FILE__,
			['TITLES' => 'PRODUCT_MAPPING_STORAGE_TITLE',]
		);

		$result['HIGHLOADBLOCK'] = $result['HIGHLOADBLOCK'] + $titles;


		$result['FIELD'] += static::getMessages(
			__FILE__,
			[
				'EDIT_FORM_LABEL' => 'PRODUCT_MAPPING_FIELD_TITLE',
				'LIST_COLUMN_LABEL' => 'PRODUCT_MAPPING_FIELD_TITLE',
				'LIST_FILTER_LABEL' => 'PRODUCT_MAPPING_FIELD_TITLE',
				'HELP_MESSAGE' => 'PRODUCT_MAPPING_FIELD_TITLE_HINT_MSGVER_1',
			]
		);

		return $result;
	}

	public static function isAllowed(): bool
	{
		return Type\HighloadBlock::isAllowed() && static::isBitrix24();
	}

	protected static function getTitleInternal(): ?string
	{
		return Loc::getMessage('PRODUCT_MAPPING_FIELD_TITLE');
	}

	public static function getUserFieldBaseParam(): array
	{
		/** @var Catalog\Product\SystemField\Type\HighloadBlock $className */
		$className = static::getTypeId();
		$fieldId = static::getFieldId();

		return [
			'ENTITY_ID' => Catalog\ProductTable::getUfId(),
			'FIELD_NAME' => static::getUserFieldName($fieldId),
			'USER_TYPE_ID' => $className::getUserTypeId(),
			'XML_ID' => $fieldId,
			'MULTIPLE' => 'Y',
			'MANDATORY' => 'N',
		];
	}

	/**
	 * @return array
	 */
	protected static function getHighloadblockFields(): array
	{
		$result = [];

		$fieldSettings = [
			'XML_ID' => [
				'DEFAULT_VALUE' => '',
				'SIZE' => 50,
				'ROWS' => 1,
				'MIN_LENGTH' => 1,
				'MAX_LENGTH' => 50,
				'REGEXP' => ''
			],
			'NAME' => [
				'DEFAULT_VALUE' => '',
				'SIZE' => 100,
				'ROWS' => 1,
				'MIN_LENGTH' => 1,
				'MAX_LENGTH' => 255,
				'REGEXP' => ''
			]
		];

		$sort = 100;
		foreach (array_keys($fieldSettings) as $fieldId)
		{
			$messageList = static::getMessages(
				__FILE__,
				[
					'EDIT_FORM_LABEL' => 'PRODUCT_MAPPING_UF_FIELD_'.$fieldId,
					'LIST_COLUMN_LABEL' => 'PRODUCT_MAPPING_UF_FIELD_'.$fieldId,
					'LIST_FILTER_LABEL' => 'PRODUCT_MAPPING_UF_FIELD_'.$fieldId
				]
			);

			$result[] = [
					'FIELD_NAME' => static::getUserFieldName($fieldId),
					'USER_TYPE_ID' => Main\UserField\Types\StringType::USER_TYPE_ID,
					'XML_ID' => $fieldId,
					'SORT' => $sort,
					'MULTIPLE' => 'N',
					'MANDATORY' => 'Y',
					'SHOW_FILTER' => 'S',
					'SHOW_IN_LIST' => 'Y',
					'EDIT_IN_LIST' => 'Y',
					'IS_SEARCHABLE' => 'N',
					'SETTINGS' => $fieldSettings[$fieldId],
				] + $messageList;
			$sort += 100;
		}

		return $result;
	}

	protected static function getHighloadblockValues(): array
	{
		$mapId = [
			self::MAP_LANDING,
//			self::MAP_FACEBOOK
		];

		$result = [];

		foreach ($mapId as $id)
		{
			$title = (string)Loc::getMessage(self::VALUE_NAME_PREFIX.$id);
			$result[] = [
				'UF_XML_ID' => $id,
				'UF_NAME' => $title ?: $id,
			];
		}

		return $result;
	}

	protected static function getGridActionConfig(ProductGroupAction $panel): ?array
	{
		$catalog = $panel->getCatalogConfig();
		if (empty($catalog))
		{
			return null;
		}
		if (
			$catalog['CATALOG_TYPE'] !== \CCatalogSku::TYPE_CATALOG
			&& $catalog['CATALOG_TYPE'] !== \CCatalogSku::TYPE_FULL
			&& $catalog['CATALOG_TYPE'] !== \CCatalogSku::TYPE_PRODUCT
		)
		{
			return null;
		}

		$field = static::load();
		if (empty($field))
		{
			return null;
		}

		$config = [
			'USER_FIELD' => $field,
		];
		$config['VISUAL'] = [
			'LIST' => [
				'ID' => $panel->getFormRowFieldId($field['FIELD_NAME']),
				'NAME' => $panel->getFormRowFieldName($field['FIELD_NAME']),
			]
		];

		return $config;
	}

	public static function getAllowedProductTypeList(): array
	{
		return [
			Catalog\ProductTable::TYPE_PRODUCT,
			Catalog\ProductTable::TYPE_SET,
			Catalog\ProductTable::TYPE_SKU,
			Catalog\ProductTable::TYPE_SERVICE,
		];
	}

	public static function getAllowedOperations(): array
	{
		return [
			Catalog\Product\SystemField::OPERATION_EXPORT,
			Catalog\Product\SystemField::OPERATION_IMPORT,
		];
	}

	public static function getOperationSelectFieldList(string $operation): array
	{
		if (!static::isAllowed())
		{
			return [];
		}

		$fields = static::getUserFieldBaseParam();
		switch($operation)
		{
			case Catalog\Product\SystemField::OPERATION_EXPORT:
			case Catalog\Product\SystemField::OPERATION_IMPORT:
				$result = [
					$fields['XML_ID'] => $fields['FIELD_NAME'],
				];
				break;
			default:
				$result = [];
				break;
		}

		return $result;
	}

	public static function prepareValue(string $operation, array $productRow): array
	{
		$field = static::load();
		if ($field === null)
		{
			return $productRow;
		}
		if (!array_key_exists($field['XML_ID'], $productRow))
		{
			return $productRow;
		}

		switch ($operation)
		{
			case Catalog\Product\SystemField::OPERATION_IMPORT:
				$productRow = self::prepareValueForImport($field, $productRow);
				break;
			case Catalog\Product\SystemField::OPERATION_EXPORT:
				$productRow = self::prepareValueForExport($field, $productRow);
				break;
		}

		return $productRow;
	}

	private static function prepareValueForImport(array $field, array $productRow): array
	{
		if (!is_array($productRow[$field['XML_ID']]))
		{
			$productRow[$field['XML_ID']] = [];
		}
		if (!empty($productRow[$field['XML_ID']]))
		{
			$productRow[$field['FIELD_NAME']] = array_values(self::getIdListByXmlId(
				$field['SETTINGS']['HLBLOCK_ID'],
				$productRow[$field['XML_ID']]
			));
		}
		else
		{
			$productRow[$field['FIELD_NAME']] = [];
		}
		unset($productRow[$field['XML_ID']]);

		return $productRow;
	}

	private static function prepareValueForExport(array $field, array $productRow): array
	{
		if (!is_array($productRow[$field['XML_ID']]))
		{
			$productRow[$field['XML_ID']] = [];
		}
		if (!empty($productRow[$field['XML_ID']]))
		{
			$productRow[$field['XML_ID']] = array_values(self::getXmlIdListById(
				$field['SETTINGS']['HLBLOCK_ID'],
				$productRow[$field['XML_ID']]
			));
		}

		return $productRow;
	}

	public static function getExtendedFilterByArea(array $filter, string $areaXmlId): array
	{
		if (!static::isAllowed())
		{
			return $filter;
		}
		if ($areaXmlId === '')
		{
			return $filter;
		}

		$userField = static::load();
		if ($userField === null)
		{
			return $filter;
		}

		if (empty($userField['SETTINGS']) || !is_array($userField['SETTINGS']))
		{
			return $filter;
		}

		/** @var Catalog\Product\SystemField\Type\HighloadBlock $className */
		$className = static::getTypeId();

		$list = $className::getIdByXmlId((int)$userField['SETTINGS']['HLBLOCK_ID'], [$areaXmlId]);
		if (!isset($list[$areaXmlId]))
		{
			return $filter;
		}

		$filter['=PRODUCT_'.static::getUserFieldName(static::getFieldId())] = $list[$areaXmlId];

		return $filter;
	}

	protected static function afterLoadInternalModify(array $row): array
	{
		$row = parent::afterLoadInternalModify($row);
		if (empty($row['SETTINGS']) || !is_array($row['SETTINGS']))
		{
			$row['SETTINGS'] = [];
		}
		$row['SETTINGS']['HLBLOCK_ID'] = (int)($row['SETTINGS']['HLBLOCK_ID'] ?? 0);
		$row['SETTINGS']['HLFIELD_ID'] = (int)($row['SETTINGS']['HLFIELD_ID'] ?? 0);

		return $row;
	}

	public static function updateProductFormConfiguration(): void
	{
		if (!static::isAllowed())
		{
			return;
		}
		$field = static::load();
		if ($field === null)
		{
			return;
		}

		Catalog\Update\UiFormConfiguration::addFormField(
			[
				'name' => $field['FIELD_NAME'],
				'optionFlags' => '1',
				'options' => [
					'showCode' => 'true',
				]
			],
			Catalog\Update\UiFormConfiguration::PARENT_SECTION_MAIN
		);
	}

	public static function renderAdminFormControl(array $field, array $product, array $config): ?string
	{
		if (!AccessController::getCurrent()->check(ActionDictionary::ACTION_PRODUCT_PUBLIC_VISIBILITY_SET))
		{
			$field['EDIT_IN_LIST'] = 'N';
		}

		return parent::renderAdminFormControl($field, $product, $config);
	}

	protected static function getUiDescriptionInternal(array $description, array $userField, array $restrictions): ?array
	{
		$description['type'] = UI\EntityForm\Control\Type::MULTI_LIST;

		$config = [
			'RESULT' => [
				'RETURN_FIELD_ID' => 'Y',
			],
		];

		$items = Type\HighloadBlock::getItems($userField, $config);
		if ($items !== null)
		{
			$description['data'] += [
				'items' => $items
			];
		}
		unset($items);

		if (!AccessController::getCurrent()->check(ActionDictionary::ACTION_PRODUCT_PUBLIC_VISIBILITY_SET))
		{
			$description['editable'] = false;
			$description['defaultValue'] = [];
			$description['lockText'] = Loc::getMessage('PRODUCT_MAPPING_FIELD_LOCK_TEXT');
		}

		return $description;
	}
}

Youez - 2016 - github.com/yon3zu
LinuXploit