Rev 1721 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | RSS feed
<?php/*** Service fournissant une liste de valeurs.* Encodage en entrée : utf8* Encodage en sortie : utf8** Cas d'utilisation :* /CoelValeurListe/id/1001 : retourne les valeurs de la liste d'identifiant 1001* /CoelValeurListe/ab/12 : retourne les valeurs de la liste dont l'abréviation vaut "12"* /CoelValeurListe/abv/FR.__ : retourne les valeurs dont l'abréviation équivaut (= LIKE) "FR.__"* * /CoelValeurListe/abv/FR.__/1078 : retourne les valeurs dont l'abréviation équivaut (= LIKE) "FR.__" pour la liste d'identifiant 1078.** @author Jean-Pascal MILCENT <jpm@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 2009*/Class CoelValeurListe extends Coel {/*** Méthode appelée avec une requête de type GET.*/function getElement($param = array()) {// Initialisation des variables$info = array();// Tableau associatif des paramêtres$requete = null;$requete_compte = null;// Pré traitement des paramêtres$p = $this->traiterParametresUrl(array('type', 'ceParent', 'abreviation', 'idValeur', "nom"), $param);// Construction de la requêteif (!isset($p['idValeur'])) {$p['idValeur'] = "'%'";}if (!isset($p['abreviation'])) {$p['abreviation'] = "'%'";}$p['type'] = trim($p['type'], "'");switch ($p['type']) {case 'identifiant' :// Nous avons un identifiant de liste, nous récupérons seulement les valeurs de cette liste$requete = (($this->distinct) ? 'SELECT DISTINCT' : 'SELECT').' * '.'FROM coel_meta_liste_valeur '."WHERE cmlv_id_valeur = {$p['idValeur']} ".'ORDER BY '.((!is_null($this->orderby)) ? $this->orderby : 'cmlv_id_valeur ASC').' ';$requete_compte = $requete;break;case 'id' :// Nous avons un identifiant de liste, nous récupérons seulement les valeurs de cette liste$requete = (($this->distinct) ? 'SELECT DISTINCT' : 'SELECT').' * '.'FROM coel_meta_liste_valeur '."WHERE cmlv_ce_parent = {$p['ceParent']} "."AND cmlv_id_valeur LIKE {$p['idValeur']} ".'ORDER BY '.((!is_null($this->orderby)) ? $this->orderby : 'cmlv_id_valeur ASC').' ';$requete_compte = $requete;$requete .= "LIMIT $this->start,$this->limit ";break;case 'idv' :// Nous avons un ou plusieurs identifiants de valeurs, nous les récupérons$p = $this->traiterParametresUrl(array('type', 'idValeur'), $param);$requete = (($this->distinct) ? 'SELECT DISTINCT' : 'SELECT').' * '.'FROM coel_meta_liste_valeur '.'WHERE cmlv_id_valeur IN ('.$this->traiterBddClauseIn($p['idValeur']).') '.'ORDER BY '.((!is_null($this->orderby)) ? $this->orderby : 'cmlv_id_valeur ASC').' '."LIMIT $this->start,$this->limit ";break;case 'ab' :// Nous avons une abréviation de liste, nous récupérons seulement les valeurs de cette liste$requete = (($this->distinct) ? 'SELECT DISTINCT' : 'SELECT').' v.* '.'FROM coel_meta_liste_valeur AS l LEFT JOIN coel_meta_liste_valeur AS v ON (l.cmlv_id_valeur = v.cmlv_ce_parent) '.'WHERE l.cmlv_ce_parent = 0 '."AND l.cmlv_abreviation LIKE {$p['abreviation']} ".'ORDER BY '.((!is_null($this->orderby)) ? $this->orderby : 'v.cmlv_id_valeur ASC').' ';$requete_compte = $requete;$requete .= "LIMIT $this->start,$this->limit ";break;case 'abv' :// Nous avons une abréviation de valeur, nous récupérons toutes les valeurs correspondantes$requete = (($this->distinct) ? 'SELECT DISTINCT' : 'SELECT').' * '.'FROM coel_meta_liste_valeur '."WHERE ";// spécial outre-mer françaiseif($p['abreviation'] == "'FR%'" && $p['ceParent'] == "'1078'") {$requete .= "cmlv_abreviation REGEXP '^(FR|RE|YT|GP|MQ|GF|NC)...$' ";} else {$requete .= "cmlv_abreviation LIKE {$p['abreviation']} ";}$requete .= isset($p['ceParent']) ? " AND cmlv_ce_parent = {$p['ceParent']} " : ''." AND cmlv_id_valeur LIKE {$p['idValeur']}".' ORDER BY '.((!is_null($this->orderby)) ? $this->orderby : 'cmlv_id_valeur ASC').' ';$requete_compte = $requete;$requete .= "LIMIT $this->start,$this->limit ";break;case 'nom' :// Nous avons une abréviation de valeur, nous récupérons toutes les valeurs correspondantes$requete = (($this->distinct) ? 'SELECT DISTINCT' : 'SELECT').' * '.'FROM coel_meta_liste_valeur '.'WHERE ';if (isset($p['nom']) && $p['nom'] != "") $requete .= "cmlv_nom LIKE {$p['nom']} AND ";if (isset($p['ceParent'])) $requete .= " cmlv_ce_parent = {$p['ceParent']} AND ";$requete .= " cmlv_id_valeur LIKE {$p['idValeur']} ".'ORDER BY '.((!is_null($this->orderby)) ? $this->orderby : 'cmlv_id_valeur ASC').' ';$requete_compte = $requete;$requete .= "LIMIT $this->start,$this->limit ";break;default :$this->messages[] = sprintf("Valeur '%s' pour le paramêtre 'type' inconnue (valeurs disponibles : id, ab, abv)!", $p['type']);}if (!is_null($requete)) {// Exécution de la requêtre SQL et test d'éventuelles erreurstry {$resultat = $this->bdd->query($requete)->fetchAll(PDO::FETCH_ASSOC);if ($resultat === false || count($resultat) == 0) {$this->messages[] = "La requête a retourné aucun résultat.";} else {// Traitement des donnéesif ($p['type'] == 'id') {$info['id'] = trim($p['ceParent'], "'");} else if ($p['type'] == 'identifiant') {$info['id'] = trim($p['idValeur'], "'");} else {$info['id'] = $resultat[0]['cmlv_ce_parent'];}$info['valeurs'] = $resultat;// gestion des abreviationsif ($p['abreviation'] != "'%'") {$info['abreviation'] = $p['abreviation'];}// si on a le nombre maximum de resultats on doit charger la page suivanteif (count($resultat) == $this->limit) {$info['getNextPage'] = true;} else {$info['getNextPage'] = false;}//Sélection du nombre totalif (!is_null($requete_compte)) {$nbElements = $this->bdd->query($requete_compte)->rowCount();$info['nbElements'] = $nbElements;}}} catch (PDOException $e) {$this->messages[] = sprintf($this->getTxt('sql_erreur'), $e->getFile(), $e->getLine(), $e->getMessage());}}// Envoie sur la sortie standard$this->envoyer($info);}}?>