Adds adminarea to geoloac_subadministrativearea.
authorStéphane Jacob <sj@m4x.org>
Wed, 29 Dec 2010 01:28:00 +0000 (02:28 +0100)
committerStéphane Jacob <sj@m4x.org>
Wed, 29 Dec 2010 01:28:00 +0000 (02:28 +0100)
Signed-off-by: Stéphane Jacob <sj@m4x.org>
classes/geocoder.php
upgrade/1.0.2/07_areas.sql [new file with mode: 0644]

index 0808f4e..bec39cc 100644 (file)
@@ -39,19 +39,29 @@ abstract class Geocoder {
             '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.
diff --git a/upgrade/1.0.2/07_areas.sql b/upgrade/1.0.2/07_areas.sql
new file mode 100644 (file)
index 0000000..6a5b0a0
--- /dev/null
@@ -0,0 +1,7 @@
+ALTER TABLE geoloc_subadministrativeareas ADD COLUMN administrativearea VARCHAR(255) DEFAULT NULL;
+
+    UPDATE  geoloc_subadministrativeareas AS gs
+INNER JOIN  profile_addresses             AS pa ON (gs.id = pa.subAdministrativeAreaId)
+       SET  gs.administrativearea = pa.administrativeAreaId;
+
+-- vim:set syntax=mysql: