25 private array $productFieldNames = [];
33 $this->loadFieldNames();
35 return array_merge($this->getFieldsIBlockElement(), $this->getFieldsCatalogProduct());
46 parent::prepareFieldAttributs(
$info, $attributs),
55 private function getFieldsIBlockElement():
array
59 'TYPE' => DataType::TYPE_INT,
65 'TYPE' => DataType::TYPE_INT,
68 'TYPE' => DataType::TYPE_DATETIME,
71 'TYPE' => DataType::TYPE_INT,
74 'TYPE' => DataType::TYPE_DATETIME,
80 'TYPE' => DataType::TYPE_CHAR,
82 'DATE_ACTIVE_FROM' => [
83 'TYPE' => DataType::TYPE_DATETIME,
86 'TYPE' => DataType::TYPE_DATETIME,
89 'TYPE' => DataType::TYPE_STRING,
91 Attributes::REQUIRED_ADD,
95 'TYPE' => DataType::TYPE_STRING,
98 'TYPE' => DataType::TYPE_INT,
101 'TYPE' => DataType::TYPE_STRING,
103 'PREVIEW_TEXT_TYPE' => [
104 'TYPE' => DataType::TYPE_STRING,
106 'PREVIEW_PICTURE' => [
107 'TYPE' => DataType::TYPE_FILE,
110 'TYPE' => DataType::TYPE_STRING,
112 'DETAIL_TEXT_TYPE' => [
113 'TYPE' => DataType::TYPE_STRING,
115 'DETAIL_PICTURE' => [
116 'TYPE' => DataType::TYPE_FILE,
119 'TYPE' => DataType::TYPE_INT,
121 Attributes::REQUIRED,
122 Attributes::IMMUTABLE,
125 'IBLOCK_SECTION_ID' => [
126 'TYPE' => DataType::TYPE_INT,
128 'IBLOCK_SECTION' => [
129 'TYPE' => DataType::TYPE_LIST,
132 'TYPE' => DataType::TYPE_STRING,
136 return $this->fillFieldNames($fieldList);
152 $result->addError(
new Error(
'parameter - iblockId is empty'));
157 $catalogInfo = \CCatalogSku::GetInfoByOfferIBlock(
$iblockId);
158 $skuPropertyId = $catalogInfo[
'SKU_PROPERTY_ID'] ??
null;
161 $allowedTypes = array_fill_keys(self::getUserType(),
true);
192 $property[
'ID'] = (int)$property[
'ID'];
193 $userType = (string)$property[
'USER_TYPE'];
196 && !isset($allowedTypes[$property[
'PROPERTY_TYPE'] .
':' . $userType])
203 'TYPE' => EntityFieldType::PRODUCT_PROPERTY,
204 'PROPERTY_TYPE' => $property[
'PROPERTY_TYPE'],
205 'USER_TYPE' => $property[
'USER_TYPE'],
206 'ATTRIBUTES' => [Attributes::DYNAMIC],
207 'NAME' => $property[
'NAME'],
210 if ($property[
'MULTIPLE'] ===
'Y')
212 $info[
'ATTRIBUTES'][] = Attributes::MULTIPLE;
214 if ($property[
'IS_REQUIRED'] ===
'Y')
216 $info[
'ATTRIBUTES'][] = Attributes::REQUIRED;
222 && $property[
'MULTIPLE'] ===
'N'
226 '=PROPERTY_ID' => $property[
'ID'],
228 if (Iblock\PropertyEnumerationTable::getCount($enumFilter, $cache) === 1)
230 $variant = Iblock\PropertyEnumerationTable::getRow([
236 'filter' => $enumFilter,
239 $info[
'BOOLEAN_VALUE_YES'] = [
240 'ID' => $variant[
'ID'],
241 'VALUE' => $variant[
'VALUE'],
246 if ($this->isPropertyBoolean(
$info))
248 $info[
'USER_TYPE'] = Catalog\Controller\Enum::PROPERTY_USER_TYPE_BOOL_ENUM;
251 $canonicalName =
'PROPERTY_' . $property[
'ID'];
252 if ($property[
'ID'] === $skuPropertyId)
254 $info[
'CANONICAL_NAME'] = $canonicalName;
255 $fieldsInfo[
'PARENT_ID'] =
$info;
259 $fieldsInfo[$canonicalName] =
$info;
261 unset($canonicalName);
265 $fieldsInfo[
'PROPERTY_*'] = [
266 'TYPE' => EntityFieldType::PRODUCT_PROPERTY,
268 Attributes::READONLY,
282 private function getFieldsCatalogProductCommonFields():
array
286 'TYPE' => DataType::TYPE_INT,
288 Attributes::READONLY,
292 'TYPE' => DataType::TYPE_DATETIME,
295 'TYPE' => DataType::TYPE_CHAR,
298 'TYPE' => DataType::TYPE_INT,
300 Attributes::READONLY,
304 'TYPE' => DataType::TYPE_CHAR,
306 Attributes::READONLY,
311 return $this->fillFieldNames($fieldList);
322 $iblockData =
$result->getData();
324 $allowedTypes = self::getProductTypes($iblockData[
'CATALOG_TYPE']);
326 if (!isset($allowedTypes[$productTypeId]))
328 $result->addError(
new Error(
'productType is not allowed for this catalog'));
344 $iblockData = \CCatalogSku::GetInfoByIBlock(
$iblockId);
345 if (empty($iblockData))
366 $productTypeId = (int)(
$filter[
'PRODUCT_TYPE'] ?? 0);
370 $result->addError(
new Error(
'parameter - iblockId is empty'));
373 if ($productTypeId <= 0)
375 $result->addError(
new Error(
'parameter - productType is empty'));
380 $r = $this->isAllowedProductTypeByIBlockId($productTypeId,
$iblockId);
383 $result->setData($this->getFieldsCatalogProductByType($productTypeId));
387 $result->addErrors($r->getErrors());
397 private function getFieldsCatalogProduct():
array
401 'TYPE' => DataType::TYPE_INT,
403 Attributes::READONLY,
407 'TYPE' => DataType::TYPE_CHAR,
409 Attributes::READONLY,
413 'TYPE' => DataType::TYPE_CHAR,
415 Attributes::READONLY,
419 'TYPE' => DataType::TYPE_FLOAT,
421 'QUANTITY_RESERVED' => [
422 'TYPE' => DataType::TYPE_FLOAT,
424 'QUANTITY_TRACE' => [
425 'TYPE' => DataType::TYPE_CHAR,
428 'TYPE' => DataType::TYPE_CHAR,
431 'TYPE' => DataType::TYPE_CHAR,
434 'TYPE' => DataType::TYPE_INT,
437 'TYPE' => DataType::TYPE_CHAR,
439 'PURCHASING_PRICE' => [
440 'TYPE' => DataType::TYPE_FLOAT,
442 'PURCHASING_CURRENCY' => [
443 'TYPE' => DataType::TYPE_STRING,
446 'TYPE' => DataType::TYPE_CHAR,
449 'TYPE' => DataType::TYPE_FLOAT,
452 'TYPE' => DataType::TYPE_FLOAT,
455 'TYPE' => DataType::TYPE_FLOAT,
458 'TYPE' => DataType::TYPE_FLOAT,
461 'TYPE' => DataType::TYPE_INT,
463 'RECUR_SCHEME_LENGTH' => [
464 'TYPE' => DataType::TYPE_INT,
466 'RECUR_SCHEME_TYPE' => [
467 'TYPE' => DataType::TYPE_CHAR,
469 'TRIAL_PRICE_ID' => [
470 'TYPE' => DataType::TYPE_INT,
473 'TYPE' => DataType::TYPE_CHAR,
477 if (Catalog\Config\State::isUsedInventoryManagement())
483 'PURCHASING_CURRENCY',
486 foreach ($lockFields as $fieldName)
488 if (!isset($fieldList[$fieldName][
'ATTRIBUTES']))
490 $fieldList[$fieldName][
'ATTRIBUTES'] = [
491 Attributes::READONLY,
496 $fieldList[$fieldName][
'ATTRIBUTES'][] = Attributes::READONLY;
497 $fieldList[$fieldName][
'ATTRIBUTES'] = array_unique($fieldList[$fieldName][
'ATTRIBUTES']);
502 return $this->fillFieldNames($fieldList);
509 private function getFieldsCatalogProductByType(
int $id):
array
525 private function getFieldsCatalogProductByTypeService():
array
529 'TYPE' => DataType::TYPE_CHAR,
532 'TYPE' => DataType::TYPE_INT,
535 'TYPE' => DataType::TYPE_INT,
538 'TYPE' => DataType::TYPE_CHAR,
542 return $this->fillFieldNames($fieldList);
548 private function getFieldsCatalogProductByTypeProduct():
array
552 'TYPE' => DataType::TYPE_CHAR,
554 Attributes::READONLY,
557 'PURCHASING_PRICE' => [
558 'TYPE' => DataType::TYPE_STRING,
560 'PURCHASING_CURRENCY' => [
561 'TYPE' => DataType::TYPE_STRING,
564 'TYPE' => DataType::TYPE_INT,
567 'TYPE' => DataType::TYPE_CHAR,
570 'TYPE' => DataType::TYPE_FLOAT,
572 'QUANTITY_RESERVED' => [
573 'TYPE' => DataType::TYPE_FLOAT,
576 'TYPE' => DataType::TYPE_INT,
578 'QUANTITY_TRACE' => [
579 'TYPE' => DataType::TYPE_CHAR,
582 'TYPE' => DataType::TYPE_CHAR,
584 'NEGATIVE_AMOUNT_TRACE' => [
585 'TYPE' => DataType::TYPE_CHAR,
587 Attributes::READONLY,
591 'TYPE' => DataType::TYPE_CHAR,
594 'TYPE' => DataType::TYPE_FLOAT,
597 'TYPE' => DataType::TYPE_FLOAT,
600 'TYPE' => DataType::TYPE_FLOAT,
603 'TYPE' => DataType::TYPE_FLOAT,
606 'TYPE' => DataType::TYPE_CHAR,
608 'RECUR_SCHEME_LENGTH' => [
609 'TYPE' => DataType::TYPE_INT,
611 'RECUR_SCHEME_TYPE' => [
612 'TYPE' => DataType::TYPE_CHAR,
614 'TRIAL_PRICE_ID' => [
615 'TYPE' => DataType::TYPE_INT,
618 'TYPE' => DataType::TYPE_CHAR,
622 return $this->fillFieldNames($fieldList);
628 private function getFieldsCatalogProductByTypeSKU():
array
632 'TYPE' => DataType::TYPE_CHAR,
634 Attributes::READONLY,
639 if (Option::get(
'catalog',
'show_catalog_tab_with_offers') ===
'Y')
641 $fieldListCatalogTabWithOffers = [
642 'PURCHASING_PRICE' => [
643 'TYPE' => DataType::TYPE_STRING,
645 'PURCHASING_CURRENCY' => [
646 'TYPE' => DataType::TYPE_STRING,
649 'TYPE' => DataType::TYPE_INT,
652 'TYPE' => DataType::TYPE_CHAR,
655 'TYPE' => DataType::TYPE_FLOAT,
658 'TYPE' => DataType::TYPE_INT,
661 'TYPE' => DataType::TYPE_CHAR,
664 'TYPE' => DataType::TYPE_CHAR,
667 'TYPE' => DataType::TYPE_FLOAT,
670 'TYPE' => DataType::TYPE_FLOAT,
673 'TYPE' => DataType::TYPE_FLOAT,
676 'TYPE' => DataType::TYPE_FLOAT,
679 $fieldList = array_merge($fieldList, $fieldListCatalogTabWithOffers);
682 return $this->fillFieldNames($fieldList);
688 private function getFieldsCatalogProductByTypeOffer():
array
690 return $this->getFieldsCatalogProductByTypeProduct();
696 private function getFieldsCatalogProductByTypeSet():
array
700 'TYPE' => DataType::TYPE_CHAR,
702 Attributes::READONLY,
705 'PURCHASING_PRICE' => [
706 'TYPE' => DataType::TYPE_STRING,
708 'PURCHASING_CURRENCY' => [
709 'TYPE' => DataType::TYPE_STRING,
712 'TYPE' => DataType::TYPE_INT,
715 'TYPE' => DataType::TYPE_CHAR,
718 'TYPE' => DataType::TYPE_FLOAT,
720 Attributes::READONLY,
724 'TYPE' => DataType::TYPE_INT,
726 Attributes::READONLY,
729 'QUANTITY_TRACE' => [
730 'TYPE' => DataType::TYPE_CHAR,
732 Attributes::READONLY,
736 'TYPE' => DataType::TYPE_CHAR,
738 Attributes::READONLY,
741 'NEGATIVE_AMOUNT_TRACE' => [
742 'TYPE' => DataType::TYPE_CHAR,
744 Attributes::READONLY,
748 'TYPE' => DataType::TYPE_CHAR,
751 'TYPE' => DataType::TYPE_FLOAT,
753 Attributes::READONLY,
757 'TYPE' => DataType::TYPE_FLOAT,
760 'TYPE' => DataType::TYPE_FLOAT,
763 'TYPE' => DataType::TYPE_FLOAT,
767 return $this->fillFieldNames($fieldList);
779 $productTypeId = (int)(
$filter[
'PRODUCT_TYPE'] ?? 0);
782 $result->addError(
new Error(
'parameter - iblockId is empty'));
785 if ($productTypeId <= 0)
787 $result->addError(
new Error(
'parameter - productType is empty'));
792 $this->loadFieldNames();
797 $propertyValues = $this->getFieldsIBlockPropertyValuesByFilter([
'IBLOCK_ID' =>
$iblockId]);
799 if ($propertyValues->isSuccess())
801 $properties = $propertyValues->getData();
802 unset($properties[
'PROPERTY_*']);
804 unset($propertyValues);
807 $this->getFieldsIBlockElement(),
809 $this->getFieldsCatalogProductCommonFields(),
810 $this->getFieldsCatalogProductByType($productTypeId)
817 $result->addErrors($r->getErrors());
828 private static function getProductTypes($catalogType):
array
831 return match ($catalogType)
833 \CCatalogSku::TYPE_CATALOG => [
838 \CCatalogSku::TYPE_OFFERS => [
842 \CCatalogSku::TYPE_FULL => [
849 \CCatalogSku::TYPE_PRODUCT => [
860 private static function getUserType():
array
894 $iblockId = (int)($arguments[
'filter'][
'IBLOCK_ID'] ?? 0);
896 $propertyValues = $this->getFieldsIBlockPropertyValuesByFilter([
'IBLOCK_ID' =>
$iblockId]);
897 $fieldsInfo = array_merge(
899 ($propertyValues->isSuccess() ? $propertyValues->getData() : [])
901 unset($propertyValues);
903 return parent::internalizeFieldsList($arguments, $fieldsInfo);
910 $productType = (int)(
$fields[
'TYPE'] ?? 0);
912 $propertyValues = $this->getFieldsIBlockPropertyValuesByFilter([
'IBLOCK_ID' =>
$iblockId]);
913 $product = $this->getFieldsCatalogProductByFilter([
'IBLOCK_ID' =>
$iblockId,
'PRODUCT_TYPE' => $productType]);
915 if ($product->isSuccess())
917 $fieldsInfo = array_merge(
918 $this->getFieldsIBlockElement(),
919 ($propertyValues->isSuccess() ? $propertyValues->getData() : []),
920 $this->getFieldsCatalogProductCommonFields(),
926 $fieldsInfo = array_merge(
928 ($propertyValues->isSuccess() ? $propertyValues->getData() : [])
931 unset($product, $propertyValues);
933 return parent::internalizeFieldsAdd(
$fields, $fieldsInfo);
940 $productType = (int)(
$fields[
'TYPE'] ?? 0);
942 $propertyValues = $this->getFieldsIBlockPropertyValuesByFilter([
'IBLOCK_ID' =>
$iblockId]);
943 $product = $this->getFieldsCatalogProductByFilter([
'IBLOCK_ID' =>
$iblockId,
'PRODUCT_TYPE' => $productType]);
945 if ($product->isSuccess())
947 $fieldsInfo = array_merge(
948 $this->getFieldsIBlockElement(),
949 ($propertyValues->isSuccess() ? $propertyValues->getData() : []),
950 $this->getFieldsCatalogProductCommonFields(),
956 $fieldsInfo = array_merge(
958 ($propertyValues->isSuccess() ? $propertyValues->getData() : [])
961 unset($product, $propertyValues);
963 return parent::internalizeFieldsUpdate(
$fields, $fieldsInfo);
972 $date = $this->internalizeDate($value);
974 if ($date instanceof
Date)
976 $value = $date->format(
'd.m.Y');
980 $r->addError(
new Error(
'Wrong type data'));
985 $r->setData([$value]);
997 $date = $this->internalizeDateTime($value);
1000 $value = $date->format(
'd.m.Y H:i:s');
1004 $r->addError(
new Error(
'Wrong type datetime'));
1007 if ($r->isSuccess())
1009 $r->setData([$value]);
1021 $date = $this->internalizeDate($value);
1023 if ($date instanceof
Date)
1025 $value = $date->format(
'Y-m-d');
1029 $r->addError(
new Error(
'Wrong type data'));
1032 if ($r->isSuccess())
1034 $r->setData([$value]);
1046 $date = $this->internalizeDateTime($value);
1049 $value = $date->format(
'Y-m-d H:i:s');
1053 $r->addError(
new Error(
'Wrong type datetime'));
1056 if ($r->isSuccess())
1058 $r->setData([$value]);
1072 $propertyType =
$info[
'PROPERTY_TYPE'] ??
'';
1073 $userType =
$info[
'USER_TYPE'] ??
'';
1075 $attrs =
$info[
'ATTRIBUTES'] ?? [];
1076 $isMultiple = in_array(Attributes::MULTIPLE, $attrs,
true);
1080 if ($r->isSuccess())
1082 $value = $isMultiple ? $value : [$value];
1083 if (!is_array($value))
1090 array_walk($value,
function(&$item) use ($r)
1093 if ($date->isSuccess())
1095 $item[
'VALUE'] = $date->getData()[0];
1099 $r->addErrors($date->getErrors());
1105 array_walk($value,
function(&$item) use ($r)
1108 if ($date->isSuccess())
1110 $item[
'VALUE'] = $date->getData()[0];
1114 $r->addErrors($date->getErrors());
1120 array_walk($value,
function(&$item) use ($r)
1122 $date = $this->internalizeFileValue($item[
'VALUE']);
1125 $item[
'VALUE'] = $date;
1129 $r->addError(
new Error(
'Wrong file date'));
1135 $booleanValue = $value[0][
'VALUE'];
1136 if ($booleanValue === self::BOOLEAN_VALUE_YES)
1138 $value[0][
'VALUE'] =
$info[
'BOOLEAN_VALUE_YES'][
'ID'];
1140 elseif ($booleanValue === self::BOOLEAN_VALUE_NO)
1142 $value[0][
'VALUE'] =
null;
1147 $value = $isMultiple? $value: $value[0];
1151 if ($r->isSuccess())
1153 $r->setData([$value]);
1162 $name ===
'getfieldsbyfilter'
1163 ||
$name ===
'download'
1170 return parent::internalizeArguments(
$name, $arguments);
1175 $fieldInfo = $fieldsInfo[
$name] ?? [];
1176 if ($this->isPropertyBoolean($fieldInfo))
1178 return self::BOOLEAN_VALUE_NO;
1181 return parent::externalizeEmptyValue(
$name, $value,
$fields, $fieldsInfo);
1188 $productType = (int)(
$fields[
'TYPE'] ?? 0);
1190 $propertyValues = $this->getFieldsIBlockPropertyValuesByFilter([
'IBLOCK_ID' =>
$iblockId]);
1191 $product = $this->getFieldsCatalogProductByFilter([
'IBLOCK_ID' =>
$iblockId,
'PRODUCT_TYPE' => $productType]);
1193 if ($product->isSuccess())
1195 $fieldsInfo = array_merge(
1196 $this->getFieldsIBlockElement(),
1197 ($propertyValues->isSuccess() ? $propertyValues->getData() : []),
1198 $this->getFieldsCatalogProductCommonFields(),
1207 $fieldsInfo = array_merge(
1209 ($propertyValues->isSuccess() ? $propertyValues->getData() : [])
1212 unset($product, $propertyValues);
1214 return parent::externalizeFieldsGet(
$fields, $fieldsInfo);
1220 $iblockId = (int)($list[0][
'IBLOCK_ID'] ?? 0);
1222 $propertyValues = $this->getFieldsIBlockPropertyValuesByFilter([
'IBLOCK_ID' =>
$iblockId]);
1223 $fieldsInfo = array_merge(
1225 ($propertyValues->isSuccess() ? $propertyValues->getData() : [])
1227 unset($propertyValues);
1229 return parent::externalizeListFields($list, $fieldsInfo);
1235 $name ===
'getfieldsbyfilter'
1236 ||
$name ===
'download'
1248 if (
$name ===
'getfieldsbyfilter')
1250 if (isset($arguments[
'filter']))
1252 $filter = $arguments[
'filter'];
1255 $arguments[
'filter'] = $this->convertKeysToSnakeCaseFilter(
$filter);
1261 if (isset($arguments[
'fields']))
1263 $fields = $arguments[
'fields'];
1268 | Converter::TO_SNAKE
1269 | Converter::TO_SNAKE_DIGIT
1270 | Converter::TO_UPPER
1274 | Converter::TO_SNAKE
1275 | Converter::TO_SNAKE_DIGIT
1276 | Converter::TO_UPPER
1280 foreach ($converter->process(
$fields) as
$key => $value)
1282 $result[$converterForKey->process(
$key)] = $value;
1284 $arguments[
'fields'] =
$result;
1290 parent::convertKeysToSnakeCaseArguments(
$name, $arguments);
1300 $select = $arguments[
'select'] ?? [];
1311 if (!in_array(
'IBLOCK_ID',
$select))
1318 $r->addError(
new Error(
'Required select fields: ' . implode(
', ',
$error)));
1321 if (!isset($arguments[
'filter'][
'IBLOCK_ID']))
1323 $r->addError(
new Error(
'Required filter fields: iblockId'));
1331 if (
$name ===
'download')
1333 $fields = $arguments[
'fields'];
1338 return parent::checkArguments(
$name, $arguments);
1348 if (!isset(
$fields[
'FIELD_NAME']))
1350 $emptyFields[] =
'fieldName';
1353 if (!isset(
$fields[
'FILE_ID']))
1355 $emptyFields[] =
'fileId';
1358 if (!isset(
$fields[
'PRODUCT_ID']))
1360 $emptyFields[] =
'productId';
1363 if (!empty($emptyFields))
1365 $r->addError(
new Error(
'Required fields: '.implode(
', ', $emptyFields)));
1373 return '/rest/catalog.product.download';
1379 if (isset(
$fields[
'PRODUCT_ID']))
1381 $productId =
$fields[
'PRODUCT_ID'];
1387 $productId = (int)$productId;
1391 'fieldName' => Converter::toJson()
1395 'productId' => $productId,
1403 'URL' => new \Bitrix\Main\Engine\Response\DataType\ContentUri(
1419 $attrs =
$info[
'ATTRIBUTES'] ?? [];
1420 $isMultiple = in_array(Attributes::MULTIPLE, $attrs,
true);
1422 $propertyType =
$info[
'PROPERTY_TYPE'] ??
'';
1423 $userType =
$info[
'USER_TYPE'] ??
'';
1425 $value = $isMultiple? $value: [$value];
1429 array_walk($value,
function(&$item)use($r)
1431 $date = $this->externalizeDateValue($item[
'VALUE']);
1432 if ($date->isSuccess())
1434 $item[
'VALUE'] = $date->getData()[0];
1438 $r->addErrors($date->getErrors());
1444 array_walk($value,
function(&$item) use($r)
1446 $date = $this->externalizeDateTimeValue($item[
'VALUE']);
1447 if ($date->isSuccess())
1449 $item[
'VALUE'] = $date->getData()[0];
1453 $r->addErrors($date->getErrors());
1459 array_walk($value,
function(&$item) use (
$fields,
$name)
1468 $value = self::BOOLEAN_VALUE_YES;
1472 $value = self::BOOLEAN_VALUE_NO;
1476 $value = $isMultiple? $value: $value[0];
1479 if ($r->isSuccess())
1481 $r->setData([$value]);
1492 private function loadFieldNames(): void
1494 if (!empty($this->productFieldNames))
1501 $this->loadAdditionalFieldNames();
1510 private function loadEntityFieldNames(
array $fieldList): void
1513 foreach ($fieldList as $field)
1515 if ($field instanceof ScalarField)
1517 $name = $field->getName();
1518 $title = $field->getTitle();
1525 private function loadAdditionalFieldNames(): void
1527 $this->productFieldNames[
'IBLOCK_SECTION'] = Loc::getMessage(
'RESTVIEW_PRODUCT_FIELD_NAME_IBLOCK_SECTION');
1536 private function fillFieldNames(
array $fieldList):
array
1538 foreach (array_keys($fieldList) as $id)
1540 $fieldList[$id][
'NAME'] = $this->productFieldNames[$id] ?? $id;
1546 private function isPropertyBoolean(
array $property): bool
1552 $attributes = $property[
'ATTRIBUTES'] ?? [];
1553 if (!is_array($attributes))
1557 if (in_array(Attributes::MULTIPLE, $attributes,
true))
1561 $userType = (string)($property[
'USER_TYPE'] ??
'');
1566 return (!empty($property[
'BOOLEAN_VALUE_YES']) && is_array($property[
'BOOLEAN_VALUE_YES']));
1576 : $r->addError(
new Error(
'For type Multiple field - value must be an Indexed array'))
1582 if (!is_array($ary))
1587 $keys = array_keys($ary);
1588 foreach ($keys as
$k)
if(file_exists($_SERVER['DOCUMENT_ROOT'] . "/urlrewrite.php")) $uri
if( $daysToExpire >=0 &&$daysToExpire< 60 elseif)( $daysToExpire< 0)