Merge commit 'origin/fusionax' into account
authorFlorent Bruneau <florent.bruneau@polytechnique.org>
Fri, 6 Mar 2009 21:52:14 +0000 (22:52 +0100)
committerFlorent Bruneau <florent.bruneau@polytechnique.org>
Fri, 6 Mar 2009 21:52:14 +0000 (22:52 +0100)
htdocs/javascript/profile.js
include/geocoding.inc.php
modules/profile/page.inc.php
templates/geoloc/form.address.tpl

index 690c1ba..971b5b5 100644 (file)
@@ -306,6 +306,9 @@ function validGeoloc(id, geoloc)
         $('#addresses_' + id + '_cont').find('[name*=text]').val($('#addresses_' + id + '_cont').find('[name*=geoloc]').val());
         $('#addresses_' + id + '_cont').find('[name*=postalText]').val($('#addresses_' + id + '_cont').find('[name*=geocodedPostalText]').val());
     }
+    if (geoloc > 0) {
+        $('#addresses_' + id + '_cont').find("[name='addresses[" + id + "][geoloc]']").remove();
+    }
     $('#addresses_' + id + '_cont').find('[name*=text]').removeClass('error');
     $('#addresses_' + id + '_cont').find('[name*=geoloc_choice]').val(geoloc);
     $('.addresses_' + id + '_geoloc').remove();
index 8052070..cb27635 100644 (file)
@@ -95,7 +95,7 @@ class GMapsGeocoder extends Geocoder {
 
     public function getGeocodedAddress(array $address) {
         $address = $this->prepareAddress($address);
-        $textAddress = $address['text'];
+        $textAddress = $this->getTextToGeocode($address);
 
         // Try to geocode the full address.
         if (($geocodedData = $this->getPlacemarkForAddress($textAddress))) {
@@ -128,7 +128,7 @@ class GMapsGeocoder extends Geocoder {
         $address['accuracy'] = 0;
         return $address;
     }
+
     // Updates the address with the geocoded information from Google Maps. Also
     // cleans up the final informations.
     private function getUpdatedAddress(array $address, array $geocodedData, $extraLines) {
@@ -143,10 +143,6 @@ class GMapsGeocoder extends Geocoder {
         // We can now format the address.
         $this->formatAddress($address, $extraLines);
 
-        // Some entities in ISO 3166 are not countries, thus they have to be replaced
-        // by the country they belong to.
-        // TODO: fixCountry($address);
-
         return $address;
     }
 
@@ -388,6 +384,36 @@ class GMapsGeocoder extends Geocoder {
         return $postalText;
     }
 
+    // Trims the name of the real country if it contains an ISO 3166-1 non-country
+    // item. For that purpose, we compare the last but one line of the address with
+    // all non-country items of ISO 3166-1.
+    private function getTextToGeocode($address)
+    {
+        $res = XDB::iterator('SELECT  country, countryFR
+                                FROM  geoloc_countries
+                               WHERE  belongsTo IS NOT NULL');
+        $countries = array();
+        foreach ($res as $item) {
+            $countries[] = $item[0];
+            $countries[] = $item[1];
+        }
+        $textLines  = explode("\n", $address['text']);
+        $countLines = count($textLines);
+        $needle     = strtoupper(trim($textLines[$countLines - 2]));
+        $isPseudoCountry = false;
+        foreach ($countries as $country) {
+            if (strtoupper($country) == $needle) {
+                $isPseudoCountry = true;
+                break;
+            }
+        }
+
+        if ($isPseudoCountry) {
+            return $address['text'];
+        }
+        return implode("\n", array_slice($textLines, 0, -1));
+    }
+
     // Search for the lign from the given address that is the closest to the geocoded thoroughfareName
     // and replaces the corresponding lign in the geocoded text by it.
     static protected function fixStreetNumber(&$address)
index 8b33915..67fcbe7 100644 (file)
@@ -261,13 +261,11 @@ abstract class ProfileGeocoding implements ProfileSetting
                 $success = false;
             }
         }
-        if (isset($address['geoloc_choice'])) {
-            if ($address['geoloc_choice'] == 0) {
-                $mailer = new PlMailer('geoloc/geoloc.mail.tpl');
-                $mailer->assign('text', $address['text']);
-                $mailer->assign('geoloc', $address['geoloc']);
-                $mailer->send();
-            }
+        if (isset($address['geoloc_choice']) && ($address['geoloc_choice'] == 0)) {
+            $mailer = new PlMailer('geoloc/geoloc.mail.tpl');
+            $mailer->assign('text', $address['text']);
+            $mailer->assign('geoloc', $address['geoloc']);
+            $mailer->send();
             $gmapsGeocoder = new GMapsGeocoder();
             $address = $gmapsGeocoder->stripGeocodingFromAddress($address);
         }
index ed8414a..ea8b01a 100644 (file)
 {**************************************************************************}
 
 {if $address.geoloc}
-<div class="erreur {$prefid}_geoloc">
-  La geolocalisation n'a pas donné un résultat certain, valide la nouvelle adresse
-  ou modifie l'ancienne pour que ton adresse puisse être prise en compte.
+<div class="erreur center {$prefid}_geoloc">
+  Le géocodage n'a pas donné un résultat certain&nbsp;! Tu as le choix entre&nbsp;:
+</div>
+<div class="{$prefid}_geoloc">
+  <ul>
+    <li><a href="javascript:validGeoloc('{$id}', 0)" style="color: red">ton adresse (à gauche)</a>&nbsp;;</li>
+    <li><a href="javascript:validGeoloc('{$id}', 1)" style="color: green">notre suggestion (à droite)</a>&nbsp;;</li>
+    <li><a href="javascript:validGeoloc('{$id}', 2)"
+           title="Garder le texte de l'adresse que tu as renseignée tout en utilisant les informations trouvées par le géocodage pour te localiser sur le planisphère et dans lors d'une recherche dans l'annuaire.">
+      le texte de ton adresse localisé à l'endroit que nous te suggérons</a>.</li>
+  </ul>
 </div>
 {/if}
 
 {if $address.geoloc}
   <textarea cols="30" rows="4" class="valid {$prefid}_geoloc"
             name="{$prefname}[geoloc]">{$address.geoloc}</textarea>
-</div>
-<div class="center {$prefid}_geoloc">
-  <a href="javascript:validGeoloc('{$id}', 0)">Valider ta version</a>
-  &bull;
-  <a href="javascript:validGeoloc('{$id}', 1)">Valider la version géolocalisée</a>
 {/if}
 </div>
 {if $address.geoloc}