Rev 2458 | Blame | Compare with Previous | Last modification | View Log | RSS feed
<?php// declare(encoding='UTF-8');/*** Service gérant la completion des noms de lieux.** Cas d'utilisation :* Service completion nom de commune (plus tard de lieu en général)** 1 : L'application recoit un debut de nom de lieu* 2 : Si la longueur du prefixe est > 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 <mathias@tela-botanica.org>* @author Jean-Pascal MILCENT <jpm@tela-botanica.org>* @author Aurelien PERONNET <aurelien@tela-botanica.org>* @license GPL v3 <http://www.gnu.org/licenses/gpl.txt>* @license CECILL v2 <http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt>* @copyright 1999-2014 Tela Botanica <accueil@tela-botanica.org>*/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']);}}