Subversion Repositories eFlore/Applications.coel

Rev

Rev 1714 | Rev 1724 | Go to most recent revision | Only display areas with differences | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

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