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