CCrmDocument::InternalizeEnumerationField

  1. Bitrix24 API (v. 23.675.0)
  2. crm
  3. CCrmDocument
  4. InternalizeEnumerationField
  • Модуль: crm
  • Путь к файлу: ~/bitrix/modules/crm/classes/general/crm_document.php
  • Класс: \CCrmDocument
  • Вызов: CCrmDocument::InternalizeEnumerationField
static function InternalizeEnumerationField($entityTypeID, array &$fields, $name)
{
	if(!isset($fields[$name]))
	{
		return;
	}

	$entityResult = CUserTypeEntity::GetList(array(), array("ENTITY_ID" => $entityTypeID, "FIELD_NAME" => $name));
	$entity = $entityResult->Fetch();
	if(!is_array($entity))
	{
		return;
	}

	$isMultiple = isset($entity['MULTIPLE']) && $entity['MULTIPLE'] === 'Y';

	$enumXMap = array();
	$enumVMap = array();
	$enumResult = CUserTypeEnum::GetList($entity);
	while ($enum = $enumResult->GetNext())
	{
		$enumXMap[$enum["XML_ID"]] = $enum["ID"];
		$enumVMap[$enum["VALUE"]] = $enum["ID"];
	}

	$results = array();
	if(is_array($fields[$name]))
	{
		foreach($fields[$name] as $value)
		{
			if(CBPHelper::IsAssociativeArray($value))
			{
				//HACK: For IBlockDocument
				$value = array_keys($value);
				if(!$isMultiple)
				{
					$value = array_shift($value);
				}
			}

			if(is_array($value))
			{
				foreach($value as $v)
				{
					if(isset($enumXMap[$v]))
					{
						$results[] = $enumXMap[$v];
					}
					elseif(isset($enumVMap[$v]))
					{
						$results[] = $enumVMap[$v];
					}
				}
			}
			elseif(isset($enumXMap[$value]))
			{
				$results[] = $enumXMap[$value];
			}
			elseif(isset($enumVMap[$value]))
			{
				$results[] = $enumVMap[$value];
			}
		}
	}
	elseif(isset($enumXMap[$fields[$name]]))
	{
		$results[] = $enumXMap[$fields[$name]];
	}
	elseif(isset($enumVMap[$fields[$name]]))
	{
		$results[] = $enumVMap[$fields[$name]];
	}

	$results = array_unique($results);

	if(!empty($results))
	{
		$fields[$name] = $isMultiple ? $results : $results[0];
	}
	else
	{
		//Set "empty" value
		$fields[$name] = $isMultiple ? [] : null;
	}
}

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