Subversion Repositories eFlore/Applications.coel

Rev

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

Rev 1721 Rev 1723
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 '.
-
 
86
                "WHERE ";
-
 
87
 
-
 
88
            // spécial outre-mer française
-
 
89
            if($p['abreviation'] == "'FR%'" && $p['ceParent'] == "'1078'") {
-
 
90
                $requete .= "cmlv_abreviation REGEXP '^(FR|RE|YT|GP|MQ|GF|NC)...$' ";
85
							'FROM coel_meta_liste_valeur '.
91
            } else {
-
 
92
                $requete .= "cmlv_abreviation LIKE {$p['abreviation']} ";
-
 
93
            }
86
							"WHERE cmlv_abreviation LIKE {$p['abreviation']} ".
94
 
87
							(isset($p['ceParent']) ? "	AND cmlv_ce_parent = {$p['ceParent']} " : '').
95
            $requete .= isset($p['ceParent']) ? " AND cmlv_ce_parent = {$p['ceParent']} " : ''.
88
							" AND cmlv_id_valeur LIKE {$p['idValeur']}".
96
                " AND cmlv_id_valeur LIKE {$p['idValeur']}".
89
							' ORDER BY '.((!is_null($this->orderby)) ? $this->orderby  : 'cmlv_id_valeur ASC').' ';
97
                ' ORDER BY '.((!is_null($this->orderby)) ? $this->orderby  : 'cmlv_id_valeur ASC').' ';
90
				$requete_compte = $requete;
98
            $requete_compte = $requete;
91
				$requete .= "LIMIT $this->start,$this->limit ";
99
            $requete .= "LIMIT $this->start,$this->limit ";
92
			break;
100
			break;
93
			case 'nom' :
101
        case 'nom' :
94
				// Nous avons une abréviation de valeur, nous récupérons toutes les valeurs correspondantes
102
            // Nous avons une abréviation de valeur, nous récupérons toutes les valeurs correspondantes
95
				$requete = 	(($this->distinct) ? 'SELECT DISTINCT' : 'SELECT').' * '.
103
            $requete =	(($this->distinct) ? 'SELECT DISTINCT' : 'SELECT').' * '.
96
							'FROM coel_meta_liste_valeur '.
104
                'FROM coel_meta_liste_valeur '.
97
							'WHERE ';
105
                'WHERE ';
98
				if (isset($p['nom']) && $p['nom'] != "") $requete .= "cmlv_nom LIKE {$p['nom']} AND ";
106
            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 ";
107
            if (isset($p['ceParent'])) $requete .= " cmlv_ce_parent = {$p['ceParent']} AND ";
100
				$requete .= " cmlv_id_valeur LIKE {$p['idValeur']} ".
108
            $requete .= " cmlv_id_valeur LIKE {$p['idValeur']} ".
101
				'ORDER BY '.((!is_null($this->orderby)) ? $this->orderby  : 'cmlv_id_valeur ASC').' ';
109
				'ORDER BY '.((!is_null($this->orderby)) ? $this->orderby  : 'cmlv_id_valeur ASC').' ';
102
				$requete_compte = $requete;
110
            $requete_compte = $requete;
103
				$requete .= "LIMIT $this->start,$this->limit ";
111
            $requete .= "LIMIT $this->start,$this->limit ";
104
			break;
112
			break;
105
			default :
113
        default :
106
				$this->messages[] = sprintf("Valeur '%s' pour le paramêtre 'type' inconnue (valeurs disponibles : id, ab, abv)!", $p['type']);
114
            $this->messages[] = sprintf("Valeur '%s' pour le paramêtre 'type' inconnue (valeurs disponibles : id, ab, abv)!", $p['type']);
107
		}
115
		}
108
 
116
 
109
		if (!is_null($requete)) {
117
		if (!is_null($requete)) {
110
			// Exécution de la requêtre SQL et test d'éventuelles erreurs
118
			// Exécution de la requêtre SQL et test d'éventuelles erreurs
111
			try {
119
			try {
112
				$resultat = $this->bdd->query($requete)->fetchAll(PDO::FETCH_ASSOC);				
120
				$resultat = $this->bdd->query($requete)->fetchAll(PDO::FETCH_ASSOC);				
113
				if ($resultat === false || count($resultat) == 0) {
121
				if ($resultat === false || count($resultat) == 0) {
114
					$this->messages[] = "La requête a retourné aucun résultat.";
122
					$this->messages[] = "La requête a retourné aucun résultat.";
115
				} else {
123
				} else {
116
					// Traitement des données
124
					// Traitement des données
117
					if ($p['type'] == 'id') {
125
					if ($p['type'] == 'id') {
118
						$info['id'] = trim($p['ceParent'], "'");
126
						$info['id'] = trim($p['ceParent'], "'");
119
					} else if ($p['type'] == 'identifiant') {
127
					} else if ($p['type'] == 'identifiant') {
120
						$info['id'] = trim($p['idValeur'], "'");
128
						$info['id'] = trim($p['idValeur'], "'");
121
					} else {
129
					} else {
122
						$info['id'] = $resultat[0]['cmlv_ce_parent'];
130
						$info['id'] = $resultat[0]['cmlv_ce_parent'];
123
					}
131
					}
124
					$info['valeurs'] = $resultat;
132
					$info['valeurs'] = $resultat;
125
					
133
					
126
					// gestion des abreviations
134
					// gestion des abreviations
127
					if ($p['abreviation'] != "'%'") {
135
					if ($p['abreviation'] != "'%'") {
128
						$info['abreviation'] = $p['abreviation'];
136
						$info['abreviation'] = $p['abreviation'];
129
					}
137
					}
130
					
138
					
131
					// si on a le nombre maximum de resultats on doit charger la page suivante
139
					// si on a le nombre maximum de resultats on doit charger la page suivante
132
					if (count($resultat) == $this->limit) {
140
					if (count($resultat) == $this->limit) {
133
						$info['getNextPage'] = true;
141
						$info['getNextPage'] = true;
134
					} else {
142
					} else {
135
						$info['getNextPage'] = false;
143
						$info['getNextPage'] = false;
136
					}
144
					}
137
					
145
					
138
					//Sélection du nombre total
146
					//Sélection du nombre total
139
					if (!is_null($requete_compte)) {
147
					if (!is_null($requete_compte)) {
140
						$nbElements = $this->bdd->query($requete_compte)->rowCount();
148
						$nbElements = $this->bdd->query($requete_compte)->rowCount();
141
						$info['nbElements'] = $nbElements;
149
						$info['nbElements'] = $nbElements;
142
					}
150
					}
143
				}
151
				}
144
			} catch (PDOException $e) {
152
			} catch (PDOException $e) {
145
				$this->messages[] = sprintf($this->getTxt('sql_erreur'), $e->getFile(), $e->getLine(), $e->getMessage());
153
				$this->messages[] = sprintf($this->getTxt('sql_erreur'), $e->getFile(), $e->getLine(), $e->getMessage());
146
			}
154
			}
147
		}
155
		}
148
 
156
 
149
		// Envoie sur la sortie standard
157
		// Envoie sur la sortie standard
150
		$this->envoyer($info);
158
		$this->envoyer($info);
151
	}
159
	}
152
}
160
}
153
?>
161
?>