- Модуль: crm
- Путь к файлу: ~/bitrix/modules/crm/lib/entityrequisite.php
- Класс: Bitrix\Crm\EntityRequisite
- Вызов: EntityRequisite::entityListRequisiteExportDataFormatMultiline
public function entityListRequisiteExportDataFormatMultiline($requisiteExportData, $requisiteHeaders,
$options = array())
{
$result = 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_';
$exportType = (is_array($options) && isset($options['EXPORT_TYPE'])
&& ($options['EXPORT_TYPE'] === 'csv' || $options['EXPORT_TYPE'] === 'excel')) ?
$options['EXPORT_TYPE'] : 'csv';
$addressTypes = null;
foreach ($requisiteExportData as $entityId => $requisiteList)
{
$entityData = array();
// make empty row
$emptyRow = array();
foreach ($requisiteHeaders as $header)
$emptyRow[$header['id']] = '';
// format export data
foreach ($requisiteList as $requisiteFields)
{
$countryId = (int)$requisiteFields['PRESET_COUNTRY_ID'];
// make multiline groups
$groups = array();
$groups[] = array(
'type' => 'requisite',
'prefix' => $rqPrefix,
'elements' => array($requisiteFields),
'index' => array(),
'skipFields' => array(EntityRequisite::ADDRESS, 'BANK_DETAILS'),
'count' => 1
);
$elements = array();
if (is_array($requisiteFields[EntityRequisite::ADDRESS]))
{
if ($addressTypes === null)
{
$addressTypes = EntityAddressType::getAllDescriptions();
}
foreach ($requisiteFields[EntityRequisite::ADDRESS] as $addressTypeId => $address)
{
// format full address
$formatter = AddressFormatter::getSingleInstance();
$formatId = RequisiteAddressFormatter::getFormatByCountryId($countryId);
if ($exportType === 'excel')
{
$fullAddressValue = $formatter->formatTextMultilineSpecialchar($address, $formatId);
}
else
{
$fullAddressValue = $formatter->formatTextMultiline($address, $formatId);
}
unset($formatter, $formatId);
$element = array(
EntityRequisite::ADDRESS.'_TYPE' => isset($addressTypes[$addressTypeId]) ?
$addressTypes[$addressTypeId] : $addressTypeId,
EntityRequisite::ADDRESS => $fullAddressValue
);
foreach ($address as $addrFieldName => $addrFieldValue)
{
$element[EntityRequisite::ADDRESS.'_'.$addrFieldName] = $addrFieldValue;
}
$elements[] = $element;
unset($addrFieldName, $addrFieldValue, $element);
}
}
$groups[] = array(
'type' => 'address',
'prefix' => $rqPrefix,
'elements' => $elements,
'index' => array(),
'skipFields' => array(),
'count' => count($elements)
);
$elements = is_array($requisiteFields['BANK_DETAILS']) ? $requisiteFields['BANK_DETAILS'] : array();
$groups[] = array(
'type' => 'bankDetail',
'prefix' => $bdPrefix,
'elements' => $elements,
'index' => array(),
'skipFields' => array(),
'count' => count($elements)
);
unset($elements);
// get rows count for current requisite and fill each group's indexes
$rowCount = 0;
foreach ($groups as &$group)
{
if ($group['count'] > $rowCount)
$rowCount = $group['count'];
foreach (array_keys($group['elements']) as $key)
$group['index'][] = $key;
}
unset($group);
for ($i = 0; $i < $rowCount; $i++)
{
$rowData = $emptyRow;
foreach ($groups as $group)
{
if ($group['count'] > $i)
{
foreach ($group['elements'][$group['index'][$i]] as $fieldName => $value)
{
if (!in_array($fieldName, $group['skipFields'], true))
{
$headerId = $group['prefix'].$fieldName;
if(isset($rowData[$headerId]))
{
$rowData[$headerId] = $value;
}
else
{
$headerId .= '|'.$countryId;
if(isset($rowData[$headerId]))
$rowData[$headerId] = $value;
}
}
}
}
}
$entityData[] = array_values($rowData);
}
}
$result[$entityId] = $entityData;
}
return $result;
}