Subversion Repositories eFlore/Applications.cel

Rev

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

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