Собственно, есть задача, выдергивать данные, в зависимости от конструктора, как правильно называется реализация этого класса, хелпер?
Есть объект типа Base_Fias_AddressObject (адресный объект ФИАС), также есть объект ФИАСа дом (Base_Fias_House) и два дополнительных аттрибута - house_custom, flat.
Нужно: вытягивать актуальный объект, а также дополинтельно из дерева ФИСА вытаскивать регион, город, район и т.п. (вообщем все уроня) , а также получить представление адреса, реализация:
Как правильно называть?) Хелпер
Есть объект типа Base_Fias_AddressObject (адресный объект ФИАС), также есть объект ФИАСа дом (Base_Fias_House) и два дополнительных аттрибута - house_custom, flat.
Нужно: вытягивать актуальный объект, а также дополинтельно из дерева ФИСА вытаскивать регион, город, район и т.п. (вообщем все уроня) , а также получить представление адреса, реализация:
Как правильно называть?) Хелпер
PHP:
<?php
class Base_Fias_Address_Helper
{
/**
* GUID региона (L1)
* @var string (UUID)
*/
public $region_guid;
/**
* Регион
* @var null|Base_Fias_AddressObject
*/
protected $region;
/**
* GUID автономии (L2, в документации - зарезирвировано, в БД ФИАС объектов с L2 нет
* @var string (UUID)
*/
public $auto_guid;
/**
* Автономии (L2, в документации - зарезирвировано, в БД ФИАС объектов с L2 нет)
* @var null|Base_Fias_AddressObject
*/
protected $auto;
/**
* GUID района (L3)
* @var string (UUID)
*/
public $area_guid;
/**
* Район
* @var null|Base_Fias_AddressObject
*/
protected $area;
/**
* GUID города (L4)
* @var string (UUID)
*/
public $city_guid;
/**
* Улица
* @var null|Base_Fias_AddressObject
*/
protected $city;
/**
* GUID внутрегородского района (L5)
* @var string (UUID)
*/
public $ctar_guid;
/**
* Внутрегородского район (L5)
* @var null|Base_Fias_AddressObject
*/
protected $ctar;
/**
* GUID населенного пункта (L6)
* @var string (UUID)
*/
public $place_guid;
/**
* Населенный пункт (L5)
* @var null|Base_Fias_AddressObject
*/
protected $place;
/**
* GUID улицы (L7 для улиц, L91 для улиц на дополнительных территориях)
* @var string
*/
public $street_guid;
/**
* Улица
* @var null|Base_Fias_AddressObject
*/
protected $street;
/**
* GUID дополнительной территории
* @var string
*/
public $inner_area_guid;
/**
* Дополнительная территория
* @var null|Base_Fias_AddressObject
*/
protected $inner_area;
/**
* Идентификатор дома
* @var string
*/
public $house_guid;
/**
* Дом
* @var null|Base_Fias_AddressObject
*/
protected $house;
/**
* Дом (указан вручную)
* @var string
*/
public $house_custom;
/**
* Квартида, дом, офис
* @var string
*/
protected $flat;
/**
* Полное наименование адреса
* @var string
*/
public $presintation;
/**
* Идентификатор объекта
* @var string
*/
protected $aoguid;
/**
* Базовые реализации методов выборки из БД ФИАС
* @var Base_Fias
*/
protected $fias;
/**
* Содержит экземляр для работы с БД
* @var Base_Database
*/
protected $database;
/**
* Конуструктор объекта
* @param string $guid
* @param string $house_guid
* @param string $house_custom
* @param string $flat
* @param Base_Fias $fias
* @param Base_Database $database
*/
public function __construct( $aoguid, $house_guid, $house_custom, $flat, Base_Fias $fias, Base_Database $database)
{
$this->aoguid = $aoguid;
$this->house_guid = $house_guid;
$this->house_custom = $house_custom;
$this->flat = $flat;
$this->fias = $fias;
$this->database = $database;
// По GUID адресного объекта получим актуальный адресный объект
$address_object = $fias->getActualAddressObjectUsingGuid($this->aoguid, $database);
if (!$address_object) {
return;
}
$presentation_parts = array();
// По Структуре адреса установим аттрибуты
foreach ( $fias->getActualAddressThread( $address_object, $this->database) as $node) {
if ($node->ACTSTATUS) {
// Адресный объект атуален
$actual_node = $node;
} else {
// Адресный объект устарел
$actual_node = $fias->getNextAddressObject( $node, $this->database);
}
switch ($node->AOLEVEL ) {
case 1:
// Регион
$this->region = $actual_node;
$this->region_guid = $actual_node->AOGUID;
break;
case 2:
// Автономия
$this->auto = $actual_node;
$this->auto_guid = $actual_node->AOGUID;
break;
case 3:
// Район
$this->area = $actual_node;
$this->area_guid = $actual_node->AOGUID;
break;
case 4:
// Город
$this->city = $actual_node;
$this->city_guid = $actual_node->AOGUID;
break;
case 5:
// Внутрегородской район
$this->ctar = $actual_node;
$this->ctar = $actual_node->AOGUID;
break;
case 6:
// Населенный пункт
$this->place = $actual_node;
$this->place_guid = $actual_node->AOGUID;
break;
case 7:
// Улица
$this->street = $actual_node;
$this->street_guid = $actual_node->AOGUID;
break;
case 90:
// Пополнительная територия
$this->inner_area = $actual_node;
$this->inner_area_guid= $actual_node->AOGUID;
break;
case 91:
// Улица на дополнитеьной территории
$this->street = $actual_node;
$this->street_guid = $actual_node->AOGUID;
break;
}
$presentation_parts[] = $actual_node->getPrintableName();
}
if ( $this->house_guid ) {
// Дом, выбран из БД ФИАС (дома)
$house = $this->fias->getActualHouseUsingGuid($this->house_guid, $this->database);
// Добавим в представление адреса
$presentation_parts[] = $house->getPrintableName();
} elseif ($this->house_custom) {
// Дом указан вручную
$presentation_parts[] = $this->house_custom;
}
if ($this->flat) {
// Добавим к представлению кв., офис. и т.п.
$presentation_parts[] = $this->flat;
}
$this->presintation = implode(", ", $presentation_parts);
}
public function getRegionGuid()
{
return $this->region_guid;
}
public function setRegionGuid($region_guid)
{
$this->region_guid = $region_guid;
return $this;
}
//....
}