X-Git-Url: http://git.polytechnique.org/?a=blobdiff_plain;f=classes%2Fgeocoder.php;h=825b920af240f022189c7b34c07b79d4cd2c9cca;hb=d058a28521a1d2004eda0f64127cbc8a27f02c0e;hp=357891e58616e44fea6e700f9e31ef3808e96b09;hpb=12ddbc2037b16496dfb9d91c4f7091850146fcde;p=platal.git diff --git a/classes/geocoder.php b/classes/geocoder.php index 357891e..825b920 100644 --- a/classes/geocoder.php +++ b/classes/geocoder.php @@ -1,6 +1,6 @@ '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])) { - $res = XDB::query('SELECT id + $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, country) - VALUES ({?}, {?})', - $address->$areaName, $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 { - $address->$areaId = $res->fetchOneCell(); + // XXX: remove this once all areas have both nameLocal and name. + list($id, $name) = $res->fetchOneRow(); + if (is_null($name) && !is_null($address->$areaNameLocal)) { + XDB::execute('UPDATE ' . $databases[$area] . ' + SET nameLocal = {?} + WHERE id = {?}', + $address->$areaNameLocal, $id); + } + $address->$areaId = $id; } } elseif (empty($address->$areaId)) { $address->$areaId = null; @@ -64,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.