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