• Модуль: crm
  • Путь к файлу: ~/bitrix/modules/crm/lib/automation/fields/itemfieldscaster.php
  • Класс: Bitrix\Crm\Automation\Fields\ItemFieldsCaster
  • Вызов: ItemFieldsCaster::externalizeEnumerationField
private function externalizeEnumerationField(string $fieldId, $value): mixed
{
	$entityResult = \CUserTypeEntity::GetList([], [
		'ENTITY_ID' => $this->getFactory()->getUserFieldEntityId(),
		'FIELD_NAME' => $fieldId,
	]);
	$userTypeEntity = $entityResult->Fetch();
	if (!is_array($userTypeEntity))
	{
		return null;
	}

	$enumXmlMap = [];
	$enumValueMap = [];

	$enumResult = EnumType::getList($userTypeEntity);
	while ($enum = $enumResult->GetNext())
	{
		$enumXmlMap[$enum['XML_ID']] = $enum['ID'];
		$enumValueMap[$enum['VALUE']] = $enum['ID'];
	}

	$results = [];

	$convertSingleValue = function ($singleValue) use (&$results, $enumXmlMap, $enumValueMap)
	{
		if (isset($enumXmlMap[$singleValue]))
		{
			$results[] = $enumXmlMap[$singleValue];
		}
		elseif (isset($enumValueMap[$singleValue]))
		{
			$results[] = $enumValueMap[$singleValue];
		}
	};

	if (is_array($value))
	{
		array_walk_recursive(
			$value,
			$convertSingleValue,
		);
	}
	else
	{
		$convertSingleValue($value);
	}

	$results = array_unique($results);

	$isMultiple = \CBPHelper::getBool($userTypeEntity['MULTIPLE'] ?? 'N');
	if (!$isMultiple)
	{
		return !empty($results) ? $results[0] : null;
	}

	return $results;
}