'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;
// 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.