CCrmRestProxyBase::internalizeFields

  1. Bitrix24 API (v. 23.675.0)
  2. crm
  3. CCrmRestProxyBase
  4. internalizeFields
  • Модуль: 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;
	}
}

Добавить комментарий