Rev 1765 | Rev 2458 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | RSS feed
<?php
// ATTENTION ! Classe compatible uniquement avec nouveau format de bdd du cel //
/**
* Classe gérant la completion des noms de lieux
* Encodage en entrée : utf8
* Encodage en sortie : utf8
*
* @author David Delon <david.delon@clapas.net>
* @author Aurélien 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>
* @version $Id$
* @copyright © 2010, David Delon
*/
/**
* 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
**/
class LocationSearch extends Cel {
function getElement($uid){
$retour = array();
if (isset($uid[0])) {
$retour = $this->executerRequeteLieu($uid[0]);
}
$this->envoyerJson($retour);
return true;
}
function getRessource(){
print "[]";
return;
}
private function executerRequeteLieu($lieu) {
$lieu_formate = $this->formaterChaineLieuPourRequete($lieu);
$retour = array();
if ($this->estUneChaineRequeteValide($lieu_formate)) {
$requete_information_lieu = 'SELECT DISTINCT nom, code '.
'FROM cel_zones_geo '.
'WHERE '.
'nom LIKE '.Cel::db()->proteger($lieu_formate.'%').' '.
'ORDER BY nom LIMIT 50';
$liste_lieux = Cel::db()->requeter($requete_information_lieu);
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']);
}
}
/* +--Fin du code ---------------------------------------------------------------------------------------+
* $Log$
* Revision 1.4 2008-01-30 08:57:28 ddelon
* fin mise en place mygwt
*
* Revision 1.3 2007-05-21 18:13:03 ddelon
* Correction bug recherche commune du type "la canourgue"
*
*
*/
?>