Subversion Repositories eFlore/Applications.del

Rev

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

Rev 700 Rev 702
1
<?php
1
<?php
2
// VOIR IMAGE RECREATION L 294
-
 
3
 
-
 
4
/*vim: set expandtab tabstop=4 shiftwidth=4: */
2
/*vim: set expandtab tabstop=4 shiftwidth=4: */
5
// +------------------------------------------------------------------------------------------------------+
3
// +------------------------------------------------------------------------------------------------------+
6
// | PHP version 5.1.1                                                                                    |
4
// | PHP version 5.1.1                                                                                    |
7
// +------------------------------------------------------------------------------------------------------+
5
// +------------------------------------------------------------------------------------------------------+
8
// | Copyright (C) 2006 Tela Botanica (accueil@tela-botanica.org)                                         |
6
// | Copyright (C) 2006 Tela Botanica (accueil@tela-botanica.org)                                         |
9
// +------------------------------------------------------------------------------------------------------+
7
// +------------------------------------------------------------------------------------------------------+
10
// | This file is part of DEL.                                                                   |
8
// | This file is part of DEL.                                                                   |
11
// |                                                                                                      |
9
// |                                                                                                      |
12
// | Foobar is free software; you can redistribute it and/or modify                                       |
10
// | Foobar is free software; you can redistribute it and/or modify                                       |
13
// | it under the terms of the GNU General Public License as published by                                 |
11
// | it under the terms of the GNU General Public License as published by                                 |
14
// | the Free Software Foundation; either version 2 of the License, or                                    |
12
// | the Free Software Foundation; either version 2 of the License, or                                    |
15
// | (at your option) any later version.                                                                  |
13
// | (at your option) any later version.                                                                  |
16
// |                                                                                                      |
14
// |                                                                                                      |
17
// | Foobar is distributed in the hope that it will be useful,                                            |
15
// | Foobar is distributed in the hope that it will be useful,                                            |
18
// | but WITHOUT ANY WARRANTY; without even the implied warranty of                                       |
16
// | but WITHOUT ANY WARRANTY; without even the implied warranty of                                       |
19
// | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the                                        |
17
// | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the                                        |
20
// | GNU General Public License for more details.                                                         |
18
// | GNU General Public License for more details.                                                         |
21
// |                                                                                                      |
19
// |                                                                                                      |
22
// | You should have received a copy of the GNU General Public License                                    |
20
// | You should have received a copy of the GNU General Public License                                    |
23
// | along with Foobar; if not, write to the Free Software                                                |
21
// | along with Foobar; if not, write to the Free Software                                                |
24
// | Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA                            |
22
// | Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA                            |
25
// +------------------------------------------------------------------------------------------------------+
23
// +------------------------------------------------------------------------------------------------------+
26
// CVS : $Id: effi_cel.action.php,v 1.9 2007-11-06 10:54:03 jp_milcent Exp $
24
// CVS : $Id: effi_cel.action.php,v 1.9 2007-11-06 10:54:03 jp_milcent Exp $
27
/**
25
/**
28
 * Gestion des des images dans la base de donnée de Détermination en Ligne (DEL)
26
 * Le web service image récupère toutes les données de la table del_obs_images
-
 
27
 * pour retourner une liste d'images associée à une observation
29
*
28
 * 
30
*
-
 
31
*@package del
29
 * @package del
32
*@subpackage images
30
 * @subpackage images
33
//Auteur original :
-
 
34
*@author	Grégoire Duché <gregoire@tela-botanica.org>
31
 * @author	Grégoire Duché <gregoire@tela-botanica.org>
35
*@copyright     Tela-Botanica 2000-2012
32
 * @copyright     Tela-Botanica 2000-2012
36
*@version       $Revision: 1.9 $ $Date: 2007-11-06 10:54:03 $
33
 * @version       $Revision: 1.9 $ $Date: 2007-11-06 10:54:03 $
37
// +------------------------------------------------------------------------------------------------------+
34
// +------------------------------------------------------------------------------------------------------+
38
 */
35
 */
39
class Images extends Commun {
36
class Images extends Commun {
40
	
-
 
41
	
-
 
42
	//Paramètres
-
 
43
	private $depart = 0;
-
 
44
	private $limite = 1;
-
 
45
	private $format = 'json';
-
 
46
	private $total;
-
 
47
	private $idImage;
37
	
-
 
38
	private $config;
-
 
39
	private $schemaBdd;
-
 
40
	private $depart = 0;
-
 
41
	private $limite = 10;
-
 
42
	private $total; // Le nombre total d'images
-
 
43
	private $masque = array(); //Enregistrer les paramètres du masque
-
 
44
	private $auteurIds = array(); // La liste des identifiants des auteurs pour retrouver leur nom dans la base
-
 
45
	private $imageIds = array();
48
	private $config;
46
	
49
	
47
	
50
	/**
48
	/**
51
	 * Méthode principale de la classe
49
	 * Méthode principale de la classe
52
	 * Lance la récupération des images dans la base et les place dans un objet ResultatService 
50
	 * Lance la récupération des images dans la base et les place dans un objet ResultatService 
53
	 * pour l'afficher.
51
	 * pour l'afficher.
-
 
52
	 * @param $ressources les ressources situées après l'url de base (ex : http://url/ressource1/ressource2)
-
 
53
	 * @param $parametres les paramètres situés après le ? dans l'url
54
	 * */
54
	 * */
55
	public function consulter($ressources, $parametres) {
55
	public function consulter($ressources, $parametres) {
-
 
56
		// Gestion des configuration du script
-
 
57
		// TODO : gérer les erreurs de config
-
 
58
		// TODO : voir la classe Conteneur
56
		$this->config = Config::get('images');
59
		$this->config = Config::get('images');
-
 
60
		$this->schemaBdd = $this->config['schemaBdd'];
-
 
61
		$this->UrlNavigation = new Url($this->config['url_service']);
57
		$this->chargerParametres($parametres);
62
		$this->chargerParametres($parametres);
-
 
63
		$this->compterImages();
-
 
64
		
58
		
65
		// Lancement du service
-
 
66
		$liaisons = $this->chargerLiaisons();
-
 
67
		$images = $this->chargerImage($liaisons);
-
 
68
		$this->chargerAuteurs($images);
-
 
69
		$this->chargerVotes($images);
59
		$this->UrlNavigation = new Url($this->config['url_service']);
70
		
60
		
-
 
61
		$resultat = new ResultatService();
-
 
62
		
-
 
63
		$this->compterImages();
-
 
64
		$entete = $this->getEntete();
-
 
65
		
-
 
66
		$resultats = $this->chargerImages($this->idImage);
-
 
67
		$this->formaterImages($resultats);
-
 
68
		$this->chargerObservations($resultats);
71
		// Mettre en forme le résultat et l'envoyer pour affichage
69
		$this->chargerVotes($resultats);
72
		$resultat = new ResultatService();
70
		$resultat->corps = array('entete' => $entete, 'resultats' => $resultats);
73
		$resultat->corps = array('entete' => $this->getEntete(), 'resultats' => $images);
71
		return $resultat;
74
		return $resultat;
72
	}
75
	}
-
 
76
	
-
 
77
	/*-------------------------------------------------------------------------------
-
 
78
	 							CONFIGURATION DU SERVICE
73
	
79
	 --------------------------------------------------------------------------------*/
74
	/**
80
	/**
-
 
81
	 * Gestion des paramètres de l'application pour stockage dans variable de classe
75
	 * Récupérer l'id de l'image depuis les paramètres
82
	 * @param $parametres les paramètres tels que passés à la méthode consulter
76
	 * */
83
	 * */
77
	public function chargerParametres($parametres) {
84
	public function chargerParametres($parametres) {
78
		$this->parametres = $parametres;
85
		$this->parametres = $parametres;
79
		
86
		
80
		if (isset($this->parametres['navigation.depart'])) {
87
		if (isset($this->parametres['navigation.depart'])) {
81
			$this->depart = $this->parametres['navigation.depart'];			
88
			$this->depart = $this->parametres['navigation.depart'];			
82
		} 
89
		} 
83
		
90
		
84
		if (isset($this->parametres['navigation.limite'])) {
91
		if (isset($this->parametres['navigation.limite'])) {
85
			$this->limite = $this->parametres['navigation.limite'];
92
			$this->limite = $this->parametres['navigation.limite'];
86
		}
93
		}
-
 
94
		
87
		
95
		foreach ($parametres as $id => $parametre) {
88
		if (isset($this->parametres['masque.id'])) {
96
			if (strpos($id, 'masque.') === 0) {
89
			$idImage = $this->parametres['masque.id'];
97
				$champ = substr($id, 7, strlen($id));	
-
 
98
				$this->masque[$champ] = $parametre;
90
			$this->idImage = $idImage;
99
			}
-
 
100
		}
-
 
101
	}
-
 
102
	
-
 
103
	/**
-
 
104
	* Créer la chaine de limite de requête en fonction des paramètres donnés
-
 
105
	* */
-
 
106
	private function getLimite() {
-
 
107
		return ' LIMIT '.$this->depart.', '.$this->limite;
-
 
108
	}
-
 
109
	
-
 
110
	/**
-
 
111
	* Charger la clause WHERE en fonction des paramètres de masque
-
 
112
	* */
-
 
113
	private function chargerClauseWhere() {
-
 
114
		$where = array();
-
 
115
		if (isset($this->masque['famille'])) {
-
 
116
			$where[] = " famille = '".$this->masque['famille']."' ";
-
 
117
		}
-
 
118
		
-
 
119
		if (isset($this->masque['genre'])) {
-
 
120
			$where[] = " genre = '".$this->masque['genre']."' ";
-
 
121
		}
-
 
122
		
-
 
123
		if (isset($this->masque['espece'])) {
-
 
124
			$where[] = " nom_sel = '".$this->masque['espece']."' ";
-
 
125
		}
-
 
126
		
-
 
127
		if (isset($this->masque['ns'])) {
-
 
128
			$where[] = " nom_sel_nn = '".$this->masque['ns']."' ";
-
 
129
		}
-
 
130
		
-
 
131
		// TODO : voir la définition du webservice et la gestion nn et ns
-
 
132
		/*if (isset($this->masque['nn'])) {
-
 
133
			$where[] = " nn = '".$this->masque['nn']."' ";
-
 
134
		}*/
-
 
135
		
-
 
136
		
-
 
137
		// TODO : voir la liaision avec auteur : sur id ?
-
 
138
		if (isset($this->masque['auteur'])) {
-
 
139
			$where[] = " ce_utilisateur = '".$this->masque['auteur']."' ";
-
 
140
		}
-
 
141
		
-
 
142
		// TODO : date de quoi ? 
-
 
143
		/*if (isset($this->masque['date'])) {
-
 
144
			$where[] = " date = '".$this->masque['date']."' ";
-
 
145
		}*/
-
 
146
		
-
 
147
		//TODO : ???
-
 
148
		/*if (isset($this->masque['commune'])) {
-
 
149
			$where[] = " commune = '".$this->masque['commune']."' ";
-
 
150
		}*/
-
 
151
		
-
 
152
		//TODO : ???
-
 
153
		/*if (isset($this->masque['departement'])) {
-
 
154
			$where[] = " departement = '".$this->masque['departement']."' ";
-
 
155
		}*/
-
 
156
		
-
 
157
		if (isset($this->masque['tag'])) {
-
 
158
			$where[] = " mots_cles_texte = '".$this->masque['tag']."' ";
-
 
159
		}
91
		}
160
		
92
		
161
		return 'WHERE '.implode('AND', $where);
93
	}
162
	}
94
	
163
	
95
	/**
164
	/**
96
	 * Compter le nombre total d'images dans la base pour affichage dans entete.
165
	 * Compter le nombre total d'images dans la base pour affichage dans entete.
97
	 * */
166
	 * */
98
	private function compterImages() {
167
	private function compterImages() {
99
		//TODO : gérer le nom de la base par fichier de config
-
 
100
		//TODO : gérer les erreurs de connexion à la bdd
168
		$requeteNbImages = 'SELECT COUNT(*) AS nb '.
101
		$requeteNbImages = 'SELECT COUNT(*) AS nb FROM del.del_image ';
169
						   'FROM '.$this->schemaBdd.'.del_image ';
102
		$resultatNbImages = $this->getBdd()->recuperer($requeteNbImages);
170
		$resultatNbImages = $this->getBdd()->recuperer($requeteNbImages);
103
		$this->total = $resultatNbImages['nb'];
171
		$this->total = $resultatNbImages['nb'];
104
	}
172
	}
-
 
173
	
-
 
174
	/*-------------------------------------------------------------------------------
-
 
175
								CHARGEMENT DES IMAGES 
-
 
176
	--------------------------------------------------------------------------------*/
-
 
177
	/**
-
 
178
	* Chargement depuis la bdd de toutes les liaisons entre images et observations
-
 
179
	* */
-
 
180
	private function chargerLiaisons() {
-
 
181
	
-
 
182
		$requeteLiaisons = 'SELECT * '.
-
 
183
						   'FROM '.$this->schemaBdd.'.del_obs_images doi '.
-
 
184
						   'INNER JOIN del_image di '.
-
 
185
						   'ON doi.ce_image = di.id_image '.
-
 
186
						   'INNER JOIN del_observation dob '.
-
 
187
						   'ON doi.ce_observation = dob.id_observation ';
-
 
188
		$requeteLiaisons .= $this->chargerClauseWhere();
-
 
189
		$requeteLiaisons .= $this->getLimite();
-
 
190
		
-
 
191
		return $this->getBdd()->recupererTous($requeteLiaisons);
-
 
192
	}
-
 
193
	
-
 
194
	/**
-
 
195
	* Retourner un tableau d'images formaté en fonction des liaisons trouvées
-
 
196
	* @param $liaisons les liaisons de la table del_obs_images
-
 
197
	* */
-
 
198
	private function chargerImage($liaisons) {
-
 
199
	
-
 
200
		$images = array();
-
 
201
		foreach ($liaisons as $liaison) {
-
 
202
			$idImage = $liaison['ce_image'];
-
 
203
			
-
 
204
			// On enregistre l'ID de l'auteur pour n'effectuer qu'une seule requête par la suite
-
 
205
			$this->auteursIds[$liaison['ce_utilisateur']] = true;
-
 
206
			
-
 
207
			// On enregistre l'ID de l'image pour n'effectuer qu'une seule requête par la suite
-
 
208
			$this->imageIds[] = $idImage;
-
 
209
			
-
 
210
			$images[] = array('id_image' => $idImage, 'date' => $liaison['date_prise_de_vue'], 'binaire.href' => $this->formaterLienImage($idImage),
-
 
211
						'hauteur' => $liaison['hauteur'], 'largeur' => $liaison['largeur'], 'votes' => array(), 'observation' => $this->formaterObservation($liaison));
-
 
212
		}
-
 
213
		return $images;
-
 
214
	}
-
 
215
	
-
 
216
	/**
-
 
217
	* Récupère les auteurs utilisés dans la sous-liste, effectue une requête, et met à jour
-
 
218
	* les résultats
-
 
219
	* @param $images le tableau d'images récupéré et mis en forme 
-
 
220
	* */
-
 
221
	private function chargerAuteurs(&$images) {
-
 
222
		if (sizeof($this->auteursIds) > 0) {
-
 
223
			$auteursIds = array_keys($this->auteursIds);
-
 
224
			
-
 
225
			$chaineAuteursIds = implode(',', $auteursIds);
-
 
226
			$requeteAuteurs = 'SELECT * FROM '.$this->schemaBdd.'.del_utilisateur '.
-
 
227
								 'WHERE id_utilisateur IN ('.$chaineAuteursIds.')';
-
 
228
			$resultatAuteurs = $this->getBdd()->recupererTous($requeteAuteurs);
-
 
229
			
-
 
230
			$auteurs = array();
-
 
231
			foreach ($resultatAuteurs as $auteur) {
-
 
232
				
-
 
233
				$id = $auteur['id_utilisateur'];
-
 
234
				$auteurs[$id]['nom'] = $auteur['nom'];
-
 
235
				$auteurs[$id]['prenom'] = $auteur['prenom'];
-
 
236
			}
-
 
237
	
-
 
238
			foreach ($images as &$image) {
-
 
239
				$idAuteur = $image['observation']['auteur.id'];
-
 
240
				$image['observation']['auteur.nom'] = $auteurs["$idAuteur"]['nom'];
-
 
241
				$image['observation']['auteur.prenom'] = $auteurs["$idAuteur"]['prenom'];
-
 
242
			}
-
 
243
		}
-
 
244
	}
-
 
245
	
-
 
246
	/**
-
 
247
	* Charger les votes pour chaque image
-
 
248
	* */
-
 
249
	private function chargerVotes(&$images) {
-
 
250
		if (sizeof($this->imageIds) > 0) {
-
 
251
			$chaineImageIds = implode(',', $this->imageIds);
-
 
252
			
-
 
253
			$requeteVotes = 'SELECT * FROM '.
-
 
254
			                $this->schemaBdd.'.del_vote_image '.
-
 
255
			                'WHERE ce_image IN ('.$chaineImageIds.')';
-
 
256
			$resultatsVotes = $this->getBdd()->recupererTous($requeteVotes);
-
 
257
			
-
 
258
			$votes = array();
-
 
259
			foreach ($resultatsVotes as $vote) {
-
 
260
				$idImage = $vote['ce_image'];
-
 
261
				$id = $vote['id_vote_image'];
-
 
262
				$id_protocole = $vote['ce_protocole'];
-
 
263
				$auteur_id = $vote['ce_utilisateur'];
-
 
264
				$valeur = $vote['valeur_vote'];
-
 
265
				//TODO : voir la définition du webservice ! La date n'est pas présent dans la base
-
 
266
				//$date = $vote[''];
-
 
267
				
-
 
268
				//TODO : voir la définition du webservice : ne devrait pas être "valeur" ?
-
 
269
				$votes[$idImage]['vote'] = $valeur;
-
 
270
				$votes[$idImage]['protocole'] = $id_protocole;
-
 
271
				$votes[$idImage]['auteur_id'] = $auteur_id;
-
 
272
			}
-
 
273
	
-
 
274
			foreach ($images as &$image) {
-
 
275
				if (isset($votes[$image['id_image']])) {
-
 
276
					$image['votes'] = $votes[$image['id_image']];
-
 
277
				}
-
 
278
			}
-
 
279
		}
-
 
280
	}
-
 
281
	
-
 
282
	/*-------------------------------------------------------------------------------
-
 
283
								FORMATER ET METTRE EN FORME
-
 
284
	--------------------------------------------------------------------------------*/
-
 
285
	/**
-
 
286
	*  Formater une observation depuis une ligne liaison
-
 
287
	*  @param $liaison liaison issue de la recherche
-
 
288
	* */
-
 
289
	private function formaterObservation($liaison) {
-
 
290
		$observation = array();
-
 
291
		$observation['id_observation'] = $liaison['id_observation'];
-
 
292
		$observation['date_observation'] = $liaison['date_observation'];
-
 
293
		$observation['date_transmission'] = $liaison['date_transmission'];
-
 
294
		$observation['determination.famille'] = $liaison['famille'];
-
 
295
		$observation['determination.ns'] = $liaison['nom_sel'];
-
 
296
		$observation['determination.nn'] = $liaison['nom_sel_nn'];
-
 
297
		$observation['determination.nt'] = $liaison['nt'];
-
 
298
		$observation['id_zone_geo'] = $liaison['ce_zone_geo'];
-
 
299
		$observation['zone_geo'] = $liaison['zone_geo'];
-
 
300
		$observation['lieudit'] = $liaison['lieudit'];
-
 
301
		$observation['station'] = $liaison['station'];
-
 
302
		$observation['milieu'] = $liaison['milieu'];
-
 
303
		$observation['auteur.id'] = $liaison['ce_utilisateur'];
-
 
304
		//$this->chargerAuteur($observation);
-
 
305
		return $observation;
-
 
306
	}
105
	
307
	
106
	/**
308
	/**
107
	 * Créer l'entête en fonction des paramètres donnés
309
	 * Créer l'entête en fonction des paramètres donnés
108
	 * */
310
	 * */
109
	private function getEntete() {
311
	private function getEntete() {
110
		$entete = array();
312
		$entete = array();
111
		$entete['masque'] = $this->recupererMasque();
313
		$entete['masque'] = $this->recupererMasque();
112
		$entete['depart'] = $this->depart;
314
		$entete['depart'] = $this->depart;
113
		$entete['limite'] = $this->limite;
315
		$entete['limite'] = $this->limite;
114
		$entete['total'] = $this->total;
316
		$entete['total'] = $this->total;
115
		$lienPrecedent = $this->recupererHrefPrecedent();
317
		$lienPrecedent = $this->recupererHrefPrecedent();
116
		
318
		
117
		if ($lienPrecedent != null) { 
319
		if ($lienPrecedent != null) { 
118
			$entete['entete.precedent'] = $lienPrecedent; 
320
			$entete['entete.precedent'] = $lienPrecedent; 
119
		} 
321
		} 
120
		
322
		
121
		$lienSuivant = $this->recupererHrefSuivant();
323
		$lienSuivant = $this->recupererHrefSuivant();
122
		if ($lienSuivant) {
324
		if ($lienSuivant) {
123
			$entete['entete.suivant'] = $lienSuivant; 
325
			$entete['entete.suivant'] = $lienSuivant; 
124
		}
326
		}
125
		return $entete;
327
		return $entete;
126
	}
328
	}
127
	
329
	
128
	/**
330
	/**
129
	 * Récupérer le lien pour afficher les images précédentes en fonction des paramètres 
331
	 * Récupérer le lien pour afficher les images précédentes en fonction des paramètres 
130
	 * */
332
	 * */
131
	private function recupererHrefPrecedent() {
333
	private function recupererHrefPrecedent() {
132
		$departActuel = $this->depart;
334
		$departActuel = $this->depart;
133
		$limite = $this->limite;
335
		$limite = $this->limite;
134
		$departSuivant = $departActuel - $limite;
336
		$departSuivant = $departActuel - $limite;
135
	
337
	
136
		$url = null;
338
		$url = null;
-
 
339
		
137
		if ($departSuivant > 0) {
340
		if ($departActuel > 0) {
138
			$parametres = array();
341
			$parametres = array();
139
			if ($this->idImage != null) {
-
 
140
				$parametres['masque.id'] = $this->idImage;
-
 
141
			}
-
 
142
			$url = $this->obtenirUrlNavigation($departSuivant, $limite, $parametres);
342
			$url = $this->obtenirUrlNavigation($departSuivant, $limite, $parametres);
143
		}
343
		}
144
		return $url;
344
		return $url;
145
	}
345
	}
-
 
346
	
-
 
347
	/**
-
 
348
	* Récupérer le lien pour afficher les images suivantes en fonction des paramètres
146
	
349
	* */
147
	private function recupererHrefSuivant() {
350
	private function recupererHrefSuivant() {
148
		$departActuel = $this->depart;
351
		$departActuel = $this->depart;
149
		$limite = $this->limite;
352
		$limite = $this->limite;
150
		$departSuivant = $departActuel + $limite;
353
		$departSuivant = $departActuel + $limite;
151
	
354
	
152
		$url = null;
355
		$url = null;
153
		if ($departSuivant < $this->total) {
356
		if ($departSuivant < $this->total) {
154
			$parametres = array();
357
			$parametres = array();
155
			if ($this->idImage != null) {
-
 
156
				$parametres['masque.id'] = $this->idImage;
-
 
157
			}
-
 
158
			$url = $this->obtenirUrlNavigation($departSuivant, $limite, $parametres);
358
			$url = $this->obtenirUrlNavigation($departSuivant, $limite, $parametres);
159
		}
359
		}
160
		return $url;
360
		return $url;
161
	}
361
	}
-
 
362
	
-
 
363
	/**
-
 
364
	* Récupérer l'url de navigation en concaténant d'éventuels paramètres
-
 
365
	* @param $depart l'entier de départ de la recherche
-
 
366
	* @param $limite le nombre de résultats à retourner
-
 
367
	* @param $parametresAdditionnels le tableau contenant les parametres => valeurs additionnels
162
	
368
	* */
163
	private function obtenirUrlNavigation($depart, $limite, $parametresAdditionnels) {
-
 
164
		$parametres = array(
-
 
165
				'navigation.depart' => $depart,
369
	private function obtenirUrlNavigation($depart, $limite, $parametresAdditionnels) {
166
				'navigation.limite' => $limite);
370
		$parametres = array('navigation.depart' => $depart, 'navigation.limite' => $limite);
167
	
371
	
168
		if ($parametresAdditionnels != null) {
372
		if ($parametresAdditionnels != null) {
169
			$parametres = array_merge($parametres, $parametresAdditionnels);
373
			$parametres = array_merge($parametres, $parametresAdditionnels);
170
		}
374
		}
171
		$this->UrlNavigation->setRequete($parametres);
375
		$this->UrlNavigation->setRequete($parametres);
172
		$url = $this->UrlNavigation->getURL();
376
		$url = $this->UrlNavigation->getURL();
173
		return $url;
377
		return $url;
174
	}
378
	}
175
	
-
 
176
	
-
 
177
	
-
 
178
	/**
-
 
179
	 * Chargement depuis la bdd d'une ou plusieurs images
-
 
180
	 * */
-
 
181
	private function chargerImages($imageId = null) {
-
 
182
		//TODO : gérer le nom de la base par fichier de config
-
 
183
		$requeteImages = 'SELECT * FROM del.del_image';
-
 
184
		if ($imageId != null) {
-
 
185
			$requeteImages .= ' WHERE id_image = '.$this->getBdd()->proteger($imageId);
-
 
186
		}
-
 
187
		$requeteImages .= $this->getLimite();
-
 
188
		return $this->getBdd()->recupererTous($requeteImages);
-
 
189
	}
-
 
190
	
-
 
191
	/**
-
 
192
	 * Créer la chaine de limite de requête en fonction des paramètres donnés
-
 
193
	 * */
-
 
194
	private function getLimite() {
-
 
195
		return ' LIMIT '.$this->depart.', '.$this->limite;
-
 
196
	}
-
 
197
	
-
 
198
	/**
-
 
199
	 * Charger les observations pour chaque image
-
 
200
	 * */
-
 
201
	private function chargerObservations(&$images) {
-
 
202
		$i = 0;
-
 
203
		foreach ($images as $image) {
-
 
204
			$idImage = $image['id_image'];
-
 
205
			$requeteLiaison = 'SELECT ce_observation as idObs '.
-
 
206
							  'FROM del.del_obs_images WHERE ce_image = '.$this->getBdd()->proteger($idImage);
-
 
207
			$resultatLiaison = $this->getBdd()->recupererTous($requeteLiaison);
-
 
208
			$observations = array();
-
 
209
			foreach ($resultatLiaison as $liaison) {
-
 
210
				$idObs = $liaison['idObs'];
-
 
211
				$requeteObservation = 'SELECT * FROM del.del_observation '.
-
 
212
									  'WHERE id_observation = '.$this->getBdd()->proteger($idObs);
-
 
213
				
-
 
214
				$resultatObservation = $this->getBdd()->recuperer($requeteObservation);
-
 
215
				$observations[] = $this->formaterObservation($resultatObservation);
-
 
216
			}
-
 
217
			$images[$i]['observations'] = $observations;
-
 
218
			
-
 
219
			$i++;
-
 
220
		}
-
 
221
	}
-
 
222
	
-
 
223
	/**
-
 
224
	 * Charger les votes pour chaque image
-
 
225
	 * */
-
 
226
	private function chargerVotes(&$images) {
-
 
227
		$i = 0;
-
 
228
		foreach ($images as $image) {
-
 
229
			$idImage = $image['id_image'];
-
 
230
			$requeteVotes = 'SELECT * FROM del.del_vote_image WHERE ce_image = '.$this->getBdd()->proteger($idImage);
-
 
231
			$votes = $this->getBdd()->recupererTous($requeteVotes);
-
 
232
			$images[$i]['votes'] = $votes;
-
 
233
			$i++;
-
 
234
		}
-
 
235
	}
-
 
236
	
-
 
237
	/**
-
 
238
	* Formater les résultats des images de la requête pour retour
-
 
239
	* */
-
 
240
	private function formaterImages(&$resultats) {
-
 
241
		$images = array();
-
 
242
		foreach ($resultats as $ligne) {
-
 
243
			$image = array();
-
 
244
			$image['id_image'] = $ligne['id_image'];
-
 
245
			$image['date'] = $ligne['date_prise_de_vue'];
-
 
246
	
-
 
247
			// TODO : gérer le lien vers tela à partir de l'identifiant
-
 
248
			$image['binaire.href'] = $this->formaterLienImage($ligne['id_image']);
-
 
249
			$image['hauteur'] = $ligne['hauteur'];
-
 
250
			$image['largeur'] = $ligne['largeur'];
-
 
251
				
-
 
252
			// Votes et observations sont mis à jour plus a posteriori dans l'application
-
 
253
			$image['votes'] = array();
-
 
254
			$image['observations'] = array();
-
 
255
				
-
 
256
			$images[] = $image;
-
 
257
		}
-
 
258
	
-
 
259
		$resultats = $images;
-
 
260
	}
-
 
261
	
379
	
262
	/**
380
	/**
263
	 * Formater le lien de l'image en fonction du fichier de config et de l'identifiant de l'image
381
	 * Formater le lien de l'image en fonction du fichier de config et de l'identifiant de l'image
264
	 * */
382
	 * */
265
	private function formaterLienImage($idImage) {
383
	private function formaterLienImage($idImage) {
266
		$idImage = sprintf('%09s', $idImage);
384
		$idImage = sprintf('%09s', $idImage);
267
		$url = $this->config['url_images'];
385
		$url = $this->config['url_images'];
268
		$urlImage = str_replace('%s', $idImage, $url);
386
		$urlImage = str_replace('%s', $idImage, $url);
269
		return $urlImage;
387
		return $urlImage;
270
	}
388
	}
271
	
-
 
272
	/**
-
 
273
	 * Formater les résultats de la requête observation pour retour
-
 
274
	 * */
-
 
275
	private function formaterObservation(&$observation) {
-
 
276
		$retour = array();
-
 
277
		$retour['id_observation'] = $observation['id_observation'];
-
 
278
		$retour['date_observation'] = $observation['date_observation'];
-
 
279
		$retour['date_transmission'] = $observation['date_transmission'];
-
 
280
		$retour['determination.famille'] = $observation['famille'];
-
 
281
		$retour['determination.ns'] = $observation['nom_sel'];
-
 
282
		$retour['determination.nn'] = $observation['nom_sel_nn'];
-
 
283
		$retour['determination.nt'] = $observation['nt'];
-
 
284
		$retour['id_zone_geo'] = $observation['ce_zone_geo'];
-
 
285
		$retour['zone_geo'] = $observation['zone_geo'];
-
 
286
		$retour['lieudit'] = $observation['lieudit'];
-
 
287
		$retour['station'] = $observation['station'];
-
 
288
		$retour['milieu'] = $observation['milieu'];
-
 
289
		$retour['auteur.id'] = $observation['ce_utilisateur'];
-
 
290
		
-
 
291
		$this->chargerAuteur($retour);
-
 
292
		return $retour;
-
 
293
	}
-
 
294
	
-
 
295
	/**
-
 
296
	 * Récupérer le nom et prénom de l'auteur dans la table utilisateurs
-
 
297
	 * */
-
 
298
	private function chargerAuteur(&$retour) {
-
 
299
		$idAuteur = $retour['auteur.id'];
-
 
300
		$requeteAuteur = 'SELECT * FROM del.del_utilisateur WHERE id_utilisateur = '.$this->getBdd()->proteger($idAuteur);
-
 
301
		$resultatAuteur = $this->getBdd()->recuperer($requeteAuteur);
-
 
302
		$retour['auteur.nom'] = $resultatAuteur['nom'];
-
 
303
		$retour['auteur.prenom'] = $resultatAuteur['prenom'];
-
 
304
	}
-
 
305
 
389
 
306
	/**
390
	/**
307
	 * Récupérer le masque depuis les paramètres
391
	 * Récupérer le masque depuis les paramètres
308
	 * */
392
	 * */
309
	private function recupererMasque() {
393
	private function recupererMasque() {
310
		$masqueEntete = '';
394
		$masqueEntete = '';
311
		foreach ($this->parametres as $param => $cle) {
395
		foreach ($this->parametres as $param => $cle) {
312
			if ($param == 'masque') {
396
			if ($param == 'masque') {
313
				$masqueEntete = 'masque='.$cle.',';
397
				$masqueEntete = 'masque='.$cle.',';
314
			} elseif (substr($param, 0, 7) == 'masque.') {
398
			} elseif (substr($param, 0, 7) == 'masque.') {
315
				$masqueEntete .= substr($param, 7).'='.$cle.',';
399
				$masqueEntete .= substr($param, 7).'='.$cle.',';
316
			}
400
			}
317
		}
401
		}
318
		$masqueEntete = rtrim($masqueEntete,',');
402
		$masqueEntete = rtrim($masqueEntete,',');
319
		return $masqueEntete;
403
		return $masqueEntete;
320
	}
404
	}
321
}
405
}
322
?>
406
?>