File manager - Edit - /home/web/vm-3fadc827.na4u.ru/www/bitrix/modules/catalog/lib/product/systemfield/markingcodegroup.php
Back
<?php namespace Bitrix\Catalog\Product\SystemField; use Bitrix\Catalog\Grid\Panel\ProductGroupAction; use Bitrix\Main; use Bitrix\Main\Localization\LanguageTable; use Bitrix\Catalog; use Bitrix\Main\Localization\Loc; class MarkingCodeGroup extends Highloadblock { public const FIELD_ID = 'MARKING_CODE_GROUP'; protected const SHORT_FIELD_ID = 'PRODUCT_GROUP'; public const TYPE_ID = Catalog\Product\SystemField\Type\HighloadBlock::class; protected const VALUE_NAME_PREFIX = 'MARKING_CODE_GROUP_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(), 'TRANSFORM_VALUES' => static::getHighloadblockTransformValues(), 'VALUES' => static::getHighloadblockValues(), ], 'FIELD' => self::getUserFieldBaseParam() + [ 'SORT' => 100, 'SHOW_FILTER' => 'S', 'SHOW_IN_LIST' => 'Y', 'EDIT_IN_LIST' => 'Y', 'IS_SEARCHABLE' => 'N', 'SETTINGS' => $className::getDefaultSettings(), ], 'FIELD_CONFIG' => [ 'HLFIELD_ID' => 'UF_NAME', ], ]; $titles = static::getMessages( __FILE__, ['TITLES' => 'MARKING_CODE_GROUP_STORAGE_TITLE',] ); $result['HIGHLOADBLOCK'] = $result['HIGHLOADBLOCK'] + $titles; $result['FIELD'] += static::getMessages( __FILE__, [ 'EDIT_FORM_LABEL' => 'MARKING_CODE_GROUP_FIELD_TITLE', 'LIST_COLUMN_LABEL' => 'MARKING_CODE_GROUP_FIELD_TITLE', 'LIST_FILTER_LABEL' => 'MARKING_CODE_GROUP_FIELD_TITLE', ] ); return $result; } public static function isAllowed(): bool { /** @var Catalog\Product\SystemField\Type\HighloadBlock $className */ $className = static::getTypeId(); if (!$className::isAllowed()) { return false; } if (!static::isBitrix24()) { $iterator = LanguageTable::getList([ 'select' => ['ID'], 'filter' => [ '=ID' => 'ru', '=ACTIVE' => 'Y', ], ]); $row = $iterator->fetch(); unset($iterator); if (empty($row)) { return false; } $iterator = LanguageTable::getList([ 'select' => ['ID'], 'filter' => [ '@ID' => ['ua', 'by', 'kz'], '=ACTIVE' => 'Y', ], 'limit' => 1, ]); $row = $iterator->fetch(); unset($iterator); if (!empty($row)) { return false; } return true; } else { return (\CBitrix24::getPortalZone() === 'ru'); } } protected static function getTitleInternal(): ?string { return Loc::getMessage('MARKING_CODE_GROUP_FIELD_TITLE'); } public static function getUserFieldBaseParam(): array { /** @var Catalog\Product\SystemField\Type\HighloadBlock $className */ $className = static::getTypeId(); return [ 'ENTITY_ID' => Catalog\ProductTable::getUfId(), 'FIELD_NAME' => static::getUserFieldName(self::SHORT_FIELD_ID), 'USER_TYPE_ID' => $className::getUserTypeId(), 'XML_ID' => static::getFieldId(), 'MULTIPLE' => 'N', 'MANDATORY' => 'N', ]; } /** * @return array */ protected static function getHighloadblockFields(): array { $result = []; $fieldSettings = [ 'XML_ID' => [ 'DEFAULT_VALUE' => '', 'SIZE' => 16, 'ROWS' => 1, 'MIN_LENGTH' => 0, 'MAX_LENGTH' => 0, 'REGEXP' => '/^[0-9]{1,16}$/' ], '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' => 'MARKING_CODE_GROUP_UF_FIELD_'.$fieldId, 'LIST_COLUMN_LABEL' => 'MARKING_CODE_GROUP_UF_FIELD_'.$fieldId, 'LIST_FILTER_LABEL' => 'MARKING_CODE_GROUP_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 { $groupCodes = [ '02', '03', '05', '17485', '8258', '8721', '9840', '06', '5010', '5137', '5139', '5140', ]; $groupTitles = Loc::loadLanguageFile( $_SERVER['DOCUMENT_ROOT'].'/bitrix/modules/catalog/regionalsystemfields/markingcodegroup.php', 'ru' ); $result = []; foreach ($groupCodes as $id) { $result[] = [ 'UF_XML_ID' => $id, 'UF_NAME' => $groupTitles[self::VALUE_NAME_PREFIX.$id] ]; } return $result; } protected static function getHighloadblockTransformValues(): array { return [ [ 'OLD_XML_ID' => '5048', 'NEW_XML_ID' => '17485', ], [ 'OLD_XML_ID' => '5408', 'NEW_XML_ID' => '17485', ], ]; } protected static function getGridActionConfig(ProductGroupAction $panel): ?array { $catalog = $panel->getCatalogConfig(); if (empty($catalog)) { return null; } $allowForOffers = $catalog['CATALOG_TYPE'] === \CCatalogSku::TYPE_OFFERS && Main\Config\Option::get('catalog', 'use_offer_marking_code_group') === 'Y' ; if ( $catalog['CATALOG_TYPE'] !== \CCatalogSku::TYPE_CATALOG && $catalog['CATALOG_TYPE'] !== \CCatalogSku::TYPE_FULL && $catalog['CATALOG_TYPE'] !== \CCatalogSku::TYPE_PRODUCT && !$allowForOffers ) { 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 { $result = [ Catalog\ProductTable::TYPE_PRODUCT, Catalog\ProductTable::TYPE_SKU, ]; if (Main\Config\Option::get('catalog', 'use_offer_marking_code_group') === 'Y') { $result[] = Catalog\ProductTable::TYPE_OFFER; } return $result; } public static function checkRestictions(array $restrictions): bool { if (!parent::checkRestictions($restrictions)) { return false; } if (isset($restrictions['IBLOCK_ID']) && !isset($restrictions['CATALOG'])) { $iterator = Catalog\CatalogIblockTable::getList([ 'select' => [ '*', ], 'filter' => [ '=IBLOCK_ID' => $restrictions['IBLOCK_ID'], ], 'cache' => [ 'ttl' => 86400, ] ]); $row = $iterator->fetch(); if (!empty($row)) { $restrictions['CATALOG'] = $row; } unset($row, $iterator); } if (!empty($restrictions['CATALOG']) && is_array($restrictions['CATALOG'])) { if ($restrictions['CATALOG']['SUBSCRIPTION'] === 'Y') { return false; } } return true; } public static function getAllowedOperations(): array { return [ Catalog\Product\SystemField::OPERATION_PROVIDER, 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_PROVIDER: 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_PROVIDER: $productRow = self::prepareValueForProvider($field, $productRow); break; 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 prepareValueForProvider(array $field, array $productRow): array { $value = $productRow[$field['XML_ID']]; if (self::isNeedParent($productRow)) { $parentsList = \CCatalogSku::getProductList($productRow['ID']); if (!empty($parentsList) && isset($parentsList[$productRow['ID']])) { $iterator = Catalog\ProductTable::getList([ 'select' => [ 'ID', $field['FIELD_NAME'] ], 'filter' => [ '=ID' => $parentsList[$productRow['ID']]['ID'], ] ]); $parent = $iterator->fetch(); unset($iterator); if (!empty($parent)) { $value = $parent[$field['FIELD_NAME']] ?? $value; } } unset($parentsList); } if ($value !== null) { $productRow[$field['XML_ID']] = self::getXmlIdById($field['SETTINGS']['HLBLOCK_ID'], (int)$value); } return $productRow; } private static function prepareValueForImport(array $field, array $productRow): array { if ($productRow[$field['XML_ID']] !== null) { $productRow[$field['FIELD_NAME']] = self::getIdByXmlId($field['SETTINGS']['HLBLOCK_ID'], $productRow[$field['XML_ID']]); } else { $productRow[$field['FIELD_NAME']] = null; } unset($productRow[$field['XML_ID']]); return $productRow; } private static function prepareValueForExport(array $field, array $productRow): array { if ($productRow[$field['XML_ID']] !== null) { $productRow[$field['XML_ID']] = self::getXmlIdById($field['SETTINGS']['HLBLOCK_ID'], (int)$productRow[$field['XML_ID']]); } return $productRow; } private static function isNeedParent(array $productRow): bool { return isset($productRow['ID']) && isset($productRow['TYPE']) && (int)$productRow['TYPE'] === Catalog\ProductTable::TYPE_OFFER ; } 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; } protected 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 ); } }
| ver. 1.4 |
Github
|
.
| PHP 7.4.33 | Generation time: 0.27 |
proxy
|
phpinfo
|
Settings