Subversion Repositories eFlore/Applications.cel

Compare Revisions

Ignore whitespace Rev 769 → Rev 770

/trunk/jrest/services/LocationSearch.php
1,121 → 1,90
<?php
 
/**
 
David Delon david.delon@clapas.net 2007
 
Ce logiciel est r�gi par la licence CeCILL soumise au droit fran�ais et
respectant les principes de diffusion des logiciels libres. Vous pouvez
utiliser, modifier et/ou redistribuer ce programme sous les conditions
de la licence CeCILL telle que diffus�e par le CEA, le CNRS et l'INRIA
sur le site "http://www.cecill.info".
En contrepartie de l'accessibilit� au code source et des droits de copie,
de modification et de redistribution accord�s par cette licence, il n'est
offert aux utilisateurs qu'une garantie limit�e. Pour les m�mes raisons,
seule une responsabilit� restreinte p�se sur l'auteur du programme, le
titulaire des droits patrimoniaux et les conc�dants successifs.
 
A cet �gard l'attention de l'utilisateur est attir�e sur les risques
associ�s au chargement, � l'utilisation, � la modification et/ou au
d�veloppement et � la reproduction du logiciel par l'utilisateur �tant
donn� sa sp�cificit� de logiciel libre, qui peut le rendre complexe �
manipuler et qui le r�serve donc � des d�veloppeurs et des professionnels
avertis poss�dant des connaissances informatiques approfondies. Les
utilisateurs sont donc invit�s � charger et tester l'ad�quation du
logiciel � leurs besoins dans des conditions permettant d'assurer la
s�curit� de leurs syst�mes et ou de leurs donn�es et, plus g�n�ralement,
� l'utiliser et l'exploiter dans les m�mes conditions de s�curit�.
 
Le fait que vous puissiez acc�der � cet en-t�te signifie que vous avez
pris connaissance de la licence CeCILL, et que vous en avez accept� les
termes.
 
* Classe gérant l'acceptation de la licence utilisateur
* Encodage en entrée : utf8
* Encodage en sortie : utf8
*
* @author David Delon <david.delon@clapas.net>
* @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
*/
 
 
// in : utf8
// out : utf8
 
/*
*
*
 
/*
* LocationSearch.php
*
/**
* Cas d'utilisation :
* Service completion nom de commune
*
* 1 : L'application recoit un debut de nom de commune
* 2 : Si la longueur du prefix est >2, l'application retourne les 50 premieres communes commencant par ce prefix
*/
* 2 : Si la longueur du prefixe est > 2, l'application retourne les 50 premieres communes
* commencant par ce prefixe
**/
class LocationSearch extends Cel {
 
 
Class LocationSearch extends DBAccessor {
 
 
var $config;
 
function LocationSearch($config) {
 
$this->config=$config;
}
 
 
function getElement($uid){
 
$value=array();
 
if (isset($uid[0])) {
 
foreach ($uid as $element) {
$lieu=$lieu." ".$element;
}
$lieu=ltrim($lieu);
 
 
$lieu=ereg_replace('\*+','%',$lieu);
if ((strlen($lieu) > 0) && ($lieu != '%')) {
$DB=$this->connectDB($this->config,'database_cel');
$query="SELECT DISTINCT name, code FROM locations WHERE " .
"maj_name LIKE '".$DB->escapeSimple($lieu)."%' OR name LIKE '".$DB->escapeSimple($lieu)."%' ORDER BY name LIMIT 50";
}
else {
print "[]";
return ;
}
}
else {
print "[]";
return ;
}
 
 
$res =& $DB->query($query);
 
 
if (DB::isError($res)) {
die($res->getMessage());
}
 
while ($row =& $res->fetchrow(DB_FETCHMODE_ASSOC)) {
$value[]=array($row['name']." (".sprintf("%02s",$row['code']).")",$row['code']);
}
 
$output = json_encode($value);
print($output);
 
 
 
$retour = array();
if (isset($uid[0])) {
$retour = $this->executerRequeteLieu($uid[0]);
}
$output = json_encode($retour);
print($output);
}
 
function getRessource(){
 
print "[]";
return;
}
 
 
private function executerRequeteLieu($lieu) {
$lieu = $this->formaterChaineLieuPourRequete($lieu);
$retour = array();
if ($this->estUneChaineRequeteValide($lieu)) {
$requete_information_lieu = 'SELECT DISTINCT name, code '.
'FROM locations '.
'WHERE '.
'maj_name LIKE '.$this->proteger($lieu.'%').' '.
'OR name LIKE '.$this->proteger($lieu.'%').' '.
'ORDER BY name LIMIT 50';
$liste_lieux = $this->executerRequete($requete_information_lieu);
if($liste_lieux) {
foreach($liste_lieux as $lieu) {
$retour[] = $this->formaterLigneResultat($lieu);
}
}
}
return $retour;
}
private function formaterChaineLieuPourRequete($params) {
$lieu = '';
foreach ($params as $element) {
$lieu=$lieu." ".$element;
}
$lieu=ltrim($lieu);
$lieu=ereg_replace('\*+','%',$lieu);
return $lieu;
}
private function estUneChaineRequeteValide($lieu) {
return (strlen($lieu) > 0) && ($lieu != '%');
}
private function formaterLigneResultat($ligne) {
return array($ligne['name']." (".sprintf("%02s",$ligne['code']).")",$ligne['code']);
}
}
 
/* +--Fin du code ---------------------------------------------------------------------------------------+