Rev 2458 | Blame | Compare with Previous | Last modification | View Log | RSS feed
<?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'));}}