Subversion Repositories eFlore/Applications.del

Rev

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

Rev 790 Rev 797
Line 21... Line 21...
21
	private $conteneur;
21
	private $conteneur;
22
	private $navigation;
22
	private $navigation;
23
	private $masque;
23
	private $masque;
24
	private $gestionBdd;
24
	private $gestionBdd;
25
	private $bdd;
25
	private $bdd;
-
 
26
	private $parametres = array();
-
 
27
	private $ressources = array();
Line 26... Line 28...
26
	
28
	
27
	public function __construct(Conteneur $conteneur = null) {
29
	public function __construct(Conteneur $conteneur = null) {
28
		$this->conteneur = $conteneur == null ? new Conteneur() : $conteneur;
30
		$this->conteneur = $conteneur == null ? new Conteneur() : $conteneur;
29
		$this->conteneur->chargerConfiguration('config_departements_bruts.ini');
31
		$this->conteneur->chargerConfiguration('config_departements_bruts.ini');
30
		$this->conteneur->chargerConfiguration('config_observations.ini');
32
		$this->conteneur->chargerConfiguration('config_observations.ini');
31
		$this->conteneur->chargerConfiguration('config_votes.ini');
33
		$this->conteneur->chargerConfiguration('config_mapping_votes.ini');
32
		$this->navigation = $conteneur->getNavigation();
34
		$this->navigation = $conteneur->getNavigation();
33
		$this->masque = $conteneur->getMasque();
35
		$this->masque = $conteneur->getMasque();
34
		$this->gestionBdd = $conteneur->getGestionBdd();
36
		$this->gestionBdd = $conteneur->getGestionBdd();
35
		$this->bdd = $this->gestionBdd->getBdd();
37
		$this->bdd = $this->gestionBdd->getBdd();
Line 41... Line 43...
41
	 * pour l'afficher.
43
	 * pour l'afficher.
42
	 * @param array $ressources les ressources situées après l'url de base (ex : http://url/ressource1/ressource2)
44
	 * @param array $ressources les ressources situées après l'url de base (ex : http://url/ressource1/ressource2)
43
	 * @param array $parametres les paramètres situés après le ? dans l'url
45
	 * @param array $parametres les paramètres situés après le ? dans l'url
44
	 * */
46
	 * */
45
	public function consulter($ressources, $parametres) {
47
	public function consulter($ressources, $parametres) {
-
 
48
		$this->initialiserRessourcesEtParametres($ressources, $parametres);
Line 46... Line 49...
46
		
49
		
47
		// Gestion des configuration du script
50
		// Gestion des configuration du script
48
		$this->configurer();
51
		$this->configurer();
Line 60... Line 63...
60
		$resultat = new ResultatService();
63
		$resultat = new ResultatService();
61
		$resultat->corps = array('entete' => $this->conteneur->getEntete(), 'resultats' => $observations);
64
		$resultat->corps = array('entete' => $this->conteneur->getEntete(), 'resultats' => $observations);
62
		return $resultat;
65
		return $resultat;
63
	}
66
	}
Line -... Line 67...
-
 
67
	
-
 
68
	private function initialiserRessourcesEtParametres($ressources, $parametres) {
-
 
69
		$this->ressources = $ressources;
-
 
70
		$this->parametres = $parametres;
64
	
71
	}
65
	/*-------------------------------------------------------------------------------
72
	/*-------------------------------------------------------------------------------
66
	 							CONFIGURATION DU SERVICE
73
	 							CONFIGURATION DU SERVICE
67
	 --------------------------------------------------------------------------------*/
74
	 --------------------------------------------------------------------------------*/
68
	/**
75
	/**
Line 150... Line 157...
150
					
157
					
151
				$idMasque = str_replace('masque.', '', $idMasque);
158
				$idMasque = str_replace('masque.', '', $idMasque);
152
				switch ($idMasque) {
159
				switch ($idMasque) {
153
					// nom du masque => nom BDD
160
					// nom du masque => nom BDD
154
					case 'auteur' :
161
					case 'auteur' :
-
 
162
						$whereAuteur = ' '.$this->creerFiltreAuteur($this->masque->getMasque('auteur'));
-
 
163
						if($whereAuteur != '') {
-
 
164
							$where[] = $whereAuteur;
155
						$where[] = $this->creerFiltreAuteur($this->masque->getMasque('auteur'));
165
						}
156
						break;
166
						break;
157
					case 'date' :
167
					case 'date' :
-
 
168
						$whereDate = ' '.$this->creerFiltreDate($valeurMasque);
-
 
169
						if($whereDate != '') {
-
 
170
							$where[] = $whereDate;
158
						$where[] = $this->creerFiltreDate($valeurMasque);
171
						}
159
						break;
172
						break;
160
					case 'departement' :
173
					case 'departement' :
161
						$where[] = $this->creerFiltreIdZoneGeo($valeurMasque);
174
						$where[] = ' '.$this->creerFiltreIdZoneGeo($valeurMasque);
162
						break;
175
						break;
163
					case 'genre' :
176
					case 'genre' :
164
						$where[] = ' '.$this->mappingFiltre['ns'].' LIKE '.$this->proteger('%'.$valeurMasque.'% %');
177
						$where[] = ' '.$this->mappingFiltre['ns'].' LIKE '.$this->proteger('%'.$valeurMasque.'% %');
165
						break;
178
						break;
166
					case 'tag' :
179
					case 'tag' :
167
						$where[] = $this->creerFiltreMotsCles($valeurMasque);
-
 
168
						break;
-
 
169
					case 'nn' :
-
 
170
						$where[] = ' '.$this->mappingFiltre['nn'].'  = '.$this->proteger($valeurMasque);
180
						$where[] = ' '.$this->creerFiltreMotsCles($valeurMasque);
171
						break;
181
						break;
172
					case 'ns' :
182
					case 'ns' :
173
						$where[] = " nom_sel LIKE ".$this->proteger($valeurMasque.'%');
183
						$where[] = ' nom_sel LIKE '.$this->proteger($valeurMasque.'%');
174
						break;
184
						break;	
175
					case 'commune' :
185
					case 'commune' :
176
						$where[] = ' '.$this->mappingFiltre[$idMasque].' LIKE '.$this->proteger($this->remplacerParJokerCaractere($valeurMasque).'%');
186
						$where[] = ' '.$this->mappingFiltre[$idMasque].' LIKE '.$this->proteger(str_replace(array('-',' '), '_', $valeurMasque).'%');
177
					break;
187
					break;
178
					case 'masque' :
188
					case 'masque' :
179
						$where[] = $this->creerFiltreMasqueGeneral($valeurMasque);
189
						$where[] = ' '.$this->creerFiltreMasqueGeneral($valeurMasque);
180
						break;
190
						break;
181
					default:
191
					default:
-
 
192
						$where[] = ' '.$this->mappingFiltre[$idMasque].' = '.$this->proteger($valeurMasque);
182
						$where[] = ' '.$this->mappingFiltre[$idMasque].' LIKE '.$this->proteger('%'.$valeurMasque.'%');
193
					break;
183
				}
194
				}
184
			}	
195
			}	
Line 185... Line 196...
185
		}
196
		}
Line 190... Line 201...
190
			return;
201
			return;
191
		}
202
		}
192
	}
203
	}
Line 193... Line 204...
193
	
204
	
194
	private function creerFiltreMasqueGeneral($valeurMasque) {
-
 
195
		
205
	private function creerFiltreMasqueGeneral($valeurMasque) {
-
 
206
		//TODO: affecter d'aborder les variables, puis les tester pour les
196
		// créer filtre auteur et idzone géo peuvent renvoyer des valeurs vides
207
		// ajouter à la chaine
197
		$whereAuteur = $this->creerFiltreAuteur($valeurMasque);
208
		$whereAuteur = $this->creerFiltreAuteur($valeurMasque);
198
		$whereIdZoneGeo = $this->creerFiltreIdZoneGeo($valeurMasque);		
209
		$whereIdZoneGeo = $this->creerFiltreIdZoneGeo($valeurMasque);
199
		
210
	
200
		$masqueGeneral = '( '.
211
		$masqueGeneral = '( '.
201
                   	(($whereAuteur != '') ? $whereAuteur.' OR ' : '' ).
212
		(($whereAuteur != '') ? $whereAuteur.' OR ' : '' ).
202
				   	(($whereIdZoneGeo != '') ? $whereIdZoneGeo.' OR ' : '' ).
213
		(($whereIdZoneGeo != '') ? $whereIdZoneGeo.' OR ' : '' ).
203
					'zone_geo LIKE '.$this->proteger($this->remplacerParJokerCaractere($valeurMasque).'%').' OR '.
214
						'zone_geo LIKE '.$this->proteger($this->remplacerParJokerCaractere($valeurMasque).'%').' OR '.
204
					$this->creerFiltreMotsCles($valeurMasque).' OR '.
215
		$this->creerFiltreMotsCles($valeurMasque).' OR '.
205
					'nom_sel LIKE '.$this->proteger($valeurMasque.'%').' OR '.
216
						'nom_sel LIKE '.$this->proteger($valeurMasque.'%').' OR '.
206
					'famille LIKE '.$this->proteger($valeurMasque.'%').' OR '.
217
						'famille LIKE '.$this->proteger($valeurMasque.'%').' OR '.
207
					'milieu LIKE '.$this->proteger($valeurMasque).' OR '.
218
						'milieu LIKE '.$this->proteger($valeurMasque).' OR '.
208
					$this->mappingFiltre['ns'].' LIKE '.$this->proteger('%'.$valeurMasque.'% %').' OR '.
219
		$this->mappingFiltre['ns'].' LIKE '.$this->proteger('%'.$valeurMasque.'% %').' OR '.
209
					$this->creerFiltreDate($valeurMasque).
220
		$this->creerFiltreDate($valeurMasque).
Line 210... Line 221...
210
					') ';
221
						') ';
211
	
222
	
Line 212... Line 223...
212
		return $masqueGeneral;
223
		return $masqueGeneral;
Line 221... Line 232...
221
			if (strpos($auteurId, '@') === false) {
232
			if (strpos($auteurId, '@') === false) {
222
				$tableauNomPrenom = explode(' ',$auteurId, 2);
233
				$tableauNomPrenom = explode(' ',$auteurId, 2);
223
				if(count($tableauNomPrenom) == 2) {
234
				if(count($tableauNomPrenom) == 2) {
224
					// on teste potentiellement un nom prenom ou bien un prénom nom
235
					// on teste potentiellement un nom prenom ou bien un prénom nom
225
					$masque = '('.
236
					$masque = '('.
226
						          	'(nom LIKE '.$this->proteger($tableauNomPrenom[0].'%').' AND '.
237
							          	'(nom LIKE '.$this->proteger($tableauNomPrenom[0].'%').' AND '.
227
								  	'prenom LIKE '.$this->proteger($tableauNomPrenom[1].'%').') OR '.
238
									  	'prenom LIKE '.$this->proteger($tableauNomPrenom[1].'%').') OR '.
228
								 	'(nom LIKE '.$this->proteger($tableauNomPrenom[1].'%').' AND '.
239
									 	'(nom LIKE '.$this->proteger($tableauNomPrenom[1].'%').' AND '.
229
								  	'prenom LIKE '.$this->proteger($tableauNomPrenom[0].'%').')'.
240
									  	'prenom LIKE '.$this->proteger($tableauNomPrenom[0].'%').')'.
230
								  ')';
241
									  ')';
231
				} else {
242
				} else {
232
					$masque = '(
243
					$masque = '(
233
						            (nom LIKE '.$this->proteger($auteurId.'%').' OR '.
244
							            (nom LIKE '.$this->proteger($auteurId.'%').' OR '.
234
									'prenom LIKE '.$this->proteger($auteurId.'%').')'.
245
										'prenom LIKE '.$this->proteger($auteurId.'%').')'.
235
								  ')';
246
									  ')';
236
				}
247
				}
237
			} else {
248
			} else {
238
				$masque = " courriel LIKE ".$this->proteger($valeurMasque.'%')." ";
249
				$masque = " courriel LIKE ".$this->proteger($valeurMasque.'%')." ";
239
			}
250
			}
240
		}
251
		}
Line 242... Line 253...
242
	}
253
	}
Line 243... Line 254...
243
	
254
	
244
	private function remplacerParJokerCaractere($valeurMasque) {
255
	private function remplacerParJokerCaractere($valeurMasque) {
245
		return str_replace(array('-',' '), '_', $valeurMasque);
256
		return str_replace(array('-',' '), '_', $valeurMasque);
246
	}
257
	}
247
	//TODO: déplacer les fonctions ci dessus et dessous dans une classe 
258
	//TODO: déplacer les fonctions ci dessus et dessous dans une classe
248
	// utilitaire
259
	// utilitaire
249
	function supprimerAccents($str, $charset='utf-8')
260
	function supprimerAccents($str, $charset='utf-8')
250
	{
261
	{
Line 256... Line 267...
256
	
267
	
257
		return $str;
268
		return $str;
Line 258... Line 269...
258
	}
269
	}
259
	
270
	
260
	private function obtenirIdDepartement($nomDpt) {
271
	private function obtenirIdDepartement($nomDpt) {
261
		
272
	
262
		$nomDpt = $this->supprimerAccents($nomDpt);
273
		$nomDpt = $this->supprimerAccents($nomDpt);
263
		$nomDpt = strtolower(str_replace(' ','-',$nomDpt));
274
		$nomDpt = strtolower(str_replace(' ','-',$nomDpt));
264
		
275
	
265
		$idDpt = $this->conteneur->getParametre($nomDpt);
276
		$idDpt = $this->conteneur->getParametre($nomDpt);
266
		if($idDpt == null || $idDpt == ' ') {
277
		if($idDpt == null || $idDpt == ' ') {
267
			$idDpt = ' ';
278
			$idDpt = ' ';
Line 292... Line 303...
292
		//TODO: définir dans le fichier de config un tableau contenant plusieurs format de date
303
		//TODO: définir dans le fichier de config un tableau contenant plusieurs format de date
293
		// autorisés pour la recherche, qui seraient ajoutés au OR
304
		// autorisés pour la recherche, qui seraient ajoutés au OR
294
		$masque = '(';
305
		$masque = '(';
295
		$masque .= (is_numeric($valeurMasque)) ? ' YEAR(date_observation) = '.$this->proteger($valeurMasque).' OR ' : '';
306
		$masque .= (is_numeric($valeurMasque)) ? ' YEAR(date_observation) = '.$this->proteger($valeurMasque).' OR ' : '';
296
		$masque .= " DATE_FORMAT(date_observation, '%d/%m/%Y') = ".$this->proteger($valeurMasque).' '.
307
		$masque .= " DATE_FORMAT(date_observation, '%d/%m/%Y') = ".$this->proteger($valeurMasque).' '.
297
		           ')';
308
			           ')';
298
		return $masque;
309
		return $masque;
299
	}
310
	}
Line 300... Line 311...
300
	
311
	
301
	private function creerFiltreMotsCles($valeurMasque) {
312
	private function creerFiltreMotsCles($valeurMasque) {
302
		$masque = '(di.mots_cles_texte LIKE '.$this->proteger('%'.$valeurMasque.'%').' OR '.
313
		$masque = '(di.mots_cles_texte LIKE '.$this->proteger('%'.$valeurMasque.'%').' OR '.
303
			                 ' dob.mots_cles_texte LIKE '.$this->proteger('%'.$valeurMasque.'%').') ';   
314
			                 ' dob.mots_cles_texte LIKE '.$this->proteger('%'.$valeurMasque.'%').') ';  
304
		return $masque;                                                 			
315
		return $masque;
Line 305... Line 316...
305
	}
316
	}
306
	
317
	
307
	/*-------------------------------------------------------------------------------
318
	/*-------------------------------------------------------------------------------
308
								CHARGEMENT DES OBSERVATIONS 
319
								CHARGEMENT DES OBSERVATIONS 
309
	--------------------------------------------------------------------------------*/
320
	--------------------------------------------------------------------------------*/
310
	/**
321
	/**
311
	* Chargement depuis la bdd de toutes les liaisons entre images et observations
322
	* Chargement depuis la bdd de toutes les liaisons entre images et observations
312
	* */
-
 
313
	private function chargerLiaisons() {
-
 
-
 
323
	* */
314
		// ajout seulement du champ mot clés de la table image liée, pour rechercher 
324
	private function chargerLiaisons() {
315
		// sur les mots clés obs et images
325
	
316
		$requeteLiaisons = 'SELECT SQL_CALC_FOUND_ROWS *, di.mots_cles_texte '.
326
		$requeteLiaisons = 'SELECT SQL_CALC_FOUND_ROWS * '.
317
						   'FROM '.$this->gestionBdd->formaterTable('del_observation', 'dob').
327
						   'FROM '.$this->gestionBdd->formaterTable('del_observation', 'dob').
318
						   'INNER JOIN '.$this->gestionBdd->formaterTable('del_obs_image', 'doi').
328
						   'INNER JOIN '.$this->gestionBdd->formaterTable('del_obs_image', 'doi').
319
						   'ON doi.id_observation = dob.id_observation '.
329
						   'ON doi.id_observation = dob.id_observation '.
320
						   'INNER JOIN del_utilisateur du '.
-
 
321
						   'ON du.id_utilisateur = doi.id_utilisateur '.
-
 
322
						   'INNER JOIN '.$this->gestionBdd->formaterTable('del_image', 'di').
330
						   'INNER JOIN del_utilisateur du '.
323
						   'ON di.id_image = doi.id_image ';
331
						   'ON du.id_utilisateur = doi.id_utilisateur ';
324
		$requeteLiaisons .= $this->chargerClauseWhere();
332
		$requeteLiaisons .= $this->chargerClauseWhere();
325
		$requeteLiaisons .=  ' GROUP BY doi.id_observation';
333
		$requeteLiaisons .=  ' GROUP BY doi.id_observation';
326
		$requeteLiaisons .= ' ORDER BY date_transmission DESC ';
334
		$requeteLiaisons .= ' ORDER BY date_transmission DESC ';
327
		$requeteLiaisons .= $this->gestionBdd->getLimitSql();
335
		$requeteLiaisons .= $this->gestionBdd->getLimitSql();
328
 
336
		
Line 329... Line 337...
329
		return $this->bdd->recupererTous($requeteLiaisons);
337
		return $this->bdd->recupererTous($requeteLiaisons);
330
	}
338
	}
Line 401... Line 409...
401
		}
409
		}
402
		return $propositions_format;
410
		return $propositions_format;
403
	}
411
	}
404
	/**
412
	/**
405
	 * Charger les votes sur les déterminations
413
	 * Charger les votes sur les déterminations
406
	 * @param Array $observations le tableau des observatins à mettre à jour
414
	 * @param Array $observations le tableau des observations à mettre à jour
407
	* */
415
	* */
408
	private function chargerVotes($ids_proposition, $propositions) {
416
	private function chargerVotes($ids_proposition, $propositions) {
409
		$requeteVotes = 'SELECT * FROM '.
417
		$requeteVotes = 'SELECT * FROM '.
410
			$this->gestionBdd->formaterTable('del_commentaire_vote').
418
			$this->gestionBdd->formaterTable('del_commentaire_vote').
411
			'WHERE ce_proposition IN ('.implode(', ', $ids_proposition).')';
419
			'WHERE ce_proposition IN ('.implode(', ', $ids_proposition).')';