Subversion Repositories eFlore/Applications.cel

Rev

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

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