X-Git-Url: http://git.polytechnique.org/?a=blobdiff_plain;ds=sidebyside;f=classes%2Fgmapsgeocoder.php;h=ec42adfac2557fbe1a4ac5189c48d56a8e5d0ffb;hb=c4f03937349bddfad25990239a825f8161615260;hp=f6a3dc1c2ce7a3a577d88bc128807ff97162758e;hpb=96c7ea5424f92c99017233d766c21c9737f4239e;p=platal.git diff --git a/classes/gmapsgeocoder.php b/classes/gmapsgeocoder.php index f6a3dc1..ec42adf 100644 --- a/classes/gmapsgeocoder.php +++ b/classes/gmapsgeocoder.php @@ -1,6 +1,6 @@ prepareAddress($address); $textAddress = $this->getTextToGeocode($address->text); + if (is_null($defaultLanguage)) { + $defaultLanguage = Platal::globals()->geocoder->gmaps_hl; + } // Try to geocode the full address. - if (($geocodedData = $this->getPlacemarkForAddress($textAddress))) { - $this->getUpdatedAddress($address, $geocodedData, null); + if (($geocodedData = $this->getPlacemarkForAddress($textAddress, $defaultLanguage))) { + $this->getUpdatedAddress($address, $geocodedData, null, $forceLanguage); return; } @@ -55,14 +58,14 @@ class GMapsGeocoder extends Geocoder { for ($i = max(1, $linesCount - self::MAX_GMAPS_RPC_CALLS + 1); $i < $linesCount; ++$i) { $extraLines = implode("\n", array_slice($addressLines, 0, $i)); $toGeocode = implode("\n", array_slice($addressLines, $i)); - if (($geocodedData = $this->getPlacemarkForAddress($toGeocode))) { - $this->getUpdatedAddress($address, $geocodedData, $extraLines); + if (($geocodedData = $this->getPlacemarkForAddress($toGeocode, $defaultLanguage))) { + $this->getUpdatedAddress($address, $geocodedData, $extraLines, $forceLanguage); return; } } } - public function stripGeocodingFromAddress(Address &$address) { + public function stripGeocodingFromAddress(Address $address) { $address->geocodedText = null; $address->geoloc_choice = null; $address->countryId = null; @@ -77,19 +80,15 @@ class GMapsGeocoder extends Geocoder { // Updates the address with the geocoded information from Google Maps. Also // cleans up the final informations. - private function getUpdatedAddress(Address &$address, array $geocodedData, $extraLines) { + private function getUpdatedAddress(Address $address, array $geocodedData, $extraLines, $forceLanguage) { $this->fillAddressWithGeocoding($address, $geocodedData, false); - $this->formatAddress($address, $extraLines); + $this->formatAddress($address, $extraLines, $forceLanguage); } // Retrieves the Placemark object (see #getPlacemarkFromJson()) for the @p // address, by querying the Google Maps API. Returns the array on success, // and null otherwise. - private function getPlacemarkForAddress($address, $defaultLanguage = null) { - if (is_null($defaultLanguage)) { - $defaultLanguage = Platal::globals()->geocoder->gmaps_hl; - } - + private function getPlacemarkForAddress($address, $defaultLanguage) { $url = $this->getGeocodingUrl($address, $defaultLanguage); $geoData = $this->getGeoJsonFromUrl($url); @@ -97,7 +96,7 @@ class GMapsGeocoder extends Geocoder { } // Prepares address to be geocoded - private function prepareAddress(Address &$address) { + private function prepareAddress(Address $address) { $address->text = preg_replace('/\s*\n\s*/m', "\n", trim($address->text)); } @@ -182,7 +181,7 @@ class GMapsGeocoder extends Geocoder { } // Fills the address with the geocoded data - private function fillAddressWithGeocoding(Address &$address, $geocodedData, $isLocal) { + private function fillAddressWithGeocoding(Address $address, $geocodedData, $isLocal) { // The geocoded address three is // Country -> AdministrativeArea -> SubAdministrativeArea -> Locality -> Thoroughfare // with all the possible shortcuts @@ -283,7 +282,7 @@ class GMapsGeocoder extends Geocoder { // Formats the text of the geocoded address using the unused data and // compares it to the given address. If they are too different, the user // will be asked to choose between them. - private function formatAddress(Address &$address, $extraLines) + private function formatAddress(Address $address, $extraLines, $forceLanguage) { if ($extraLines) { $address->geocodedText = $extraLines . "\n" . $address->geocodedText; @@ -291,10 +290,12 @@ class GMapsGeocoder extends Geocoder { if ($this->compareAddress($address)) { $address->geocodedText = null; - } else { - $languages = XDB::fetchOneCell('SELECT IF(ISNULL(gc1.belongsTo), gc1.languages, gc2.languages) + } elseif (!$forceLanguage) { + $languages = XDB::fetchOneCell('SELECT IF(ISNULL(gc1.belongsTo), gl1.language, gl2.language) FROM geoloc_countries AS gc1 + INNER JOIN geoloc_languages AS gl1 ON (gc1.iso_3166_1_a2 = gl1.iso_3166_1_a2) LEFT JOIN geoloc_countries AS gc2 ON (gc1.belongsTo = gc2.iso_3166_1_a2) + LEFT JOIN geoloc_languages AS gl2 ON (gc2.iso_3166_1_a2 = gl2.iso_3166_1_a2) WHERE gc1.iso_3166_1_a2 = {?}', $address->countryId); $toGeocode = substr($address->text, strlen($extraLines));