• Модуль: crm
  • Путь к файлу: ~/bitrix/modules/crm/lib/requisite/importhelper.php
  • Класс: Bitrix\Crm\Requisite\ImportHelper
  • Вызов: ImportHelper::prepareEntityImportRequisiteInfo
static function prepareEntityImportRequisiteInfo($entityTypeId, $options = array())
{
	$activeCountryList = array();
	$requisiteHeaders = array();

	$rqPrefix = (is_array($options) && isset($options['PREFIX']) && is_string($options['PREFIX']))
		? $options['PREFIX']
		: (is_array($options) && isset($options['RQ_PREFIX']) && is_string($options['RQ_PREFIX'])
			? $options['RQ_PREFIX'] : 'RQ_');
	$bdPrefix = (is_array($options) && isset($options['BD_PREFIX']) && is_string($options['BD_PREFIX'])) ?
		$options['BD_PREFIX'] : 'BD_';

	$presetIds = array();
	if (is_array($options) && is_array($options['PRESET_IDS']) && !empty($options['PRESET_IDS']))
		$presetIds = $options['PRESET_IDS'];

	if (EntityRequisite::checkEntityType($entityTypeId))
	{
		$preset = EntityPreset::getSingleInstance();
		$opts = array('ARRANGE_BY_COUNTRY' => true);
		if (!empty($presetIds))
			$opts['FILTER_BY_PRESET_IDS'] = $presetIds;
		else
			$opts['FILTER_BY_COUNTRY_IDS'] = EntityRequisite::getAllowedRqFieldCountries();
		$fieldList = $preset->getSettingsFieldsOfPresets(\Bitrix\Crm\EntityPreset::Requisite, 'active', $opts);
		unset($opts);
		$activeCountries = array();
		$activeFieldsByCountry = array();
		foreach ($fieldList as $countryId => $fields)
		{
			foreach ($fields as $fieldName)
			{
				if (!isset($activeFieldsByCountry[$countryId][$fieldName]))
					$activeFieldsByCountry[$countryId][$fieldName] = true;
				if (!isset($activeCountries[$countryId]))
					$activeCountries[$countryId] = true;
			}
		}
		if (!empty($activeCountries))
		{
			// fill requisite headers
			$currentCountryId = EntityPreset::getCurrentCountryId();
			$countrySort = array();
			if (isset($activeCountries[$currentCountryId]))
			{
				$countrySort[] = $currentCountryId;
			}
			foreach (array_keys($activeCountries) as $countryId)
			{
				if ($countryId !== $currentCountryId)
					$countrySort[] = $countryId;
			}

			// requisite field types
			$requisite = EntityRequisite::getSingleInstance();
			$rqFieldTypeInfoMap = array();
			foreach ($requisite->getFormFieldsInfo() as $fieldName => $fieldInfo)
			{
				$rqFieldTypeInfoMap[$fieldName] = array(
					'type' => $fieldInfo['type'],
					'isUF' => $fieldInfo['isUF']
				);
			}

			// address field types
			$addrFieldTypeMap = array('TYPE' => 'integer');
			foreach (RequisiteAddress::getFieldsInfo() as $fieldName => $fieldInfo)
				$addrFieldTypeMap[$fieldName] = $fieldInfo['TYPE'];

			$rqFieldTitleMap = $requisite->getRqFieldTitleMap();
			$userFieldTitles = $requisite->getUserFieldsTitles();
			$countryList = EntityPreset::getCountryList();
			foreach (EntityRequisite::getBasicExportFieldsInfo() as $fieldName => $fieldInfo)
			{
				$fieldTitle = (is_array($fieldInfo) && isset($fieldInfo['title'])) ? $fieldInfo['title'] : '';
				if (!is_string($fieldTitle) || $fieldTitle == '')
					$fieldTitle = $fieldName;
				$fieldType = (is_array($fieldInfo) && isset($fieldInfo['type'])) ? $fieldInfo['type'] : 'string';
				$requisiteHeaders[] = array(
					'id' => $rqPrefix.$fieldName,
					'name' => GetMessage('CRM_REQUISITE_FILTER_PREFIX').': '.$fieldTitle,
					'group' => 'requisite',
					'field' => $fieldName,
					'fieldType' => $fieldType,
					'isUF' => false,
					'countryId' => 0
				);
			}
			$addressLabels = null;
			$addressFields = null;
			foreach ($countrySort as $countryId)
			{
				if (isset($countryList[$countryId]))
				{
					$activeCountryList[$countryId] = $countryList[$countryId];

					foreach (array_keys($activeFieldsByCountry[$countryId]) as $fieldName)
					{
						if (isset($userFieldTitles[$fieldName]))
						{
							$fieldTitle = $userFieldTitles[$fieldName];
						}
						else
						{
							$fieldTitle = isset($rqFieldTitleMap[$fieldName][$countryId]) ?
								$rqFieldTitleMap[$fieldName][$countryId] : '';
						}

						if (!is_string($fieldTitle) || $fieldTitle == '')
							$fieldTitle = $fieldName;

						$fieldType = 'string';
						$isUF = false;
						if (is_array($rqFieldTypeInfoMap[$fieldName]))
						{
							if (isset($rqFieldTypeInfoMap[$fieldName]['type']))
								$fieldType = $rqFieldTypeInfoMap[$fieldName]['type'];
							if (isset($rqFieldTypeInfoMap[$fieldName]['isUF']))
								$isUF = $rqFieldTypeInfoMap[$fieldName]['isUF'];
						}
						$requisiteHeaders[] = array(
							'id' => $rqPrefix."$fieldName|$countryId",
							'name' => GetMessage('CRM_REQUISITE_FILTER_PREFIX').
								' ('.$countryList[$countryId].')'.': '.$fieldTitle,
							'group' => 'requisite',
							'field' => $fieldName,
							'fieldType' => $fieldType,
							'isUF' => $isUF,
							'countryId' => $countryId
						);

						// headers for separated address fields
						if ($fieldName === EntityRequisite::ADDRESS)
						{
							$addressTypeLabel = GetMessage('CRM_REQUISITE_EXPORT_ADDRESS_TYPE_LABEL');
							if (!is_string($addressTypeLabel) || $addressTypeLabel == '')
								$addressTypeLabel = $fieldName.'_TYPE';
							if ($addressLabels === null)
							{
								$addressLabels = array_merge(
									array('TYPE' => $addressTypeLabel),
									RequisiteAddress::getShortLabels(RequisiteAddress::Primary)
								);
							}
							if ($addressFields === null)
							{
								$addressFields = array_merge(
									array('TYPE'),
									array_keys($requisite->getAddressFieldMap(RequisiteAddress::Primary))
								);
							}
							foreach ($addressFields as $addrFieldName)
							{
								if ($addrFieldName === 'COUNTRY_CODE' || $addrFieldName === 'LOC_ADDR_ID')
								{
									continue;
								}

								$requisiteHeaders[] = array(
									'id' => $rqPrefix."{$fieldName}_{$addrFieldName}|$countryId",
									'name' => GetMessage('CRM_REQUISITE_FILTER_PREFIX').
										' ('.$countryList[$countryId].')'.': '.$fieldTitle.' - '.
										ToLower($addressLabels[$addrFieldName]),
									'group' => 'address',
									'field' => $addrFieldName,
									'fieldType' => isset($addrFieldTypeMap[$addrFieldName]) ?
										$addrFieldTypeMap[$addrFieldName] : 'string',
									'isUF' => false,
									'countryId' => $countryId
								);
							}
						}
					}
				}
			}

			$bankDetail = EntityBankDetail::getSingleInstance();

			// bank detail field types
			$bdFieldTypeMap = array();
			foreach ($bankDetail->getFormFieldsInfo() as $fieldName => $fieldInfo)
				$bdFieldTypeMap[$fieldName] = $fieldInfo['type'];

			// fill bank detail headers
			foreach (EntityBankDetail::getBasicExportFieldsInfo() as $fieldName => $fieldInfo)
			{
				$fieldTitle = (is_array($fieldInfo) && isset($fieldInfo['title'])) ? $fieldInfo['title'] : '';
				if (!is_string($fieldTitle) || $fieldTitle == '')
					$fieldTitle = $fieldName;
				$fieldType = (is_array($fieldInfo) && isset($fieldInfo['type'])) ? $fieldInfo['type'] : 'string';
				$requisiteHeaders[] = array(
					'id' => $bdPrefix."$fieldName",
					'name' => GetMessage('CRM_BANK_DETAIL_FILTER_PREFIX').': '.$fieldTitle,
					'group' => 'bankDetail',
					'field' => $fieldName,
					'fieldType' => $fieldType,
					'isUF' => false,
					'countryId' => 0
				);
			}
			$bankDetailRqFieldCountryMap = $bankDetail->getRqFieldByCountry();
			$bankDetailRqFieldTitleMap = $bankDetail->getRqFieldTitleMap();
			foreach ($countrySort as $countryId)
			{
				if (!isset($bankDetailRqFieldCountryMap[$countryId]))
					continue;

				foreach ($bankDetailRqFieldCountryMap[$countryId] as $fieldName)
				{
					$fieldTitle = isset($bankDetailRqFieldTitleMap[$fieldName][$countryId]) ?
						$bankDetailRqFieldTitleMap[$fieldName][$countryId] : '';
					if (!is_string($fieldTitle) || $fieldTitle == '')
						$fieldTitle = $fieldName;
					$requisiteHeaders[] = array(
						'id' => $bdPrefix."$fieldName|$countryId",
						'name' => GetMessage('CRM_BANK_DETAIL_FILTER_PREFIX').
							' ('.$countryList[$countryId].')'.': '.$fieldTitle,
						'group' => 'bankDetail',
						'field' => $fieldName,
						'fieldType' => isset($bdFieldTypeMap[$fieldName]) ? $bdFieldTypeMap[$fieldName] : 'string',
						'isUF' => false,
						'countryId' => $countryId
					);
				}
			}
		}
	}

	$result = array(
		'REQUISITE_HEADERS' => $requisiteHeaders,
		'ACTIVE_COUNTRIES' => $activeCountryList
	);

	return $result;
}