Subversion Repositories eFlore/Applications.del

Rev

Rev 1297 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 1297 Rev 1298
Line 24... Line 24...
24
	private $bdd;
24
	private $bdd;
25
	private $parametres = array();
25
	private $parametres = array();
26
	private $ressources = array();
26
	private $ressources = array();
27
	private $tri = 'date_transmission';
27
	private $tri = 'date_transmission';
28
	private $directionTri = 'desc';
28
	private $directionTri = 'desc';
29
	
29
 
30
	public function __construct(Conteneur $conteneur = null) {
30
	public function __construct(Conteneur $conteneur = null) {
31
		$this->conteneur = $conteneur == null ? new Conteneur() : $conteneur;
31
		$this->conteneur = $conteneur == null ? new Conteneur() : $conteneur;
32
		$this->conteneur->chargerConfiguration('config_departements_bruts.ini');
32
		$this->conteneur->chargerConfiguration('config_departements_bruts.ini');
33
		$this->conteneur->chargerConfiguration('config_observations.ini');
33
		$this->conteneur->chargerConfiguration('config_observations.ini');
34
		$this->conteneur->chargerConfiguration('config_mapping_votes.ini');
34
		$this->conteneur->chargerConfiguration('config_mapping_votes.ini');
Line 36... Line 36...
36
		$this->navigation = $conteneur->getNavigation();
36
		$this->navigation = $conteneur->getNavigation();
37
		$this->masque = $conteneur->getMasque();
37
		$this->masque = $conteneur->getMasque();
38
		$this->gestionBdd = $conteneur->getGestionBdd();
38
		$this->gestionBdd = $conteneur->getGestionBdd();
39
		$this->bdd = $this->gestionBdd->getBdd();
39
		$this->bdd = $this->gestionBdd->getBdd();
40
	}
40
	}
41
	
-
 
42
	
41
 
43
	/**
42
	/**
44
	 * RequeteSansParametres
43
	 * RequeteSansParametres
45
	 * 
44
	 *
46
	 * permet de vérifier qu'il n'y a aucun paramètre dans la requete, excepté les informations de start et limite,
45
	 * permet de vérifier qu'il n'y a aucun paramètre dans la requete, excepté les informations de start et limite,
47
	 * pour ajuster la requête pour un gain de temps
46
	 * pour ajuster la requête pour un gain de temps
48
	 * @param array $ressources les ressources telles qu'elles sont passées au script
47
	 * @param array $ressources les ressources telles qu'elles sont passées au script
49
	 * @param array $parametres les paramètres tels qu'il sont passés au script
48
	 * @param array $parametres les paramètres tels qu'il sont passés au script
50
	 * */
49
	 * */
51
	public function requeteSansParametres($ressources, $parametres) {
50
	public function requeteSansParametres($ressources, $parametres) {
52
		$estSansParametres = true;
51
		$estSansParametres = true;
53
		
52
 
54
		if (sizeof($ressources) > 0) {
53
		if (sizeof($ressources) > 0) {
55
			$estSansParametres = false;
54
			$estSansParametres = false;
56
		}
55
		}
57
		
56
 
58
		if (sizeof($parametres) > 2) {
57
		if (sizeof($parametres) > 2) {
59
			// s'il y a plus de 2 paramètres, on est forcément dans le cas où on a demandé des paramètres autre que la navigation
58
			// s'il y a plus de 2 paramètres, on est forcément dans le cas où on a demandé des paramètres autre que la navigation
60
			$estSansParametres = false;
59
			$estSansParametres = false;
61
		} else {
60
		} else {
62
			if (sizeof($parametres) == 1) {
61
			if (sizeof($parametres) == 1) {
Line 69... Line 68...
69
				if (!(isset($parametres['navigation.depart']) && isset($parametres['navigation.limite']))) {
68
				if (!(isset($parametres['navigation.depart']) && isset($parametres['navigation.limite']))) {
70
					$estSansParametres = false;
69
					$estSansParametres = false;
71
				}
70
				}
72
			}
71
			}
73
		}
72
		}
74
		
73
 
75
		return $estSansParametres;
74
		return $estSansParametres;
76
	}
75
	}
77
	
76
 
78
	/**
77
	/**
79
	 * Méthode principale de la classe.
78
	 * Méthode principale de la classe.
80
	 * Lance la récupération des images dans la base et les place dans un objet ResultatService 
79
	 * Lance la récupération des images dans la base et les place dans un objet ResultatService
81
	 * pour l'afficher.
80
	 * pour l'afficher.
82
	 * @param array $ressources les ressources situées après l'url de base (ex : http://url/ressource1/ressource2)
81
	 * @param array $ressources les ressources situées après l'url de base (ex : http://url/ressource1/ressource2)
83
	 * @param array $parametres les paramètres situés après le ? dans l'url
82
	 * @param array $parametres les paramètres situés après le ? dans l'url
84
	 * */
83
	 * */
85
	public function consulter($ressources, $parametres) {
84
	public function consulter($ressources, $parametres) {
86
		
-
 
87
		$this->initialiserRessourcesEtParametres($ressources, $parametres);
85
		$this->initialiserRessourcesEtParametres($ressources, $parametres);
88
		$this->configurer();
86
		$this->configurer();
89
		$this->verifierConfiguration();
87
		$this->verifierConfiguration();
90
		$this->verifierParametresTri();
88
		$this->verifierParametresTri();
91
		$this->initialiserTri();
89
		$this->initialiserTri();
Line -... Line 90...
-
 
90
 
92
 
91
		$resultat = new ResultatService();
93
		if ($this->requeteSansParametres($ressources, $parametres)) {
-
 
94
 
92
		if ($this->requeteSansParametres($ressources, $parametres)) {
95
			$liaisons = $this->chargerLiaisonsSimple();
93
			$liaisons = $this->chargerLiaisonsSimple();
96
			$observations = $this->chargerObservations($liaisons);
94
			$observations = $this->chargerObservations($liaisons);
97
			$total = $this->compterObservations();
95
			$total = $this->compterObservations();
98
			$this->navigation->setTotal($total);
96
			$this->navigation->setTotal($total);
99
			$observations = $this->chargerImages($observations);
97
			$observations = $this->chargerImages($observations);
100
			$observations = $this->chargerDeterminations($observations);
98
			$observations = $this->chargerDeterminations($observations);
101
			
99
 
102
			//Compute
100
			//Compute
103
			$resultats = array();
101
			$resultats = array();
104
			foreach ($observations as $id => $observation) {
102
			foreach ($observations as $id => $observation) {
105
				$idObs = $observation['id_observation'];
103
				$idObs = $observation['id_observation'];
106
				$resultats['"'.$idObs.'"'] = $observation;
104
				$resultats['"'.$idObs.'"'] = $observation;
107
			}
105
			}
108
			
106
 
109
			// Mettre en forme le résultat et l'envoyer pour affichage
-
 
110
			$resultat = new ResultatService();
107
			// Mettre en forme le résultat et l'envoyer pour affichage
111
			$resultat->corps = array('entete' => $this->conteneur->getEntete(), 'resultats' => $resultats);
-
 
112
			
-
 
113
			return $resultat;
108
			$resultat->corps = array('entete' => $this->conteneur->getEntete(), 'resultats' => $resultats);
114
		} else {
-
 
115
			
-
 
116
			// Lancement du service
109
		} else {
117
			$liaisons = $this->chargerLiaisons();
-
 
118
			
110
			$liaisons = $this->chargerLiaisons();
119
			$total = $this->compterObservations();
111
			$total = $this->compterObservations();
120
			$this->navigation->setTotal($total);
112
			$this->navigation->setTotal($total);
121
			$observations = $this->chargerObservations($liaisons);
113
			$observations = $this->chargerObservations($liaisons);
122
			$observations = $this->chargerImages($observations);
114
			$observations = $this->chargerImages($observations);
123
			$observations = $this->chargerDeterminations($observations);
115
			$observations = $this->chargerDeterminations($observations);
124
			
116
 
125
			// Mettre en forme le résultat et l'envoyer pour affichage
-
 
126
			$resultat = new ResultatService();
117
			// Mettre en forme le résultat et l'envoyer pour affichage
127
			$resultat->corps = array('entete' => $this->conteneur->getEntete(), 'resultats' => $observations);
-
 
128
			return $resultat;
118
			$resultat->corps = array('entete' => $this->conteneur->getEntete(), 'resultats' => $observations);
-
 
119
		}
129
		}
120
		return $resultat;
130
	}
121
	}
131
	
122
 
132
	private function initialiserRessourcesEtParametres($ressources, $parametres) {
123
	private function initialiserRessourcesEtParametres($ressources, $parametres) {
133
		$this->ressources = $ressources;
124
		$this->ressources = $ressources;
134
		$this->parametres = $parametres;
125
		$this->parametres = $parametres;
135
	}
126
	}
136
	
127
 
137
	private function verifierParametresTri() {
-
 
138
	
128
	private function verifierParametresTri() {
139
		$erreurs = array();
129
		$erreurs = array();
140
		$tris_possibles = $this->conteneur->getParametre('tris_possibles');
130
		$tris_possibles = $this->conteneur->getParametre('tris_possibles');
141
		$tris_possibles_tableau = explode(',', $tris_possibles);
131
		$tris_possibles_tableau = explode(',', $tris_possibles);
142
		if(isset($this->parametres['tri']) && !in_array($this->parametres['tri'], $tris_possibles_tableau)) {
132
		if(isset($this->parametres['tri']) && !in_array($this->parametres['tri'], $tris_possibles_tableau)) {
143
			$erreurs[] = '- le type de tri demandé est incorrect, les valeurs possibles sont '.$tris_possibles.' ;';
133
			$erreurs[] = '- le type de tri demandé est incorrect, les valeurs possibles sont '.$tris_possibles.' ;';
144
		}
134
		}
145
	
135
 
146
		$directions_tri = array('asc', 'desc');
136
		$directions_tri = array('asc', 'desc');
147
		if(isset($this->parametres['ordre']) && !in_array($this->parametres['ordre'], $directions_tri)) {
137
		if(isset($this->parametres['ordre']) && !in_array($this->parametres['ordre'], $directions_tri)) {
148
			$erreurs[] = '- la direction du tri demandé est incorrecte, les valeurs supportées sont asc ou desc ;';
138
			$erreurs[] = '- la direction du tri demandé est incorrecte, les valeurs supportées sont asc ou desc ;';
149
		}
139
		}
150
			
140
 
151
		if (!empty($erreurs)) {
141
		if (!empty($erreurs)) {
152
			$e = 'Erreur lors de l\'analyse des parametres du tri : '."\n";
142
			$e = 'Erreur lors de l\'analyse des parametres du tri : '."\n";
153
			$e .= implode("\n", $erreurs);
143
			$e .= implode("\n", $erreurs);
154
			throw new Exception($e, RestServeur::HTTP_CODE_ERREUR);
144
			throw new Exception($e, RestServeur::HTTP_CODE_ERREUR);
155
		}
145
		}
156
	}
146
	}
157
	
147
 
158
	private function initialiserTri() {
148
	private function initialiserTri() {
159
		$this->tri = isset($this->parametres['tri']) ? $this->parametres['tri'] : $this->tri;
149
		$this->tri = isset($this->parametres['tri']) ? $this->parametres['tri'] : $this->tri;
160
		$this->directionTri = isset($this->parametres['ordre']) ? $this->parametres['ordre'] : $this->directionTri;
150
		$this->directionTri = isset($this->parametres['ordre']) ? $this->parametres['ordre'] : $this->directionTri;
161
	}
151
	}
Line 169... Line 159...
169
		$this->mappingFiltre = $this->conteneur->getParametre('mapping_masque');
159
		$this->mappingFiltre = $this->conteneur->getParametre('mapping_masque');
170
		$this->mappingObservation = $this->conteneur->getParametre('mapping_observation');
160
		$this->mappingObservation = $this->conteneur->getParametre('mapping_observation');
171
		$this->mappingVotes = $this->conteneur->getParametre('mapping_votes');
161
		$this->mappingVotes = $this->conteneur->getParametre('mapping_votes');
172
		$this->mappingCommentaire = $this->conteneur->getParametre('mapping_commentaire');
162
		$this->mappingCommentaire = $this->conteneur->getParametre('mapping_commentaire');
173
	}
163
	}
174
	
164
 
175
	/**
165
	/**
176
	 * Vérifier que le service est bien configuré 
166
	 * Vérifier que le service est bien configuré
177
	 * */
167
	 * */
178
	private function verifierConfiguration() {
168
	private function verifierConfiguration() {
179
	
-
 
180
		$erreurs = array();
169
		$erreurs = array();
181
		$tableauObservations = $this->conteneur->getParametre('observations');
170
		$tableauObservations = $this->conteneur->getParametre('observations');
182
		if (empty($tableauObservations)) {
171
		if (empty($tableauObservations)) {
183
			$erreurs[] = '- le fichier de configuration ne contient pas le tableau [images] ou celui-ci est vide ;'; 
172
			$erreurs[] = '- le fichier de configuration ne contient pas le tableau [images] ou celui-ci est vide ;';
184
		} else {
173
		} else {
185
			if ($this->conteneur->getParametre('url_service') == null) {
174
			if ($this->conteneur->getParametre('url_service') == null) {
186
				$erreurs[] = '- paramètre "url_service" manquant ;';
175
				$erreurs[] = '- paramètre "url_service" manquant ;';
187
			}
176
			}
188
			
177
 
189
			if ($this->conteneur->getParametre('url_images') == null) {
178
			if ($this->conteneur->getParametre('url_images') == null) {
190
				$erreurs[] = '- paramètre "url_images" manquant ;';
179
				$erreurs[] = '- paramètre "url_images" manquant ;';
191
			}
180
			}
192
			
-
 
193
		}
181
		}
Line 194... Line 182...
194
 
182
 
195
		if (empty($this->mappingObservation)) {
183
		if (empty($this->mappingObservation)) {
196
			$erreurs[] = '- le fichier de configuration ne contient pas le tableau [mapping_observation] ou celui-ci est vide ;';
184
			$erreurs[] = '- le fichier de configuration ne contient pas le tableau [mapping_observation] ou celui-ci est vide ;';
197
		} else {
185
		} else {
198
			$champsMappingObs = array('id_observation', 'date_observation', 'date_transmission', 'famille', 'nom_sel', 'nom_sel_nn', 'nt',
186
			$champsMappingObs = array('id_observation', 'date_observation', 'date_transmission', 'famille',
-
 
187
				'nom_sel', 'nom_sel_nn', 'nt', 'ce_zone_geo', 'zone_geo', 'lieudit', 'station', 'courriel',
199
								'ce_zone_geo', 'zone_geo', 'lieudit', 'station', 'courriel', 'ce_utilisateur', 'nom', 'prenom');
188
				'ce_utilisateur', 'nom', 'prenom');
200
			
189
 
201
			foreach ($champsMappingObs as $champ) {
190
			foreach ($champsMappingObs as $champ) {
202
				if (!isset($this->mappingObservation[$champ])) {
191
				if (!isset($this->mappingObservation[$champ])) {
203
					$erreurs[] = '- le mapping du champ "'.$champ.'" pour l\'observation est manquant ;';
192
					$erreurs[] = '- le mapping du champ "'.$champ.'" pour l\'observation est manquant ;';
204
				}				
193
				}
205
			}
194
			}
206
		}
195
		}
207
		
196
 
208
		if (empty($this->mappingCommentaire)) {
197
		if (empty($this->mappingCommentaire)) {
209
			$erreurs[] = '- le fichier de configuration ne contient pas le tableau [mapping_commentaire] ou celui-ci est vide ;';
198
			$erreurs[] = '- le fichier de configuration ne contient pas le tableau [mapping_commentaire] ou celui-ci est vide ;';
210
		} else {
199
		} else {
-
 
200
			$champsMappingCom = array('id_commentaire', 'texte', 'ce_utilisateur', 'utilisateur_nom',
211
			$champsMappingCom = array('id_commentaire', 'texte', 'ce_utilisateur', 'utilisateur_nom', 'utilisateur_prenom', 'utilisateur_courriel', 'date');
201
				'utilisateur_prenom', 'utilisateur_courriel', 'date');
212
			foreach ($champsMappingCom as $champ) {
202
			foreach ($champsMappingCom as $champ) {
213
				if (!isset($this->mappingCommentaire[$champ])) {
203
				if (!isset($this->mappingCommentaire[$champ])) {
214
					$erreurs[] = '- le mapping du champ "'.$champ.'" pour le commentaire est manquant ;';
204
					$erreurs[] = '- le mapping du champ "'.$champ.'" pour le commentaire est manquant ;';
215
				}
205
				}
216
			}
206
			}
217
		}
207
		}
218
		
208
 
219
		if (empty($this->mappingFiltre)) {
209
		if (empty($this->mappingFiltre)) {
220
			$erreurs[] = '- le fichier de configuration ne contient pas le tableau [mapping_masque] ou celui-ci est vide ;';
210
			$erreurs[] = '- le fichier de configuration ne contient pas le tableau [mapping_masque] ou celui-ci est vide ;';
221
		} else {
211
		} else {
222
			$champsMappingFiltre = array('famille', 'ns', 'nn', 'date', 'tag', 'commune');
212
			$champsMappingFiltre = array('famille', 'ns', 'nn', 'date', 'tag', 'commune');
223
			foreach ($champsMappingFiltre as $champ) {
213
			foreach ($champsMappingFiltre as $champ) {
224
				if (!isset($this->mappingFiltre[$champ])) {
214
				if (!isset($this->mappingFiltre[$champ])) {
225
					$erreurs[] = '- le mapping du champ "'.$champ.'" pour l\'observation est manquant ;';
215
					$erreurs[] = '- le mapping du champ "'.$champ.'" pour l\'observation est manquant ;';
226
				}				
216
				}
227
			}
217
			}
228
		}
218
		}
229
		
219
 
230
		if (!empty($erreurs)) {
220
		if (!empty($erreurs)) {
231
			$e = 'Erreur lors de la configuration : '."\n";
221
			$e = 'Erreur lors de la configuration : '."\n";
232
			$e .= implode("\n", $erreurs);
222
			$e .= implode("\n", $erreurs);
233
			throw new Exception($e, RestServeur::HTTP_CODE_ERREUR);
223
			throw new Exception($e, RestServeur::HTTP_CODE_ERREUR);
234
		}
224
		}
235
	}
-
 
236
	
225
	}
237
	
-
 
238
	
226
 
239
	/**
227
	/**
240
	 * Obtenir une chaine de caractère concaténant nom et prénom séparé par une virgule
228
	 * Obtenir une chaine de caractère concaténant nom et prénom séparé par une virgule
241
	 * @param String $auteurId l'identifiant de l'auteur
229
	 * @param String $auteurId l'identifiant de l'auteur
242
	 * @return String la chaine de concaténation
230
	 * @return String la chaine de concaténation
Line 245... Line 233...
245
		$nomPrenom = explode(' ', $auteurId);
233
		$nomPrenom = explode(' ', $auteurId);
246
		$nomPrenom = $this->proteger($nomPrenom);
234
		$nomPrenom = $this->proteger($nomPrenom);
247
		$chaineNomPrenom = implode(', ', $nomPrenom);
235
		$chaineNomPrenom = implode(', ', $nomPrenom);
248
		return $chaineNomPrenom;
236
		return $chaineNomPrenom;
249
	}
237
	}
250
	
238
 
251
	/**
239
	/**
252
	* Charger la clause WHERE en fonction des paramètres de masque
240
	* Charger la clause WHERE en fonction des paramètres de masque
253
	* */
241
	* */
254
	private function chargerClauseWhere() {
242
	private function chargerClauseWhere() {
255
		$where = array();
243
		$where = array();
256
		$tableauMasque = $this->masque->getMasque();
244
		$tableauMasque = $this->masque->getMasque();
257
		if (!empty($tableauMasque)) {
245
		if (!empty($tableauMasque)) {
258
			foreach($tableauMasque as $idMasque => $valeurMasque) {
246
			foreach ($tableauMasque as $idMasque => $valeurMasque) {
259
					
-
 
260
				$idMasque = str_replace('masque.', '', $idMasque);
247
				$idMasque = str_replace('masque.', '', $idMasque);
261
				switch ($idMasque) {
248
				switch ($idMasque) {
262
					// nom du masque => nom BDD
249
					// nom du masque => nom BDD
263
					case 'auteur' :
250
					case 'auteur' :
264
						$whereAuteur = ' '.$this->creerFiltreAuteur($this->masque->getMasque('auteur'));
251
						$whereAuteur = ' '.$this->creerFiltreAuteur($this->masque->getMasque('auteur'));
265
						if($whereAuteur != '') {
252
						if ($whereAuteur != '') {
266
							$where[] = $whereAuteur;
253
							$where[] = $whereAuteur;
267
						}
254
						}
268
						break;
255
						break;
269
					case 'date' :
256
					case 'date' :
270
						$whereDate = ' '.$this->creerFiltreDate($valeurMasque);
257
						$whereDate = ' '.$this->creerFiltreDate($valeurMasque);
271
						if($whereDate != '') {
258
						if ($whereDate != '') {
272
							$where[] = $whereDate;
259
							$where[] = $whereDate;
273
						}
260
						}
274
						break;
261
						break;
275
					case 'departement' :
262
					case 'departement' :
276
						$where[] = ' '.$this->creerFiltreIdZoneGeo($valeurMasque);
263
						$where[] = ' '.$this->creerFiltreIdZoneGeo($valeurMasque);
Line 281... Line 268...
281
					case 'tag' :
268
					case 'tag' :
282
						$where[] = ' '.$this->creerFiltreMotsCles($valeurMasque);
269
						$where[] = ' '.$this->creerFiltreMotsCles($valeurMasque);
283
						break;
270
						break;
284
					case 'ns' :
271
					case 'ns' :
285
						$where[] = ' nom_sel LIKE '.$this->proteger($valeurMasque.'%');
272
						$where[] = ' nom_sel LIKE '.$this->proteger($valeurMasque.'%');
286
						break;	
273
						break;
287
					case 'commune' :
274
					case 'commune' :
288
						$where[] = ' '.$this->mappingFiltre[$idMasque].' LIKE '.$this->proteger(str_replace(array('-',' '), '_', $valeurMasque).'%');
275
						$where[] = ' '.$this->mappingFiltre[$idMasque].' LIKE '.$this->proteger(str_replace(array('-',' '), '_', $valeurMasque).'%');
289
					break;
276
						break;
290
					case 'masque' :
277
					case 'masque' :
291
						$where[] = ' '.$this->creerFiltreMasqueGeneral($valeurMasque);
278
						$where[] = ' '.$this->creerFiltreMasqueGeneral($valeurMasque);
292
					break;
279
						break;
293
					case 'type' :
280
					case 'type' :
294
						//TODO : en discussion doit faire ressortir les observations qui ont plusieurs propositions de nom OU celle qui ont plus de N commentaires
281
						//TODO : en discussion doit faire ressortir les observations qui ont plusieurs propositions de nom OU celle qui ont plus de N commentaires
295
						$tableauTypes = explode(';', $valeurMasque);
282
						$tableauTypes = explode(';', $valeurMasque);
296
						$requeteType = array();
283
						$requeteType = array();
297
						
284
 
298
						if (in_array('adeterminer', $tableauTypes)) {
285
						if (in_array('adeterminer', $tableauTypes)) {
299
							//On récupère toutes les observations qui on le tag "aDeterminer" ou qui n'ont pas de nom d'espèce
286
							//On récupère toutes les observations qui on le tag "aDeterminer" ou qui n'ont pas de nom d'espèce
300
							$requeteType[] = '(dob.mots_cles_texte = '.$this->proteger($this->conteneur->getParametre('tag_adeterminer')).' OR nom_sel_nn IS NULL) ';
287
							$requeteType[] = '(dob.mots_cles_texte = '.$this->proteger($this->conteneur->getParametre('tag_adeterminer')).' OR nom_sel_nn IS NULL) ';
301
						}
288
						}
Line 302... Line 289...
302
 
289
 
303
						if (in_array('aconfirmer', $tableauTypes)) {
290
						if (in_array('aconfirmer', $tableauTypes)) {
304
							//On récupère toutes les observations qui ne sont pas "aDeterminer" et qui ont un nom d'espèce
291
							//On récupère toutes les observations qui ne sont pas "aDeterminer" et qui ont un nom d'espèce
305
							$requeteType[] = '(nom_sel is not null AND dob.mots_cles_texte NOT LIKE '.$this->proteger($this->conteneur->getParametre('tag_adeterminer')).') ';
292
							$requeteType[] = '(nom_sel is not null AND dob.mots_cles_texte NOT LIKE '.$this->proteger($this->conteneur->getParametre('tag_adeterminer')).') ';
306
						}
293
						}
307
						
294
 
308
						if (in_array('endiscussion', $tableauTypes)) {
295
						if (in_array('endiscussion', $tableauTypes)) {
309
							//Si on veut les observations en discussion, on va récupérer les ids des observations dont le nombre de commentaire est supérieur à N
296
							//Si on veut les observations en discussion, on va récupérer les ids des observations dont le nombre de commentaire est supérieur à N
310
							$idsObservations = $this->chargerIdsObservationsParNbCommentaires();
297
							$idsObservations = $this->chargerIdsObservationsParNbCommentaires();
311
							if(!empty($idsObservations)) {
298
							if(!empty($idsObservations)) {
312
								$requeteType[] = 'dob.id_observation IN ('.$idsObservations.') ';
299
								$requeteType[] = 'dob.id_observation IN ('.$idsObservations.') ';
313
							} else {
300
							} else {
314
								$requeteType[] = 'dob.id_observation IN (NULL) ';
301
								$requeteType[] = 'dob.id_observation IN (NULL) ';
315
							}
302
							}
316
						}
303
						}
317
						if($valeurMasque != '') {
304
						if ($valeurMasque != '') {
318
						  $where[] = implode(' OR ', $requeteType);
305
						  $where[] = implode(' OR ', $requeteType);
319
						}
306
						}
320
					break;
307
						break;
321
					default:
308
					default:
322
						$where[] = ' '.$this->mappingFiltre[$idMasque].' = '.$this->proteger($valeurMasque);
309
						$where[] = ' '.$this->mappingFiltre[$idMasque].' = '.$this->proteger($valeurMasque);
323
					break;
310
						break;
324
				}
311
				}
325
			}	
312
			}
326
		}
313
		}
327
		
314
 
328
		if (!empty($where)) {
315
		if (!empty($where)) {
329
			return ' WHERE '.implode('AND', $where);
316
			return ' WHERE '.implode('AND', $where);
330
		} else {
317
		} else {
331
			return;
318
			return;
332
		}
319
		}
333
	}
320
	}
334
	
321
 
-
 
322
	public function chargerIdsObservationsParNbCommentaires() {
-
 
323
		$requeteIdsObservations = 'SELECT ce_observation '.
-
 
324
			'FROM del_commentaire '.
335
	public function chargerIdsObservationsParNbCommentaires() {
325
			'GROUP BY ce_observation '.
336
		$requeteIdsObservations = 'SELECT ce_observation FROM `del_commentaire` GROUP BY ce_observation HAVING count(id_commentaire) > '.$this->conteneur->getParametre('nb_commentaires_discussion');
326
			'HAVING count(id_commentaire) > '.$this->conteneur->getParametre('nb_commentaires_discussion');
337
		$listeIdsObservations = $this->bdd->recupererTous($requeteIdsObservations);
327
		$listeIdsObservations = $this->bdd->recupererTous($requeteIdsObservations);
338
		$idsObservations = '';
328
		$idsObservations = '';
339
		foreach ($listeIdsObservations as $idObservation) {
329
		foreach ($listeIdsObservations as $idObservation) {
340
			$idsObservations .= $idObservation['ce_observation'].',';
330
			$idsObservations .= $idObservation['ce_observation'].',';
341
		
331
 
342
		}
332
		}
343
		$idsObservations = rtrim($idsObservations, ',');
333
		$idsObservations = rtrim($idsObservations, ',');
344
		return $idsObservations;
334
		return $idsObservations;
345
	}
335
	}
346
	
336
 
347
	private function creerFiltreMasqueGeneral($valeurMasque) {
337
	private function creerFiltreMasqueGeneral($valeurMasque) {
348
		//TODO: affecter d'aborder les variables, puis les tester pour les
338
		//TODO: affecter d'aborder les variables, puis les tester pour les
349
		// ajouter à la chaine
339
		// ajouter à la chaine
350
		$whereAuteur = $this->creerFiltreAuteur($valeurMasque);
340
		$whereAuteur = $this->creerFiltreAuteur($valeurMasque);
351
		$whereIdZoneGeo = $this->creerFiltreIdZoneGeo($valeurMasque);
341
		$whereIdZoneGeo = $this->creerFiltreIdZoneGeo($valeurMasque);
352
	
342
 
353
		$masqueGeneral = '( '.
343
		$masqueGeneral = '( '.
354
						(($whereAuteur != '') ? $whereAuteur.' OR ' : '' ).
344
			(($whereAuteur != '') ? $whereAuteur.' OR ' : '' ).
355
						(($whereIdZoneGeo != '') ? $whereIdZoneGeo.' OR ' : '' ).
345
			(($whereIdZoneGeo != '') ? $whereIdZoneGeo.' OR ' : '' ).
356
						'zone_geo LIKE '.$this->proteger($this->remplacerParJokerCaractere($valeurMasque).'%').' OR '.
346
			'zone_geo LIKE '.$this->proteger($this->remplacerParJokerCaractere($valeurMasque).'%').' OR '.
357
						$this->creerFiltreMotsCles($valeurMasque).' OR '.
347
			$this->creerFiltreMotsCles($valeurMasque).' OR '.
358
						'nom_sel LIKE '.$this->proteger($valeurMasque.'%').' OR '.
348
			'nom_sel LIKE '.$this->proteger($valeurMasque.'%').' OR '.
359
						'famille LIKE '.$this->proteger($valeurMasque.'%').' OR '.
349
			'famille LIKE '.$this->proteger($valeurMasque.'%').' OR '.
360
						'milieu LIKE '.$this->proteger($valeurMasque).' OR '.
350
			'milieu LIKE '.$this->proteger($valeurMasque).' OR '.
361
						$this->mappingFiltre['ns'].' LIKE '.$this->proteger('%'.$valeurMasque.'% %').' OR '.
351
			$this->mappingFiltre['ns'].' LIKE '.$this->proteger('%'.$valeurMasque.'% %').' OR '.
362
						$this->creerFiltreDate($valeurMasque).
352
			$this->creerFiltreDate($valeurMasque).
363
						') ';
353
			') ';
364
	
354
 
365
		return $masqueGeneral;
355
		return $masqueGeneral;
366
	}
356
	}
367
	
357
 
368
	private function creerFiltreAuteur($valeurMasque) {
358
	private function creerFiltreAuteur($valeurMasque) {
369
		$masque = '';
359
		$masque = '';
370
		$auteurId = $valeurMasque;
360
		$auteurId = $valeurMasque;
371
		if (is_numeric($auteurId)) {
361
		if (is_numeric($auteurId)) {
Line 374... Line 364...
374
		if (strpos($auteurId, '@') === false) {
364
		if (strpos($auteurId, '@') === false) {
375
				$tableauNomPrenom = explode(' ',$auteurId, 2);
365
				$tableauNomPrenom = explode(' ',$auteurId, 2);
376
				if(count($tableauNomPrenom) == 2) {
366
				if(count($tableauNomPrenom) == 2) {
377
					// on teste potentiellement un nom prenom ou bien un prénom nom
367
					// on teste potentiellement un nom prenom ou bien un prénom nom
378
					$masque = '('.
368
					$masque = '('.
379
						          	'(nom LIKE '.$this->proteger($tableauNomPrenom[0].'%').' AND '.
369
						'(nom LIKE '.$this->proteger($tableauNomPrenom[0].'%').' AND '.
380
								  	'prenom LIKE '.$this->proteger($tableauNomPrenom[1].'%').') OR '.
370
						'prenom LIKE '.$this->proteger($tableauNomPrenom[1].'%').') OR '.
381
								 	'(nom LIKE '.$this->proteger($tableauNomPrenom[1].'%').' AND '.
371
						'(nom LIKE '.$this->proteger($tableauNomPrenom[1].'%').' AND '.
382
								  	'prenom LIKE '.$this->proteger($tableauNomPrenom[0].'%').') OR '.
372
						'prenom LIKE '.$this->proteger($tableauNomPrenom[0].'%').') OR '.
383
									'(dob.nom_utilisateur LIKE '.$this->proteger($tableauNomPrenom[0].'%').' AND '.
373
						'(dob.nom_utilisateur LIKE '.$this->proteger($tableauNomPrenom[0].'%').' AND '.
384
									'dob.prenom_utilisateur LIKE '.$this->proteger($tableauNomPrenom[1].'%').') OR '.
374
						'dob.prenom_utilisateur LIKE '.$this->proteger($tableauNomPrenom[1].'%').') OR '.
385
									'(dob.nom_utilisateur LIKE '.$this->proteger($tableauNomPrenom[1].'%').' AND '.
375
						'(dob.nom_utilisateur LIKE '.$this->proteger($tableauNomPrenom[1].'%').' AND '.
386
									'dob.prenom_utilisateur LIKE '.$this->proteger($tableauNomPrenom[0].'%').') '.
376
						'dob.prenom_utilisateur LIKE '.$this->proteger($tableauNomPrenom[0].'%').') '.
387
								  ')';
377
						')';
388
				} else {
378
				} else {
389
					$masque = '(
379
					$masque = '(
390
						            (nom LIKE '.$this->proteger($auteurId.'%').' OR '.
380
						(nom LIKE '.$this->proteger($auteurId.'%').' OR '.
391
									'prenom LIKE '.$this->proteger($auteurId.'%').' OR '.
381
						'prenom LIKE '.$this->proteger($auteurId.'%').' OR '.
392
									'dob.nom_utilisateur LIKE '.$this->proteger($auteurId.'%').' OR '.
382
						'dob.nom_utilisateur LIKE '.$this->proteger($auteurId.'%').' OR '.
393
									'dob.prenom_utilisateur LIKE '.$this->proteger($auteurId.'%').')'.
383
						'dob.prenom_utilisateur LIKE '.$this->proteger($auteurId.'%').')'.
394
								  ')';
384
						')';
395
				}
385
				}
396
			} else {
386
			} else {
397
				$masque = " courriel LIKE ".$this->proteger($valeurMasque.'%').
387
				$masque = ' courriel LIKE '.$this->proteger($valeurMasque.'%').
398
				          " OR dob.courriel_utilisateur LIKE ".$this->proteger($valeurMasque.'%')." ";
388
					' OR dob.courriel_utilisateur LIKE '.$this->proteger($valeurMasque.'%').' ';
399
			}
389
			}
400
		}
390
		}
401
		return $masque;
391
		return $masque;
402
	}
392
	}
403
	
393
 
404
	private function remplacerParJokerCaractere($valeurMasque) {
394
	private function remplacerParJokerCaractere($valeurMasque) {
405
		return str_replace(array('-',' '), '_', $valeurMasque);
395
		return str_replace(array('-',' '), '_', $valeurMasque);
406
	}
396
	}
-
 
397
 
407
	//TODO: déplacer les fonctions ci dessus et dessous dans une classe
398
	//TODO: déplacer les fonctions ci dessus et dessous dans une classe
408
	// utilitaire
399
	// utilitaire
409
	function supprimerAccents($str, $charset='utf-8')
400
	function supprimerAccents($str, $charset='utf-8') {
410
	{
-
 
411
		$str = htmlentities($str, ENT_NOQUOTES, $charset);
401
		$str = htmlentities($str, ENT_NOQUOTES, $charset);
412
	
402
 
413
		$str = preg_replace('#&([A-za-z])(?:acute|cedil|circ|grave|orn|ring|slash|th|tilde|uml);#', '\1', $str);
403
		$str = preg_replace('#&([A-za-z])(?:acute|cedil|circ|grave|orn|ring|slash|th|tilde|uml);#', '\1', $str);
414
		$str = preg_replace('#&([A-za-z]{2})(?:lig);#', '\1', $str); // pour les ligatures e.g. 'œ'
404
		$str = preg_replace('#&([A-za-z]{2})(?:lig);#', '\1', $str); // pour les ligatures e.g. 'œ'
415
		$str = preg_replace('#&[^;]+;#', '', $str); // supprime les autres caractères
405
		$str = preg_replace('#&[^;]+;#', '', $str); // supprime les autres caractères
416
	
406
 
417
		return $str;
407
		return $str;
418
	}
408
	}
419
	
409
 
420
	private function obtenirIdDepartement($nomDpt) {
410
	private function obtenirIdDepartement($nomDpt) {
421
	
-
 
422
		$nomDpt = $this->supprimerAccents($nomDpt);
411
		$nomDpt = $this->supprimerAccents($nomDpt);
423
		$nomDpt = strtolower(str_replace(' ','-',$nomDpt));
412
		$nomDpt = strtolower(str_replace(' ','-',$nomDpt));
424
	
413
 
425
		$idDpt = $this->conteneur->getParametre($nomDpt);
414
		$idDpt = $this->conteneur->getParametre($nomDpt);
426
		if($idDpt == null || $idDpt == ' ') {
415
		if ($idDpt == null || $idDpt == ' ') {
427
			$idDpt = ' ';
416
			$idDpt = ' ';
428
		}
417
		}
429
		return $idDpt;
418
		return $idDpt;
430
	}
419
	}
431
	
420
 
432
	private function creerFiltreIdZoneGeo($valeurMasque) {
421
	private function creerFiltreIdZoneGeo($valeurMasque) {
433
		$masque = '';
422
		$masque = '';
434
		$dept = $valeurMasque;
423
		$dept = $valeurMasque;
435
		if (is_numeric($dept)) {
424
		if (is_numeric($dept)) {
436
			$dept = sprintf('%02s', $dept);
425
			$dept = sprintf('%02s', $dept);
Line 445... Line 434...
445
				$masque = " ce_zone_geo LIKE ".$this->proteger('INSEE-C:'.$id.'%');
434
				$masque = " ce_zone_geo LIKE ".$this->proteger('INSEE-C:'.$id.'%');
446
			}
435
			}
447
		}
436
		}
448
		return $masque;
437
		return $masque;
449
	}
438
	}
450
	
439
 
451
	private function creerFiltreDate($valeurMasque) {
440
	private function creerFiltreDate($valeurMasque) {
452
		//TODO: définir dans le fichier de config un tableau contenant plusieurs format de date
441
		//TODO: définir dans le fichier de config un tableau contenant plusieurs format de date
453
		// autorisés pour la recherche, qui seraient ajoutés au OR
442
		// autorisés pour la recherche, qui seraient ajoutés au OR
454
		$masque = '(';
443
		$masque = '(';
455
		$masque .= (is_numeric($valeurMasque)) ? ' YEAR(date_observation) = '.$this->proteger($valeurMasque).' OR ' : '';
444
		$masque .= (is_numeric($valeurMasque)) ? ' YEAR(date_observation) = '.$this->proteger($valeurMasque).' OR ' : '';
456
		$masque .= " DATE_FORMAT(date_observation, '%d/%m/%Y') = ".$this->proteger($valeurMasque).' '.
445
		$masque .= " DATE_FORMAT(date_observation, '%d/%m/%Y') = ".$this->proteger($valeurMasque).' )';
457
			           ')';
-
 
458
		return $masque;
446
		return $masque;
459
	}
447
	}
460
	
448
 
461
	private function creerFiltreMotsCles($valeurMasque) {
449
	private function creerFiltreMotsCles($valeurMasque) {
462
		$mots_cles = explode(' ', $valeurMasque);
450
		$mots_cles = explode(' ', $valeurMasque);
463
		$requeteMotsClesImg = '';
451
		$requeteMotsClesImg = '';
464
		$requeteMotsClesObs = '';
452
		$requeteMotsClesObs = '';
465
		//TODO voir s'il existe un moyen plus simple que le foreach + rtrim
453
		//TODO voir s'il existe un moyen plus simple que le foreach + rtrim
466
		// comme avec implode (attention au fait que l'on concatène des % au début et à la fin)
454
		// comme avec implode (attention au fait que l'on concatène des % au début et à la fin)
467
		foreach($mots_cles as $mot_cle) {
455
		foreach($mots_cles as $mot_cle) {
468
			$requeteMotsCles = $this->proteger('%'.$mot_cle.'%');
456
			$requeteMotsCles = $this->proteger('%'.$mot_cle.'%');
469
			$requeteMotsClesImg .= 'di.mots_cles_texte LIKE '.$requeteMotsCles.' AND ';
457
			$requeteMotsClesImg .= "di.mots_cles_texte LIKE $requeteMotsCles AND ";
470
			$requeteMotsClesObs .= 'dob.mots_cles_texte LIKE '.$requeteMotsCles.' AND ';
458
			$requeteMotsClesObs .= "dob.mots_cles_texte LIKE $requeteMotsCles AND ";
471
		}
459
		}
472
		$requeteMotsClesImg = rtrim($requeteMotsClesImg, ' AND ');
460
		$requeteMotsClesImg = rtrim($requeteMotsClesImg, ' AND ');
473
		$requeteMotsClesObs = rtrim($requeteMotsClesObs, ' AND ');
461
		$requeteMotsClesObs = rtrim($requeteMotsClesObs, ' AND ');
474
		
462
 
475
		$masque = '('.
-
 
476
		          	'('.$requeteMotsClesImg.') OR '.
463
		$masque = "( ($requeteMotsClesImg) OR ($requeteMotsClesObs) ) ";
477
		          	'('.$requeteMotsClesObs.') '.
-
 
478
				  ') ';
-
 
479
		
-
 
480
		return $masque;                                                  			
464
		return $masque;
481
	}
465
	}
482
	
466
 
483
	/*-------------------------------------------------------------------------------
467
	/*-------------------------------------------------------------------------------
484
								CHARGEMENT DES OBSERVATIONS 
468
								CHARGEMENT DES OBSERVATIONS
485
	--------------------------------------------------------------------------------*/
469
	--------------------------------------------------------------------------------*/
486
	/**
470
	/**
487
	* Chargement depuis la bdd de toutes les liaisons entre images et observations
471
	* Chargement depuis la bdd de toutes les liaisons entre images et observations
488
	* */
472
	* */
489
	private function chargerLiaisons() {
473
	private function chargerLiaisons() {
490
	
-
 
-
 
474
		$requeteLiaisons = 'SELECT SQL_CALC_FOUND_ROWS '.
491
		$requeteLiaisons = 'SELECT SQL_CALC_FOUND_ROWS dob.id_observation, nom_sel, famille, ce_zone_geo, zone_geo, lieudit, '.
475
			'	dob.id_observation, nom_sel, famille, ce_zone_geo, zone_geo, lieudit, '.
492
						   'station, milieu, date_observation, dob.mots_cles_texte, date_transmission, di.id_image, '.
476
			'	station, milieu, date_observation, dob.mots_cles_texte, date_transmission, di.id_image, '.
493
						   'dob.ce_utilisateur, prenom, nom, courriel, '.
477
			'	dob.ce_utilisateur, prenom, nom, courriel, '.
494
						   'dob.prenom_utilisateur, dob.nom_utilisateur, dob.courriel_utilisateur, '.
478
			'	dob.prenom_utilisateur, dob.nom_utilisateur, dob.courriel_utilisateur, '.
495
						   'nom_original, dob.commentaire as dob_commentaire, '.
479
			'	nom_original, dob.commentaire AS dob_commentaire, '.
496
						   'dob.nt, dob.nom_sel_nn '.
480
			'	dob.nt, dob.nom_sel_nn '.
497
						   'FROM '.$this->gestionBdd->formaterTable('del_observation', 'dob').
481
			'FROM del_observation AS dob '.
498
						   'LEFT JOIN del_utilisateur du '.
482
			'	LEFT JOIN del_utilisateur AS du '.
499
						   'ON du.id_utilisateur = dob.ce_utilisateur '.
483
			'		ON du.id_utilisateur = dob.ce_utilisateur '.
500
						   'LEFT JOIN '.$this->gestionBdd->formaterTable('del_obs_image', 'doi').
484
			'	LEFT JOIN del_obs_image AS doi '.
501
						   'ON doi.id_observation = dob.id_observation '.
485
			'		ON doi.id_observation = dob.id_observation '.
502
						   'LEFT JOIN del_image di '.
486
			'	LEFT JOIN del_image AS di '.
503
						   'ON di.id_image = doi.id_image ';
487
			'		ON di.id_image = doi.id_image '.
504
		$requeteLiaisons .= $this->chargerClauseWhere();
488
			$this->chargerClauseWhere().
505
		$requeteLiaisons .= ' GROUP BY doi.id_observation';
489
			' GROUP BY doi.id_observation'.
506
		$requeteLiaisons .= ' ORDER BY '.$this->tri.' '.$this->directionTri.' ';
490
			' ORDER BY '.$this->tri.' '.$this->directionTri.' '.
507
		$requeteLiaisons .= $this->gestionBdd->getLimitSql();
491
			$this->gestionBdd->getLimitSql();
508
		
492
 
509
		return $this->bdd->recupererTous($requeteLiaisons);
493
		return $this->bdd->recupererTous($requeteLiaisons);
510
	}
494
	}
511
	
-
 
512
	
495
 
513
	private function chargerLiaisonsSimple() {
496
	private function chargerLiaisonsSimple() {
-
 
497
		$requeteObs = 'SELECT SQL_CALC_FOUND_ROWS '.
514
		$requeteObs = 'SELECT SQL_CALC_FOUND_ROWS dob.id_observation, nom_sel, famille, ce_zone_geo, zone_geo, lieudit, '.
498
			'	dob.id_observation, nom_sel, famille, ce_zone_geo, zone_geo, lieudit, '.
515
				'station, milieu, date_observation, dob.mots_cles_texte, date_transmission, '.
499
			'	station, milieu, date_observation, dob.mots_cles_texte, date_transmission, '.
516
				'dob.ce_utilisateur, prenom, nom, courriel, '.
500
			'	dob.ce_utilisateur, prenom, nom, courriel, '.
517
				'dob.prenom_utilisateur, dob.nom_utilisateur, dob.courriel_utilisateur, '.
501
			'	dob.prenom_utilisateur, dob.nom_utilisateur, dob.courriel_utilisateur, '.
518
				'dob.commentaire as dob_commentaire, '.
502
			'	dob.commentaire as dob_commentaire, '.
519
				'dob.nt, dob.nom_sel_nn '.
503
			'	dob.nt, dob.nom_sel_nn '.
520
				'FROM del_observation dob '.
504
			'FROM del_observation AS dob '.
-
 
505
			'	LEFT JOIN del_utilisateur AS du
521
				' LEFT JOIN del_utilisateur du ON dob.ce_utilisateur = du.id_utilisateur '.
506
					ON dob.ce_utilisateur = du.id_utilisateur '.
522
				' ORDER BY id_observation DESC ';
507
			'ORDER BY id_observation DESC '.
523
		$requeteObs .= $this->gestionBdd->getLimitSql();
508
			$this->gestionBdd->getLimitSql();
524
		$liaisons = $this->bdd->recupererTous($requeteObs);
509
		$liaisons = $this->bdd->recupererTous($requeteObs);
Line 525... Line 510...
525
 
510
 
526
		return $liaisons;
511
		return $liaisons;
527
	}
512
	}
528
	
513
 
529
	/**
514
	/**
530
	* Compter le nombre total d'images dans la base pour affichage dans entete.
515
	* Compter le nombre total d'images dans la base pour affichage dans entete.
531
	* */
516
	* */
532
	private function compterObservations() {
517
	private function compterObservations() {
533
		$requete = 'SELECT FOUND_ROWS() AS nbre ';
518
		$requete = 'SELECT FOUND_ROWS() AS nbre ';
534
		$resultats = $this->bdd->recuperer($requete);
519
		$resultats = $this->bdd->recuperer($requete);
535
		return (int) $resultats['nbre'];
520
		return (int) $resultats['nbre'];
536
	}
521
	}
537
	
522
 
538
	/**
523
	/**
539
	* Retourner un tableau d'images formaté en fonction des liaisons trouvées
524
	* Retourner un tableau d'images formaté en fonction des liaisons trouvées
540
	* @param $liaisons les liaisons de la table del_obs_images
525
	* @param $liaisons les liaisons de la table del_obs_images
541
	* */
526
	* */
542
	private function chargerObservations($liaisons) {
-
 
543
	
527
	private function chargerObservations($liaisons) {
544
		$observations = array();
528
		$observations = array();
545
		foreach ($liaisons as $liaison) {
529
		foreach ($liaisons as $liaison) {
546
			$idObs = $liaison[$this->mappingObservation['id_observation']];
530
			$idObs = $liaison[$this->mappingObservation['id_observation']];
547
			
531
 
548
			if($liaison['ce_utilisateur'] == 0) {
532
			if($liaison['ce_utilisateur'] == 0) {
549
				$liaison['prenom'] = $liaison['prenom_utilisateur'];
533
				$liaison['prenom'] = $liaison['prenom_utilisateur'];
550
				$liaison['nom'] = $liaison['nom_utilisateur'];
534
				$liaison['nom'] = $liaison['nom_utilisateur'];
551
			}
535
			}
552
			
536
 
553
			$observation = $this->formaterObservation($liaison);
537
			$observation = $this->formaterObservation($liaison);
554
			 
538
 
555
			// attention, il est important que les index du tableau soient des chaines 
539
			// attention, il est important que les index du tableau soient des chaines
556
			// de caractères pour que l'ordre d'insertion soit respecté lors de la lecture
540
			// de caractères pour que l'ordre d'insertion soit respecté lors de la lecture
557
			// du json par les navigateur (voir bug du moteur javascript v8 #164)
541
			// du json par les navigateur (voir bug du moteur javascript v8 #164)
558
			$observations['"'.$idObs.'"'] = $observation;
542
			$observations['"'.$idObs.'"'] = $observation;
559
		}
543
		}
560
		return $observations;
544
		return $observations;
561
	}
545
	}
562
	
546
 
563
	/**
547
	/**
564
	 * Sélectionner toutes les images de chaque observation
548
	 * Sélectionner toutes les images de chaque observation
565
	 * @param array $observations la liste des observations 
549
	 * @param array $observations la liste des observations
566
	 * */
550
	 * */
567
	private function chargerImages($observations) {
-
 
-
 
551
	private function chargerImages($observations) {
568
		
552
		$idObs = $observation['id_observation'];
569
		foreach ($observations as $id => $observation) {
-
 
570
			
553
		foreach ($observations as $id => $observation) {
-
 
554
			$requeteImages = 'SELECT * '.
571
			$requeteImages = 'SELECT * FROM '. $this->gestionBdd->formaterTable('del_obs_image', 'doi').
555
				'FROM del_obs_image AS doi '.
572
							 'INNER JOIN '.$this->gestionBdd->formaterTable('del_image', 'di').
556
				'	INNER JOIN del_image AS di '.
573
							 'ON doi.id_image = di.id_image '.
557
				'		ON doi.id_image = di.id_image '.
574
							 'WHERE doi.id_observation = '.$observation['id_observation'];
558
				"WHERE doi.id_observation = $idObs ";
575
			
559
 
576
			$images = $this->bdd->recupererTous($requeteImages);
560
			$images = $this->bdd->recupererTous($requeteImages);
577
			$images = $this->formaterImages($images);
561
			$images = $this->formaterImages($images);
578
			$observations[$id]['images'] = $images;
562
			$observations[$id]['images'] = $images;
579
		}
563
		}
580
		
564
 
581
		return $observations;
565
		return $observations;
582
	}
566
	}
583
	
567
 
584
	/**
568
	/**
585
	* Récupérer toutes les déterminations et le nombre de commentaire au total
569
	* Récupérer toutes les déterminations et le nombre de commentaire au total
586
	* @param array $observations la liste des observations à mettre à jour
570
	* @param array $observations la liste des observations à mettre à jour
587
	* */
571
	* */
588
	private function chargerDeterminations($observations) {
572
	private function chargerDeterminations($observations) {
-
 
573
		foreach ($observations as $id => $observation) {
589
		foreach ($observations as $id => $observation) {
574
			$idObs = $observation['id_observation'];
-
 
575
			$requetePropositions = 'SELECT * '.
590
			$requetePropositions = 'SELECT * FROM '.$this->gestionBdd->formaterTable('del_commentaire', 'dc').
576
				'FROM del_commentaire AS dc '.
-
 
577
				'WHERE dc.nom_sel IS NOT NULL '.
591
									   'WHERE dc.nom_sel IS NOT NULL AND ce_observation = '.$observation['id_observation'];
578
				"	AND ce_observation = $idObs ";
592
			$propositions = $this->bdd->recupererTous($requetePropositions);
579
			$propositions = $this->bdd->recupererTous($requetePropositions);
593
			$observations[$id]['commentaires'] = $this->formaterDeterminations($propositions);
580
			$observations[$id]['commentaires'] = $this->formaterDeterminations($propositions);
594
		}
581
		}
595
		return $observations;
582
		return $observations;
596
	}
583
	}
597
	
584
 
598
	/**
585
	/**
599
	 * Charger les votes sur les déterminations
586
	 * Charger les votes sur les déterminations
600
	 * @param Array $observations le tableau des observations à mettre à jour
587
	 * @param Array $observations le tableau des observations à mettre à jour
601
	* */
588
	* */
-
 
589
	private function chargerVotes($ids_proposition, $propositions) {
602
	private function chargerVotes($ids_proposition, $propositions) {
590
		$listePropositions = implode(', ', $ids_proposition);
603
		$requeteVotes = 'SELECT * FROM '.
591
		$requeteVotes = 'SELECT * '.
604
			$this->gestionBdd->formaterTable('del_commentaire_vote').
592
			'FROM del_commentaire_vote '.
605
			'WHERE ce_proposition IN ('.implode(', ', $ids_proposition).')';
593
			"WHERE ce_proposition IN ($listePropositions)";
606
			
594
 
607
		$resultatsVotes = $this->bdd->recupererTous($requeteVotes);
595
		$resultatsVotes = $this->bdd->recupererTous($requeteVotes);
608
		foreach ($resultatsVotes as $vote) {
596
		foreach ($resultatsVotes as $vote) {
609
			$propositions[$vote['ce_proposition']]['votes'][$vote['id_vote']] = $this->formaterVote($vote);
597
			$propositions[$vote['ce_proposition']]['votes'][$vote['id_vote']] = $this->formaterVote($vote);
610
		}
598
		}
611
		return $propositions;
599
		return $propositions;
612
	}
600
	}
613
	
601
 
614
	/**
602
	/**
615
	 * Charger le nombre de commentaires (sans détermination) associé à l'observation
603
	 * Charger le nombre de commentaires (sans détermination) associé à l'observation
616
	 * @param Array $observations le tableau des observatins à mettre à jour
604
	 * @param Array $observations le tableau des observatins à mettre à jour
617
	 * */
605
	 * */
-
 
606
	private function chargerNombreCommentaire($ids_proposition, $propositions) {
618
	private function chargerNombreCommentaire($ids_proposition, $propositions) {
607
		$listePropositions = implode(', ', $ids_proposition);
619
		$requeteNbCommentaires = 'SELECT ce_commentaire_parent, ce_proposition, count( id_commentaire ) AS nb '.
608
		$requeteNbCommentaires = 'SELECT ce_commentaire_parent, ce_proposition, COUNT( id_commentaire ) AS nb '.
620
								 'FROM del_commentaire '.
609
			'FROM del_commentaire '.
621
								 'WHERE ce_proposition IN ( '.implode(', ', $ids_proposition).') '.
610
			"WHERE ce_proposition IN ($listePropositions) ".
Line 622... Line 611...
622
								 'GROUP BY ce_proposition';
611
			'GROUP BY ce_proposition ';
623
 
612
 
624
		$listeCommentaires = $this->bdd->recupererTous($requeteNbCommentaires);
613
		$listeCommentaires = $this->bdd->recupererTous($requeteNbCommentaires);
625
		
614
 
626
		foreach ($listeCommentaires as $ligneProposition) {
615
		foreach ($listeCommentaires as $ligneProposition) {
627
			// ce test sert à exclure les proposition de 1er niveau qui sont elles aussi des commentaires
616
			// ce test sert à exclure les proposition de 1er niveau qui sont elles aussi des commentaires
628
			if($ligneProposition['ce_commentaire_parent'] != null && $ligneProposition['ce_commentaire_parent'] != 0) {
617
			if($ligneProposition['ce_commentaire_parent'] != null && $ligneProposition['ce_commentaire_parent'] != 0) {
629
				$propositions[$ligneProposition['ce_commentaire_parent']]['nb_commentaires'] = $ligneProposition['nb'];
618
				$propositions[$ligneProposition['ce_commentaire_parent']]['nb_commentaires'] = $ligneProposition['nb'];
630
			} else {
619
			} else {
631
				$propositions[$ligneProposition['ce_proposition']]['observation']['nb_commentaires'] = $ligneProposition['nb'];
620
				$propositions[$ligneProposition['ce_proposition']]['observation']['nb_commentaires'] = $ligneProposition['nb'];
632
			}
-
 
633
		}
-
 
634
		
621
			}
635
		
622
		}
636
		return $propositions;
623
		return $propositions;
637
	}
624
	}
638
	
625
 
639
	/*-------------------------------------------------------------------------------
626
	/*-------------------------------------------------------------------------------
640
								FORMATER ET METTRE EN FORME
627
								FORMATER ET METTRE EN FORME
641
	--------------------------------------------------------------------------------*/
628
	--------------------------------------------------------------------------------*/
642
	
629
 
643
	/**
630
	/**
644
	 * Formater les images d'une observation
631
	 * Formater les images d'une observation
645
	 * @param array $images les images de l'observation
632
	 * @param array $images les images de l'observation
Line 651... Line 638...
651
			$imageCourante['id_image'] = $image['id_image'];
638
			$imageCourante['id_image'] = $image['id_image'];
652
			$imageCourante['date'] = $image['date_prise_de_vue'];
639
			$imageCourante['date'] = $image['date_prise_de_vue'];
653
			$imageCourante['binaire.href'] = $this->formaterLienImage($image['id_image']);
640
			$imageCourante['binaire.href'] = $this->formaterLienImage($image['id_image']);
654
			$imageCourante['hauteur'] = $image['hauteur'];
641
			$imageCourante['hauteur'] = $image['hauteur'];
655
			$imageRetour['largeur'] = $image['largeur'];
642
			$imageRetour['largeur'] = $image['largeur'];
656
			
643
 
657
			$imagesRetour[] = $imageCourante;
644
			$imagesRetour[] = $imageCourante;
658
		}
645
		}
659
		
-
 
660
		return $imagesRetour;
646
		return $imagesRetour;
661
	} 
647
	}
662
	
648
 
663
	/**
649
	/**
664
	*  Formater une observation depuis une ligne liaison
650
	*  Formater une observation depuis une ligne liaison
665
	*  @param $liaison liaison issue de la recherche
651
	*  @param $liaison liaison issue de la recherche
666
	*  @return $observation l'observation mise en forme
652
	*  @return $observation l'observation mise en forme
667
	* */
653
	* */
Line 669... Line 655...
669
		$observation = array();
655
		$observation = array();
670
		foreach ($this->mappingObservation as $nomOriginal => $nomFinal) {
656
		foreach ($this->mappingObservation as $nomOriginal => $nomFinal) {
671
			$observation[$nomFinal] = $liaison[$nomOriginal];
657
			$observation[$nomFinal] = $liaison[$nomOriginal];
672
		}
658
		}
673
		$observation['images'] = array();
659
		$observation['images'] = array();
674
 
-
 
675
		return $observation;
660
		return $observation;
676
	}
661
	}
677
	
662
 
678
	/**
663
	/**
679
	 * Formater le lien de l'image en fonction du fichier de config et de l'identifiant de l'image
664
	 * Formater le lien de l'image en fonction du fichier de config et de l'identifiant de l'image
680
	 * */
665
	 * */
681
	private function formaterLienImage($idImage) {
666
	private function formaterLienImage($idImage) {
682
		$idImage = sprintf('%09s', $idImage);
667
		$idImage = sprintf('%09s', $idImage);
683
		$url = $this->conteneur->getParametre('url_images');
668
		$url = $this->conteneur->getParametre('url_images');
684
		$urlImage = str_replace('%s', $idImage, $url);
669
		$urlImage = str_replace('%s', $idImage, $url);
685
		return $urlImage;
670
		return $urlImage;
686
	}
671
	}
687
	
672
 
688
	/**
673
	/**
689
	 * 
674
	 *
690
	 * Formate une liste de proposition en fonction du fichier de configuration
675
	 * Formate une liste de proposition en fonction du fichier de configuration
691
	 */
676
	 */
692
	private function formaterDeterminations($listePropositions) {
677
	private function formaterDeterminations($listePropositions) {
693
	
-
 
694
		$propositions_format = array();
678
		$propositions_format = array();
695
		if ($listePropositions != array()) {
679
		if ($listePropositions != array()) {
696
			foreach ($listePropositions as $id => $proposition) {
680
			foreach ($listePropositions as $id => $proposition) {
697
				$ids_proposition[] = $proposition['id_commentaire'];
681
				$ids_proposition[] = $proposition['id_commentaire'];
698
	
682
 
699
				$proposition_formatee = array('nb_commentaires' => "0");
683
				$proposition_formatee = array('nb_commentaires' => '0');
700
				foreach ($this->mappingCommentaire as $nomOriginal => $nomFinal) {
684
				foreach ($this->mappingCommentaire as $nomOriginal => $nomFinal) {
701
					if (isset($proposition[$nomOriginal])) {
685
					if (isset($proposition[$nomOriginal])) {
702
						$proposition_formatee[$nomFinal] = $proposition[$nomOriginal];
686
						$proposition_formatee[$nomFinal] = $proposition[$nomOriginal];
703
					}
687
					}
704
				}
688
				}
705
				$propositions_format[$proposition['id_commentaire']] = $proposition_formatee;
689
				$propositions_format[$proposition['id_commentaire']] = $proposition_formatee;
706
			}
690
			}
707
				
-
 
708
			$propositions_format = $this->chargerVotes($ids_proposition, $propositions_format);
691
			$propositions_format = $this->chargerVotes($ids_proposition, $propositions_format);
709
			$propositions_format = $this->chargerNombreCommentaire($ids_proposition, $propositions_format);
692
			$propositions_format = $this->chargerNombreCommentaire($ids_proposition, $propositions_format);
710
				
-
 
711
		}
693
		}
712
		return $propositions_format;
694
		return $propositions_format;
713
	}
695
	}
714
	
696
 
715
	/**
697
	/**
716
	*  Formater un vote en fonction du fichier de configuration config_votes.ini
698
	*  Formater un vote en fonction du fichier de configuration config_votes.ini
717
	*  @param $votes array()
699
	*  @param $votes array()
718
	* */
700
	* */
719
	private function formaterVote($vote) {
701
	private function formaterVote($vote) {
Line 721... Line 703...
721
		foreach ($vote as $param=>$valeur) {
703
		foreach ($vote as $param=>$valeur) {
722
			$retour[$this->mappingVotes[$param]] = $valeur;
704
			$retour[$this->mappingVotes[$param]] = $valeur;
723
		}
705
		}
724
		return $retour;
706
		return $retour;
725
	}
707
	}
726
	
708
 
727
	private function proteger($valeur) {
709
	private function proteger($valeur) {
728
		if (is_array($valeur)) {
710
		if (is_array($valeur)) {
729
			return $this->bdd->protegerTableau($valeur);
711
			return $this->bdd->protegerTableau($valeur);
730
		} else {
712
		} else {
731
			return $this->bdd->proteger($valeur);
713
			return $this->bdd->proteger($valeur);