- Модуль: crm
- Путь к файлу: ~/bitrix/modules/crm/classes/general/crm_component_helper.php
- Класс: \CCrmComponentHelper
- Вызов: CCrmComponentHelper::prepareMultifieldData
static function prepareMultifieldData(
int $entityTypeId,
array $entityIds,
array $typeIds,
array &$entityData,
array $options = []
)
{
$addToDataLevel = isset($options['ADD_TO_DATA_LEVEL']) && $options['ADD_TO_DATA_LEVEL'] === true;
$copyMode = isset($options['COPY_MODE']) && $options['COPY_MODE'] === true;
if (empty($entityIds))
{
return;
}
$multiFieldEntityTypes = \CCrmFieldMulti::GetEntityTypes();
$multiFieldViewClassNames = [
'PHONE' => 'crm-entity-phone-number',
'EMAIL' => 'crm-entity-email',
'IM' => 'crm-entity-phone-number',
];
if (!isset($entityData['MULTIFIELD_DATA']))
{
$entityData['MULTIFIELD_DATA'] = [];
}
$filter = [
'=ENTITY_ID' => CCrmOwnerType::ResolveName($entityTypeId),
'@ELEMENT_ID' => $entityIds,
];
if (!empty($typeIds))
{
$filter['@TYPE_ID'] = $typeIds;
}
// fetch field IDs to create phone country list
$multiFieldIds = [];
$dbResultIds = CCrmFieldMulti::GetListEx(['ID' => 'asc'], $filter, false, false, ['ID']);
while ($row = $dbResultIds->fetch())
{
$multiFieldIds[] = (int)$row['ID'];
}
$phoneCountryList = CCrmFieldMulti::GetPhoneCountryList($multiFieldIds);
$dbResult = CCrmFieldMulti::GetListEx(['ID' => 'asc'], $filter);
while ($fields = $dbResult->fetch())
{
$elementID = (int)$fields['ELEMENT_ID'];
$entityKey = "{$entityTypeId}_{$elementID}";
$typeID = $fields['TYPE_ID'];
$value = $fields['VALUE'] ?? '';
if ($value === '')
{
continue;
}
$ID = $fields['ID'];
$complexID = isset($fields['COMPLEX_ID']) ? $fields['COMPLEX_ID'] : '';
$valueTypeID = isset($fields['VALUE_TYPE']) ? $fields['VALUE_TYPE'] : '';
if (!isset($entityData['MULTIFIELD_DATA'][$typeID]))
{
$entityData['MULTIFIELD_DATA'][$typeID] = array();
}
if (!isset($entityData['MULTIFIELD_DATA'][$typeID][$entityKey]))
{
$entityData['MULTIFIELD_DATA'][$typeID][$entityKey] = array();
}
//Is required for phone & email & messenger menu
if (
$typeID === 'PHONE'
|| $typeID === 'EMAIL'
|| ($typeID === 'IM' && OpenLineManager::isImOpenLinesValue($value))
)
{
$formattedValue = $typeID === 'PHONE'
? Main\PhoneNumber\Parser::getInstance()->parse($value)->format()
: $value;
$entityData['MULTIFIELD_DATA'][$typeID][$entityKey][] = [
'ID' => $ID,
'VALUE' => $value,
'VALUE_TYPE' => $valueTypeID,
'VALUE_EXTRA' => [
'COUNTRY_CODE' => $phoneCountryList[$ID] ?? ''
],
'VALUE_FORMATTED' => $formattedValue,
'COMPLEX_ID' => $complexID,
'COMPLEX_NAME' => \CCrmFieldMulti::GetEntityNameByComplex($complexID, false),
'TITLE' => OpenLineManager::isImOpenLinesValue($value) ? OpenLineManager::getOpenLineTitle($value) : '',
];
}
if ($addToDataLevel)
{
$multiFieldID = $ID;
if ($copyMode)
{
$multiFieldID = "n0{$multiFieldID}";
}
$entityData[$typeID][] = [
'ID' => $multiFieldID,
'VALUE' => $value,
'VALUE_TYPE' => $valueTypeID,
'VALUE_EXTRA' => [
'COUNTRY_CODE' => $phoneCountryList[$multiFieldID] ?? ''
],
'VIEW_DATA' => \CCrmViewHelper::PrepareMultiFieldValueItemData(
$typeID,
[
'VALUE' => $value,
'VALUE_TYPE_ID' => $valueTypeID,
'VALUE_TYPE' => $multiFieldEntityTypes[$typeID][$valueTypeID] ?? null,
'CLASS_NAME' => $multiFieldViewClassNames[$typeID] ?? '',
],
[
'ENABLE_SIP' => false,
'SIP_PARAMS' => [
'ENTITY_TYPE_NAME' => CCrmOwnerType::ResolveName($entityTypeId),
'ENTITY_ID' => $elementID,
'AUTO_FOLD' => true,
],
]
)
];
}
}
}