New file |
0,0 → 1,161 |
<?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ê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); |
} |
} |
?> |