Subversion Repositories eFlore/Applications.cel

Compare Revisions

Ignore whitespace Rev 3856 → Rev 3857

/branches/v3.01-serpe/jrest/services/NomsChampsEtendus.php
New file
0,0 → 1,91
<?php
// declare(encoding='UTF-8');
/**
* Fournit un référentiel relatif à l'utilisateur sur les noms ou les valeurs des champs étendus.
*
* @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 NomsChampsEtendus extends Cel {
 
/**
* Suivant le type de référentiel donné en paramètre, renvoie les liste de ses éléments
*
* uid[0] : "cle" ou "valeur"
* $_GET["cle"] : restreint la recherche sur les valeurs d'une certaine clé
* $_GET["recherche"] : cherche les noms qui commmencent selon la valeur
*/
public function getElement($uid){
if (!$this->paramObligatoiresSontPresents($uid)) {
return;
}
$_GET['recherche'] = str_replace('*', '%', $_GET['recherche']);
$referentiel = array();
 
if ($uid[0] == 'cle') {
$referentiel = $this->rechercherCles($_GET['recherche']);
} else if($uid[0] == 'valeur') {
$referentiel = $this->rechercherValeurs($_GET['cle'], $_GET['recherche']);
}
 
$this->envoyerJson($referentiel);
return true;
}
 
private function rechercherCles($recherche_cle) {
// Recherche dans clé du catalogue et les clés déja saisies par les utilisateurs.
// Si une clé est présente dans les deux tables, on privilégie celle du catalogue
// qui contient un label bien formé
$labelP = Cel::db()->proteger($recherche_cle."%");
$requete = "(SELECT cle, label, 'catalogue' ".
'FROM cel_catalogue_champs_etendus '.
"WHERE label LIKE $labelP ".
'AND groupe = 0 )'.
'UNION '.
"(SELECT DISTINCT cle, cle AS label, 'utilisateur' ".
'FROM cel_obs_etendues '.
"WHERE cle LIKE $labelP ".
'AND cle NOT IN (SELECT cle FROM cel_catalogue_champs_etendus) '.
') '.
' -- '.__FILE__.':'.__LINE__;
$resultat = Cel::db()->requeter($requete);
 
$referentiel = array();
foreach ($resultat as $valeur) {
$referentiel[$valeur['cle']] = $valeur['label'];
}
return $referentiel;
}
 
private function rechercherValeurs($cle, $recherche_valeur) {
$cleP = Cel::db()->proteger($cle);
$valeurP = Cel::db()->proteger($recherche_valeur.'%');
$requete = 'SELECT DISTINCT valeur '.
'FROM cel_obs_etendues '.
"WHERE cle = $cleP ".
"AND valeur LIKE $valeurP ".
' -- '.__FILE__.':'.__LINE__;
$resultats = Cel::db()->requeter($requete);
 
$referentiel = array();
foreach ($resultats as $valeur) {
if (trim($valeur['valeur']) != '') {
$referentiel[] = $valeur['valeur'];
}
}
return $referentiel;
}
 
private function paramObligatoiresSontPresents($uid) {
return (isset($uid[0]) && ($uid[0] == 'cle' || $uid[0] == 'valeur'));
}
}