Subversion Repositories eFlore/Applications.coel

Rev

Rev 1497 | Rev 1707 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
1497 jpm 1
<?php
2
/**
3
 * Service fournissant une liste de valeurs.
4
 * Encodage en entrée : utf8
5
 * Encodage en sortie : utf8
6
 *
7
 * Cas d'utilisation :
8
 * /CoelValeurListe/id/1001 : retourne les valeurs de la liste d'identifiant 1001
9
 * /CoelValeurListe/ab/12 : retourne les valeurs de la liste dont l'abréviation vaut "12"
10
 * /CoelValeurListe/abv/FR.__ : retourne les valeurs dont l'abréviation équivaut (= LIKE) "FR.__"
11
 * * /CoelValeurListe/abv/FR.__/1078 : retourne les valeurs dont l'abréviation équivaut (= LIKE) "FR.__" pour la liste d'identifiant 1078.
12
 *
13
 * @author Jean-Pascal MILCENT <jpm@tela-botanica.org>
14
 * @license GPL v3 <http://www.gnu.org/licenses/gpl.txt>
15
 * @license CECILL v2 <http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt>
16
 * @version $Id$
17
 * @copyright 2009
18
 */
19
Class CoelValeurListe extends Coel {
20
 
21
	/**
22
	 * Méthode appelée avec une requête de type GET.
23
	 */
24
	function getElement($param = array()) {
25
		// Initialisation des variables
26
		$info = array();// Tableau associatif des paramêtres
27
		$requete = null;
28
		$requete_compte = null;
29
 
30
		// Pré traitement des paramêtres
31
		$p = $this->traiterParametresUrl(array('type', 'ceParent', 'abreviation', 'idValeur', "nom"), $param);
32
 
33
		// Construction de la requête
34
		if (!isset($p['idValeur']))	{
35
			$p['idValeur'] = "'%'";
36
		}
37
 
38
		if (!isset($p['abreviation']))	{
39
			$p['abreviation'] = "'%'";
40
		}
41
 
42
		$p['type'] = trim($p['type'], "'");
43
		switch ($p['type']) {
44
			case 'identifiant' :
45
				// Nous avons un identifiant de liste, nous récupérons seulement les valeurs de cette liste
46
				$requete = 	(($this->distinct) ? 'SELECT DISTINCT' : 'SELECT').' * '.
47
							'FROM coel_meta_liste_valeur '.
48
							"WHERE cmlv_id_valeur = {$p['idValeur']} ".
49
							'ORDER BY '.((!is_null($this->orderby)) ? $this->orderby  : 'cmlv_id_valeur ASC').' ';
50
				$requete_compte = $requete;
51
			break;
52
			case 'id' :
53
				// Nous avons un identifiant de liste, nous récupérons seulement les valeurs de cette liste
54
				$requete = 	(($this->distinct) ? 'SELECT DISTINCT' : 'SELECT').' * '.
55
							'FROM coel_meta_liste_valeur '.
56
							"WHERE cmlv_ce_parent = {$p['ceParent']} ".
1594 aurelien 57
							"AND cmlv_id_valeur LIKE {$p['idValeur']} ".
1497 jpm 58
							'ORDER BY '.((!is_null($this->orderby)) ? $this->orderby  : 'cmlv_id_valeur ASC').' ';
59
				$requete_compte = $requete;
60
				$requete .= "LIMIT $this->start,$this->limit ";
61
			break;
62
			case 'idv' :
63
				// Nous avons un ou plusieurs identifiants de valeurs, nous les récupérons
64
				$p = $this->traiterParametresUrl(array('type', 'idValeur'), $param);
65
 
66
				$requete = 	(($this->distinct) ? 'SELECT DISTINCT' : 'SELECT').' * '.
67
							'FROM coel_meta_liste_valeur '.
68
							'WHERE cmlv_id_valeur IN ('.$this->traiterBddClauseIn($p['idValeur']).') '.
69
							'ORDER BY '.((!is_null($this->orderby)) ? $this->orderby  : 'cmlv_id_valeur ASC').' '.
70
							"LIMIT $this->start,$this->limit ";
71
			break;
72
			case 'ab' :
73
				// Nous avons une abréviation de liste, nous récupérons seulement les valeurs de cette liste
74
				$requete = 	(($this->distinct) ? 'SELECT DISTINCT' : 'SELECT').' v.* '.
75
							'FROM coel_meta_liste_valeur AS l LEFT JOIN coel_meta_liste_valeur AS v ON (l.cmlv_id_valeur = v.cmlv_ce_parent) '.
76
							'WHERE l.cmlv_ce_parent = 0 '.
77
							"AND l.cmlv_abreviation LIKE {$p['abreviation']} ".
78
							'ORDER BY '.((!is_null($this->orderby)) ? $this->orderby  : 'v.cmlv_id_valeur ASC').' ';
79
				$requete_compte = $requete;
80
				$requete .= "LIMIT $this->start,$this->limit ";
81
			break;
82
			case 'abv' :
83
				// Nous avons une abréviation de valeur, nous récupérons toutes les valeurs correspondantes
84
				$requete = 	(($this->distinct) ? 'SELECT DISTINCT' : 'SELECT').' * '.
85
							'FROM coel_meta_liste_valeur '.
86
							"WHERE cmlv_abreviation LIKE {$p['abreviation']} ".
87
							(isset($p['ceParent']) ? "	AND cmlv_ce_parent = {$p['ceParent']} " : '').
88
							"AND cmlv_id_valeur LIKE {$p['idValeur']}".
89
							'ORDER BY '.((!is_null($this->orderby)) ? $this->orderby  : 'cmlv_id_valeur ASC').' ';
90
				$requete_compte = $requete;
91
				$requete .= "LIMIT $this->start,$this->limit ";
92
			break;
93
			case 'nom' :
94
				// Nous avons une abréviation de valeur, nous récupérons toutes les valeurs correspondantes
95
				$requete = 	(($this->distinct) ? 'SELECT DISTINCT' : 'SELECT').' * '.
96
							'FROM coel_meta_liste_valeur '.
97
							'WHERE ';
1594 aurelien 98
				if (isset($p['nom']) && $p['nom'] != "") $requete .= "cmlv_nom LIKE {$p['nom']} AND ";
1497 jpm 99
				if (isset($p['ceParent'])) $requete .= " cmlv_ce_parent = {$p['ceParent']} AND ";
100
				$requete .= " cmlv_id_valeur LIKE {$p['idValeur']} ".
101
				'ORDER BY '.((!is_null($this->orderby)) ? $this->orderby  : 'cmlv_id_valeur ASC').' ';
102
				$requete_compte = $requete;
103
				$requete .= "LIMIT $this->start,$this->limit ";
104
			break;
105
			default :
106
				$this->messages[] = sprintf("Valeur '%s' pour le paramêtre 'type' inconnue (valeurs disponibles : id, ab, abv)!", $p['type']);
107
		}
108
 
109
		if (!is_null($requete)) {
110
			// Exécution de la requêtre SQL et test d'éventuelles erreurs
111
			try {
1594 aurelien 112
				$resultat = $this->bdd->query($requete)->fetchAll(PDO::FETCH_ASSOC);
1497 jpm 113
				if ($resultat === false) {
114
					$this->messages[] = "La requête a retourné aucun résultat.";
115
				} else {
116
					// Traitement des données
117
					if ($p['type'] == 'id') {
118
						$info['id'] = trim($p['ceParent'], "'");
119
					} else if ($p['type'] == 'identifiant') {
120
						$info['id'] = trim($p['idValeur'], "'");
121
					} else {
122
						$info['id'] = $resultat[0]['cmlv_ce_parent'];
123
					}
124
					$info['valeurs'] = $resultat;
125
 
126
					// gestion des abreviations
127
					if ($p['abreviation'] != "'%'") {
128
						$info['abreviation'] = $p['abreviation'];
129
					}
130
 
131
					// si on a le nombre maximum de resultats on doit charger la page suivante
132
					if (count($resultat) == $this->limit) {
133
						$info['getNextPage'] = true;
134
					} else {
135
						$info['getNextPage'] = false;
136
					}
137
 
138
					//Sélection du nombre total
139
					if (!is_null($requete_compte)) {
140
						$nbElements = $this->bdd->query($requete_compte)->rowCount();
141
						$info['nbElements'] = $nbElements;
142
					}
143
				}
144
			} catch (PDOException $e) {
145
				$this->messages[] = sprintf($this->getTxt('sql_erreur'), $e->getFile(), $e->getLine(), $e->getMessage());
146
			}
147
		}
148
 
149
		// Envoie sur la sortie standard
150
		$this->envoyer($info);
151
	}
152
}
153
?>