- Модуль: 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;
}