230 if($this->entityID ===
'')
232 throw new RestException(
'Operation is not allowed. Entity ID is not defined.');
236 $defaultLabel = isset(
$fields[
'LABEL']) ? trim(
$fields[
'LABEL']) :
'';
242 $userTypeID = isset(
$fields[
'USER_TYPE_ID']) ? trim(
$fields[
'USER_TYPE_ID']) :
'';
243 if($userTypeID ===
'')
245 $errors[] =
"The 'USER_TYPE_ID' field is not found.";
247 $fields[
'USER_TYPE_ID'] = $userTypeID;
249 $fieldName = isset(
$fields[
'FIELD_NAME']) ? trim(
$fields[
'FIELD_NAME']) :
'';
250 if($fieldName ===
'')
252 $errors[] =
"The 'FIELD_NAME' field is not found.";
255 $fieldName = mb_strtoupper($fieldName);
259 $fullPrefix =
'UF_'.$prefix.
'_';
260 $fullPrefixLen = mb_strlen($fullPrefix);
261 if(strncmp($fieldName, $fullPrefix, $fullPrefixLen) !== 0)
263 $fieldName = strncmp($fieldName,
'UF_', 3) === 0
264 ? $fullPrefix.mb_substr($fieldName, 3)
265 : $fullPrefix.$fieldName;
272 if(strncmp($fieldName, $fullPrefix, $fullPrefixLen) !== 0)
274 $fieldName =
'UF_'. $fieldName;
278 $fields[
'FIELD_NAME'] = $fieldName;
285 if($defaultLabel ===
'')
287 $defaultLabel = $fieldName;
296 $fields[
'MULTIPLE'] = isset(
$fields[
'MULTIPLE']) && mb_strtoupper(
$fields[
'MULTIPLE']) ===
'Y' ?
'Y' :
'N';
297 $fields[
'MANDATORY'] = isset(
$fields[
'MANDATORY']) && mb_strtoupper(
$fields[
'MANDATORY']) ===
'Y' ?
'Y' :
'N';
298 $fields[
'SHOW_FILTER'] = isset(
$fields[
'SHOW_FILTER']) && mb_strtoupper(
$fields[
'SHOW_FILTER']) ===
'Y' ?
'E' :
'N';
300 $isMultiple = isset(
$fields[
'MULTIPLE']) &&
$fields[
'MULTIPLE'] ===
'Y';
303 $effectiveSettings =
array();
308 $effectiveSettings[
'DEFAULT_VALUE'] = isset(
$settings[
'DEFAULT_VALUE'])
311 $effectiveSettings[
'ROWS'] =
$settings[
'ROWS'] > 0
317 $effectiveSettings[
'DEFAULT_VALUE'] = isset(
$settings[
'DEFAULT_VALUE'])
323 $effectiveSettings[
'DEFAULT_VALUE'] = isset(
$settings[
'DEFAULT_VALUE'])
326 $effectiveSettings[
'PRECISION'] =
$settings[
'PRECISION'] >= 0
332 $effectiveSettings[
'DEFAULT_VALUE'] = isset(
$settings[
'DEFAULT_VALUE'])
333 &&
$settings[
'DEFAULT_VALUE'] > 0 ? 1 : 0;
336 $effectiveSettings[
'DISPLAY'] = $display !==
''? mb_strtoupper($display) :
'CHECKBOX';
350 $effectiveSettings[
'DEFAULT_VALUE'] =
array(
352 ? \CRestUtil::unConvertDateTime(
$defaultValue[
'VALUE']) :
'',
361 $effectiveSettings[
'DISPLAY'] = $display !==
''? mb_strtoupper($display) :
'LIST';
364 $effectiveSettings[
'LIST_HEIGHT'] = $height > 0 ? $height : 1;
367 $effectiveListItems =
array();
370 $defaultItemKey =
'';
371 foreach($listItems as $item)
373 $itemValue = isset($item[
'VALUE']) ? trim($item[
'VALUE'],
" \t\n\r") :
'';
374 if($itemValue ===
'')
379 $effectiveItem =
array(
'VALUE' => $itemValue);
380 $itemSort = isset($item[
'SORT']) && is_numeric($item[
'SORT']) ? (int)$item[
'SORT'] : 0;
383 $effectiveItem[
'SORT'] = $itemSort;
388 $effectiveItem[
'SORT'] = $itemSort;
391 $itemKey =
"n{$counter}";
394 if(isset($item[
'DEF']))
396 $isDefault = mb_strtoupper($item[
'DEF']) ===
'Y';
399 $effectiveItem[
'DEF'] = $isDefault ?
'Y' :
'N';
401 elseif($isDefault && $defaultItemKey ===
'')
403 $defaultItemKey = $itemKey;
407 if(isset($item[
'XML_ID']) && is_string($item[
'XML_ID']) && $item[
'XML_ID'] !=
'')
409 $effectiveItem[
'XML_ID'] = $item[
'XML_ID'];
412 $effectiveListItems[$itemKey] = &$effectiveItem;
413 unset($effectiveItem);
416 if(!$isMultiple && $defaultItemKey !==
'')
418 foreach($effectiveListItems as
$key => &$item)
420 $item[
'DEF'] =
$key === $defaultItemKey ?
'Y' :
'N';
424 $fields[
'LIST'] = $effectiveListItems;
427 case 'iblock_section':
428 case 'iblock_element':
430 $effectiveSettings[
'IBLOCK_TYPE_ID'] = isset(
$settings[
'IBLOCK_TYPE_ID']) ?
$settings[
'IBLOCK_TYPE_ID'] :
'';
431 $effectiveSettings[
'IBLOCK_ID'] = isset(
$settings[
'IBLOCK_ID']) ? (int)
$settings[
'IBLOCK_ID'] : 0;
432 $effectiveSettings[
'DEFAULT_VALUE'] = isset(
$settings[
'DEFAULT_VALUE']) ?
$settings[
'DEFAULT_VALUE'] :
'';
435 $effectiveSettings[
'DISPLAY'] = $display !==
''? mb_strtoupper($display) :
'LIST';
438 $effectiveSettings[
'LIST_HEIGHT'] = $height > 0 ? $height : 1;
439 $effectiveSettings[
'ACTIVE_FILTER'] = isset(
$settings[
'ACTIVE_FILTER'])
440 && mb_strtoupper(
$settings[
'ACTIVE_FILTER']) ===
'Y' ?
'Y' :
'N';
445 $effectiveSettings[
'ENTITY_TYPE'] = isset(
$settings[
'ENTITY_TYPE']) ?
$settings[
'ENTITY_TYPE'] :
'';
450 $effectiveSettings[
'LEAD'] = isset(
$settings[
'LEAD']) && mb_strtoupper(
$settings[
'LEAD']) ===
'Y' ?
'Y' :
'N';
451 $effectiveSettings[
'CONTACT'] = isset(
$settings[
'CONTACT']) && mb_strtoupper(
$settings[
'CONTACT']) ===
'Y' ?
'Y' :
'N';
452 $effectiveSettings[
'COMPANY'] = isset(
$settings[
'COMPANY']) && mb_strtoupper(
$settings[
'COMPANY']) ===
'Y' ?
'Y' :
'N';
453 $effectiveSettings[
'DEAL'] = isset(
$settings[
'DEAL']) && mb_strtoupper(
$settings[
'DEAL']) ===
'Y' ?
'Y' :
'N';
458 if(
$fields[
'SHOW_FILTER'] !==
'N')
468 foreach($userTypeList as $userType)
470 if($userType[
'ADDITIONAL'] === $userTypeID)
480 $fields[
'SETTINGS'] = $effectiveSettings;
482 $entity = new \CUserTypeEntity();
487 $errors[] = $exc !==
false ? $exc->GetString() :
'Fail to create new user field.';
491 $enum = new \CUserFieldEnum();
492 if(!$enum->SetEnumValues(
$ID,
$fields[
'LIST']))
495 $errors[] = $exc !==
false ? $exc->GetString() :
'Fail to save enumumeration field values.';
574 if($this->entityID ===
'')
576 throw new RestException(
'Operation is not allowed. Entity ID is not defined.');
580 if(isset(
$filter[
'USER_TYPE_ID']))
583 foreach($handlerList as $handler)
585 if($handler[
'ADDITIONAL'] ===
$filter[
'USER_TYPE_ID'])
587 $filter[
'USER_TYPE_ID'] = Callback::getUserTypeId($handler);
592 $entity = new \CUserTypeEntity();
597 $userTypeID = isset(
$fields[
'USER_TYPE_ID']) ?
$fields[
'USER_TYPE_ID'] :
'';
598 if($userTypeID ===
'datetime'
600 && isset(
$fields[
'SETTINGS'][
'DEFAULT_VALUE'])
601 && isset(
$fields[
'SETTINGS'][
'DEFAULT_VALUE'][
'VALUE'])
602 &&
$fields[
'SETTINGS'][
'DEFAULT_VALUE'][
'VALUE'] !==
'')
604 $fields[
'SETTINGS'][
'DEFAULT_VALUE'][
'VALUE'] = \CRestUtil::ConvertDateTime(
$fields[
'SETTINGS'][
'DEFAULT_VALUE'][
'VALUE']);
607 if($userTypeID ===
'enumeration')
611 $enumEntity = new \CUserFieldEnum();
612 $dbResultEnum = $enumEntity->GetList(
array(
'SORT' =>
'ASC'),
array(
'USER_FIELD_ID' =>
$fields[
'ID']));
613 while($enum = $dbResultEnum->Fetch())
617 'SORT' => $enum[
'SORT'],
618 'VALUE' => $enum[
'VALUE'],
619 'DEF' => $enum[
'DEF'],
620 'XML_ID' => $enum[
'XML_ID'],
629 $fields[
'USER_TYPE_OWNER'] = $appInfo[
'CLIENT_ID'];
657 if($this->entityID ===
'')
659 throw new RestException(
'Operation is not allowed. Entity ID is not defined.');
662 $entity = new \CUserTypeEntity();
665 if(!is_array($persistedFields))
670 $entityID = isset($persistedFields[
'ENTITY_ID']) ? $persistedFields[
'ENTITY_ID'] :
'';
677 $userTypeID = isset($persistedFields[
'USER_TYPE_ID']) ? $persistedFields[
'USER_TYPE_ID'] :
'';
678 if($userTypeID ===
'')
680 throw new RestException(
"Could not find 'USER_TYPE_ID' in persisted entity with ID '{$ID}'.");
683 $isMultiple = isset($persistedFields[
'MULTIPLE']) && $persistedFields[
'MULTIPLE'] ===
'Y';
687 if(isset(
$fields[
'LIST_FILTER_LABEL']))
691 elseif(isset($persistedFields[
'LIST_FILTER_LABEL']))
693 $fields[
'LIST_FILTER_LABEL'] = $persistedFields[
'LIST_FILTER_LABEL'];
696 if(isset(
$fields[
'LIST_COLUMN_LABEL']))
700 elseif(isset($persistedFields[
'LIST_COLUMN_LABEL']))
702 $fields[
'LIST_COLUMN_LABEL'] = $persistedFields[
'LIST_COLUMN_LABEL'];
705 if(isset(
$fields[
'EDIT_FORM_LABEL']))
709 elseif(isset($persistedFields[
'EDIT_FORM_LABEL']))
711 $fields[
'EDIT_FORM_LABEL'] = $persistedFields[
'EDIT_FORM_LABEL'];
714 if(isset(
$fields[
'ERROR_MESSAGE']))
718 elseif(isset($persistedFields[
'ERROR_MESSAGE']))
720 $fields[
'ERROR_MESSAGE'] = $persistedFields[
'ERROR_MESSAGE'];
723 if(isset(
$fields[
'HELP_MESSAGE']))
727 elseif(isset($persistedFields[
'HELP_MESSAGE']))
729 $fields[
'HELP_MESSAGE'] = $persistedFields[
'HELP_MESSAGE'];
733 $effectiveSettings = isset($persistedFields[
'SETTINGS']) && is_array($persistedFields[
'SETTINGS'])
734 ? $persistedFields[
'SETTINGS'] :
array();
736 if(isset(
$fields[
'SHOW_FILTER']))
738 $fields[
'SHOW_FILTER'] = mb_strtoupper(
$fields[
'SHOW_FILTER']) ===
'Y' ?
'E' :
'N';
747 $effectiveSettings[
'DEFAULT_VALUE'] =
$settings[
'DEFAULT_VALUE'];
752 $effectiveSettings[
'ROWS'] = min(max(
$settings[
'ROWS'], 1), 50);
760 $effectiveSettings[
'DEFAULT_VALUE'] =
$settings[
'DEFAULT_VALUE'];
768 $effectiveSettings[
'DEFAULT_VALUE'] =
$settings[
'DEFAULT_VALUE'];
773 $effectiveSettings[
'PRECISION'] =
$settings[
'PRECISION'] >= 0
782 $effectiveSettings[
'DEFAULT_VALUE'] =
$settings[
'DEFAULT_VALUE'] > 0 ? 1 : 0;
787 $effectiveSettings[
'DISPLAY'] =
$settings[
'DISPLAY'] !==
''
788 ? mb_strtoupper(
$settings[
'DISPLAY']) :
'CHECKBOX';
804 $effectiveSettings[
'DEFAULT_VALUE'] =
array(
806 ? \CRestUtil::unConvertDateTime(
$defaultValue[
'VALUE']) :
'',
817 $effectiveSettings[
'DISPLAY'] =
$settings[
'DISPLAY'] !==
''
818 ? mb_strtoupper(
$settings[
'DISPLAY']) :
'LIST';
823 $effectiveSettings[
'LIST_HEIGHT'] =
$settings[
'LIST_HEIGHT'] > 0 ?
$settings[
'LIST_HEIGHT'] : 1;
829 $effectiveListItems =
array();
832 $defaultItemKey =
'';
833 foreach($listItems as $item)
835 $itemValue = isset($item[
'VALUE']) ? trim($item[
'VALUE'],
" \t\n\r") :
'';
837 $effectiveItem =
array(
'VALUE' => $itemValue);
838 $itemXmlID = isset($item[
'XML_ID']) ? $item[
'XML_ID'] :
'';
839 if($itemXmlID !==
'')
841 $effectiveItem[
'XML_ID'] = $itemXmlID;
843 $itemSort = isset($item[
'SORT']) && is_numeric($item[
'SORT']) ? (int)$item[
'SORT'] : 0;
846 $effectiveItem[
'SORT'] = $itemSort;
849 $itemID = isset($item[
'ID']) && is_numeric($item[
'ID']) ? (int)$item[
'ID'] : 0;
852 $itemKey = strval($itemID);
853 if(isset($item[
'DEL']) && mb_strtoupper($item[
'DEL']) ===
'Y')
855 $effectiveItem[
'DEL'] =
'Y';
860 $itemKey =
"n{$counter}";
864 if(isset($item[
'DEF']))
866 $isDefault = mb_strtoupper($item[
'DEF']) ===
'Y';
869 $effectiveItem[
'DEF'] = $isDefault ?
'Y' :
'N';
871 elseif($isDefault && $defaultItemKey ===
'')
873 $defaultItemKey = $itemKey;
879 $effectiveListItems[$itemKey] = &$effectiveItem;
881 unset($effectiveItem);
884 if(!$isMultiple && $defaultItemKey !==
'')
886 foreach($effectiveListItems as
$key => &$item)
888 $item[
'DEF'] =
$key === $defaultItemKey ?
'Y' :
'N';
892 $fields[
'LIST'] = $effectiveListItems;
897 case 'iblock_section':
898 case 'iblock_element':
902 $effectiveSettings[
'IBLOCK_TYPE_ID'] =
$settings[
'IBLOCK_TYPE_ID'];
907 $effectiveSettings[
'IBLOCK_ID'] =
$settings[
'IBLOCK_ID'] > 0 ?
$settings[
'IBLOCK_ID'] : 0;
912 $effectiveSettings[
'DEFAULT_VALUE'] =
$settings[
'DEFAULT_VALUE'];
917 $effectiveSettings[
'DISPLAY'] =
$settings[
'DISPLAY'] !==
''
918 ? mb_strtoupper(
$settings[
'DISPLAY']) :
'LIST';
923 $effectiveSettings[
'LIST_HEIGHT'] =
$settings[
'LIST_HEIGHT'] > 0 ?
$settings[
'LIST_HEIGHT'] : 1;
928 $effectiveSettings[
'ACTIVE_FILTER'] = mb_strtoupper(
$settings[
'ACTIVE_FILTER']) ===
'Y' ?
'Y' :
'N';
937 $effectiveSettings[
'ENTITY_TYPE'] =
$settings[
'ENTITY_TYPE'];
945 $effectiveSettings[
'LEAD'] = mb_strtoupper(
$settings[
'LEAD']) ===
'Y' ?
'Y' :
'N';
950 $effectiveSettings[
'CONTACT'] = mb_strtoupper(
$settings[
'CONTACT']) ===
'Y' ?
'Y' :
'N';
955 $effectiveSettings[
'COMPANY'] = mb_strtoupper(
$settings[
'COMPANY']) ===
'Y' ?
'Y' :
'N';
960 $effectiveSettings[
'DEAL'] = mb_strtoupper(
$settings[
'DEAL']) ===
'Y' ?
'Y' :
'N';
966 if(isset(
$fields[
'SHOW_FILTER']) &&
$fields[
'SHOW_FILTER'] !==
'N')
974 $fields[
'SETTINGS'] = $effectiveSettings;
980 $exc !==
false ? $exc->GetString() :
'Fail to update user field.',
986 $enum = new \CUserFieldEnum();
987 if(!$enum->SetEnumValues(
$ID,
$fields[
'LIST']))
991 $exc !==
false ? $exc->GetString() :
'Fail to save enumumeration field values.',
1109 if(is_string($label) && $label !==
'')
1116 $labels = is_array($label) ? $label :
array();
1117 $default = $defaultLabel;
1120 $langIDs = array_keys(self::getAllLanguages());
1122 foreach($langIDs as $lid)
1124 $fields[
$name][$lid] = isset($labels[$lid]) && is_string($labels[$lid]) && $labels[$lid] !==
''
1125 ? $labels[$lid] : $default;