Subversion Repositories eFlore/Applications.del

Rev

Go to most recent revision | Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
700 gduche 1
<?php
2
// VOIR IMAGE RECREATION L 294
3
 
4
/*vim: set expandtab tabstop=4 shiftwidth=4: */
5
// +------------------------------------------------------------------------------------------------------+
6
// | PHP version 5.1.1                                                                                    |
7
// +------------------------------------------------------------------------------------------------------+
8
// | Copyright (C) 2006 Tela Botanica (accueil@tela-botanica.org)                                         |
9
// +------------------------------------------------------------------------------------------------------+
10
// | This file is part of DEL.                                                                   |
11
// |                                                                                                      |
12
// | 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                                 |
14
// | the Free Software Foundation; either version 2 of the License, or                                    |
15
// | (at your option) any later version.                                                                  |
16
// |                                                                                                      |
17
// | Foobar is distributed in the hope that it will be useful,                                            |
18
// | but WITHOUT ANY WARRANTY; without even the implied warranty of                                       |
19
// | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the                                        |
20
// | GNU General Public License for more details.                                                         |
21
// |                                                                                                      |
22
// | You should have received a copy of the GNU General Public License                                    |
23
// | along with Foobar; if not, write to the Free Software                                                |
24
// | Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA                            |
25
// +------------------------------------------------------------------------------------------------------+
26
// CVS : $Id: effi_cel.action.php,v 1.9 2007-11-06 10:54:03 jp_milcent Exp $
27
/**
28
 * Gestion des des images dans la base de donnée de Détermination en Ligne (DEL)
29
*
30
*
31
*@package del
32
*@subpackage images
33
//Auteur original :
34
*@author	Grégoire Duché <gregoire@tela-botanica.org>
35
*@copyright     Tela-Botanica 2000-2012
36
*@version       $Revision: 1.9 $ $Date: 2007-11-06 10:54:03 $
37
// +------------------------------------------------------------------------------------------------------+
38
 */
39
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;
48
	private $config;
49
 
50
	/**
51
	 * Méthode principale de la classe
52
	 * Lance la récupération des images dans la base et les place dans un objet ResultatService
53
	 * pour l'afficher.
54
	 * */
55
	public function consulter($ressources, $parametres) {
56
		$this->config = Config::get('images');
57
		$this->chargerParametres($parametres);
58
 
59
		$this->UrlNavigation = new Url($this->config['url_service']);
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);
69
		$this->chargerVotes($resultats);
70
		$resultat->corps = array('entete' => $entete, 'resultats' => $resultats);
71
		return $resultat;
72
	}
73
 
74
	/**
75
	 * Récupérer l'id de l'image depuis les paramètres
76
	 * */
77
	public function chargerParametres($parametres) {
78
		$this->parametres = $parametres;
79
 
80
		if (isset($this->parametres['navigation.depart'])) {
81
			$this->depart = $this->parametres['navigation.depart'];
82
		}
83
 
84
		if (isset($this->parametres['navigation.limite'])) {
85
			$this->limite = $this->parametres['navigation.limite'];
86
		}
87
 
88
		if (isset($this->parametres['masque.id'])) {
89
			$idImage = $this->parametres['masque.id'];
90
			$this->idImage = $idImage;
91
		}
92
 
93
	}
94
 
95
	/**
96
	 * Compter le nombre total d'images dans la base pour affichage dans entete.
97
	 * */
98
	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
101
		$requeteNbImages = 'SELECT COUNT(*) AS nb FROM del.del_image ';
102
		$resultatNbImages = $this->getBdd()->recuperer($requeteNbImages);
103
		$this->total = $resultatNbImages['nb'];
104
	}
105
 
106
	/**
107
	 * Créer l'entête en fonction des paramètres donnés
108
	 * */
109
	private function getEntete() {
110
		$entete = array();
111
		$entete['masque'] = $this->recupererMasque();
112
		$entete['depart'] = $this->depart;
113
		$entete['limite'] = $this->limite;
114
		$entete['total'] = $this->total;
115
		$lienPrecedent = $this->recupererHrefPrecedent();
116
 
117
		if ($lienPrecedent != null) {
118
			$entete['entete.precedent'] = $lienPrecedent;
119
		}
120
 
121
		$lienSuivant = $this->recupererHrefSuivant();
122
		if ($lienSuivant) {
123
			$entete['entete.suivant'] = $lienSuivant;
124
		}
125
		return $entete;
126
	}
127
 
128
	/**
129
	 * Récupérer le lien pour afficher les images précédentes en fonction des paramètres
130
	 * */
131
	private function recupererHrefPrecedent() {
132
		$departActuel = $this->depart;
133
		$limite = $this->limite;
134
		$departSuivant = $departActuel - $limite;
135
 
136
		$url = null;
137
		if ($departSuivant > 0) {
138
			$parametres = array();
139
			if ($this->idImage != null) {
140
				$parametres['masque.id'] = $this->idImage;
141
			}
142
			$url = $this->obtenirUrlNavigation($departSuivant, $limite, $parametres);
143
		}
144
		return $url;
145
	}
146
 
147
	private function recupererHrefSuivant() {
148
		$departActuel = $this->depart;
149
		$limite = $this->limite;
150
		$departSuivant = $departActuel + $limite;
151
 
152
		$url = null;
153
		if ($departSuivant < $this->total) {
154
			$parametres = array();
155
			if ($this->idImage != null) {
156
				$parametres['masque.id'] = $this->idImage;
157
			}
158
			$url = $this->obtenirUrlNavigation($departSuivant, $limite, $parametres);
159
		}
160
		return $url;
161
	}
162
 
163
	private function obtenirUrlNavigation($depart, $limite, $parametresAdditionnels) {
164
		$parametres = array(
165
				'navigation.depart' => $depart,
166
				'navigation.limite' => $limite);
167
 
168
		if ($parametresAdditionnels != null) {
169
			$parametres = array_merge($parametres, $parametresAdditionnels);
170
		}
171
		$this->UrlNavigation->setRequete($parametres);
172
		$url = $this->UrlNavigation->getURL();
173
		return $url;
174
	}
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
 
262
	/**
263
	 * Formater le lien de l'image en fonction du fichier de config et de l'identifiant de l'image
264
	 * */
265
	private function formaterLienImage($idImage) {
266
		$idImage = sprintf('%09s', $idImage);
267
		$url = $this->config['url_images'];
268
		$urlImage = str_replace('%s', $idImage, $url);
269
		return $urlImage;
270
	}
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
 
306
	/**
307
	 * Récupérer le masque depuis les paramètres
308
	 * */
309
	private function recupererMasque() {
310
		$masqueEntete = '';
311
		foreach ($this->parametres as $param => $cle) {
312
			if ($param == 'masque') {
313
				$masqueEntete = 'masque='.$cle.',';
314
			} elseif (substr($param, 0, 7) == 'masque.') {
315
				$masqueEntete .= substr($param, 7).'='.$cle.',';
316
			}
317
		}
318
		$masqueEntete = rtrim($masqueEntete,',');
319
		return $masqueEntete;
320
	}
321
}
322
?>