'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' . ($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; } } // Returns the part of the text preceeding the line with the postal code // and the city name, within the limit of $limit number of lines. static public function getFirstLines($text, $postalCode, $limit) { $text = str_replace("\r", '', $text); $textArray = explode("\n", $text); $linesNb = $limit; for ($i = 0; $i < count($textArray); ++$i) { if ($i > $limit || strpos($textArray[$i], $postalCode) !== false) { $linesNb = $i; break; } } $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. 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: ?>