* @license GPL v3 * @license CECILL v2 * @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ête if (!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çaise if($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 erreurs try { $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ées if ($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 abreviations if (isset($p['abreviation']) && ($p['abreviation'] != "'%'")) { $info['abreviation'] = $p['abreviation']; } // si on a le nombre maximum de resultats on doit charger la page suivante if (count($resultat) == $this->limit) { $info['getNextPage'] = true; } else { $info['getNextPage'] = false; } //Sélection du nombre total if (!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); } } ?>