Temporarly removes gapps acces to phd and master.
[platal.git] / classes / geocoder.php
index 0808f4e..825b920 100644 (file)
@@ -1,6 +1,6 @@
 <?php
 /***************************************************************************
- *  Copyright (C) 2003-2010 Polytechnique.org                              *
+ *  Copyright (C) 2003-2011 Polytechnique.org                              *
  *  http://opensource.polytechnique.org/                                   *
  *                                                                         *
  *  This program is free software; you can redistribute it and/or modify   *
 abstract class Geocoder {
     // Geocodes @p the address, and returns the corresponding updated address.
     // Unknown key-value pairs available in the input map are retained as-is.
-    abstract public function getGeocodedAddress(Address &$address);
+    abstract public function getGeocodedAddress(Address $address);
 
     // Cleans the address from its geocoded data
-    abstract public function stripGeocodingFromAddress(Address &$address);
+    abstract public function stripGeocodingFromAddress(Address $address);
 
     // Updates geoloc_administrativeareas, geoloc_subadministrativeareas and
     // geoloc_localities databases with new geocoded data and returns the
     // corresponding id.
-    static public function getAreaId(Address &$address, $area)
+    static public function getAreaId(Address $address, $area)
     {
         static $databases = array(
             'administrativeArea'    => 'geoloc_administrativeareas',
             'subAdministrativeArea' => 'geoloc_subadministrativeareas',
             'locality'              => 'geoloc_localities',
         );
+        static $extras = array(
+            'subAdministrativeArea' => array(
+                'field' => 'administrativearea',
+                'name'  => 'administrativeAreaName'
+            )
+        );
 
         $areaName = $area . 'Name';
         $areaNameLocal = $areaName . 'Local';
         $areaId = $area . 'Id';
         if (!is_null($address->$areaName) && isset($databases[$area])) {
+            $extra = (isset($extras[$area]) ? $extras[$area]['administrativeAreaName'] : false);
+
             $res = XDB::query('SELECT  id, nameLocal
                                  FROM  ' . $databases[$area] . '
                                 WHERE  name = {?}',
                               $address->$areaName);
             if ($res->numRows() == 0) {
-                XDB::execute('INSERT INTO  ' . $databases[$area] . ' (name, nameLocal, country)
-                                   VALUES  ({?}, {?}, {?})',
-                             $address->$areaName, $address->$areaNameLocal, $address->countryId);
+                XDB::execute('INSERT INTO  ' . $databases[$area] . ' (name, nameLocal, country' .
+                                           ($extra ? ', ' . $extras[$area]['field'] : '') . ')
+                                   VALUES  ({?}, {?}, {?}' . ($extra ? ', {?}' : '') . ')',
+                             $address->$areaName, $address->$areaNameLocal, $address->countryId,
+                             ($extra ? $address->$extra : null));
                 $address->$areaId = XDB::insertId();
             } else {
                 // XXX: remove this once all areas have both nameLocal and name.
@@ -73,14 +83,23 @@ abstract class Geocoder {
     // and the city name, within the limit of $limit number of lines.
     static public function getFirstLines($text, $postalCode, $limit)
     {
-        $textArray  = explode("\n", $text);
+        $text = str_replace("\r", '', $text);
+        $textArray = explode("\n", $text);
+        $linesNb = $limit;
+
         for ($i = 0; $i < count($textArray); ++$i) {
-            if ($i > $limit || strpos($textLine, $postalCode) !== false) {
-                $limit = $i;
+            if ($i > $limit || strpos($textArray[$i], $postalCode) !== false) {
+                $linesNb = $i;
                 break;
             }
         }
-        return implode("\n", array_slice($textArray, 0, $limit));
+        $firstLines = implode("\n", array_slice($textArray, 0, $linesNb));
+
+        // Adds empty lines to complete the $limit lines required.
+        for (; $i < $limit; ++$i) {
+            $firstLines .= "\n";
+        }
+        return $firstLines;
     }
 
     // Returns the number of non geocoded addresses for a user.