X-Git-Url: http://git.polytechnique.org/?a=blobdiff_plain;f=classes%2Fgeocoder.php;h=f404304e1e3322b908c6767c8096233f08bf597a;hb=0f5f1b707d93b4dc8c5875c2129bb38fcd186563;hp=825b920af240f022189c7b34c07b79d4cd2c9cca;hpb=cb6e7db980fcc5fcdd2dad5aa645cfdf98057cd4;p=platal.git diff --git a/classes/geocoder.php b/classes/geocoder.php index 825b920..f404304 100644 --- a/classes/geocoder.php +++ b/classes/geocoder.php @@ -29,54 +29,26 @@ abstract class Geocoder { // Cleans the address from its geocoded data 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) + // Updates profile_addresses_components_enum, if needed, with new + // geocoded data and returns the corresponding id. + static public function getComponentId(array $component) { - 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); + $where_types = array(); + foreach ($component['types'] as $type) { + $where_types[] = XDB::format('FIND_IN_SET({?}, types)', $type); + } - $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' . - ($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. - 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; + $id = XDB::fetchOneCell('SELECT id + FROM profile_addresses_components_enum + WHERE short_name = {?} AND long_name = {?} AND ' . implode(' AND ', $where_types), + $component['short_name'], $component['long_name']); + if (is_null($id)) { + XDB::execute('INSERT INTO profile_addresses_components_enum (short_name, long_name, types) + VALUES ({?}, {?}, {?})', + $component['short_name'], $component['long_name'], implode(',', $component['types'])); + $id = XDB::insertId(); } + return $id; } // Returns the part of the text preceeding the line with the postal code @@ -101,24 +73,6 @@ abstract class Geocoder { } return $firstLines; } - - // Returns the number of non geocoded addresses for a user. - static public function countNonGeocoded($pid, $jobid = null, $type = Address::LINK_PROFILE) - { - $where = array(); - if (!is_null($pid)) { - $where[] = XDB::format('pid = {?}', $pid); - } - if (!is_null($jobid)) { - $where[] = XDB::format('jobid = {?}', $jobid); - } - $where[] = XDB::format('FIND_IN_SET({?}, type) AND accuracy = 0', $type); - $res = XDB::query('SELECT COUNT(*) - FROM profile_addresses - WHERE ' . implode(' AND ', $where), - $pid); - return $res->fetchOneCell(); - } } // vim:set et sw=4 sts=4 sws=4 foldmethod=marker enc=utf-8: