2, l'application retourne les 50 premieres lieux commencant par ce prefixe * * @internal Mininum PHP version : 5.2 * @category CEL * @package Services * @subpackage Auto-complétions * @version 0.1 * @author Mathias CHOUET * @author Jean-Pascal MILCENT * @author Aurelien PERONNET * @license GPL v3 * @license CECILL v2 * @copyright 1999-2014 Tela Botanica */ class LocationSearch extends Cel { public function getElement($uid){ $retour = array(); if (isset($uid[0])) { $retour = $this->executerRequeteLieu($uid[0]); } $this->envoyerJson($retour); return true; } public function getRessource() { print '[]'; return; } private function executerRequeteLieu($lieu) { $lieu_formate = $this->formaterChaineLieuPourRequete($lieu); $retour = array(); if ($this->estUneChaineRequeteValide($lieu_formate)) { $requete = 'SELECT DISTINCT nom, code '. 'FROM cel_zones_geo '. 'WHERE nom LIKE '.Cel::db()->proteger($lieu_formate.'%').' '. 'ORDER BY nom '. 'LIMIT 50 '. ' -- '.__FILE__.':'.__LINE__; $liste_lieux = Cel::db()->requeter($requete); if ($liste_lieux) { foreach ($liste_lieux as $lieu_trouve) { $retour[] = $this->formaterLigneResultat($lieu_trouve); } } } return $retour; } /** * Remplace les * par % pour faire des recherches floues * Remplace les + par _ (nginx envoie des "+" dans l'URL à la place des espaces) * Remplace les espaces et les - par _ car les noms de communes peuvent avoir des espaces ou des tirets * @param string $lieu * @return string le lieu formaté pour la recherche */ private function formaterChaineLieuPourRequete($lieu) { $lieu = ltrim($lieu); $lieu = preg_replace('/\*+/', '%', $lieu); $lieu = str_replace(['+', ' ', '-'], '_', $lieu); return $lieu; } private function estUneChaineRequeteValide($lieu) { return (strlen($lieu) > 0) && ($lieu != '%'); } private function formaterLigneResultat($ligne) { return array($ligne['nom'].' ('.substr(sprintf('%02s', $ligne['code']),0,2).')', $ligne['code']); } }