Subversion Repositories eFlore/Applications.del

Rev

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

Rev 779 Rev 791
Line 26... Line 26...
26
	private $parametres = array();
26
	private $parametres = array();
27
	private $ressources = array();
27
	private $ressources = array();
Line 28... Line 28...
28
	
28
	
29
	public function __construct(Conteneur $conteneur = null) {
29
	public function __construct(Conteneur $conteneur = null) {
30
		$this->conteneur = $conteneur == null ? new Conteneur() : $conteneur;
30
		$this->conteneur = $conteneur == null ? new Conteneur() : $conteneur;
31
		$this->conteneur->chargerConfiguration('config_departements.ini');
31
		$this->conteneur->chargerConfiguration('config_departements_bruts.ini');
32
		$this->conteneur->chargerConfiguration('config_votes.ini');
32
		$this->conteneur->chargerConfiguration('config_votes.ini');
33
		$this->conteneur->chargerConfiguration('config_images.ini');
33
		$this->conteneur->chargerConfiguration('config_images.ini');
34
		$this->navigation = $conteneur->getNavigation();
34
		$this->navigation = $conteneur->getNavigation();
35
		$this->masque = $conteneur->getMasque();
35
		$this->masque = $conteneur->getMasque();
Line 146... Line 146...
146
	
146
	
147
	/**
147
	/**
148
	* Charger la clause WHERE en fonction des paramètres de masque
148
	* Charger la clause WHERE en fonction des paramètres de masque
149
	* */
149
	* */
-
 
150
	private function chargerClauseWhere() {
-
 
151
		// TODO: factoriser cette fonction qui est quasiment identique dans liste image et dans liste observation
150
	private function chargerClauseWhere() {
152
		// faire une classe mère, une classe utilitaire ?
151
		$where = array();
153
		$where = array();
152
		$tableauMasque = $this->masque->getMasque();
-
 
153
		// FIXME : Les communes avec une apostrophe (ex: saint michel d'euzet) arrivent dans les paramètres sans l'apostrophe
154
		$tableauMasque = $this->masque->getMasque();
154
		if (!empty($tableauMasque)) {
155
		if (!empty($tableauMasque)) {
155
			foreach($tableauMasque as $idMasque => $valeurMasque) {
-
 
-
 
156
			foreach($tableauMasque as $idMasque => $valeurMasque) {
-
 
157
				//TODO: scinder ceci en fonctions réutilisables ? 
156
					
158
				// voir si c'est interessant par rapport à la recherche générale	
157
				$idMasque = str_replace('masque.', '', $idMasque);
159
				$idMasque = str_replace('masque.', '', $idMasque);
158
				switch ($idMasque) {
160
				switch ($idMasque) {
159
					// nom du masque => nom BDD
161
					// nom du masque => nom BDD
160
					case 'auteur' :
162
					case 'auteur' :
161
						$auteurId = $this->masque->getMasque('auteur');
163
						$whereAuteur = ' '.$this->creerFiltreAuteur($this->masque->getMasque('auteur'));
162
						if (is_numeric($auteurId)) {
164
						if($whereAuteur != '') {
163
							$where[] = ' ce_utilisateur = '.$auteurId;
-
 
164
						} else {
-
 
165
							if (strpos($auteurId, '@') === false) {
-
 
166
								$chaineNomPrenom = $this->getChaineNomPrenom($auteurId);
-
 
167
								$where[] = '((nom IN ('.$chaineNomPrenom.')) OR (prenom IN ('.$chaineNomPrenom.')))';
-
 
168
							} else {
-
 
169
								$where[] = " courriel LIKE ".$this->proteger($this->masque->getMasque('auteur').'%')." ";
-
 
170
							}
165
							$where[] = $whereAuteur;
171
						}
166
						}
172
						break;
-
 
173
			
-
 
174
						//TODO : gérer le format de la date ?
-
 
175
						// rechercher sur LIKE DATE % ?
-
 
176
						// TODO : recherche sur JOUR MOIS ou ANNEE
167
						break;
177
					case 'departement' :
168
					case 'date' :
178
						$dept = $valeurMasque;
169
						$whereDate = ' '.$this->creerFiltreDate($valeurMasque);
179
						if (is_numeric($dept)) {
-
 
180
							$where[] = " ce_zone_geo LIKE ".$this->proteger('INSEE-C:'.$dept.'%');
-
 
181
						} else {
-
 
182
							
-
 
183
							//FIXME : et les apostrophes dans les départements ?
-
 
184
							
-
 
185
							$deptId = $this->conteneur->getParametre($dept);
170
						if($whereDate != '') {
186
							if ($deptId != null) {
-
 
187
								$where[] = " ce_zone_geo LIKE ".$this->proteger('INSEE-C:'.$deptId.'%');
-
 
188
							}
171
							$where[] = $whereDate;
189
						}
172
						}
-
 
173
						break;
-
 
174
					case 'departement' :
-
 
175
						$where[] = ' '.$this->creerFiltreIdZoneGeo($valeurMasque);
190
						break;
176
						break;
191
					case 'genre' :
177
					case 'genre' :
192
						$where[] = ' '.$this->mappingFiltre['ns'].' LIKE '.$this->proteger($valeurMasque.' %');
178
						$where[] = ' '.$this->mappingFiltre['ns'].' LIKE '.$this->proteger($valeurMasque.' %');
193
						break;
179
						break;
194
					case 'tag' :
180
					case 'tag' :
195
						$where[] = " di.mots_cles_texte LIKE ".$this->proteger($valeurMasque);
181
						$where[] = ' '.$this->creerFiltreMotsCles($valeurMasque);
196
						break;
182
						break;
197
					case 'ns' :
183
					case 'ns' :
-
 
184
						$where[] = ' nom_sel LIKE '.$this->proteger($valeurMasque.'%');
-
 
185
						break;	
-
 
186
					case 'commune' :
-
 
187
						$where[] = ' '.$this->mappingFiltre[$idMasque].' LIKE '.$this->proteger(str_replace(array('-',' '), '_', $valeurMasque).'%');
-
 
188
					break;
-
 
189
					case 'masque' :
198
						$where[] = " nom_sel LIKE ".$this->proteger($valeurMasque.'%');
190
						$where[] = ' '.$this->creerFiltreMasqueGeneral($valeurMasque);
199
						break;
191
						break;
200
					default:
192
					default:
201
						$where[] = ' '.$this->mappingFiltre[$idMasque].' = '.$this->proteger($valeurMasque);
193
						$where[] = ' '.$this->mappingFiltre[$idMasque].' = '.$this->proteger($valeurMasque);
202
					break;
194
					break;
Line 209... Line 201...
209
		} else {
201
		} else {
210
			return;
202
			return;
211
		}
203
		}
212
	}
204
	}
Line -... Line 205...
-
 
205
	
-
 
206
	private function creerFiltreMasqueGeneral($valeurMasque) {
-
 
207
		//TODO: affecter d'aborder les variables, puis les tester pour les 
-
 
208
		// ajouter à la chaine
-
 
209
		$whereAuteur = $this->creerFiltreAuteur($valeurMasque);
-
 
210
		$whereIdZoneGeo = $this->creerFiltreIdZoneGeo($valeurMasque);		
-
 
211
		
-
 
212
		$masqueGeneral = '( '.
-
 
213
                   	(($whereAuteur != '') ? $whereAuteur.' OR ' : '' ).
-
 
214
				   	(($whereIdZoneGeo != '') ? $whereIdZoneGeo.' OR ' : '' ).
-
 
215
					'zone_geo LIKE '.$this->proteger($this->remplacerParJokerCaractere($valeurMasque).'%').' OR '.
-
 
216
					$this->creerFiltreMotsCles($valeurMasque).' OR '.
-
 
217
					'nom_sel LIKE '.$this->proteger($valeurMasque.'%').' OR '.
-
 
218
					'famille LIKE '.$this->proteger($valeurMasque.'%').' OR '.
-
 
219
					'milieu LIKE '.$this->proteger($valeurMasque).' OR '.
-
 
220
					$this->mappingFiltre['ns'].' LIKE '.$this->proteger('%'.$valeurMasque.'% %').' OR '.
-
 
221
					$this->creerFiltreDate($valeurMasque).
-
 
222
					') ';
-
 
223
	
-
 
224
		return $masqueGeneral;
-
 
225
	}
-
 
226
	
-
 
227
	private function creerFiltreAuteur($valeurMasque) {
-
 
228
		$masque = '';
-
 
229
		$auteurId = $valeurMasque;
-
 
230
		if (is_numeric($auteurId)) {
-
 
231
			$masque = ' ce_utilisateur = '.$auteurId;
-
 
232
		} else {
-
 
233
			if (strpos($auteurId, '@') === false) {
-
 
234
				$tableauNomPrenom = explode(' ',$auteurId, 2);
-
 
235
				if(count($tableauNomPrenom) == 2) {
-
 
236
					// on teste potentiellement un nom prenom ou bien un prénom nom
-
 
237
					$masque = '('.
-
 
238
						          	'(nom LIKE '.$this->proteger($tableauNomPrenom[0].'%').' AND '.
-
 
239
								  	'prenom LIKE '.$this->proteger($tableauNomPrenom[1].'%').') OR '.
-
 
240
								 	'(nom LIKE '.$this->proteger($tableauNomPrenom[1].'%').' AND '.
-
 
241
								  	'prenom LIKE '.$this->proteger($tableauNomPrenom[0].'%').')'.
-
 
242
								  ')';
-
 
243
				} else {
-
 
244
					$masque = '(
-
 
245
						            (nom LIKE '.$this->proteger($auteurId.'%').' OR '.
-
 
246
									'prenom LIKE '.$this->proteger($auteurId.'%').')'.
-
 
247
								  ')';
-
 
248
				}
-
 
249
			} else {
-
 
250
				$masque = " courriel LIKE ".$this->proteger($valeurMasque.'%')." ";
-
 
251
			}
-
 
252
		}
-
 
253
		return $masque;
-
 
254
	}
-
 
255
	
-
 
256
	private function remplacerParJokerCaractere($valeurMasque) {
-
 
257
		return str_replace(array('-',' '), '_', $valeurMasque);
-
 
258
	}
-
 
259
	//TODO: déplacer les fonctions ci dessus et dessous dans une classe
-
 
260
	// utilitaire
-
 
261
	function supprimerAccents($str, $charset='utf-8')
-
 
262
	{
-
 
263
		$str = htmlentities($str, ENT_NOQUOTES, $charset);
-
 
264
	
-
 
265
		$str = preg_replace('#&([A-za-z])(?:acute|cedil|circ|grave|orn|ring|slash|th|tilde|uml);#', '\1', $str);
-
 
266
		$str = preg_replace('#&([A-za-z]{2})(?:lig);#', '\1', $str); // pour les ligatures e.g. 'œ'
-
 
267
		$str = preg_replace('#&[^;]+;#', '', $str); // supprime les autres caractères
-
 
268
	
-
 
269
		return $str;
-
 
270
	}
-
 
271
	
-
 
272
	private function obtenirIdDepartement($nomDpt) {
-
 
273
		
-
 
274
		$nomDpt = $this->supprimerAccents($nomDpt);
-
 
275
		$nomDpt = strtolower(str_replace(' ','-',$nomDpt));
-
 
276
		
-
 
277
		$idDpt = $this->conteneur->getParametre($nomDpt);
-
 
278
		if($idDpt == null || $idDpt == ' ') {
-
 
279
			$idDpt = ' ';
-
 
280
		}
-
 
281
		return $idDpt;
-
 
282
	}
-
 
283
	
-
 
284
	private function creerFiltreIdZoneGeo($valeurMasque) {
-
 
285
		$masque = '';
-
 
286
		$dept = $valeurMasque;
-
 
287
		if (is_numeric($dept)) {
-
 
288
			$dept = sprintf('%02s', $dept);
-
 
289
			$dept = sprintf("%-'_5s", $dept);
-
 
290
			$masque = " ce_zone_geo LIKE ".$this->proteger('INSEE-C:'.$dept);
-
 
291
		} else {
-
 
292
			$deptId = $this->conteneur->getParametre($dept);
-
 
293
			if ($deptId != null) {
-
 
294
				$masque = " ce_zone_geo LIKE ".$this->proteger('INSEE-C:'.$deptId.'%');
-
 
295
			} else {
-
 
296
				$id = $this->obtenirIdDepartement($valeurMasque);
-
 
297
				$masque = " ce_zone_geo LIKE ".$this->proteger('INSEE-C:'.$id.'%');
-
 
298
			}
-
 
299
		}
-
 
300
		return $masque;
-
 
301
	}
-
 
302
	
-
 
303
	private function creerFiltreDate($valeurMasque) {
-
 
304
		//TODO: définir dans le fichier de config un tableau contenant plusieurs format de date
-
 
305
		// autorisés pour la recherche, qui seraient ajoutés au OR
-
 
306
		$masque = '(';
-
 
307
		$masque .= (is_numeric($valeurMasque)) ? ' YEAR(date_observation) = '.$this->proteger($valeurMasque).' OR ' : '';
-
 
308
		$masque .= " DATE_FORMAT(date_observation, '%d/%m/%Y') = ".$this->proteger($valeurMasque).' '.
-
 
309
		           ')';
-
 
310
		return $masque;
-
 
311
	}
-
 
312
	
-
 
313
	private function creerFiltreMotsCles($valeurMasque) {
-
 
314
		$masque = '(di.mots_cles_texte LIKE '.$this->proteger('%'.$valeurMasque.'%').' OR '.
-
 
315
		                 ' dob.mots_cles_texte LIKE '.$this->proteger('%'.$valeurMasque.'%').') ';  
-
 
316
		return $masque;                                                  			
-
 
317
	}
213
	
318
	
214
	/*-------------------------------------------------------------------------------
319
	/*-------------------------------------------------------------------------------
215
								CHARGEMENT DES IMAGES 
320
								CHARGEMENT DES IMAGES 
216
	--------------------------------------------------------------------------------*/
321
	--------------------------------------------------------------------------------*/
217
	/**
322
	/**
Line 228... Line 333...
228
						   'INNER JOIN del_utilisateur du '.
333
						   'INNER JOIN del_utilisateur du '.
229
						   'ON du.id_utilisateur = doi.id_utilisateur';
334
						   'ON du.id_utilisateur = doi.id_utilisateur';
230
		$requeteLiaisons .= $this->chargerClauseWhere();
335
		$requeteLiaisons .= $this->chargerClauseWhere();
231
		$requeteLiaisons .= ' ORDER BY date_transmission DESC';
336
		$requeteLiaisons .= ' ORDER BY date_transmission DESC';
232
		$requeteLiaisons .= $this->gestionBdd->getLimitSql();
337
		$requeteLiaisons .= $this->gestionBdd->getLimitSql();
233
		
338
 
234
		return $this->bdd->recupererTous($requeteLiaisons);
339
		return $this->bdd->recupererTous($requeteLiaisons);
235
	}
340
	}
Line 236... Line 341...
236
	
341
	
237
	/**
342
	/**