Subversion Repositories eFlore/Applications.cel

Rev

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

Rev 487 Rev 489
1
<?php
1
<?php
2
/**
2
/**
3
 * Service fournissant une carte dynamique des obsertions publiques du CEL.
3
 * Service fournissant une carte dynamique des obsertions publiques du CEL.
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
 * /CelWidgetMap/Carte/Utilisateur : carte des observations publiques d'un utilisateur.
8
 * /CelWidgetMap/Carte/Utilisateur : carte des observations publiques d'un utilisateur.
9
 * /CelWidgetMap/Carte/Utilisateur/Projet : carte des observations publiques d'un utilisateur pour un projet.
9
 * /CelWidgetMap/Carte/Utilisateur/Projet : carte des observations publiques d'un utilisateur pour un projet.
10
 * /CelWidgetMap/Carte/Utilisateur/Projet/dept : carte des observations publiques d'un utilisateur pour un projet sur un département.
10
 * /CelWidgetMap/Carte/Utilisateur/Projet/dept : carte des observations publiques d'un utilisateur pour un projet sur un département.
11
 * /CelWidgetMap/Carte/Utilisateur/Projet/dept/num_taxon : carte des observations publiques d'un utilisateur pour un projet sur un département pour un taxon.
11
 * /CelWidgetMap/Carte/Utilisateur/Projet/dept/num_taxon : carte des observations publiques d'un utilisateur pour un projet sur un département pour un taxon.
12
 *
12
 *
13
 * Carte = Type de carte. Valeurs possible : defaut,
13
 * Carte = Type de carte. Valeurs possible : defaut,
14
 * Utilisateur = identifiant (= courriel) de l'utilisateur ou * pour tous les utilisateurs.
14
 * Utilisateur = identifiant (= courriel) de l'utilisateur ou * pour tous les utilisateurs.
15
 * Projet = mot-clé du projet
15
 * Projet = mot-clé du projet
16
 *
16
 *
17
 * @author Jean-Pascal MILCENT <jpm@clapas.org>
17
 * @author Jean-Pascal MILCENT <jpm@clapas.org>
18
 * @license GPL v3 <http://www.gnu.org/licenses/gpl.txt>
18
 * @license GPL v3 <http://www.gnu.org/licenses/gpl.txt>
19
 * @license CECILL v2 <http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt>
19
 * @license CECILL v2 <http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt>
20
 * @version $Id$
20
 * @version $Id$
21
 * @copyright © 2010, Jean-Pascal MILCENT
21
 * @copyright © 2010, Jean-Pascal MILCENT
22
 */
22
 */
23
class CelWidgetMap extends Cel {
23
class CelWidgetMap extends Cel {
24
	
24
	
25
	/**
25
	/**
26
	 * Méthode appelée avec une requête de type GET.
26
	 * Méthode appelée avec une requête de type GET.
27
	 */
27
	 */
28
	public function getElement($params) {
28
	public function getElement($params) {
29
		$retour = null;
29
		$retour = null;
30
		$parametres = $this->traiterParametres(array('carte'), $params, false);
30
		$parametres = $this->traiterParametres(array('carte'), $params, false);
31
		extract($parametres);
31
		extract($parametres);
32
		
32
		
33
		if (isset($carte)) {
33
		if (isset($carte)) {
34
			$methode = $this->traiterNomMethodeGet($carte);
34
			$methode = $this->traiterNomMethodeGet($carte);
35
			if (method_exists($this, $methode)) {
35
			if (method_exists($this, $methode)) {
36
				array_shift($params);
36
				array_shift($params);
37
				$retour = $this->$methode($params);
37
				$retour = $this->$methode($params);
38
			} else {
38
			} else {
39
				$this->messages[] = "Ce type de carte '$methode' n'est pas disponible.";
39
				$this->messages[] = "Ce type de carte '$methode' n'est pas disponible.";
40
			}
40
			}
41
		} else {
41
		} else {
42
			$this->messages[] = "Vous devez indiquer le type de carte.";
42
			$this->messages[] = "Vous devez indiquer le type de carte.";
43
		}
43
		}
44
 
44
 
45
		if (is_null($retour)) {
45
		if (is_null($retour)) {
46
			$info = 'Un problème est survenu : '.print_r($this->messages, true);
46
			$info = 'Un problème est survenu : '.print_r($this->messages, true);
47
			$this->envoyer($info);
47
			$this->envoyer($info);
48
		} else if ($retour['type'] == 'json') {
48
		} else if ($retour['type'] == 'json') {
49
			$this->envoyerJson($retour['variable_js'], $retour['donnees']);
49
			$this->envoyerJson($retour['variable_js'], $retour['donnees']);
-
 
50
		}  else if ($retour['type'] == 'jsonp') {
-
 
51
			$this->envoyerJsonp($retour['variable_js'], $retour['donnees']);
50
		} else {
52
		} else {
51
			$this->envoyer($retour, null, null, true);
53
			$this->envoyer($retour, null, null, true);
52
		}
54
		}
53
	}
55
	}
54
 
56
 
55
	/**
57
	/**
56
	 * Données de la carte par défaut
58
	 * Données de la carte par défaut
57
	 */
59
	 */
58
	public function getCarteDefautJson($params) {
60
	public function getCarteDefautJson($params) {
59
		$json = null;
61
		$json = null;
60
		$parametres = $this->traiterParametres(array('utilisateur', 'projet', 'dept', 'num_taxon'), $params, false);
62
		$parametres = $this->traiterParametres(array('utilisateur', 'projet', 'dept', 'num_taxon'), $params, false);
61
		extract($parametres);
63
		extract($parametres);
62
		
64
		
63
		$requete =  'SELECT sector, x_utm, y_utm '.
65
		$requete =  'SELECT sector, x_utm, y_utm '.
64
                    'FROM cel_inventory AS i '.
66
                    'FROM cel_inventory AS i '.
65
                    '   LEFT JOIN locations AS l '.
67
                    '   LEFT JOIN locations AS l '.
66
                    '       ON (l.name = i.location AND l.code = i.id_location) '.
68
                    '       ON (l.name = i.location AND l.code = i.id_location) '.
67
                    "WHERE transmission = '1' ".
69
                    "WHERE transmission = '1' ".
68
                    (isset($utilisateur) ? " AND identifiant = '$utilisateur' " : '' ).
70
                    (isset($utilisateur) ? " AND identifiant = '$utilisateur' " : '' ).
69
                    (isset($dept) ? " AND l.insee_code LIKE '$dept%' " : '').
71
                    (isset($dept) ? " AND l.insee_code LIKE '$dept%' " : '').
70
                    (isset($num_taxon) ? " AND num_taxon = '$num_taxon' " : '' ).
72
                    (isset($num_taxon) ? " AND num_taxon = '$num_taxon' " : '' ).
71
                    (isset($projet) ? ' AND ('.$this->getSqlWhereProjet($projet).') ' : '' );
73
                    (isset($projet) ? ' AND ('.$this->getSqlWhereProjet($projet).') ' : '' );
72
                    $resultats = $this->executerRequete($requete);
74
                    $resultats = $this->executerRequete($requete);
73
		
75
		
74
		// Traitement des résultats
76
		// Traitement des résultats
75
		$mm = array('min_x' => 0,'max_x' => 0,'min_y' => 0,'max_y' => 0);
77
		$mm = array('min_x' => 0,'max_x' => 0,'min_y' => 0,'max_y' => 0);
76
		$points = array();
78
		$points = array();
77
		foreach ($resultats as $enrg) {
79
		foreach ($resultats as $enrg) {
78
			$convertisseur = new gPoint();
80
			$convertisseur = new gPoint();
79
			$convertisseur->setUTM($enrg['x_utm'], $enrg['y_utm'], $enrg['sector']);
81
			$convertisseur->setUTM($enrg['x_utm'], $enrg['y_utm'], $enrg['sector']);
80
			$convertisseur->convertTMtoLL();
82
			$convertisseur->convertTMtoLL();
81
			$enrg['coord_x'] = $convertisseur->Lat();
83
			$enrg['coord_x'] = $convertisseur->Lat();
82
			$enrg['coord_y'] = $convertisseur->Long();
84
			$enrg['coord_y'] = $convertisseur->Long();
83
			$enrg['id'] = 'UTM:'.$enrg['x_utm'].'-'.$enrg['y_utm'].'-'.$enrg['sector'];
85
			$enrg['id'] = 'UTM:'.$enrg['x_utm'].'-'.$enrg['y_utm'].'-'.$enrg['sector'];
84
			
86
			
85
			$id = $enrg['coord_x'].'-'.$enrg['coord_y'];
87
			$id = $enrg['coord_x'].'-'.$enrg['coord_y'];
86
			if (!isset($points[$id])) {
88
			if (!isset($points[$id])) {
87
				$points[$id] = $enrg;
89
				$points[$id] = $enrg;
88
				$points[$id]['nbre'] = 1;
90
				$points[$id]['nbre'] = 1;
89
			} else {
91
			} else {
90
				$points[$id]['nbre']++;
92
				$points[$id]['nbre']++;
91
			}
93
			}
92
 
94
 
93
			// Détermination x et y min et max
95
			// Détermination x et y min et max
94
			$mm['min_x'] = ($mm['min_x'] > $enrg['coord_x']) ? $enrg['coord_x'] : $mm['min_x'];
96
			$mm['min_x'] = ($mm['min_x'] > $enrg['coord_x']) ? $enrg['coord_x'] : $mm['min_x'];
95
			$mm['min_y'] = ($mm['min_y'] > $enrg['coord_y']) ? $enrg['coord_y'] : $mm['min_y'];
97
			$mm['min_y'] = ($mm['min_y'] > $enrg['coord_y']) ? $enrg['coord_y'] : $mm['min_y'];
96
			$mm['max_x'] = ($mm['max_x'] < $enrg['coord_x']) ? $enrg['coord_x'] : $mm['max_x'];
98
			$mm['max_x'] = ($mm['max_x'] < $enrg['coord_x']) ? $enrg['coord_x'] : $mm['max_x'];
97
			$mm['max_y'] = ($mm['max_y'] < $enrg['coord_y']) ? $enrg['coord_y'] : $mm['max_y'];
99
			$mm['max_y'] = ($mm['max_y'] < $enrg['coord_y']) ? $enrg['coord_y'] : $mm['max_y'];
98
		}
100
		}
99
 
101
 
100
		// Post-traitement des résultats
102
		// Post-traitement des résultats
101
		$x_moyen = str_replace(',', '.', ($mm['max_x'] - $mm['min_x']));
103
		$x_moyen = str_replace(',', '.', ($mm['max_x'] - $mm['min_x']));
102
		$y_moyen = str_replace(',', '.', ($mm['max_y'] - $mm['min_y']));
104
		$y_moyen = str_replace(',', '.', ($mm['max_y'] - $mm['min_y']));
103
		$points = array_values($points);
105
		$points = array_values($points);
104
 
106
 
105
		// Création des infos du widget
107
		// Création des infos du widget
106
		$json['type'] = 'json';
108
		$json['type'] = (isset($this->formatRetour)) ? $this->formatRetour : 'json';
107
		$json['variable_js'] = 'obs';
109
		$json['variable_js'] = 'obs';
-
 
110
		
108
		$json['donnees']['points'] = $points;
111
		$json['donnees']['points'] = $points;
109
		$json['donnees']['nombre'] = count($points);
112
		$json['donnees']['nombre'] = count($points);
110
		$json['donnees']['centre_x'] = $x_moyen;
113
		$json['donnees']['centre_x'] = $x_moyen;
111
		$json['donnees']['centre_y'] = $y_moyen;
114
		$json['donnees']['centre_y'] = $y_moyen;
112
 
115
 
113
 
116
 
114
		//echo '<pre>'.print_r($json, true).'</pre>';
117
		//echo '<pre>'.print_r($json, true).'</pre>';
115
		return $json;
118
		return $json;
116
	}
119
	}
117
	
120
	
118
	/**
121
	/**
119
	 * Données de la carte par défaut
122
	 * Données de la carte par défaut
120
	 */
123
	 */
121
	public function getCartePreciseJson($params) {
124
	public function getCartePreciseJson($params) {
122
		$json = null;
125
		$json = null;
123
		$parametres = $this->traiterParametres(array('cle', 'utilisateur', 'projet', 'dept', 'num_taxon'), $params, false);
126
		$parametres = $this->traiterParametres(array('cle', 'utilisateur', 'projet', 'dept', 'num_taxon'), $params, false);
124
		extract($parametres);
127
		extract($parametres);
125
		
128
		
126
		// Vérification que la clé passée dans l'url est correspond à celle attendue
129
		// Vérification que la clé passée dans l'url est correspond à celle attendue
127
		if ($cle == $this->config['jrest_admin']['cleCarto']) {
130
		if ($cle == $this->config['jrest_admin']['cleCarto']) {
128
			$requete =  'SELECT sector, x_utm, y_utm, coord_x, coord_y, ref_geo '.
131
			$requete =  'SELECT sector, x_utm, y_utm, coord_x, coord_y, ref_geo '.
129
	                    'FROM cel_inventory AS i '.
132
	                    'FROM cel_inventory AS i '.
130
	                    '   LEFT JOIN locations AS l '.
133
	                    '   LEFT JOIN locations AS l '.
131
	                    '       ON (l.name = i.location AND l.code = i.id_location) '.
134
	                    '       ON (l.name = i.location AND l.code = i.id_location) '.
132
	                    "WHERE transmission = '1' ".
135
	                    "WHERE transmission = '1' ".
133
	                    (isset($utilisateur) ? " AND identifiant = '$utilisateur' " : '' ).
136
	                    (isset($utilisateur) ? " AND identifiant = '$utilisateur' " : '' ).
134
	                    (isset($dept) ? " AND l.insee_code LIKE '$dept%' " : '').
137
	                    (isset($dept) ? " AND l.insee_code LIKE '$dept%' " : '').
135
	                    (isset($num_taxon) ? " AND num_taxon = '$num_taxon' " : '' ).
138
	                    (isset($num_taxon) ? " AND num_taxon = '$num_taxon' " : '' ).
136
	                    (isset($projet) ? ' AND ('.$this->getSqlWhereProjet($projet).') ' : '' );
139
	                    (isset($projet) ? ' AND ('.$this->getSqlWhereProjet($projet).') ' : '' );
137
	                    $resultats = $this->executerRequete($requete);
140
	                    $resultats = $this->executerRequete($requete);
138
			
141
			
139
			// Traitement des résultats
142
			// Traitement des résultats
140
			$mm = array('min_x' => 0,'max_x' => 0,'min_y' => 0,'max_y' => 0);
143
			$mm = array('min_x' => 0,'max_x' => 0,'min_y' => 0,'max_y' => 0);
141
			$points = array();
144
			$points = array();
142
			foreach ($resultats as $enrg) {
145
			foreach ($resultats as $enrg) {
143
				$enrg['id'] = 'LngLat:'.$enrg['coord_y'].'-'.$enrg['coord_x'];
146
				$enrg['id'] = 'LngLat:'.$enrg['coord_y'].'-'.$enrg['coord_x'];
144
				if ($enrg['coord_x'] == '' && $enrg['coord_y'] == '' && $enrg['x_utm'] != '' && $enrg['y_utm'] != '') {
147
				if ($enrg['coord_x'] == '' && $enrg['coord_y'] == '' && $enrg['x_utm'] != '' && $enrg['y_utm'] != '') {
145
					$enrg['id'] = 'UTM:'.$enrg['x_utm'].'-'.$enrg['y_utm'].'-'.$enrg['sector'];
148
					$enrg['id'] = 'UTM:'.$enrg['x_utm'].'-'.$enrg['y_utm'].'-'.$enrg['sector'];
146
					
149
					
147
					$convertisseur = new gPoint();
150
					$convertisseur = new gPoint();
148
					$convertisseur->setUTM($enrg['x_utm'], $enrg['y_utm'], $enrg['sector']);
151
					$convertisseur->setUTM($enrg['x_utm'], $enrg['y_utm'], $enrg['sector']);
149
					$convertisseur->convertTMtoLL();
152
					$convertisseur->convertTMtoLL();
150
					$enrg['coord_x'] = $convertisseur->Lat();
153
					$enrg['coord_x'] = $convertisseur->Lat();
151
					$enrg['coord_y'] = $convertisseur->Long();
154
					$enrg['coord_y'] = $convertisseur->Long();
152
				}
155
				}
153
	
156
	
154
	
157
	
155
				$id = $enrg['coord_x'].'-'.$enrg['coord_y'];
158
				$id = $enrg['coord_x'].'-'.$enrg['coord_y'];
156
				if (!isset($points[$id])) {
159
				if (!isset($points[$id])) {
157
					$points[$id] = $enrg;
160
					$points[$id] = $enrg;
158
					$points[$id]['nbre'] = 1;
161
					$points[$id]['nbre'] = 1;
159
				} else {
162
				} else {
160
					$points[$id]['nbre']++;
163
					$points[$id]['nbre']++;
161
				}
164
				}
162
	
165
	
163
				// Détermination x et y min et max
166
				// Détermination x et y min et max
164
				$mm['min_x'] = ($mm['min_x'] > $enrg['coord_x']) ? $enrg['coord_x'] : $mm['min_x'];
167
				$mm['min_x'] = ($mm['min_x'] > $enrg['coord_x']) ? $enrg['coord_x'] : $mm['min_x'];
165
				$mm['min_y'] = ($mm['min_y'] > $enrg['coord_y']) ? $enrg['coord_y'] : $mm['min_y'];
168
				$mm['min_y'] = ($mm['min_y'] > $enrg['coord_y']) ? $enrg['coord_y'] : $mm['min_y'];
166
				$mm['max_x'] = ($mm['max_x'] < $enrg['coord_x']) ? $enrg['coord_x'] : $mm['max_x'];
169
				$mm['max_x'] = ($mm['max_x'] < $enrg['coord_x']) ? $enrg['coord_x'] : $mm['max_x'];
167
				$mm['max_y'] = ($mm['max_y'] < $enrg['coord_y']) ? $enrg['coord_y'] : $mm['max_y'];
170
				$mm['max_y'] = ($mm['max_y'] < $enrg['coord_y']) ? $enrg['coord_y'] : $mm['max_y'];
168
			}
171
			}
169
	
172
	
170
			// Post-traitement des résultats
173
			// Post-traitement des résultats
171
			$x_moyen = str_replace(',', '.', ($mm['max_x'] - $mm['min_x']));
174
			$x_moyen = str_replace(',', '.', ($mm['max_x'] - $mm['min_x']));
172
			$y_moyen = str_replace(',', '.', ($mm['max_y'] - $mm['min_y']));
175
			$y_moyen = str_replace(',', '.', ($mm['max_y'] - $mm['min_y']));
173
			$points = array_values($points);
176
			$points = array_values($points);
174
	
177
	
175
			// Création des infos du widget
178
			// Création des infos du widget
176
			$json['type'] = 'json';
179
			$json['type'] = 'json';
177
			$json['variable_js'] = 'obs';
180
			$json['variable_js'] = 'obs';
178
			$json['donnees']['points'] = $points;
181
			$json['donnees']['points'] = $points;
179
			$json['donnees']['nombre'] = count($points);
182
			$json['donnees']['nombre'] = count($points);
180
			$json['donnees']['centre_x'] = $x_moyen;
183
			$json['donnees']['centre_x'] = $x_moyen;
181
			$json['donnees']['centre_y'] = $y_moyen;
184
			$json['donnees']['centre_y'] = $y_moyen;
182
		}
185
		}
183
 
186
 
184
		//echo '<pre>'.print_r($json, true).'</pre>';
187
		//echo '<pre>'.print_r($json, true).'</pre>';
185
		return $json;
188
		return $json;
186
	}
189
	}
187
	
190
	
188
	/**
191
	/**
189
	 * Données pour l'affichage des obs d'une station
192
	 * Données pour l'affichage des obs d'une station
190
	 */
193
	 */
191
	public function getObservations($params) {
194
	public function getObservations($params) {
192
		$json = null;
195
		$json = null;
193
		$parametres = $this->traiterParametres(array('station', 'utilisateur', 'projet', 'dept', 'num_taxon'), $params, false);
196
		$parametres = $this->traiterParametres(array('station', 'utilisateur', 'projet', 'dept', 'num_taxon'), $params, false);
194
		extract($parametres);
197
		extract($parametres);
195
		
198
		
196
		// Récupération des coordonnées depuis l'id station
199
		// Récupération des coordonnées depuis l'id station
197
		//$this->debug[] = $station;
200
		//$this->debug[] = $station;
198
		list($type, $coord) = explode(':', $station);
201
		list($type, $coord) = explode(':', $station);
199
		if ($type == 'UTM') {
202
		if ($type == 'UTM') {
200
			list($x_utm, $y_utm, $secteur) = explode('-', $coord);
203
			list($x_utm, $y_utm, $secteur) = explode('-', $coord);
201
		} else if ($type == 'LngLat') {
204
		} else if ($type == 'LngLat') {
202
			list($coord_y, $coord_x) = explode('-', $coord);
205
			list($coord_y, $coord_x) = explode('-', $coord);
203
		}
206
		}
204
		
207
		
205
		// Récupération du filtre where pour les mots clés "projet"
208
		// Récupération du filtre where pour les mots clés "projet"
206
		if (isset($projet)) {
209
		if (isset($projet)) {
207
			$projet_sql = $this->getSqlWhereProjet($projet);
210
			$projet_sql = $this->getSqlWhereProjet($projet);
208
		}
211
		}
209
 
212
 
210
		$requete = 	'SELECT identifiant, nom_sel, nom_ret, num_nom_sel, num_nom_ret, num_taxon, famille, '.
213
		$requete = 	'SELECT identifiant, nom_sel, nom_ret, num_nom_sel, num_nom_ret, num_taxon, famille, '.
211
					'	lieudit, location, date_observation, milieu, commentaire, '.
214
					'	lieudit, location, date_observation, milieu, commentaire, '.
212
					'	sector, x_utm, y_utm, insee_code '.
215
					'	sector, x_utm, y_utm, insee_code '.
213
					'FROM cel_inventory AS i '.
216
					'FROM cel_inventory AS i '.
214
					'	LEFT JOIN locations AS l '.
217
					'	LEFT JOIN locations AS l '.
215
					'		ON (l.name = i.location AND l.code = i.id_location) '.
218
					'		ON (l.name = i.location AND l.code = i.id_location) '.
216
					"WHERE transmission = '1' ".
219
					"WHERE transmission = '1' ".
217
					(($type == 'UTM') ? "	AND (sector = '$secteur' AND x_utm = '$x_utm' AND y_utm = '$y_utm' ) " : '').
220
					(($type == 'UTM') ? "	AND (sector = '$secteur' AND x_utm = '$x_utm' AND y_utm = '$y_utm' ) " : '').
218
					(($type == 'LngLat') ? "	AND (coord_x = '$coord_x' AND coord_y = '$coord_y' ) " : '').
221
					(($type == 'LngLat') ? "	AND (coord_x = '$coord_x' AND coord_y = '$coord_y' ) " : '').
219
					(isset($utilisateur) ? " AND identifiant = '$utilisateur' " : '').
222
					(isset($utilisateur) ? " AND identifiant = '$utilisateur' " : '').
220
					(isset($dept) ? " AND l.insee_code LIKE '$dept%' " : '').
223
					(isset($dept) ? " AND l.insee_code LIKE '$dept%' " : '').
221
                    (isset($num_taxon) ? " AND num_taxon = '$num_taxon' " : '' ).
224
                    (isset($num_taxon) ? " AND num_taxon = '$num_taxon' " : '' ).
222
                    ((isset($projet) && $projet_sql != '') ? " AND ($projet_sql) " : '' );
225
                    ((isset($projet) && $projet_sql != '') ? " AND ($projet_sql) " : '' );
223
		//$this->debug[] = $requete;
226
		//$this->debug[] = $requete;
224
 
227
 
225
		$resultats = $this->executerRequete($requete);
228
		$resultats = $this->executerRequete($requete);
226
		
229
		
227
		// Post-traitement
230
		// Post-traitement
228
		if (is_array($resultats)) {
231
		if (is_array($resultats)) {
229
			$resultats = $this->nettoyerTableau($resultats);
232
			$resultats = $this->nettoyerTableau($resultats);
230
		}
233
		}
231
		
234
		
232
		return $resultats;
235
		return $resultats;
233
	}
236
	}
234
	
237
	
235
	/**
238
	/**
236
	 * Liste des taxons présents sur la carte
239
	 * Liste des taxons présents sur la carte
237
	 */
240
	 */
238
	public function getTaxons($params) {
241
	public function getTaxons($params) {
-
 
242
		$json = null;
-
 
243
		$parametres = $this->traiterParametres(array('utilisateur', 'projet', 'dept', 'num_taxon'), $params, false);
-
 
244
		extract($parametres);
-
 
245
		
-
 
246
		// Récupération du filtre where pour les mots clés "projet"
-
 
247
		if (isset($projet)) {
-
 
248
			$projet_sql = $this->getSqlWhereProjet($projet);
-
 
249
		}
-
 
250
 
-
 
251
		$requete = 	'SELECT nom_sel, num_nom_sel, nom_ret, num_nom_ret, num_taxon, famille '.
-
 
252
					'FROM cel_inventory AS i '.
-
 
253
					'	LEFT JOIN locations AS l '.
-
 
254
					'		ON (l.name = i.location AND l.code = i.id_location) '.
-
 
255
					"WHERE transmission = '1' ".
-
 
256
					(isset($utilisateur) ? " AND identifiant = '$utilisateur' " : '').
-
 
257
					(isset($dept) ? " AND l.insee_code LIKE '$dept%' " : '').
-
 
258
                    (isset($num_taxon) ? " AND num_taxon = '$num_taxon' " : '' ).
-
 
259
                    ((isset($projet) && $projet_sql != '') ? " AND ($projet_sql) " : '' );
-
 
260
		//$this->debug[] = $requete;
-
 
261
 
-
 
262
		$resultats = $this->executerRequete($requete);
-
 
263
		
-
 
264
		// Post-traitement
-
 
265
		if (is_array($resultats)) {
-
 
266
			$resultats = $this->nettoyerTableau($resultats);
-
 
267
		}
-
 
268
		
239
		
269
		return $resultats;
240
	}
270
	}
241
	
271
	
242
	/**
272
	/**
243
	 * Traitement de $projet pour construction du filtre dans la requête
273
	 * Traitement de $projet pour construction du filtre dans la requête
244
	 */
274
	 */
245
	private function getSqlWhereProjet($projet) {
275
	private function getSqlWhereProjet($projet) {
246
		$mot_cle_encode = $this->bdd->quote($this->encoderMotCle($projet));
276
		$mot_cle_encode = $this->bdd->quote($this->encoderMotCle($projet));
247
		
277
		
248
		// Construction de la requête
278
		// Construction de la requête
249
		$requete = 	'SELECT * '.
279
		$requete = 	'SELECT * '.
250
					'FROM cel_mots_cles_obs '.
280
					'FROM cel_mots_cles_obs '.
251
					"WHERE cmc_id_mot_cle_general = $mot_cle_encode ";
281
					"WHERE cmc_id_mot_cle_general = $mot_cle_encode ";
252
		$elements_projet = $this->executerRequete($requete);
282
		$elements_projet = $this->executerRequete($requete);
253
		
283
		
254
		$requete_projet = array();
284
		$requete_projet = array();
255
		if ($elements_projet != false && count($elements_projet) > 0) {
285
		if ($elements_projet != false && count($elements_projet) > 0) {
256
			// Pré-construction du where de la requête
286
			// Pré-construction du where de la requête
257
			$tpl_where = '(mots_cles LIKE "%%%s%%" AND identifiant = %s )';
287
			$tpl_where = '(mots_cles LIKE "%%%s%%" AND identifiant = %s )';
258
			
288
			
259
			foreach ($elements_projet as $occurence) {
289
			foreach ($elements_projet as $occurence) {
260
				$requete_projet[] = sprintf($tpl_where, $occurence['cmc_id_mot_cle_utilisateur'], $this->bdd->quote($occurence['cmc_id_proprietaire']));
290
				$requete_projet[] = sprintf($tpl_where, $occurence['cmc_id_mot_cle_utilisateur'], $this->bdd->quote($occurence['cmc_id_proprietaire']));
261
			}
291
			}
262
		} else {
292
		} else {
263
			$this->messages[] = "Aucune observation ne correspond à ce mot clé.";
293
			$this->messages[] = "Aucune observation ne correspond à ce mot clé.";
264
		}
294
		}
265
		
295
		
266
		$sql = implode(" \nOR ", $requete_projet);
296
		$sql = implode(" \nOR ", $requete_projet);
267
		return $sql;
297
		return $sql;
268
	}
298
	}
269
	
299
	
270
}
300
}