• Модуль: location
  • Путь к файлу: ~/bitrix/modules/location/lib/infrastructure/datainstaller.php
  • Класс: BitrixLocationInfrastructureDataInstaller
  • Вызов: DataInstaller::installAreas
static function installAreas(): Result
{
	$result = new Result();

	$dataPath = Application::getDocumentRoot() . self::DEFAULT_DATA_PATH;
	if (!IODirectory::isDirectoryExists($dataPath))
	{
		return $result->addError(new Error('Default data directory not found'));
	}

	$areasFile = new IOFile(Path::combine($dataPath, 'areas.php'));
	if (!$areasFile->isExists())
	{
		return $result->addError(new Error('File with areas not found'));
	}

	$areas = include $areasFile->getPath();
	if (!is_array($areas))
	{
		return $result->addError(new Error('No data in areas file'));
	}

	$areaRepository = new AreaRepository();
	foreach ($areas as $area)
	{
		$existingArea = $areaRepository->findByTypeAndCode($area['TYPE'], $area['CODE']);
		if ($existingArea)
		{
			continue;
		}

		$areaFile = new IOFile(Path::combine($dataPath,  'areas', $area['FILE']));
		if (!$areaFile->isExists())
		{
			$result->addError(new Error('Area file not found'));
			continue;
		}

		$addResult = $areaRepository->store(
			(new Area())
				->setType($area['TYPE'])
				->setCode($area['CODE'])
				->setSort($area['SORT'])
				->setGeometry(
					Manager::makeConverter(Manager::FORMAT_GEOJSON)
						->read($areaFile->getContents())
				)
		);

		if (!$addResult->isSuccess())
		{
			$result->addErrors($addResult->getErrors());
		}
	}

	return $result;
}