• Модуль: sale
  • Путь к файлу: ~/bitrix/modules/sale/lib/location/import/compiler/compiler.php
  • Класс: BitrixSaleLocationImportCompileris
  • Вызов: is::generateExportTreeUkrain
private function generateExportTreeUkrain()
{
	$this->eTreeDB->dropCodeIndex();
	$this->eTreeDB->restoreExportOffset();

	$cd2r = $this->getDataFromCSV('ukrain_kazakhstan', 'ukrain_district2region');

	$tree = array();

	$tree['NODES'][self::UKRAIN_YANDEX_CODE] = array(
		'NAME' => array(
			'RU' => array('NAME' => 'Украина'),
			'UA' => array('NAME' => 'Україна'),
			'EN' => array('NAME' => 'Ukraine')
		),
		'TYPE_CODE' => 'COUNTRY',
		'SOURCE' => self::SOURCE_YANDEX,
		'ID' => self::UKRAIN_YANDEX_CODE,
		'EXT' => array(
			'YAMARKET' => array(
				self::UKRAIN_YANDEX_CODE
			)
		)
	);

	foreach($cd2r as $line)
	{
		// add country district
		if(!isset($tree['NODES'][$line['CDID']]))
		{
			$tree['NODES'][$line['CDID']] = array(
				'NAME' => $line['CDNAME'],
				'TYPE_CODE' => 'COUNTRY_DISTRICT',
				'SOURCE' => self::SOURCE_YANDEX,
				'ID' => $line['CDID'],
				'PARENT_ID' => self::UKRAIN_YANDEX_CODE,
				'EXT' => array(
					'YAMARKET' => array(
						$line['CDID'] // country district id in file
					),
				)
			);
		}

		$tree['EDGES'][self::UKRAIN_YANDEX_CODE][$line['CDID']] = true;

		$regionId = 'r'.md5($line['RNAME']['UA']['NAME']);

		if($line['RNAME']['UA']['NAME'] == 'Севастополь, Місто' || $line['RNAME']['UA']['NAME'] == 'Автономна Республіка Крим')
			$source = self::SOURCE_UKRAIN;
		else
			$source = self::SOURCE_YANDEX;

		if($line['RNAME']['UA']['NAME'] == 'Севастополь, Місто')
		{
			$typeCode = 'SUBREGION';
		}
		else
		{
			$typeCode = 'REGION';
		}

		// add region
		if(!isset($tree['NODES'][$regionId]))
		{
			$tree['NODES'][$regionId] = array(
				'NAME' => $line['RNAME'],
				'TYPE_CODE' => $typeCode,
				'SOURCE' => $source,
				'ID' => $regionId,
				'PARENT_ID' => $line['CDID'],
			);

			if($source == self::SOURCE_YANDEX)
				$tree['NODES'][$regionId]['EXT']['YAMARKET'][] = $line['RID'];
		}

		$tree['EDGES'][$line['CDID']][$regionId] = true;
	}

	$res = $this->getDataFromCSV('ukrain_kazakhstan', 'ukrain');

	foreach($res as $line)
	{
		if($line['REGION'] == 'Автономна республіка Крим')
			$line['REGION'] = 'Автономна Республіка Крим';

		$line['REGION'] = $this->mb_str_replace('Місто', 'місто', $line['REGION']);
		$line['SUBREGION'] = $this->mb_str_replace('Місто', 'місто', $line['SUBREGION']);
		$line['CITY'] = $this->mb_str_replace('Місто', 'місто', $line['CITY']);

		$regionId = 'r'.md5($line['REGION']);
		$subRegionId = 'sr'.md5($line['SUBREGION']);
		$cityId = 'c'.md5($line['CITY']);

		if($line['REGION'] != 'Севастополь, Місто')
		{
			if(!isset($tree['NODES'][$subRegionId]))
			{
				$tree['NODES'][$subRegionId] = array(
					'NAME' => array('UA' => array('NAME' => $line['SUBREGION'])),
					'TYPE_CODE' => 'SUBREGION',
					'SOURCE' => self::SOURCE_UKRAIN,
					'ID' => $subRegionId,
					'PARENT_ID' => $regionId,
					'EXT' => array()
				);
				if(!isset($tree['EDGES'][$regionId][$subRegionId]))
					$tree['EDGES'][$regionId][$subRegionId] = true;
			}
		}

		if(!isset($tree['NODES'][$cityId]))
		{
			$tree['NODES'][$cityId] = array(
				'NAME' => array('UA' => array('NAME' => $line['CITY'])),
				'TYPE_CODE' => 'CITY',
				'SOURCE' => self::SOURCE_UKRAIN,
				'ID' => $cityId,
				'PARENT_ID' => $subRegionId,
				'EXT' => array()
			);
			if(!isset($tree['EDGES'][$subRegionId][$cityId]))
				$tree['EDGES'][$subRegionId][$cityId] = true;
		}
	}

	foreach($tree['EDGES'] as $k => $edges)
		$tree['EDGES'][$k] = array_keys($edges);

	$this->data['TREES']['UKRAIN'] = $tree;

	$this->generateExportTreePutUkrainBundle(array(self::UKRAIN_YANDEX_CODE));

	unset($this->data['TREES']['UKRAIN']);

	$this->eTreeDB->doneInsert();
}