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