X-Git-Url: http://git.polytechnique.org/?a=blobdiff_plain;f=classes%2Fgeocoder.php;h=825b920af240f022189c7b34c07b79d4cd2c9cca;hb=fbf66f5e730def1c20bf36004f02f46c2c96bcfc;hp=0808f4efbd50a29b3a686c266ab2a4a651ed6158;hpb=f8a1899eceabb9648adb85071fab66d49d549337;p=platal.git diff --git a/classes/geocoder.php b/classes/geocoder.php index 0808f4e..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])) { + $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.