...Человеческий поиск в разработке...
- Модуль: crm
- Путь к файлу: ~/bitrix/modules/crm/classes/general/restservice.php
- Класс: \CCrmRestProxyBase
- Вызов: CCrmRestProxyBase::internalizeFields
protected function internalizeFields(&$fields, &$fieldsInfo, $options = array()) { if(!is_array($fields)) { return; } if(!is_array($options)) { $options = array(); } $ignoredAttrs = $options['IGNORED_ATTRS'] ?? array(); if(!in_array(CCrmFieldInfoAttr::Hidden, $ignoredAttrs, true)) { $ignoredAttrs[] = CCrmFieldInfoAttr::Hidden; } if(!in_array(CCrmFieldInfoAttr::ReadOnly, $ignoredAttrs, true)) { $ignoredAttrs[] = CCrmFieldInfoAttr::ReadOnly; } $multifields = array(); foreach($fields as $k => $v) { $info = $fieldsInfo[$k] ?? null; if(!$info) { unset($fields[$k]); continue; } $attrs = isset($info['ATTRIBUTES']) && is_array($info['ATTRIBUTES']) ? $info['ATTRIBUTES'] : []; $isMultiple = in_array(CCrmFieldInfoAttr::Multiple, $attrs, true); $ary = array_intersect($ignoredAttrs, $attrs); if(!empty($ary)) { unset($fields[$k]); continue; } $fieldType = $info['TYPE'] ?? ''; switch ($fieldType) { case 'integer': case 'user': if (!$isMultiple && !is_scalar($v)) { $fields[$k] = (int)$fields[$k]; } break; case 'char': case 'string': case 'date': case 'datetime': case 'crm_status': if (!$isMultiple && !is_scalar($v)) { $fields[$k] = (string)$fields[$k]; } break; } if($fieldType === 'date' || $fieldType === 'datetime') { if($v === '') { $date = ''; } else { $date = $fieldType === 'date' ? CRestUtil::unConvertDate($v) : CRestUtil::unConvertDateTime($v, true); } if($isMultiple) { if(!is_array($date)) { $date = array($date); } $dates = array(); foreach($date as $item) { if(is_string($item)) { $dates[] = $item; } } if(!empty($dates)) { $fields[$k] = $dates; } else { unset($fields[$k]); } } elseif(is_string($date)) { $fields[$k] = $date; } else { unset($fields[$k]); } } elseif($fieldType === 'file') { $this->tryInternalizeFileField($fields, $k, $isMultiple); } elseif($fieldType === 'webdav') { $this->tryInternalizeWebDavElementField($fields, $k, $isMultiple); } elseif($fieldType === 'diskfile') { $this->tryInternalizeDiskFileField($fields, $k, $isMultiple); } elseif($fieldType === 'crm_multifield') { $this->tryInternalizeMultiFields($fields, $k, $multifields); } elseif($fieldType === 'product_file') { $this->tryInternalizeProductFileField($fields, $k); } elseif($fieldType === 'product_property') { $this->tryInternalizeProductPropertyField($fields, $fieldsInfo, $k); } } if(!empty($multifields)) { $fields['FM'] = $multifields; } }