+
+ function getAddressDetails($bAll = false)
+ {
+ if (!$this->iPlaceID) return null;
+
+ $sLanguagePrefArraySQL = "ARRAY[".join(',',array_map("getDBQuoted", $this->aLangPrefOrder))."]";
+
+ $sSQL = "select *,get_name_by_language(name,$sLanguagePrefArraySQL) as localname from get_addressdata(".$this->iPlaceID.")";
+ if (!$bAll) $sSQL .= " WHERE isaddress OR type = 'country_code'";
+ $sSQL .= " order by rank_address desc,isaddress desc";
+
+ $aAddressLines = $this->oDB->getAll($sSQL);
+ if (PEAR::IsError($aAddressLines))
+ {
+ var_dump($aAddressLines);
+ exit;
+ }
+ return $aAddressLines;
+ }
+
+ function getAddressNames()
+ {
+ $aAddressLines = $this->getAddressDetails(false);;
+
+ $aAddress = array();
+ $aFallback = array();
+ $aClassType = getClassTypes();
+ foreach($aAddressLines as $aLine)
+ {
+ $bFallback = false;
+ $aTypeLabel = false;
+ if (isset($aClassType[$aLine['class'].':'.$aLine['type'].':'.$aLine['admin_level']])) $aTypeLabel = $aClassType[$aLine['class'].':'.$aLine['type'].':'.$aLine['admin_level']];
+ elseif (isset($aClassType[$aLine['class'].':'.$aLine['type']])) $aTypeLabel = $aClassType[$aLine['class'].':'.$aLine['type']];
+ elseif (isset($aClassType['boundary:administrative:'.((int)($aLine['rank_address']/2))]))
+ {
+ $aTypeLabel = $aClassType['boundary:administrative:'.((int)($aLine['rank_address']/2))];
+ $bFallback = true;
+ }
+ else
+ {
+ $aTypeLabel = array('simplelabel'=>'address'.$aLine['rank_address']);
+ $bFallback = true;
+ }
+ if ($aTypeLabel && ((isset($aLine['localname']) && $aLine['localname']) || (isset($aLine['housenumber']) && $aLine['housenumber'])))
+ {
+ $sTypeLabel = strtolower(isset($aTypeLabel['simplelabel'])?$aTypeLabel['simplelabel']:$aTypeLabel['label']);
+ $sTypeLabel = str_replace(' ','_',$sTypeLabel);
+ if (!isset($aAddress[$sTypeLabel]) || (isset($aFallback[$sTypeLabel]) && $aFallback[$sTypeLabel]) || $aLine['class'] == 'place')
+ {
+ $aAddress[$sTypeLabel] = $aLine['localname']?$aLine['localname']:$aLine['housenumber'];
+ }
+ $aFallback[$sTypeLabel] = $bFallback;
+ }
+ }
+ return $aAddress;
+ }
+