Subversion Repositories eFlore/Applications.coel

Rev

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