Subversion Repositories eFlore/Applications.del

Rev

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

Rev 711 Rev 719
1
<?php
1
<?php
2
// declare(encoding='UTF-8');
2
// declare(encoding='UTF-8');
3
/**
3
/**
4
	* Le web service image récupère toutes les données de la table del_obs_images
4
	* Le web service image récupère toutes les données de la table del_obs_images
5
 * pour retourner une liste d'images associée à une observation
5
 * pour retourner une liste d'images associée à une observation
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=ApiIdentiplante01Images
15
 * @see http://www.tela-botanica.org/wikini/eflore/wakka.php?wiki=ApiIdentiplante01Images
16
 */
16
 */
17
 
-
 
18
// TODO : voir conteneur, n'étendra plus rien, le conteneur viendra du constructeur 
17
 
19
class Images extends Commun {
-
 
20
	
-
 
21
	private $config;
-
 
22
	private $schemaBdd;
-
 
23
	private $depart = 0;
-
 
24
	private $limite = 10;
-
 
25
	private $total; // Le nombre total d'images
-
 
26
	private $masque = array(); //Enregistrer les paramètres du masque
18
class Images {
27
	private $masquesPossibles = array('famille', 'genre', 'ns', 'nn', 'auteur', 'date', 'commune', 'departement', 'tag');
-
 
28
	private $imageIds = array();
19
	
29
	private $UrlNavigation;
-
 
-
 
20
	private $imageIds = array();
-
 
21
	private $conteneur;
-
 
22
	
-
 
23
	
-
 
24
	public function __construct(Conteneur $conteneur = null) {
30
	private $mappingFiltre;
25
		$this->conteneur = $conteneur == null ? new Conteneur() : $conteneur;
31
	private $mappingObservation;
26
		$this->bdd = $this->conteneur->getBdd();
32
	
27
	}
33
	
28
	
34
	/**
29
	/**
35
	 * Méthode principale de la classe.
30
	 * Méthode principale de la classe.
36
	 * Lance la récupération des images dans la base et les place dans un objet ResultatService 
31
	 * Lance la récupération des images dans la base et les place dans un objet ResultatService 
37
	 * pour l'afficher.
32
	 * pour l'afficher.
38
	 * @param array $ressources les ressources situées après l'url de base (ex : http://url/ressource1/ressource2)
33
	 * @param array $ressources les ressources situées après l'url de base (ex : http://url/ressource1/ressource2)
39
	 * @param array $parametres les paramètres situés après le ? dans l'url
34
	 * @param array $parametres les paramètres situés après le ? dans l'url
40
	 * */
35
	 * */
41
	public function consulter($ressources, $parametres) {
36
	public function consulter($ressources, $parametres) {
42
		
37
		
43
		// Gestion des configuration du script
38
		// Gestion des configuration du script
44
		$this->configurer();
39
		$this->configurer();
45
		$this->verifierConfiguration();
40
		$this->verifierConfiguration();
46
		$this->schemaBdd = $this->config['schemaBdd'];
-
 
47
		$this->UrlNavigation = new Url($this->config['url_service']);
-
 
48
		$this->UrlNavigation->setOption(Url::OPTION_ENCODER_VALEURS, true);
-
 
49
		$this->chargerParametres($parametres);
-
 
50
		
41
		
51
		// Lancement du service
42
		// Lancement du service
52
		$liaisons = $this->chargerLiaisons();
43
		$liaisons = $this->chargerLiaisons();
53
		$this->total = $this->compterImages();
44
		$total = $this->compterImages();
-
 
45
		$this->conteneur->setTotal($total);
54
		$images = $this->chargerImage($liaisons);
46
		$images = $this->chargerImage($liaisons);
55
		
-
 
56
		$images = $this->chargerVotes($images);
47
		$images = $this->chargerVotes($images);
57
		
48
		
58
		// Mettre en forme le résultat et l'envoyer pour affichage
49
		// Mettre en forme le résultat et l'envoyer pour affichage
59
		$resultat = new ResultatService();
50
		$resultat = new ResultatService();
60
		$resultat->corps = array('entete' => $this->getEntete(), 'resultats' => $images);
51
		$resultat->corps = array('entete' => $this->conteneur->getEntete(), 'resultats' => $images);
61
		return $resultat;
52
		return $resultat;
62
	}
53
	}
63
	
54
	
64
	/*-------------------------------------------------------------------------------
55
	/*-------------------------------------------------------------------------------
65
	 							CONFIGURATION DU SERVICE
56
	 							CONFIGURATION DU SERVICE
66
	 --------------------------------------------------------------------------------*/
57
	 --------------------------------------------------------------------------------*/
67
	/**
58
	/**
68
	 * Configuration du service en fonction du fichier de config config_del.ini
59
	 * Configuration du service en fonction du fichier de config config_del.ini
69
	 * */
60
	 * */
70
	public function configurer() {
61
	public function configurer() {
71
		$this->config = Config::get('images');
-
 
72
		$this->mappingFiltre = Config::get('mapping_masque');
62
		$this->mappingFiltre = $this->conteneur->getParametre('mapping_masque');
73
		$this->mappingObservation = Config::get('mapping_observation');
63
		$this->mappingObservation = $this->conteneur->getParametre('mapping_observation');
74
	}
64
	}
75
	
65
	
76
	/**
66
	/**
77
	 * Vérifier que le service est bien configuré 
67
	 * Vérifier que le service est bien configuré 
78
	 * */
68
	 * */
79
	public function verifierConfiguration() {
69
	public function verifierConfiguration() {
80
		
70
	/*	
81
		$erreurs = array();
71
		$erreurs = array();
82
		
72
		
83
		if (empty($this->config)) {
73
		if (empty($this->config)) {
84
			$erreurs[] = '- le fichier de configuration ne contient pas le tableau [images] ou celui-ci est vide ;'; 
74
			$erreurs[] = '- le fichier de configuration ne contient pas le tableau [images] ou celui-ci est vide ;'; 
85
		} else {
75
		} else {
86
			if (!isset($this->config['url_service'])) {
76
			if (!isset($this->config['url_service'])) {
87
				$erreurs[] = '- paramètre "url_service" manquant ;';
77
				$erreurs[] = '- paramètre "url_service" manquant ;';
88
			}
78
			}
89
			
79
			
90
			if (!isset($this->config['url_images'])) {
80
			if (!isset($this->config['url_images'])) {
91
				$erreurs[] = '- paramètre "url_images" manquant ;';
81
				$erreurs[] = '- paramètre "url_images" manquant ;';
92
			}
82
			}
93
			
83
			
94
			if (!isset($this->config['schemaBdd'])) {
84
			if ($this->conteneur->getSchemaBdd() == null) {
95
				$erreurs[] = '- paramètre "schemaBdd" manquant ;';
85
				$erreurs[] = '- paramètre "schemaBdd" manquant ;';
96
			}
86
			}
97
		}
87
		}
98
 
88
 
99
		if (empty($this->mappingObservation)) {
89
		if (empty($this->mappingObservation)) {
100
			$erreurs[] = '- le fichier de configuration ne contient pas le tableau [mapping_observation] ou celui-ci est vide ;';
90
			$erreurs[] = '- le fichier de configuration ne contient pas le tableau [mapping_observation] ou celui-ci est vide ;';
101
		} else {
91
		} else {
102
			$champsMappingObs = array('id_observation', 'date_observation', 'date_transmission', 'famille', 'nom_sel', 'nom_sel_nn', 'nt',
92
			$champsMappingObs = array('id_observation', 'date_observation', 'date_transmission', 'famille', 'nom_sel', 'nom_sel_nn', 'nt',
103
								'ce_zone_geo', 'lieudit', 'station', 'milieu', 'ce_utilisateur', 'nom', 'prenom');
93
								'ce_zone_geo', 'lieudit', 'station', 'milieu', 'ce_utilisateur', 'nom', 'prenom');
104
			foreach ($champsMappingObs as $champ) {
94
			foreach ($champsMappingObs as $champ) {
105
				if (!isset($this->mappingObservation[$champ])) {
95
				if (!isset($this->mappingObservation[$champ])) {
106
					$erreurs[] = '- le mapping du champ "'.$champ.'" pour l\'observation est manquant ;';
96
					$erreurs[] = '- le mapping du champ "'.$champ.'" pour l\'observation est manquant ;';
107
				}				
97
				}				
108
			}
98
			}
109
		}
99
		}
110
		
100
		
111
		if (empty($this->mappingFiltre)) {
101
		if (empty($this->mappingFiltre)) {
112
			$erreurs[] = '- le fichier de configuration ne contient pas le tableau [mapping_masque] ou celui-ci est vide ;';
102
			$erreurs[] = '- le fichier de configuration ne contient pas le tableau [mapping_masque] ou celui-ci est vide ;';
113
		} else {
103
		} else {
114
			$champsMappingFiltre = array('famille', 'ns', 'nn', 'date', 'tag', 'commune');
104
			$champsMappingFiltre = array('famille', 'ns', 'nn', 'date', 'tag', 'commune');
115
			foreach ($champsMappingFiltre as $champ) {
105
			foreach ($champsMappingFiltre as $champ) {
116
				if (!isset($this->mappingFiltre[$champ])) {
106
				if (!isset($this->mappingFiltre[$champ])) {
117
					$erreurs[] = '- le mapping du champ "'.$champ.'" pour l\'observation est manquant ;';
107
					$erreurs[] = '- le mapping du champ "'.$champ.'" pour l\'observation est manquant ;';
118
				}				
108
				}				
119
			}
109
			}
120
		}
110
		}
121
		
111
		
122
		if (!empty($erreurs)) {
112
		if (!empty($erreurs)) {
123
			$e = 'Erreur lors de la configuration : '."\n";
113
			$e = 'Erreur lors de la configuration : '."\n";
124
			$e .= implode("\n", $erreurs);
114
			$e .= implode("\n", $erreurs);
125
			throw new Exception($e, RestServeur::HTTP_CODE_ERREUR);
115
			throw new Exception($e, RestServeur::HTTP_CODE_ERREUR);
126
		}
116
		}*/
127
	}
117
	}
128
	
-
 
129
	/**
-
 
130
	 * Gestion des paramètres de l'application pour stockage dans variable de classe
-
 
131
	 * @param array $parametres les paramètres tels que passés à la méthode consulter
-
 
132
	 * */
-
 
133
	public function chargerParametres($parametres) {
-
 
134
		$this->parametres = $parametres;
-
 
135
		
-
 
136
		if (isset($this->parametres['navigation.depart'])) {
-
 
137
			$this->depart = $this->parametres['navigation.depart'];			
-
 
138
		} 
-
 
139
		
-
 
140
		if (isset($this->parametres['navigation.limite'])) {
-
 
141
			$this->limite = $this->parametres['navigation.limite'];
-
 
142
		}
-
 
143
		
-
 
144
		foreach ($parametres as $id => $parametre) {
-
 
145
			if (strpos($id, 'masque.') === 0) {
-
 
146
				$champ = substr($id, 7, strlen($id));
-
 
147
				if (isset($masquesPossibles[$champ])) {	
-
 
148
					$this->masque[$champ] = $parametre;
-
 
149
				}
-
 
150
			}
-
 
151
		}
-
 
152
	}
-
 
153
	
-
 
154
	/**
-
 
155
	* Créer la chaine de limite de requête en fonction des paramètres donnés
-
 
156
	* */
-
 
157
	private function getLimite() {
-
 
158
		return ' LIMIT '.$this->depart.', '.$this->limite;
118
	
159
	}
119
	
160
	
120
	
161
	/**
121
	/**
162
	 * Obtenir une chaine de caractère concaténant nom et prénom séparé par une virgule
122
	 * Obtenir une chaine de caractère concaténant nom et prénom séparé par une virgule
163
	 * @param String $auteurId l'identifiant de l'auteur
123
	 * @param String $auteurId l'identifiant de l'auteur
164
	 * @return String la chaine de concaténation
124
	 * @return String la chaine de concaténation
165
	 * */
125
	 * */
166
	private function getChaineNomPrenom($auteurId) {
126
	private function getChaineNomPrenom($auteurId) {
167
		$nomPrenom = explode(' ', $auteurId);
127
		$nomPrenom = explode(' ', $auteurId);
168
		$nomPrenom = $this->getBdd()->protegerTableau($nomPrenom);
128
		$nomPrenom = $this->proteger($nomPrenom);
169
		$chaineNomPrenom = implode(', ', $nomPrenom);
129
		$chaineNomPrenom = implode(', ', $nomPrenom);
170
		return $chaineNomPrenom;
130
		return $chaineNomPrenom;
171
	}
131
	}
172
	
132
	
173
	/**
133
	/**
174
	* Charger la clause WHERE en fonction des paramètres de masque
134
	* Charger la clause WHERE en fonction des paramètres de masque
175
	* */
135
	* */
176
	private function chargerClauseWhere() {
136
	private function chargerClauseWhere() {
177
		$where = array();
137
		$where = array();
178
		
138
		
179
		// TODO : vérifier les communes et les communes avec une apostrophe
139
		// TODO : vérifier les communes et les communes avec une apostrophe
180
		foreach($this->masque as $idMasque => $valeurMasque) {
140
		foreach($this->conteneur->getMasque() as $idMasque => $valeurMasque) {
181
				
141
			
-
 
142
			$idMasque = str_replace('masque.', '', $idMasque);
182
			switch ($idMasque) {
143
			switch ($idMasque) {
183
				// nom du masque => nom BDD
144
				// nom du masque => nom BDD
184
				case 'auteur' :
145
				case 'auteur' :
185
					$auteurId = $this->masque['auteur'];
146
					$auteurId = $this->conteneur->getMasque('auteur');
186
					if (is_numeric($auteurId)) {
147
					if (is_numeric($auteurId)) {
187
						$where[] = " ce_utilisateur = ".$this->masque['auteur'];
148
						$where[] = ' ce_utilisateur = '.$auteurId;
188
					} else {
149
					} else {
189
						if (strpos($auteurId, '@') === false) {
150
						if (strpos($auteurId, '@') === false) {
190
							$chaineNomPrenom = $this->getChaineNomPrenom($auteurId);
151
							$chaineNomPrenom = $this->getChaineNomPrenom($auteurId);
191
							$where[] = '((nom IN ('.$chaineNomPrenom.')) OR (prenom IN ('.$chaineNomPrenom.')))';
152
							$where[] = '((nom IN ('.$chaineNomPrenom.')) OR (prenom IN ('.$chaineNomPrenom.')))';
192
						} else {
153
						} else {
193
							$where[] = " courriel LIKE ".$this->getBdd()->proteger($this->masque['auteur'].'%')." ";
154
							$where[] = " courriel LIKE ".$this->proteger($this->conteneur->getMasque('auteur').'%')." ";
194
						}
155
						}
195
					}
156
					}
196
				break;
157
				break;
197
				
158
				
198
				//TODO : gérer le format de la date ?
159
				//TODO : gérer le format de la date ?
199
				// rechercher sur LIKE DATE % ?
160
				// rechercher sur LIKE DATE % ?
200
				// TODO : recherche sur JOUR MOIS ou ANNEE
161
				// TODO : recherche sur JOUR MOIS ou ANNEE
201
				case 'departement' :
162
				case 'departement' :
202
					$dept = $this->masque['departement'];
163
					$dept = $valeurMasque;
203
					if (is_numeric($dept)) {
164
					if (is_numeric($dept)) {
204
						$where[] = " ce_zone_geo LIKE ".$this->getBdd()->proteger('INSEE-C:'.$this->masque['departement'].'%');
165
						$where[] = " ce_zone_geo LIKE ".$this->proteger('INSEE-C:'.$dept.'%');
205
					} else {
166
					} else {
206
						//TODO : que faire si le département n'est pas numérique ?
167
						//TODO : que faire si le département n'est pas numérique ?
207
						// TODO : modifier le modèle pour intégrer les zones geos !
168
						// TODO : modifier le modèle pour intégrer les zones geos !
208
					}
169
					}
209
				break;
170
				break;
210
				case 'genre' :
171
				case 'genre' :
211
						$where[] = ' '.$this->mappingFiltre['ns'].' LIKE '.$this->getBdd()->proteger($valeurMasque.' %');
172
						$where[] = ' '.$this->mappingFiltre['ns'].' LIKE '.$this->proteger($valeurMasque.' %');
212
				break;
173
				break;
213
				case 'tag' :
174
				case 'tag' :
214
					$where[] = " di.mots_cles_texte LIKE ".$this->getBdd()->proteger($valeurMasque);
175
					$where[] = " di.mots_cles_texte LIKE ".$this->proteger($valeurMasque);
215
				break;
176
				break;
216
				default:
177
				default:
217
					$where[] = ' '.$this->mappingFiltre[$idMasque].' = '.$this->getBdd()->proteger($valeurMasque);
178
					$where[] = ' '.$this->mappingFiltre[$idMasque].' = '.$this->proteger($valeurMasque);
218
				break;
179
				break;
219
			}
180
			}
220
		}
181
		}
221
		
182
		
222
		
183
		
223
		if (!empty($where)) {
184
		if (!empty($where)) {
224
			return ' WHERE '.implode('AND', $where);
185
			return ' WHERE '.implode('AND', $where);
225
		} else {
186
		} else {
226
			return;
187
			return;
227
		}
188
		}
228
	}
189
	}
229
	
190
	
230
	/*-------------------------------------------------------------------------------
191
	/*-------------------------------------------------------------------------------
231
								CHARGEMENT DES IMAGES 
192
								CHARGEMENT DES IMAGES 
232
	--------------------------------------------------------------------------------*/
193
	--------------------------------------------------------------------------------*/
233
	/**
194
	/**
234
	* Chargement depuis la bdd de toutes les liaisons entre images et observations
195
	* Chargement depuis la bdd de toutes les liaisons entre images et observations
235
	* */
196
	* */
236
	private function chargerLiaisons() {
197
	private function chargerLiaisons() {
237
	
198
	
238
		$requeteLiaisons = 'SELECT SQL_CALC_FOUND_ROWS * '.
199
		$requeteLiaisons = 'SELECT SQL_CALC_FOUND_ROWS * '.
239
						   'FROM '.$this->schemaBdd.'.del_obs_images doi '.
200
						   'FROM '.$this->conteneur->getSchemaBdd().'.del_obs_images doi '.
240
						   'INNER JOIN del_image di '.
201
						   'INNER JOIN del_image di '.
241
						   'ON doi.ce_image = di.id_image '.
202
						   'ON doi.ce_image = di.id_image '.
242
						   'INNER JOIN del_observation dob '.
203
						   'INNER JOIN del_observation dob '.
243
						   'ON doi.ce_observation = dob.id_observation '.
204
						   'ON doi.ce_observation = dob.id_observation '.
244
						   'INNER JOIN del_utilisateur du '.
205
						   'INNER JOIN del_utilisateur du '.
245
						   'ON du.id_utilisateur = doi.ce_utilisateur';
206
						   'ON du.id_utilisateur = doi.ce_utilisateur';
246
		$requeteLiaisons .= $this->chargerClauseWhere();
207
		$requeteLiaisons .= $this->chargerClauseWhere();
247
		$requeteLiaisons .= $this->getLimite();
208
		$requeteLiaisons .= $this->conteneur->getLimitSql();
248
		return $this->getBdd()->recupererTous($requeteLiaisons);
209
		return $this->bdd->recupererTous($requeteLiaisons);
249
	}
210
	}
250
	
211
	
251
	/**
212
	/**
252
	* Compter le nombre total d'images dans la base pour affichage dans entete.
213
	* Compter le nombre total d'images dans la base pour affichage dans entete.
253
	* */
214
	* */
254
	private function compterImages() {
215
	private function compterImages() {
255
		$requete = 'SELECT FOUND_ROWS() AS nbre ';
216
		$requete = 'SELECT FOUND_ROWS() AS nbre ';
256
		$resultats = $this->getBdd()->recuperer($requete);
217
		$resultats = $this->bdd->recuperer($requete);
257
		return (int) $resultats['nbre'];
218
		return (int) $resultats['nbre'];
258
	}
219
	}
259
	
220
	
260
	/**
221
	/**
261
	* Retourner un tableau d'images formaté en fonction des liaisons trouvées
222
	* Retourner un tableau d'images formaté en fonction des liaisons trouvées
262
	* @param $liaisons les liaisons de la table del_obs_images
223
	* @param $liaisons les liaisons de la table del_obs_images
263
	* */
224
	* */
264
	private function chargerImage($liaisons) {
225
	private function chargerImage($liaisons) {
265
	
226
	
266
		$images = array();
227
		$images = array();
267
		foreach ($liaisons as $liaison) {
228
		foreach ($liaisons as $liaison) {
268
			$idImage = $liaison['ce_image'];
229
			$idImage = $liaison['ce_image'];
269
			
230
			
270
			// On enregistre l'ID de l'image pour n'effectuer qu'une seule requête par la suite
231
			// On enregistre l'ID de l'image pour n'effectuer qu'une seule requête par la suite
271
			$this->imageIds[] = $idImage;
232
			$this->imageIds[] = $idImage;
272
			
233
			
273
			$images[$idImage] = array('id_image' => $idImage, 'date' => $liaison['date_prise_de_vue'], 'binaire.href' => $this->formaterLienImage($idImage),
234
			$images[$idImage] = array('id_image' => $idImage, 'date' => $liaison['date_prise_de_vue'], 'binaire.href' => $this->formaterLienImage($idImage),
274
						'hauteur' => $liaison['hauteur'], 'largeur' => $liaison['largeur'], 'votes' => array(), 'observation' => $this->formaterObservation($liaison));
235
						'hauteur' => $liaison['hauteur'], 'largeur' => $liaison['largeur'], 'votes' => array(), 'observation' => $this->formaterObservation($liaison));
275
		}
236
		}
276
		return $images;
237
		return $images;
277
	}
238
	}
278
	
239
	
279
	/**
240
	/**
280
	* Charger les votes pour chaque image
241
	* Charger les votes pour chaque image
281
	* */
242
	* */
282
	private function chargerVotes($images) {
243
	private function chargerVotes($images) {
283
		
244
		
284
		if (sizeof($this->imageIds) > 0) {
245
		if (sizeof($this->imageIds) > 0) {
285
			$chaineImageIds = implode(',', $this->imageIds);
246
			$chaineImageIds = implode(',', $this->imageIds);
286
			
247
			
287
			$requeteVotes = 'SELECT * FROM '.
248
			$requeteVotes = 'SELECT * FROM '.
288
			                $this->schemaBdd.'.del_vote_image '.
249
			                $this->conteneur->getSchemaBdd().'.del_vote_image '.
289
			                'WHERE ce_image IN ('.$chaineImageIds.')';
250
			                'WHERE ce_image IN ('.$chaineImageIds.')';
290
			$resultatsVotes = $this->getBdd()->recupererTous($requeteVotes);
251
			$resultatsVotes = $this->bdd->recupererTous($requeteVotes);
291
			
252
			
292
			
253
			
293
			//TODO : faire une méthode formater vote
254
			//TODO : faire une méthode formater vote
294
			$votes = $this->formaterVotes($resultatsVotes);
255
			$votes = $this->formaterVotes($resultatsVotes);
295
	
256
	
296
			foreach ($images as $id => $image) {
257
			foreach ($images as $id => $image) {
297
				if (isset($votes[$image['id_image']])) {
258
				if (isset($votes[$image['id_image']])) {
298
					$images[$id]['votes'] = $votes[$image['id_image']];
259
					$images[$id]['votes'] = $votes[$image['id_image']];
299
				}
260
				}
300
			}
261
			}
301
		}
262
		}
302
		
263
		
303
		return $images;
264
		return $images;
304
	}
265
	}
305
	
266
	
306
	/*-------------------------------------------------------------------------------
267
	/*-------------------------------------------------------------------------------
307
								FORMATER ET METTRE EN FORME
268
								FORMATER ET METTRE EN FORME
308
	--------------------------------------------------------------------------------*/
269
	--------------------------------------------------------------------------------*/
309
	
-
 
310
	//TODO : gérer les paramètres par défaut au cas où ça ne soit pas 
-
 
311
	/*
-
 
312
	 * array(
-
 
313
					'id_observation' => 'id_observation',
-
 
314
					'date_observation' => 'date_observation',
-
 
315
					'date_transmission' => 'date_transmission', 
-
 
316
					'famille' => 'determination.famille',
-
 
317
					'nom_sel' => 'determination.ns',
-
 
318
					'nom_sel_nn' => 'determination.nn',
-
 
319
					'nt' => 'determination.nt',
-
 
320
					'ce_zone_geo' => 'id_zone_geo',
-
 
321
					'zone_geo' => 'zone_geo',
-
 
322
					'lieudit' => 'lieudit',
-
 
323
					'station' => 'station',
-
 
324
					'milieu' => 'milieu',
-
 
325
					'ce_utilisateur' => 'auteur.id',
-
 
326
					'nom' => 'auteur.nom',
-
 
327
					'prenom' => 'auteur.prenom' 
-
 
328
					);
-
 
329
	 */
270
	
330
	/**
271
	/**
331
	*  Formater une observation depuis une ligne liaison
272
	*  Formater une observation depuis une ligne liaison
332
	*  @param $liaison liaison issue de la recherche
273
	*  @param $liaison liaison issue de la recherche
333
	*  @return $observation l'observation mise en forme
274
	*  @return $observation l'observation mise en forme
334
	* */
275
	* */
335
	private function formaterObservation($liaison) {
276
	private function formaterObservation($liaison) {
336
		$observation = array();
277
		$observation = array();
337
		
278
		
338
		foreach ($this->mappingObservation as $nomOriginal => $nomFinal) {
279
		foreach ($this->mappingObservation as $nomOriginal => $nomFinal) {
339
			$observation[$nomFinal] = $liaison[$nomOriginal];
280
			$observation[$nomFinal] = $liaison[$nomOriginal];
340
		}
281
		}
341
 
282
 
342
		return $observation;
283
		return $observation;
343
	}
284
	}
344
	
285
	
345
	/**
286
	/**
346
	*  Formater une observation depuis une ligne liaison
287
	*  Formater une observation depuis une ligne liaison
347
	*  @param $liaison liaison issue de la recherche
288
	*  @param $liaison liaison issue de la recherche
348
	*  @return $observation l'observation mise en forme
289
	*  @return $observation l'observation mise en forme
349
	* */
290
	* */
350
	private function formaterVotes($votes) {
291
	private function formaterVotes($votes) {
351
		$retour = array();
292
		$retour = array();
352
		foreach ($votes as $vote) {
293
		foreach ($votes as $vote) {
353
			$idImage = $vote['ce_image'];
294
			$idImage = $vote['ce_image'];
354
			$id = $vote['id_vote_image'];
295
			$id = $vote['id_vote_image'];
355
			$id_protocole = $vote['ce_protocole'];
296
			$id_protocole = $vote['ce_protocole'];
356
			$auteur_id = $vote['ce_utilisateur'];
297
			$auteur_id = $vote['ce_utilisateur'];
357
			$valeur = $vote['valeur_vote'];
298
			$valeur = $vote['valeur_vote'];
358
			$date = $vote['date_vote_image'];
299
			$date = $vote['date_vote_image'];
359
		
300
		
360
			$retour[$idImage]['valeur'] = $valeur;
301
			$retour[$idImage]['valeur'] = $valeur;
361
			$retour[$idImage]['protocole'] = $id_protocole;
302
			$retour[$idImage]['protocole'] = $id_protocole;
362
			$retour[$idImage]['auteur_id'] = $auteur_id;
303
			$retour[$idImage]['auteur_id'] = $auteur_id;
363
			$retour[$idImage]['date'] = $auteur_id;
304
			$retour[$idImage]['date'] = $auteur_id;
364
		}
305
		}
365
		
306
		
366
		return $retour;
307
		return $retour;
367
	}
308
	}
368
	
309
	
369
	/**
310
	/**
370
	 * Créer l'entête en fonction des paramètres donnés
-
 
371
	 * */
-
 
372
	private function getEntete() {
-
 
373
		$entete = array();
-
 
374
		$entete['masque'] = $this->recupererMasque();
-
 
375
		$entete['depart'] = $this->depart;
-
 
376
		$entete['limite'] = $this->limite;
-
 
377
		$entete['total'] = $this->total;
-
 
378
		$lienPrecedent = $this->recupererHrefPrecedent();
-
 
379
		
-
 
380
		if ($lienPrecedent != null) { 
-
 
381
			$entete['entete.precedent'] = $lienPrecedent; 
-
 
382
		} 
-
 
383
		
-
 
384
		$lienSuivant = $this->recupererHrefSuivant();
-
 
385
		if ($lienSuivant) {
-
 
386
			$entete['entete.suivant'] = $lienSuivant; 
-
 
387
		}
-
 
388
		return $entete;
-
 
389
	}
-
 
390
	
-
 
391
	/**
-
 
392
	 * Récupérer le lien pour afficher les images précédentes en fonction des paramètres 
-
 
393
	 * */
-
 
394
	private function recupererHrefPrecedent() {
-
 
395
		$departActuel = $this->depart;
-
 
396
		$limite = $this->limite;
-
 
397
		$departSuivant = $departActuel - $limite;
-
 
398
	
-
 
399
		$url = null;
-
 
400
		
-
 
401
		if ($departActuel > 0) {
-
 
402
			$url = $this->obtenirUrlNavigation($departSuivant, $limite, $this->parametres);
-
 
403
		}
-
 
404
		return $url;
-
 
405
	}
-
 
406
	
-
 
407
	/**
-
 
408
	* Récupérer le lien pour afficher les images suivantes en fonction des paramètres
-
 
409
	* */
-
 
410
	private function recupererHrefSuivant() {
-
 
411
		$departActuel = $this->depart;
-
 
412
		$limite = $this->limite;
-
 
413
		$departSuivant = $departActuel + $limite;
-
 
414
		
-
 
415
	
-
 
416
		$url = null;
-
 
417
		if ($departSuivant < $this->total) {
-
 
418
			$url = $this->obtenirUrlNavigation($departSuivant, $limite, $this->parametres);
-
 
419
		}
-
 
420
		return $url;
-
 
421
	}
-
 
422
	
-
 
423
	/**
-
 
424
	* Récupérer l'url de navigation en concaténant d'éventuels paramètres
-
 
425
	* @param $depart l'entier de départ de la recherche
-
 
426
	* @param $limite le nombre de résultats à retourner
-
 
427
	* @param $parametresAdditionnels le tableau contenant les parametres => valeurs additionnels
-
 
428
	* */
-
 
429
	private function obtenirUrlNavigation($depart, $limite, $parametresAdditionnels) {
-
 
430
	
-
 
431
		$parametres = array('navigation.depart' => $depart, 'navigation.limite' => $limite);
-
 
432
	
-
 
433
		if ($parametresAdditionnels != null) {
-
 
434
			unset($parametresAdditionnels['navigation.depart']);
-
 
435
			unset($parametresAdditionnels['navigation.limite']);
-
 
436
			$parametres = array_merge($parametres, $parametresAdditionnels);
-
 
437
		}
-
 
438
	
-
 
439
		$this->UrlNavigation->setRequete($parametres);
-
 
440
		$url = $this->UrlNavigation->getURL();
-
 
441
		return $url;
-
 
442
	}
-
 
443
	
-
 
444
	/**
-
 
445
	 * Formater le lien de l'image en fonction du fichier de config et de l'identifiant de l'image
311
	 * Formater le lien de l'image en fonction du fichier de config et de l'identifiant de l'image
446
	 * */
312
	 * */
447
	private function formaterLienImage($idImage) {
313
	private function formaterLienImage($idImage) {
448
		$idImage = sprintf('%09s', $idImage);
314
		$idImage = sprintf('%09s', $idImage);
449
		$url = $this->config['url_images'];
315
		$url = $this->conteneur->getParametre('url_images');
450
		$urlImage = str_replace('%s', $idImage, $url);
316
		$urlImage = str_replace('%s', $idImage, $url);
451
		return $urlImage;
317
		return $urlImage;
452
	}
318
	}
453
 
319
	
454
	/**
-
 
455
	 * Récupérer le masque depuis les paramètres
-
 
456
	 * */
-
 
457
	private function recupererMasque() {
320
	private function proteger($valeur) {
458
		$masqueEntete = '';
321
		if (is_array($valeur)) {
459
		foreach ($this->parametres as $param => $cle) {
322
			return $this->bdd->protegerTableau($valeur);
460
			if ($param == 'masque') {
323
		} else {
461
				$masqueEntete = 'masque='.$cle.',';
324
			return $this->bdd->proteger($valeur);
462
			} elseif (substr($param, 0, 7) == 'masque.') {
-
 
463
				$masqueEntete .= substr($param, 7).'='.$cle.',';
-
 
464
			}
-
 
465
		}
325
		}
466
		$masqueEntete = rtrim($masqueEntete,',');
-
 
467
		return $masqueEntete;
-
 
468
	}
326
	}
469
}
327
}
470
?>
328
?>