* @author Jean-Pascal MILCENT * @author Aurelien PERONNET * @license GPL v3 * @license CECILL v2 * @copyright 1999-2014 Tela Botanica */ 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')); } }