19 public const TYPE_ID = Catalog\Product\SystemField\Type\HighloadBlock::class;
26 public static function getConfig(): ?
array
28 if (!static::isAllowed())
34 $className = static::getTypeId();
35 $fieldId = static::getFieldId();
39 'TABLE_NAME' => $className::getTableName($fieldId),
40 'NAME' => $className::getName($fieldId),
41 'FIELDS' => static::getHighloadblockFields(),
42 'RIGHTS' => $className::getDefaultRights(),
43 'TRANSFORM_VALUES' => static::getHighloadblockTransformValues(),
44 'VALUES' => static::getHighloadblockValues(),
46 'FIELD' => self::getUserFieldBaseParam() + [
49 'SHOW_IN_LIST' =>
'Y',
50 'EDIT_IN_LIST' =>
'Y',
51 'IS_SEARCHABLE' =>
'N',
52 'SETTINGS' => $className::getDefaultSettings(),
55 'HLFIELD_ID' =>
'UF_NAME',
59 $titles = static::getMessages(
61 [
'TITLES' =>
'MARKING_CODE_GROUP_STORAGE_TITLE',]
66 $result[
'FIELD'] += static::getMessages(
69 'EDIT_FORM_LABEL' =>
'MARKING_CODE_GROUP_FIELD_TITLE',
70 'LIST_COLUMN_LABEL' =>
'MARKING_CODE_GROUP_FIELD_TITLE',
71 'LIST_FILTER_LABEL' =>
'MARKING_CODE_GROUP_FIELD_TITLE',
78 public static function isAllowed(): bool
81 $className = static::getTypeId();
83 if (!$className::isAllowed())
93 return Loc::getMessage(
'MARKING_CODE_GROUP_FIELD_TITLE');
96 public static function getUserFieldBaseParam():
array
99 $className = static::getTypeId();
103 'FIELD_NAME' => static::getUserFieldName(self::SHORT_FIELD_ID),
104 'USER_TYPE_ID' => $className::getUserTypeId(),
105 'XML_ID' => static::getFieldId(),
120 'DEFAULT_VALUE' =>
'',
125 'REGEXP' =>
'/^[0-9]{1,16}$/'
128 'DEFAULT_VALUE' =>
'',
138 foreach (array_keys($fieldSettings) as $fieldId)
140 $messageList = static::getMessages(
143 'EDIT_FORM_LABEL' =>
'MARKING_CODE_GROUP_UF_FIELD_'.$fieldId,
144 'LIST_COLUMN_LABEL' =>
'MARKING_CODE_GROUP_UF_FIELD_'.$fieldId,
145 'LIST_FILTER_LABEL' =>
'MARKING_CODE_GROUP_UF_FIELD_'.$fieldId
150 'FIELD_NAME' => static::getUserFieldName($fieldId),
152 'XML_ID' => $fieldId,
156 'SHOW_FILTER' =>
'S',
157 'SHOW_IN_LIST' =>
'Y',
158 'EDIT_IN_LIST' =>
'Y',
159 'IS_SEARCHABLE' =>
'N',
160 'SETTINGS' => $fieldSettings[$fieldId],
184 $groupTitles = Loc::loadLanguageFile(
185 $_SERVER[
'DOCUMENT_ROOT'].
'/bitrix/modules/catalog/regionalsystemfields/markingcodegroup.php',
190 foreach ($groupCodes as $id)
194 'UF_NAME' => $groupTitles[self::VALUE_NAME_PREFIX.$id]
205 'OLD_XML_ID' =>
'5048',
206 'NEW_XML_ID' =>
'17485',
209 'OLD_XML_ID' =>
'5408',
210 'NEW_XML_ID' =>
'17485',
223 $catalog[
'CATALOG_TYPE'] === \CCatalogSku::TYPE_OFFERS
224 && self::isUsedMarkingOffer()
227 $catalog[
'CATALOG_TYPE'] !== \CCatalogSku::TYPE_CATALOG
228 &&
$catalog[
'CATALOG_TYPE'] !== \CCatalogSku::TYPE_FULL
229 &&
$catalog[
'CATALOG_TYPE'] !== \CCatalogSku::TYPE_PRODUCT
236 $field = static::load();
243 'USER_FIELD' => $field,
246 'ID' =>
$panel->getFormRowFieldId($field[
'FIELD_NAME']),
247 'NAME' =>
$panel->getFormRowFieldName($field[
'FIELD_NAME']),
254 $config[
'ADDITIONAL_ITEMS'] = [
257 'VALUE' => self::USE_PARENT_PRODUCT_VALUE,
258 'NAME' => Loc::getMessage(
'MARKING_CODE_GROUP_MESS_USE_PARENT_PRODUCT_VALUE'),
273 if (self::isUsedMarkingOffer())
283 if (!parent::checkRestictions($restrictions))
288 if (isset($restrictions[
'IBLOCK_ID']) && !isset($restrictions[
'CATALOG']))
295 '=IBLOCK_ID' => $restrictions[
'IBLOCK_ID'],
304 $restrictions[
'CATALOG'] = $row;
309 if (!empty($restrictions[
'CATALOG']) && is_array($restrictions[
'CATALOG']))
311 if ($restrictions[
'CATALOG'][
'SUBSCRIPTION'] ===
'Y')
323 Catalog\Product\SystemField::OPERATION_PROVIDER,
324 Catalog\Product\SystemField::OPERATION_EXPORT,
325 Catalog\Product\SystemField::OPERATION_IMPORT,
331 if (!static::isAllowed())
336 $fields = static::getUserFieldBaseParam();
339 case Catalog\Product\SystemField::OPERATION_PROVIDER:
340 case Catalog\Product\SystemField::OPERATION_EXPORT:
341 case Catalog\Product\SystemField::OPERATION_IMPORT:
356 $field = static::load();
361 if (!array_key_exists($field[
'XML_ID'], $productRow))
368 case Catalog\Product\SystemField::OPERATION_PROVIDER:
369 $productRow = self::prepareValueForProvider($field, $productRow);
371 case Catalog\Product\SystemField::OPERATION_IMPORT:
372 $productRow = self::prepareValueForImport($field, $productRow);
374 case Catalog\Product\SystemField::OPERATION_EXPORT:
375 $productRow = self::prepareValueForExport($field, $productRow);
382 private static function prepareValueForProvider(
array $field,
array $productRow):
array
384 $value = $productRow[$field[
'XML_ID']];
387 $value = (int)$value;
389 if (self::isNeedParent($productRow))
392 !self::isUsedMarkingOffer()
393 || $value === self::USE_PARENT_PRODUCT_VALUE
396 $productValue = self::getParentProductValue($productRow[
'ID'], $field);
397 if ($value === self::USE_PARENT_PRODUCT_VALUE)
399 $value = $productValue;
403 $value = $productValue ?? $value;
408 $productRow[$field[
'XML_ID']] = (
$value !==
null
416 private static function prepareValueForImport(
array $field,
array $productRow):
array
418 $value = $productRow[$field[
'XML_ID']];
419 if ($value === self::USE_PARENT_PRODUCT_XML_VALUE)
421 $productRow[$field[
'FIELD_NAME']] = self::USE_PARENT_PRODUCT_VALUE;
425 $productRow[$field[
'FIELD_NAME']] = (
$value !==
null
430 unset($productRow[$field[
'XML_ID']]);
435 private static function prepareValueForExport(
array $field,
array $productRow):
array
437 $value = $productRow[$field[
'XML_ID']];
442 if ($value === self::USE_PARENT_PRODUCT_VALUE)
444 $productRow[$field[
'XML_ID']] = self::USE_PARENT_PRODUCT_XML_VALUE;
449 $field[
'SETTINGS'][
'HLBLOCK_ID'],
457 private static function isNeedParent(
array $productRow): bool
460 isset($productRow[
'ID'])
461 && isset($productRow[
'TYPE'])
466 private static function isUsedMarkingOffer(): bool
468 return Option::get(
'catalog',
'use_offer_marking_code_group') ===
'Y';
471 private static function getParentProductValue(
int $id, $field): ?string
474 $parentsList = \CCatalogSku::getProductList($id);
475 if (!empty($parentsList) && isset($parentsList[$id]))
477 $row = Catalog\ProductTable::getRow([
480 $field[
'FIELD_NAME'],
483 '=ID' => $parentsList[$id][
'ID'],
488 $result = $row[$field[
'FIELD_NAME']];
497 $row = parent::afterLoadInternalModify($row);
498 if (empty($row[
'SETTINGS']) || !is_array($row[
'SETTINGS']))
500 $row[
'SETTINGS'] = [];
502 $row[
'SETTINGS'][
'HLBLOCK_ID'] = (int)($row[
'SETTINGS'][
'HLBLOCK_ID'] ?? 0);
503 $row[
'SETTINGS'][
'HLFIELD_ID'] = (int)($row[
'SETTINGS'][
'HLFIELD_ID'] ?? 0);
510 if (!static::isAllowed())
514 $field = static::load();
522 'name' => $field[
'FIELD_NAME'],
523 'optionFlags' =>
'1',
525 'showCode' =>
'true',
534 $result = parent::renderAdminFormControl($field, $product,
$config);
539 $parentSelected = (int)$field[
'VALUE'] === self::USE_PARENT_PRODUCT_VALUE;
540 $addOption =
'<option value="' . self::USE_PARENT_PRODUCT_VALUE .
'"'
541 . ($parentSelected ?
' selected' :
'')
542 .
'>' .
htmlspecialcharsbx(Loc::getMessage(
'MARKING_CODE_GROUP_MESS_USE_PARENT_PRODUCT_VALUE'))
549 $index = strpos(
$result,
'</option>');
550 if ($index !==
false)
570 'RETURN_FIELD_ID' =>
'Y',
575 isset($restrictions[
'TYPE'])
577 && self::isUsedMarkingOffer()
580 $config[
'ADDITIONAL_ITEMS'] = [
583 'ID' => (string)self::USE_PARENT_PRODUCT_VALUE,
584 'VALUE' => (
string)self::USE_PARENT_PRODUCT_VALUE,
585 'NAME' => Loc::getMessage(
'MARKING_CODE_GROUP_MESS_USE_PARENT_PRODUCT_VALUE'),
static getList(array $parameters=array())
if( $daysToExpire >=0 &&$daysToExpire< 60 elseif)( $daysToExpire< 0)