Subversion Repositories eFlore/Applications.del

Rev

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

Rev 891 Rev 902
1
<?php
1
<?php
2
// declare(encoding='UTF-8');
2
// declare(encoding='UTF-8');
3
/**
3
/**
4
	* Le web service observations récupère toutes les observations et, pour chacune d'elle, les
4
	* Le web service observations récupère toutes les observations et, pour chacune d'elle, les
5
	* images qui lui sont associées.
5
	* images qui lui sont associées.
6
 *
6
 *
7
 * @category	php 5.2
7
 * @category	php 5.2
8
 * @package	del
8
 * @package	del
9
 * @subpackage images
9
 * @subpackage images
10
 * @author		Jean-Pascal MILCENT <jpm@tela-botanica.org>
10
 * @author		Jean-Pascal MILCENT <jpm@tela-botanica.org>
11
 * @copyright	Copyright (c) 2012, Tela Botanica (accueil@tela-botanica.org)
11
 * @copyright	Copyright (c) 2012, Tela Botanica (accueil@tela-botanica.org)
12
 * @license	http://www.cecill.info/licences/Licence_CeCILL_V2-fr.txt Licence CECILL
12
 * @license	http://www.cecill.info/licences/Licence_CeCILL_V2-fr.txt Licence CECILL
13
 * @license	http://www.gnu.org/licenses/gpl.html Licence GNU-GPL
13
 * @license	http://www.gnu.org/licenses/gpl.html Licence GNU-GPL
14
 * @version	$Id: Bdd.php 403 2012-02-22 14:35:20Z gduche $
14
 * @version	$Id: Bdd.php 403 2012-02-22 14:35:20Z gduche $
15
 * @see http://www.tela-botanica.org/wikini/eflore/wakka.php?wiki=ApiIdentiplante01Observations
15
 * @see http://www.tela-botanica.org/wikini/eflore/wakka.php?wiki=ApiIdentiplante01Observations
16
 */
16
 */
17
 
17
 
18
class ListeObservations {
18
class ListeObservations {
19
	
19
	
20
	
20
	
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();
26
	private $parametres = array();
27
	private $ressources = array();
27
	private $ressources = array();
28
	private $tri = 'date_transmission';
28
	private $tri = 'date_transmission';
29
	private $directionTri = 'desc';
29
	private $directionTri = 'desc';
30
	
30
	
31
	public function __construct(Conteneur $conteneur = null) {
31
	public function __construct(Conteneur $conteneur = null) {
32
		$this->conteneur = $conteneur == null ? new Conteneur() : $conteneur;
32
		$this->conteneur = $conteneur == null ? new Conteneur() : $conteneur;
33
		$this->conteneur->chargerConfiguration('config_departements_bruts.ini');
33
		$this->conteneur->chargerConfiguration('config_departements_bruts.ini');
34
		$this->conteneur->chargerConfiguration('config_observations.ini');
34
		$this->conteneur->chargerConfiguration('config_observations.ini');
35
		$this->conteneur->chargerConfiguration('config_mapping_votes.ini');
35
		$this->conteneur->chargerConfiguration('config_mapping_votes.ini');
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
	
41
	
42
	/**
42
	/**
43
	 * Méthode principale de la classe.
43
	 * Méthode principale de la classe.
44
	 * Lance la récupération des images dans la base et les place dans un objet ResultatService 
44
	 * Lance la récupération des images dans la base et les place dans un objet ResultatService 
45
	 * pour l'afficher.
45
	 * pour l'afficher.
46
	 * @param array $ressources les ressources situées après l'url de base (ex : http://url/ressource1/ressource2)
46
	 * @param array $ressources les ressources situées après l'url de base (ex : http://url/ressource1/ressource2)
47
	 * @param array $parametres les paramètres situés après le ? dans l'url
47
	 * @param array $parametres les paramètres situés après le ? dans l'url
48
	 * */
48
	 * */
49
	public function consulter($ressources, $parametres) {
49
	public function consulter($ressources, $parametres) {
50
		$this->initialiserRessourcesEtParametres($ressources, $parametres);
50
		$this->initialiserRessourcesEtParametres($ressources, $parametres);
51
		
51
		
52
		// Gestion des configuration du script
52
		// Gestion des configuration du script
53
		$this->configurer();
53
		$this->configurer();
54
		$this->verifierConfiguration();
54
		$this->verifierConfiguration();
55
		
55
		
56
		$this->verifierParametresTri();
56
		$this->verifierParametresTri();
57
		$this->initialiserTri();
57
		$this->initialiserTri();
58
		
58
		
59
		// Lancement du service
59
		// Lancement du service
60
		$liaisons = $this->chargerLiaisons();
60
		$liaisons = $this->chargerLiaisons();
61
		$total = $this->compterObservations();
61
		$total = $this->compterObservations();
62
		$this->navigation->setTotal($total);
62
		$this->navigation->setTotal($total);
63
		$observations = $this->chargerObservations($liaisons);
63
		$observations = $this->chargerObservations($liaisons);
64
		$observations = $this->chargerImages($observations);
64
		$observations = $this->chargerImages($observations);
65
		$observations = $this->chargerDeterminations($observations);
65
		$observations = $this->chargerDeterminations($observations);
66
		
66
		
67
		// Mettre en forme le résultat et l'envoyer pour affichage
67
		// Mettre en forme le résultat et l'envoyer pour affichage
68
		$resultat = new ResultatService();
68
		$resultat = new ResultatService();
69
		$resultat->corps = array('entete' => $this->conteneur->getEntete(), 'resultats' => $observations);
69
		$resultat->corps = array('entete' => $this->conteneur->getEntete(), 'resultats' => $observations);
70
		return $resultat;
70
		return $resultat;
71
	}
71
	}
72
	
72
	
73
	private function initialiserRessourcesEtParametres($ressources, $parametres) {
73
	private function initialiserRessourcesEtParametres($ressources, $parametres) {
74
		$this->ressources = $ressources;
74
		$this->ressources = $ressources;
75
		$this->parametres = $parametres;
75
		$this->parametres = $parametres;
76
	}
76
	}
77
	
77
	
78
	private function verifierParametresTri() {
78
	private function verifierParametresTri() {
79
	
79
	
80
		$erreurs = array();
80
		$erreurs = array();
81
		$tris_possibles = $this->conteneur->getParametre('tris_possibles');
81
		$tris_possibles = $this->conteneur->getParametre('tris_possibles');
82
		$tris_possibles_tableau = explode(',', $tris_possibles);
82
		$tris_possibles_tableau = explode(',', $tris_possibles);
83
		if(isset($this->parametres['tri']) && !in_array($this->parametres['tri'], $tris_possibles_tableau)) {
83
		if(isset($this->parametres['tri']) && !in_array($this->parametres['tri'], $tris_possibles_tableau)) {
84
			$erreurs[] = '- le type de tri demandé est incorrect, les valeurs possibles sont '.$tris_possibles.' ;';
84
			$erreurs[] = '- le type de tri demandé est incorrect, les valeurs possibles sont '.$tris_possibles.' ;';
85
		}
85
		}
86
	
86
	
87
		$directions_tri = array('asc', 'desc');
87
		$directions_tri = array('asc', 'desc');
88
		if(isset($this->parametres['ordre']) && !in_array($this->parametres['ordre'], $directions_tri)) {
88
		if(isset($this->parametres['ordre']) && !in_array($this->parametres['ordre'], $directions_tri)) {
89
			$erreurs[] = '- la direction du tri demandé est incorrecte, les valeurs supportées sont asc ou desc ;';
89
			$erreurs[] = '- la direction du tri demandé est incorrecte, les valeurs supportées sont asc ou desc ;';
90
		}
90
		}
91
			
91
			
92
		if (!empty($erreurs)) {
92
		if (!empty($erreurs)) {
93
			$e = 'Erreur lors de l\'analyse des parametres du tri : '."\n";
93
			$e = 'Erreur lors de l\'analyse des parametres du tri : '."\n";
94
			$e .= implode("\n", $erreurs);
94
			$e .= implode("\n", $erreurs);
95
			throw new Exception($e, RestServeur::HTTP_CODE_ERREUR);
95
			throw new Exception($e, RestServeur::HTTP_CODE_ERREUR);
96
		}
96
		}
97
	}
97
	}
98
	
98
	
99
	private function initialiserTri() {
99
	private function initialiserTri() {
100
		$this->tri = isset($this->parametres['tri']) ? $this->parametres['tri'] : $this->tri;
100
		$this->tri = isset($this->parametres['tri']) ? $this->parametres['tri'] : $this->tri;
101
		$this->directionTri = isset($this->parametres['ordre']) ? $this->parametres['ordre'] : $this->directionTri;
101
		$this->directionTri = isset($this->parametres['ordre']) ? $this->parametres['ordre'] : $this->directionTri;
102
	}
102
	}
103
	/*-------------------------------------------------------------------------------
103
	/*-------------------------------------------------------------------------------
104
	 							CONFIGURATION DU SERVICE
104
	 							CONFIGURATION DU SERVICE
105
	 --------------------------------------------------------------------------------*/
105
	 --------------------------------------------------------------------------------*/
106
	/**
106
	/**
107
	 * Configuration du service en fonction du fichier de config config_del.ini
107
	 * Configuration du service en fonction du fichier de config config_del.ini
108
	 * */
108
	 * */
109
	private function configurer() {
109
	private function configurer() {
110
		$this->mappingFiltre = $this->conteneur->getParametre('mapping_masque');
110
		$this->mappingFiltre = $this->conteneur->getParametre('mapping_masque');
111
		$this->mappingObservation = $this->conteneur->getParametre('mapping_observation');
111
		$this->mappingObservation = $this->conteneur->getParametre('mapping_observation');
112
		$this->mappingVotes = $this->conteneur->getParametre('mapping_votes');
112
		$this->mappingVotes = $this->conteneur->getParametre('mapping_votes');
113
	}
113
	}
114
	
114
	
115
	/**
115
	/**
116
	 * Vérifier que le service est bien configuré 
116
	 * Vérifier que le service est bien configuré 
117
	 * */
117
	 * */
118
	private function verifierConfiguration() {
118
	private function verifierConfiguration() {
119
	
119
	
120
		$erreurs = array();
120
		$erreurs = array();
121
		$tableauObservations = $this->conteneur->getParametre('observations');
121
		$tableauObservations = $this->conteneur->getParametre('observations');
122
		if (empty($tableauObservations)) {
122
		if (empty($tableauObservations)) {
123
			$erreurs[] = '- le fichier de configuration ne contient pas le tableau [images] ou celui-ci est vide ;'; 
123
			$erreurs[] = '- le fichier de configuration ne contient pas le tableau [images] ou celui-ci est vide ;'; 
124
		} else {
124
		} else {
125
			if ($this->conteneur->getParametre('url_service') == null) {
125
			if ($this->conteneur->getParametre('url_service') == null) {
126
				$erreurs[] = '- paramètre "url_service" manquant ;';
126
				$erreurs[] = '- paramètre "url_service" manquant ;';
127
			}
127
			}
128
			
128
			
129
			if ($this->conteneur->getParametre('url_images') == null) {
129
			if ($this->conteneur->getParametre('url_images') == null) {
130
				$erreurs[] = '- paramètre "url_images" manquant ;';
130
				$erreurs[] = '- paramètre "url_images" manquant ;';
131
			}
131
			}
132
			
132
			
133
		}
133
		}
134
 
134
 
135
		if (empty($this->mappingObservation)) {
135
		if (empty($this->mappingObservation)) {
136
			$erreurs[] = '- le fichier de configuration ne contient pas le tableau [mapping_observation] ou celui-ci est vide ;';
136
			$erreurs[] = '- le fichier de configuration ne contient pas le tableau [mapping_observation] ou celui-ci est vide ;';
137
		} else {
137
		} else {
138
			$champsMappingObs = array('id_observation', 'date_observation', 'date_transmission', 'famille', 'nom_sel', 'nom_sel_nn', 'nt',
138
			$champsMappingObs = array('id_observation', 'date_observation', 'date_transmission', 'famille', 'nom_sel', 'nom_sel_nn', 'nt',
139
								'ce_zone_geo', 'zone_geo', 'lieudit', 'station', 'courriel', 'ce_utilisateur', 'nom', 'prenom');
139
								'ce_zone_geo', 'zone_geo', 'lieudit', 'station', 'courriel', 'ce_utilisateur', 'nom', 'prenom');
140
			
140
			
141
			foreach ($champsMappingObs as $champ) {
141
			foreach ($champsMappingObs as $champ) {
142
				if (!isset($this->mappingObservation[$champ])) {
142
				if (!isset($this->mappingObservation[$champ])) {
143
					$erreurs[] = '- le mapping du champ "'.$champ.'" pour l\'observation est manquant ;';
143
					$erreurs[] = '- le mapping du champ "'.$champ.'" pour l\'observation est manquant ;';
144
				}				
144
				}				
145
			}
145
			}
146
		}
146
		}
147
		
147
		
148
		if (empty($this->mappingFiltre)) {
148
		if (empty($this->mappingFiltre)) {
149
			$erreurs[] = '- le fichier de configuration ne contient pas le tableau [mapping_masque] ou celui-ci est vide ;';
149
			$erreurs[] = '- le fichier de configuration ne contient pas le tableau [mapping_masque] ou celui-ci est vide ;';
150
		} else {
150
		} else {
151
			$champsMappingFiltre = array('famille', 'ns', 'nn', 'date', 'tag', 'commune');
151
			$champsMappingFiltre = array('famille', 'ns', 'nn', 'date', 'tag', 'commune');
152
			foreach ($champsMappingFiltre as $champ) {
152
			foreach ($champsMappingFiltre as $champ) {
153
				if (!isset($this->mappingFiltre[$champ])) {
153
				if (!isset($this->mappingFiltre[$champ])) {
154
					$erreurs[] = '- le mapping du champ "'.$champ.'" pour l\'observation est manquant ;';
154
					$erreurs[] = '- le mapping du champ "'.$champ.'" pour l\'observation est manquant ;';
155
				}				
155
				}				
156
			}
156
			}
157
		}
157
		}
158
		
158
		
159
		if (!empty($erreurs)) {
159
		if (!empty($erreurs)) {
160
			$e = 'Erreur lors de la configuration : '."\n";
160
			$e = 'Erreur lors de la configuration : '."\n";
161
			$e .= implode("\n", $erreurs);
161
			$e .= implode("\n", $erreurs);
162
			throw new Exception($e, RestServeur::HTTP_CODE_ERREUR);
162
			throw new Exception($e, RestServeur::HTTP_CODE_ERREUR);
163
		}
163
		}
164
	}
164
	}
165
	
165
	
166
	
166
	
167
	
167
	
168
	/**
168
	/**
169
	 * Obtenir une chaine de caractère concaténant nom et prénom séparé par une virgule
169
	 * Obtenir une chaine de caractère concaténant nom et prénom séparé par une virgule
170
	 * @param String $auteurId l'identifiant de l'auteur
170
	 * @param String $auteurId l'identifiant de l'auteur
171
	 * @return String la chaine de concaténation
171
	 * @return String la chaine de concaténation
172
	 * */
172
	 * */
173
	private function getChaineNomPrenom($auteurId) {
173
	private function getChaineNomPrenom($auteurId) {
174
		$nomPrenom = explode(' ', $auteurId);
174
		$nomPrenom = explode(' ', $auteurId);
175
		$nomPrenom = $this->proteger($nomPrenom);
175
		$nomPrenom = $this->proteger($nomPrenom);
176
		$chaineNomPrenom = implode(', ', $nomPrenom);
176
		$chaineNomPrenom = implode(', ', $nomPrenom);
177
		return $chaineNomPrenom;
177
		return $chaineNomPrenom;
178
	}
178
	}
179
	
179
	
180
	/**
180
	/**
181
	* Charger la clause WHERE en fonction des paramètres de masque
181
	* Charger la clause WHERE en fonction des paramètres de masque
182
	* */
182
	* */
183
	private function chargerClauseWhere() {
183
	private function chargerClauseWhere() {
184
		$where = array();
184
		$where = array();
185
		$tableauMasque = $this->masque->getMasque();
185
		$tableauMasque = $this->masque->getMasque();
186
		if (!empty($tableauMasque)) {
186
		if (!empty($tableauMasque)) {
187
			foreach($tableauMasque as $idMasque => $valeurMasque) {
187
			foreach($tableauMasque as $idMasque => $valeurMasque) {
188
					
188
					
189
				$idMasque = str_replace('masque.', '', $idMasque);
189
				$idMasque = str_replace('masque.', '', $idMasque);
190
				switch ($idMasque) {
190
				switch ($idMasque) {
191
					// nom du masque => nom BDD
191
					// nom du masque => nom BDD
192
					case 'auteur' :
192
					case 'auteur' :
193
						$whereAuteur = ' '.$this->creerFiltreAuteur($this->masque->getMasque('auteur'));
193
						$whereAuteur = ' '.$this->creerFiltreAuteur($this->masque->getMasque('auteur'));
194
						if($whereAuteur != '') {
194
						if($whereAuteur != '') {
195
							$where[] = $whereAuteur;
195
							$where[] = $whereAuteur;
196
						}
196
						}
197
						break;
197
						break;
198
					case 'date' :
198
					case 'date' :
199
						$whereDate = ' '.$this->creerFiltreDate($valeurMasque);
199
						$whereDate = ' '.$this->creerFiltreDate($valeurMasque);
200
						if($whereDate != '') {
200
						if($whereDate != '') {
201
							$where[] = $whereDate;
201
							$where[] = $whereDate;
202
						}
202
						}
203
						break;
203
						break;
204
					case 'departement' :
204
					case 'departement' :
205
						$where[] = ' '.$this->creerFiltreIdZoneGeo($valeurMasque);
205
						$where[] = ' '.$this->creerFiltreIdZoneGeo($valeurMasque);
206
						break;
206
						break;
207
					case 'genre' :
207
					case 'genre' :
208
						$where[] = ' '.$this->mappingFiltre['ns'].' LIKE '.$this->proteger('%'.$valeurMasque.'% %');
208
						$where[] = ' '.$this->mappingFiltre['ns'].' LIKE '.$this->proteger('%'.$valeurMasque.'% %');
209
						break;
209
						break;
210
					case 'tag' :
210
					case 'tag' :
211
						$where[] = ' '.$this->creerFiltreMotsCles($valeurMasque);
211
						$where[] = ' '.$this->creerFiltreMotsCles($valeurMasque);
212
						break;
212
						break;
213
					case 'ns' :
213
					case 'ns' :
214
						$where[] = ' nom_sel LIKE '.$this->proteger($valeurMasque.'%');
214
						$where[] = ' nom_sel LIKE '.$this->proteger($valeurMasque.'%');
215
						break;	
215
						break;	
216
					case 'commune' :
216
					case 'commune' :
217
						$where[] = ' '.$this->mappingFiltre[$idMasque].' LIKE '.$this->proteger(str_replace(array('-',' '), '_', $valeurMasque).'%');
217
						$where[] = ' '.$this->mappingFiltre[$idMasque].' LIKE '.$this->proteger(str_replace(array('-',' '), '_', $valeurMasque).'%');
218
					break;
218
					break;
219
					case 'masque' :
219
					case 'masque' :
220
						$where[] = ' '.$this->creerFiltreMasqueGeneral($valeurMasque);
220
						$where[] = ' '.$this->creerFiltreMasqueGeneral($valeurMasque);
221
						break;
221
						break;
222
					default:
222
					default:
223
						$where[] = ' '.$this->mappingFiltre[$idMasque].' = '.$this->proteger($valeurMasque);
223
						$where[] = ' '.$this->mappingFiltre[$idMasque].' = '.$this->proteger($valeurMasque);
224
					break;
224
					break;
225
				}
225
				}
226
			}	
226
			}	
227
		}
227
		}
228
		
228
		
229
		if (!empty($where)) {
229
		if (!empty($where)) {
230
			return ' WHERE '.implode('AND', $where);
230
			return ' WHERE '.implode('AND', $where);
231
		} else {
231
		} else {
232
			return;
232
			return;
233
		}
233
		}
234
	}
234
	}
235
	
235
	
236
	private function creerFiltreMasqueGeneral($valeurMasque) {
236
	private function creerFiltreMasqueGeneral($valeurMasque) {
237
		//TODO: affecter d'aborder les variables, puis les tester pour les
237
		//TODO: affecter d'aborder les variables, puis les tester pour les
238
		// ajouter à la chaine
238
		// ajouter à la chaine
239
		$whereAuteur = $this->creerFiltreAuteur($valeurMasque);
239
		$whereAuteur = $this->creerFiltreAuteur($valeurMasque);
240
		$whereIdZoneGeo = $this->creerFiltreIdZoneGeo($valeurMasque);
240
		$whereIdZoneGeo = $this->creerFiltreIdZoneGeo($valeurMasque);
241
	
241
	
242
		$masqueGeneral = '( '.
242
		$masqueGeneral = '( '.
243
						(($whereAuteur != '') ? $whereAuteur.' OR ' : '' ).
243
						(($whereAuteur != '') ? $whereAuteur.' OR ' : '' ).
244
						(($whereIdZoneGeo != '') ? $whereIdZoneGeo.' OR ' : '' ).
244
						(($whereIdZoneGeo != '') ? $whereIdZoneGeo.' OR ' : '' ).
245
						'zone_geo LIKE '.$this->proteger($this->remplacerParJokerCaractere($valeurMasque).'%').' OR '.
245
						'zone_geo LIKE '.$this->proteger($this->remplacerParJokerCaractere($valeurMasque).'%').' OR '.
246
						$this->creerFiltreMotsCles($valeurMasque).' OR '.
246
						$this->creerFiltreMotsCles($valeurMasque).' OR '.
247
						'nom_sel LIKE '.$this->proteger($valeurMasque.'%').' OR '.
247
						'nom_sel LIKE '.$this->proteger($valeurMasque.'%').' OR '.
248
						'famille LIKE '.$this->proteger($valeurMasque.'%').' OR '.
248
						'famille LIKE '.$this->proteger($valeurMasque.'%').' OR '.
249
						'milieu LIKE '.$this->proteger($valeurMasque).' OR '.
249
						'milieu LIKE '.$this->proteger($valeurMasque).' OR '.
250
						$this->mappingFiltre['ns'].' LIKE '.$this->proteger('%'.$valeurMasque.'% %').' OR '.
250
						$this->mappingFiltre['ns'].' LIKE '.$this->proteger('%'.$valeurMasque.'% %').' OR '.
251
						$this->creerFiltreDate($valeurMasque).
251
						$this->creerFiltreDate($valeurMasque).
252
						') ';
252
						') ';
253
	
253
	
254
		return $masqueGeneral;
254
		return $masqueGeneral;
255
	}
255
	}
256
	
256
	
257
	private function creerFiltreAuteur($valeurMasque) {
257
	private function creerFiltreAuteur($valeurMasque) {
258
		$masque = '';
258
		$masque = '';
259
		$auteurId = $valeurMasque;
259
		$auteurId = $valeurMasque;
260
		if (is_numeric($auteurId)) {
260
		if (is_numeric($auteurId)) {
261
			$masque = ' ce_utilisateur = '.$auteurId;
261
			$masque = ' ce_utilisateur = '.$auteurId;
262
		} else {
262
		} else {
263
			if (strpos($auteurId, '@') === false) {
263
			if (strpos($auteurId, '@') === false) {
264
				$tableauNomPrenom = explode(' ',$auteurId, 2);
264
				$tableauNomPrenom = explode(' ',$auteurId, 2);
265
				if(count($tableauNomPrenom) == 2) {
265
				if(count($tableauNomPrenom) == 2) {
266
					// on teste potentiellement un nom prenom ou bien un prénom nom
266
					// on teste potentiellement un nom prenom ou bien un prénom nom
267
					$masque = '('.
267
					$masque = '('.
268
							          	'(nom LIKE '.$this->proteger($tableauNomPrenom[0].'%').' AND '.
268
							          	'(nom LIKE '.$this->proteger($tableauNomPrenom[0].'%').' AND '.
269
									  	'prenom LIKE '.$this->proteger($tableauNomPrenom[1].'%').') OR '.
269
									  	'prenom LIKE '.$this->proteger($tableauNomPrenom[1].'%').') OR '.
270
									 	'(nom LIKE '.$this->proteger($tableauNomPrenom[1].'%').' AND '.
270
									 	'(nom LIKE '.$this->proteger($tableauNomPrenom[1].'%').' AND '.
271
									  	'prenom LIKE '.$this->proteger($tableauNomPrenom[0].'%').')'.
271
									  	'prenom LIKE '.$this->proteger($tableauNomPrenom[0].'%').')'.
272
									  ')';
272
									  ')';
273
				} else {
273
				} else {
274
					$masque = '(
274
					$masque = '(
275
							            (nom LIKE '.$this->proteger($auteurId.'%').' OR '.
275
							            (nom LIKE '.$this->proteger($auteurId.'%').' OR '.
276
										'prenom LIKE '.$this->proteger($auteurId.'%').')'.
276
										'prenom LIKE '.$this->proteger($auteurId.'%').')'.
277
									  ')';
277
									  ')';
278
				}
278
				}
279
			} else {
279
			} else {
280
				$masque = " courriel LIKE ".$this->proteger($valeurMasque.'%')." ";
280
				$masque = " courriel LIKE ".$this->proteger($valeurMasque.'%')." ";
281
			}
281
			}
282
		}
282
		}
283
		return $masque;
283
		return $masque;
284
	}
284
	}
285
	
285
	
286
	private function remplacerParJokerCaractere($valeurMasque) {
286
	private function remplacerParJokerCaractere($valeurMasque) {
287
		return str_replace(array('-',' '), '_', $valeurMasque);
287
		return str_replace(array('-',' '), '_', $valeurMasque);
288
	}
288
	}
289
	//TODO: déplacer les fonctions ci dessus et dessous dans une classe
289
	//TODO: déplacer les fonctions ci dessus et dessous dans une classe
290
	// utilitaire
290
	// utilitaire
291
	function supprimerAccents($str, $charset='utf-8')
291
	function supprimerAccents($str, $charset='utf-8')
292
	{
292
	{
293
		$str = htmlentities($str, ENT_NOQUOTES, $charset);
293
		$str = htmlentities($str, ENT_NOQUOTES, $charset);
294
	
294
	
295
		$str = preg_replace('#&([A-za-z])(?:acute|cedil|circ|grave|orn|ring|slash|th|tilde|uml);#', '\1', $str);
295
		$str = preg_replace('#&([A-za-z])(?:acute|cedil|circ|grave|orn|ring|slash|th|tilde|uml);#', '\1', $str);
296
		$str = preg_replace('#&([A-za-z]{2})(?:lig);#', '\1', $str); // pour les ligatures e.g. '&oelig;'
296
		$str = preg_replace('#&([A-za-z]{2})(?:lig);#', '\1', $str); // pour les ligatures e.g. '&oelig;'
297
		$str = preg_replace('#&[^;]+;#', '', $str); // supprime les autres caractères
297
		$str = preg_replace('#&[^;]+;#', '', $str); // supprime les autres caractères
298
	
298
	
299
		return $str;
299
		return $str;
300
	}
300
	}
301
	
301
	
302
	private function obtenirIdDepartement($nomDpt) {
302
	private function obtenirIdDepartement($nomDpt) {
303
	
303
	
304
		$nomDpt = $this->supprimerAccents($nomDpt);
304
		$nomDpt = $this->supprimerAccents($nomDpt);
305
		$nomDpt = strtolower(str_replace(' ','-',$nomDpt));
305
		$nomDpt = strtolower(str_replace(' ','-',$nomDpt));
306
	
306
	
307
		$idDpt = $this->conteneur->getParametre($nomDpt);
307
		$idDpt = $this->conteneur->getParametre($nomDpt);
308
		if($idDpt == null || $idDpt == ' ') {
308
		if($idDpt == null || $idDpt == ' ') {
309
			$idDpt = ' ';
309
			$idDpt = ' ';
310
		}
310
		}
311
		return $idDpt;
311
		return $idDpt;
312
	}
312
	}
313
	
313
	
314
	private function creerFiltreIdZoneGeo($valeurMasque) {
314
	private function creerFiltreIdZoneGeo($valeurMasque) {
315
		$masque = '';
315
		$masque = '';
316
		$dept = $valeurMasque;
316
		$dept = $valeurMasque;
317
		if (is_numeric($dept)) {
317
		if (is_numeric($dept)) {
318
			$dept = sprintf('%02s', $dept);
318
			$dept = sprintf('%02s', $dept);
319
			$dept = sprintf("%-'_5s", $dept);
319
			$dept = sprintf("%-'_5s", $dept);
320
			$masque = " ce_zone_geo LIKE ".$this->proteger('INSEE-C:'.$dept);
320
			$masque = " ce_zone_geo LIKE ".$this->proteger('INSEE-C:'.$dept);
321
		} else {
321
		} else {
322
			$deptId = $this->conteneur->getParametre($dept);
322
			$deptId = $this->conteneur->getParametre($dept);
323
			if ($deptId != null) {
323
			if ($deptId != null) {
324
				$masque = " ce_zone_geo LIKE ".$this->proteger('INSEE-C:'.$deptId.'%');
324
				$masque = " ce_zone_geo LIKE ".$this->proteger('INSEE-C:'.$deptId.'%');
325
			} else {
325
			} else {
326
				$id = $this->obtenirIdDepartement($valeurMasque);
326
				$id = $this->obtenirIdDepartement($valeurMasque);
327
				$masque = " ce_zone_geo LIKE ".$this->proteger('INSEE-C:'.$id.'%');
327
				$masque = " ce_zone_geo LIKE ".$this->proteger('INSEE-C:'.$id.'%');
328
			}
328
			}
329
		}
329
		}
330
		return $masque;
330
		return $masque;
331
	}
331
	}
332
	
332
	
333
	private function creerFiltreDate($valeurMasque) {
333
	private function creerFiltreDate($valeurMasque) {
334
		//TODO: définir dans le fichier de config un tableau contenant plusieurs format de date
334
		//TODO: définir dans le fichier de config un tableau contenant plusieurs format de date
335
		// autorisés pour la recherche, qui seraient ajoutés au OR
335
		// autorisés pour la recherche, qui seraient ajoutés au OR
336
		$masque = '(';
336
		$masque = '(';
337
		$masque .= (is_numeric($valeurMasque)) ? ' YEAR(date_observation) = '.$this->proteger($valeurMasque).' OR ' : '';
337
		$masque .= (is_numeric($valeurMasque)) ? ' YEAR(date_observation) = '.$this->proteger($valeurMasque).' OR ' : '';
338
		$masque .= " DATE_FORMAT(date_observation, '%d/%m/%Y') = ".$this->proteger($valeurMasque).' '.
338
		$masque .= " DATE_FORMAT(date_observation, '%d/%m/%Y') = ".$this->proteger($valeurMasque).' '.
339
			           ')';
339
			           ')';
340
		return $masque;
340
		return $masque;
341
	}
341
	}
342
	
342
	
343
	private function creerFiltreMotsCles($valeurMasque) {
343
	private function creerFiltreMotsCles($valeurMasque) {
344
		$mots_cles = explode(' ', $valeurMasque);
344
		$mots_cles = explode(' ', $valeurMasque);
345
		$requeteMotsClesImg = '';
345
		$requeteMotsClesImg = '';
346
		$requeteMotsClesObs = '';
346
		$requeteMotsClesObs = '';
347
		//TODO voir s'il existe un moyen plus simple que le foreach + rtrim
347
		//TODO voir s'il existe un moyen plus simple que le foreach + rtrim
348
		// comme avec implode (attention au fait que l'on concatène des % au début et à la fin)
348
		// comme avec implode (attention au fait que l'on concatène des % au début et à la fin)
349
		foreach($mots_cles as $mot_cle) {
349
		foreach($mots_cles as $mot_cle) {
350
			$requeteMotsCles = $this->proteger('%'.$mot_cle.'%');
350
			$requeteMotsCles = $this->proteger('%'.$mot_cle.'%');
351
			$requeteMotsClesImg .= 'di.mots_cles_texte LIKE '.$requeteMotsCles.' AND ';
351
			$requeteMotsClesImg .= 'di.mots_cles_texte LIKE '.$requeteMotsCles.' AND ';
352
			$requeteMotsClesObs .= 'dob.mots_cles_texte LIKE '.$requeteMotsCles.' AND ';
352
			$requeteMotsClesObs .= 'dob.mots_cles_texte LIKE '.$requeteMotsCles.' AND ';
353
		}
353
		}
354
		$requeteMotsClesImg = rtrim($requeteMotsClesImg, ' AND ');
354
		$requeteMotsClesImg = rtrim($requeteMotsClesImg, ' AND ');
355
		$requeteMotsClesObs = rtrim($requeteMotsClesObs, ' AND ');
355
		$requeteMotsClesObs = rtrim($requeteMotsClesObs, ' AND ');
356
		
356
		
357
		$masque = '('.
357
		$masque = '('.
358
		          	'('.$requeteMotsClesImg.') OR '.
358
		          	'('.$requeteMotsClesImg.') OR '.
359
		          	'('.$requeteMotsClesObs.') '.
359
		          	'('.$requeteMotsClesObs.') '.
360
				  ') ';
360
				  ') ';
361
		
361
		
362
		return $masque;                                                  			
362
		return $masque;                                                  			
363
	}
363
	}
364
	
364
	
365
	/*-------------------------------------------------------------------------------
365
	/*-------------------------------------------------------------------------------
366
								CHARGEMENT DES OBSERVATIONS 
366
								CHARGEMENT DES OBSERVATIONS 
367
	--------------------------------------------------------------------------------*/
367
	--------------------------------------------------------------------------------*/
368
	/**
368
	/**
369
	* Chargement depuis la bdd de toutes les liaisons entre images et observations
369
	* Chargement depuis la bdd de toutes les liaisons entre images et observations
370
	* */
370
	* */
371
	private function chargerLiaisons() {
371
	private function chargerLiaisons() {
372
	
372
	
373
		$requeteLiaisons = 'SELECT SQL_CALC_FOUND_ROWS *, di.mots_cles_texte '.
373
		$requeteLiaisons = 'SELECT SQL_CALC_FOUND_ROWS *, di.mots_cles_texte '.
374
						   'FROM '.$this->gestionBdd->formaterTable('del_observation', 'dob').
374
						   'FROM '.$this->gestionBdd->formaterTable('del_observation', 'dob').
375
						   'INNER JOIN '.$this->gestionBdd->formaterTable('del_obs_image', 'doi').
375
						   'INNER JOIN '.$this->gestionBdd->formaterTable('del_obs_image', 'doi').
376
						   'ON doi.id_observation = dob.id_observation '.
376
						   'ON doi.id_observation = dob.id_observation '.
377
						   'INNER JOIN del_utilisateur du '.
377
						   'INNER JOIN del_utilisateur du '.
378
						   'ON du.id_utilisateur = dob.ce_utilisateur '.
378
						   'ON du.id_utilisateur = dob.ce_utilisateur '.
379
						   'INNER JOIN del_image di '.
379
						   'INNER JOIN del_image di '.
380
						   'ON di.id_image = doi.id_image ';
380
						   'ON di.id_image = doi.id_image ';
381
		$requeteLiaisons .= $this->chargerClauseWhere();
381
		$requeteLiaisons .= $this->chargerClauseWhere();
382
		$requeteLiaisons .= ' GROUP BY doi.id_observation';
382
		$requeteLiaisons .= ' GROUP BY doi.id_observation';
383
		$requeteLiaisons .= ' ORDER BY '.$this->tri.' '.$this->directionTri.' ';
383
		$requeteLiaisons .= ' ORDER BY '.$this->tri.' '.$this->directionTri.' ';
384
		$requeteLiaisons .= $this->gestionBdd->getLimitSql();
384
		$requeteLiaisons .= $this->gestionBdd->getLimitSql();
385
		
385
		
386
		
386
		
387
		return $this->bdd->recupererTous($requeteLiaisons);
387
		return $this->bdd->recupererTous($requeteLiaisons);
388
	}
388
	}
389
	
389
	
390
	/**
390
	/**
391
	* Compter le nombre total d'images dans la base pour affichage dans entete.
391
	* Compter le nombre total d'images dans la base pour affichage dans entete.
392
	* */
392
	* */
393
	private function compterObservations() {
393
	private function compterObservations() {
394
		$requete = 'SELECT FOUND_ROWS() AS nbre ';
394
		$requete = 'SELECT FOUND_ROWS() AS nbre ';
395
		$resultats = $this->bdd->recuperer($requete);
395
		$resultats = $this->bdd->recuperer($requete);
396
		return (int) $resultats['nbre'];
396
		return (int) $resultats['nbre'];
397
	}
397
	}
398
	
398
	
399
	/**
399
	/**
400
	* Retourner un tableau d'images formaté en fonction des liaisons trouvées
400
	* Retourner un tableau d'images formaté en fonction des liaisons trouvées
401
	* @param $liaisons les liaisons de la table del_obs_images
401
	* @param $liaisons les liaisons de la table del_obs_images
402
	* */
402
	* */
403
	private function chargerObservations($liaisons) {
403
	private function chargerObservations($liaisons) {
404
	
404
	
405
		$observations = array();
405
		$observations = array();
406
		foreach ($liaisons as $liaison) {
406
		foreach ($liaisons as $liaison) {
407
			$idObs = $liaison[$this->mappingObservation['id_observation']];
407
			$idObs = $liaison[$this->mappingObservation['id_observation']];
408
			
408
			
409
			$observation = $this->formaterObservation($liaison); 
409
			$observation = $this->formaterObservation($liaison); 
410
			$observations[$idObs] = $observation;
410
			$observations[$idObs] = $observation;
411
		}
411
		}
412
		return $observations;
412
		return $observations;
413
	}
413
	}
414
	
414
	
415
	/**
415
	/**
416
	 * Sélectionner toutes les images de chaque observation
416
	 * Sélectionner toutes les images de chaque observation
417
	 * @param array $observations la liste des observations 
417
	 * @param array $observations la liste des observations 
418
	 * */
418
	 * */
419
	private function chargerImages($observations) {
419
	private function chargerImages($observations) {
420
		
420
		
421
		foreach ($observations as $id => $observation) {
421
		foreach ($observations as $id => $observation) {
422
			
422
			
423
			$requeteImages = 'SELECT * FROM '. $this->gestionBdd->formaterTable('del_obs_image', 'doi').
423
			$requeteImages = 'SELECT * FROM '. $this->gestionBdd->formaterTable('del_obs_image', 'doi').
424
							 'INNER JOIN '.$this->gestionBdd->formaterTable('del_image', 'di').
424
							 'INNER JOIN '.$this->gestionBdd->formaterTable('del_image', 'di').
425
							 'ON doi.id_image = di.id_image '.
425
							 'ON doi.id_image = di.id_image '.
426
							 'WHERE doi.id_observation = '.$observation['id_observation'];
426
							 'WHERE doi.id_observation = '.$observation['id_observation'];
427
			
427
			
428
			$images = $this->bdd->recupererTous($requeteImages);
428
			$images = $this->bdd->recupererTous($requeteImages);
429
			$images = $this->formaterImages($images);
429
			$images = $this->formaterImages($images);
430
			$observations[$id]['images'] = $images;
430
			$observations[$id]['images'] = $images;
431
		}
431
		}
432
		
432
		
433
		return $observations;
433
		return $observations;
434
	}
434
	}
435
	
435
	
436
	/**
436
	/**
437
	* Récupérer toutes les déterminations et le nombre de commentaire au total
437
	* Récupérer toutes les déterminations et le nombre de commentaire au total
438
	* @param array $observations la liste des observations à mettre à jour
438
	* @param array $observations la liste des observations à mettre à jour
439
	* */
439
	* */
440
	private function chargerDeterminations($observations) {
440
	private function chargerDeterminations($observations) {
441
		foreach ($observations as $id => $observation) {
441
		foreach ($observations as $id => $observation) {
442
			$requetePropositions = 'SELECT * FROM '.$this->gestionBdd->formaterTable('del_commentaire', 'dc').
442
			$requetePropositions = 'SELECT * FROM '.$this->gestionBdd->formaterTable('del_commentaire', 'dc').
443
									   'WHERE dc.nom_sel IS NOT NULL AND ce_observation = '.$observation['id_observation'];
443
									   'WHERE dc.nom_sel IS NOT NULL AND ce_observation = '.$observation['id_observation'];
444
			$propositions = $this->bdd->recupererTous($requetePropositions);
444
			$propositions = $this->bdd->recupererTous($requetePropositions);
445
			$observations[$id]['commentaires'] = $this->formaterDeterminations($propositions);
445
			$observations[$id]['commentaires'] = $this->formaterDeterminations($propositions);
446
		}
446
		}
447
		return $observations;
447
		return $observations;
448
	}
448
	}
449
	
449
	
450
	private function formaterDeterminations($propositions) {
450
	private function formaterDeterminations($propositions) {
451
		
451
		
452
		$propositions_format = array();
452
		$propositions_format = array();
453
		if ($propositions != array()) {
453
		if ($propositions != array()) {
454
			foreach ($propositions as $id => $proposition) {
454
			foreach ($propositions as $id => $proposition) {
455
				$propositions_format[$proposition['id_commentaire']] = $proposition;
455
				$propositions_format[$proposition['id_commentaire']] = $proposition;
456
				$propositions_format[$proposition['id_commentaire']]['nb_commentaires'] = "0";
456
				$propositions_format[$proposition['id_commentaire']]['nb_commentaires'] = "0";
457
				$ids_proposition[] = $proposition['id_commentaire'];
457
				$ids_proposition[] = $proposition['id_commentaire'];
458
			}
458
			}
459
			
459
			
460
			$propositions_format = $this->chargerVotes($ids_proposition, $propositions_format);
460
			$propositions_format = $this->chargerVotes($ids_proposition, $propositions_format);
461
			$propositions_format = $this->chargerNombreCommentaire($ids_proposition, $propositions_format);
461
			$propositions_format = $this->chargerNombreCommentaire($ids_proposition, $propositions_format);
462
			
462
			
463
		}
463
		}
464
		return $propositions_format;
464
		return $propositions_format;
465
	}
465
	}
466
	/**
466
	/**
467
	 * Charger les votes sur les déterminations
467
	 * Charger les votes sur les déterminations
468
	 * @param Array $observations le tableau des observations à mettre à jour
468
	 * @param Array $observations le tableau des observations à mettre à jour
469
	* */
469
	* */
470
	private function chargerVotes($ids_proposition, $propositions) {
470
	private function chargerVotes($ids_proposition, $propositions) {
471
		$requeteVotes = 'SELECT * FROM '.
471
		$requeteVotes = 'SELECT * FROM '.
472
			$this->gestionBdd->formaterTable('del_commentaire_vote').
472
			$this->gestionBdd->formaterTable('del_commentaire_vote').
473
			'WHERE ce_proposition IN ('.implode(', ', $ids_proposition).')';
473
			'WHERE ce_proposition IN ('.implode(', ', $ids_proposition).')';
474
			
474
			
475
		$resultatsVotes = $this->bdd->recupererTous($requeteVotes);
475
		$resultatsVotes = $this->bdd->recupererTous($requeteVotes);
476
		foreach ($resultatsVotes as $vote) {
476
		foreach ($resultatsVotes as $vote) {
477
			$propositions[$vote['ce_proposition']]['votes'][$vote['id_vote']] = $this->formaterVotes($vote);
477
			$propositions[$vote['ce_proposition']]['votes'][$vote['id_vote']] = $this->formaterVotes($vote);
478
		}
478
		}
479
		return $propositions;
479
		return $propositions;
480
	}
480
	}
481
	
481
	
482
	/**
482
	/**
483
	 * Charger le nombre de commentaires (sans détermination) associé à l'observation
483
	 * Charger le nombre de commentaires (sans détermination) associé à l'observation
484
	 * @param Array $observations le tableau des observatins à mettre à jour
484
	 * @param Array $observations le tableau des observatins à mettre à jour
485
	 * */
485
	 * */
486
	private function chargerNombreCommentaire($ids_proposition, $propositions) {
486
	private function chargerNombreCommentaire($ids_proposition, $propositions) {
487
		$requeteNbCommentaires = 'SELECT ce_proposition, COUNT(id_commentaire) as nb '.
487
		$requeteNbCommentaires = 'SELECT ce_proposition, COUNT(id_commentaire) as nb '.
488
									'FROM del_commentaire '.
488
									'FROM del_commentaire '.
489
									'WHERE ce_proposition IN ('.implode(', ', $ids_proposition).')';
489
									'WHERE ce_proposition IN ('.implode(', ', $ids_proposition).')';
490
		$nbCommentaires = $this->bdd->recuperer($requeteNbCommentaires);
490
		$listeCommentaires = $this->bdd->recuperer($requeteNbCommentaires);
491
		foreach ($nbCommentaires as $nbCommentaire) {
491
		foreach ($listeCommentaires as $commentaire) {
492
			// ce test sert à exclure les proposition de 1er niveau qui sont elles aussi des commentaires
492
			// ce test sert à exclure les proposition de 1er niveau qui sont elles aussi des commentaires
493
			if($nbCommentaire['ce_proposition'] != null && $nbCommentaire['ce_proposition'] != 0) {
493
			if($commentaire['ce_proposition'] != null && $commentaire['ce_proposition'] != 0) {
494
				$propositions[$nbCommentaires['ce_proposition']]['nb_commentaires']= $nbCommentaire;
494
				$propositions[$commentaire['ce_proposition']]['nb_commentaires']= $commentaire;
495
			}
495
			}
496
		}
496
		}
497
		
497
		
498
		return $propositions;
498
		return $propositions;
499
	}
499
	}
500
	
500
	
501
	/*-------------------------------------------------------------------------------
501
	/*-------------------------------------------------------------------------------
502
								FORMATER ET METTRE EN FORME
502
								FORMATER ET METTRE EN FORME
503
	--------------------------------------------------------------------------------*/
503
	--------------------------------------------------------------------------------*/
504
	
504
	
505
	/**
505
	/**
506
	 * Formater les images d'une observation
506
	 * Formater les images d'une observation
507
	 * @param array $images les images de l'observation
507
	 * @param array $images les images de l'observation
508
	 * */
508
	 * */
509
	private function formaterImages($images) {
509
	private function formaterImages($images) {
510
		$imagesRetour = array();
510
		$imagesRetour = array();
511
		foreach ($images as $image) {
511
		foreach ($images as $image) {
512
			$imageCourante = array();
512
			$imageCourante = array();
513
			$imageCourante['id_image'] = $image['id_image'];
513
			$imageCourante['id_image'] = $image['id_image'];
514
			$imageCourante['date'] = $image['date_prise_de_vue'];
514
			$imageCourante['date'] = $image['date_prise_de_vue'];
515
			$imageCourante['binaire.href'] = $this->formaterLienImage($image['id_image']);
515
			$imageCourante['binaire.href'] = $this->formaterLienImage($image['id_image']);
516
			$imageCourante['hauteur'] = $image['hauteur'];
516
			$imageCourante['hauteur'] = $image['hauteur'];
517
			$imageRetour['largeur'] = $image['largeur'];
517
			$imageRetour['largeur'] = $image['largeur'];
518
			
518
			
519
			$imagesRetour[] = $imageCourante;
519
			$imagesRetour[] = $imageCourante;
520
		}
520
		}
521
		
521
		
522
		return $imagesRetour;
522
		return $imagesRetour;
523
	} 
523
	} 
524
	
524
	
525
	/**
525
	/**
526
	*  Formater une observation depuis une ligne liaison
526
	*  Formater une observation depuis une ligne liaison
527
	*  @param $liaison liaison issue de la recherche
527
	*  @param $liaison liaison issue de la recherche
528
	*  @return $observation l'observation mise en forme
528
	*  @return $observation l'observation mise en forme
529
	* */
529
	* */
530
	private function formaterObservation($liaison) {
530
	private function formaterObservation($liaison) {
531
		$observation = array();
531
		$observation = array();
532
		
532
		
533
		foreach ($this->mappingObservation as $nomOriginal => $nomFinal) {
533
		foreach ($this->mappingObservation as $nomOriginal => $nomFinal) {
534
			$observation[$nomFinal] = $liaison[$nomOriginal];
534
			$observation[$nomFinal] = $liaison[$nomOriginal];
535
		}
535
		}
536
		
536
		
537
		$observation['images'] = array();
537
		$observation['images'] = array();
538
 
538
 
539
		return $observation;
539
		return $observation;
540
	}
540
	}
541
	
541
	
542
	
542
	
543
	/**
543
	/**
544
	 * Formater le lien de l'image en fonction du fichier de config et de l'identifiant de l'image
544
	 * Formater le lien de l'image en fonction du fichier de config et de l'identifiant de l'image
545
	 * */
545
	 * */
546
	private function formaterLienImage($idImage) {
546
	private function formaterLienImage($idImage) {
547
		$idImage = sprintf('%09s', $idImage);
547
		$idImage = sprintf('%09s', $idImage);
548
		$url = $this->conteneur->getParametre('url_images');
548
		$url = $this->conteneur->getParametre('url_images');
549
		$urlImage = str_replace('%s', $idImage, $url);
549
		$urlImage = str_replace('%s', $idImage, $url);
550
		return $urlImage;
550
		return $urlImage;
551
	}
551
	}
552
	
552
	
553
	/**
553
	/**
554
	*  Formater un vote en fonction du fichier de configuration config_votes.ini
554
	*  Formater un vote en fonction du fichier de configuration config_votes.ini
555
	*  @param $votes array()
555
	*  @param $votes array()
556
	* */
556
	* */
557
	private function formaterVotes($vote) {
557
	private function formaterVotes($vote) {
558
		$retour = array();
558
		$retour = array();
559
		foreach ($vote as $param=>$valeur) {
559
		foreach ($vote as $param=>$valeur) {
560
			$retour[$this->mappingVotes[$param]] = $valeur;
560
			$retour[$this->mappingVotes[$param]] = $valeur;
561
		}
561
		}
562
		return $retour;
562
		return $retour;
563
	}
563
	}
564
	
564
	
565
	private function proteger($valeur) {
565
	private function proteger($valeur) {
566
		if (is_array($valeur)) {
566
		if (is_array($valeur)) {
567
			return $this->bdd->protegerTableau($valeur);
567
			return $this->bdd->protegerTableau($valeur);
568
		} else {
568
		} else {
569
			return $this->bdd->proteger($valeur);
569
			return $this->bdd->proteger($valeur);
570
		}
570
		}
571
	}
571
	}
572
}
572
}
573
?>
573
?>