Subversion Repositories eFlore/Applications.eflore-consultation

Rev

Rev 1383 | Rev 1405 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
130 jpm 1
<?php
2
// declare(encoding='UTF-8');
3
/**
4
 * Classe gérant les images.
5
 *
6
 * @category	PHP 5.2
7
 * @package		eflore-consultation
8
 * @author		Jean-Pascal MILCENT <jpm@tela-botanica.org>
9
 * @author		Delphine CAUQUIL <delphine@tela-botanica.org>
10
 * @copyright	2011 Tela-Botanica
11
 * @license		http://www.gnu.org/licenses/gpl.html Licence GNU-GPL-v3
12
 * @license		http://www.cecill.info/licences/Licence_CeCILL_V2-fr.txt Licence CECILL-v2
13
 * @version		$Id$
14
 */
15
class Images extends Eflore {
624 mathilde 16
 
17
	private $nntaxon;
18
	private $limite;
19
	private $depart;
495 jpm 20
 
624 mathilde 21
	public function setNnTaxon($nntax) {
22
		$this->nntaxon = $nntax;
23
	}
24
 
25
	public function setLimite($limite) {
26
		$this->limite = $limite;
27
	}
28
 
29
	public function setDepart($depart) {
30
		$this->depart = $depart;
31
	}
32
 
339 aurelien 33
	//TODO: créer des fonctions spécifiques cel et photoflora pour plus de clarté ?
130 jpm 34
	public function getUrlsImagesParIdsNoms(Array $idsNoms) {
35
		$infosImages = $this->getInfosImagesParIdsNoms($idsNoms);
36
		$urls = array();
509 jpm 37
		if (count($infosImages) > 0) {
38
			foreach ($infosImages as $img) {
39
				$id = $img['determination.nom_sci.code'];
40
				$urls[$id][] = $img['binaire.href'];
41
			}
130 jpm 42
		}
43
		return $urls;
44
	}
45
 
1136 mathias 46
	// retourne les urls d'une série d'images tirées de del, avec en premier les
47
	// images d'organes les mieux votées, et ensuite toute les autres images disponibles
48
	public function getUrlsImagesOrganesParIdsNom($idNom) {
49
		$infosImages0 = $this->getInfosMeilleuresImagesParTag($idNom, array('fleur', 'feuille', 'fruit', 'ecorce', 'port', 'rameau'), Eflore::PROTOCOLE_CAPITALISATION, 6);
50
		$infosImages1 = $this->getInfosImagesParIdsNoms(array($idNom));
51
		$urls = array();
52
		foreach ($infosImages0 as $imgs) {
53
			foreach ($imgs as $img) {
54
				$id = $img['determination.nom_sci.code'];
55
				$urls[$id][] = $img['binaire.href'];
56
			}
57
		}
58
		foreach ($infosImages1 as $img) {
59
			$id = $img['determination.nom_sci.code'];
60
			if (! in_array($img['binaire.href'], $urls[$id])) {
61
				$urls[$id][] = $img['binaire.href'];
62
			}
63
		}
64
		return $urls;
65
	}
66
 
130 jpm 67
	public function getInfosImagesParIdsNoms(Array $idsNoms) {
898 aurelien 68
		$pas = 800;
69
		if(count($idsNoms) >= $pas) {
70
			$images = array();
71
			$idsPartages = array_chunk($idsNoms, $pas);
72
			foreach ($idsPartages as $sousEnsembleIdsNoms) {
73
				$url = $this->getUrlImagesParIdsNoms($sousEnsembleIdsNoms);
1381 aurelien 74
				echo $url;exit;
898 aurelien 75
				$donnees = $this->chargerDonnees($url);
76
				$resultats = (isset($donnees['resultats'])) ? $donnees['resultats'] : array();
77
				$images += $resultats;
78
			}
79
		} else {
80
			$url = $this->getUrlImagesParIdsNoms($idsNoms);
81
			$donnees = $this->chargerDonnees($url);
82
			$images = (isset($donnees['resultats'])) ? $donnees['resultats'] : array();
83
		}
1115 mathias 84
		return $this->formaterResultatImages($images);
130 jpm 85
	}
1382 aurelien 86
 
1383 aurelien 87
	public function getInfosTrancheImagesParIdsNoms($idNom, $limite = 12) {
88
		// 12 fait 4 lignes de 3 images donc bien pour l'affichage
89
		$url = $this->getUrlImagesParIdsNoms($idNom, $limite);
1382 aurelien 90
		$donnees = $this->chargerDonnees($url);
91
		$images = (isset($donnees['resultats'])) ? $donnees['resultats'] : array();
92
		return $this->formaterResultatImages($images);
93
	}
495 jpm 94
 
475 delphine 95
	public function getInfosImageParIdImage($id_image) {
1115 mathias 96
		$tpl = $this->obtenirSqueletteSelonApi('imagesPopup');
947 aurelien 97
		$url = $this->formaterUrl($tpl, array('id' => $id_image, 'referentiel' => Registre::get('parametres.referentiel')));
1115 mathias 98
		$image = $this->chargerDonnees($url);
99
		return $this->formaterResultatImages($image, true);
475 delphine 100
	}
624 mathilde 101
 
102
	public function getInfosImages() {
103
		$url = $this->getUrlImages();
1115 mathias 104
		$donnees = $this->chargerDonnees($url);
624 mathilde 105
		$images = (empty($donnees['resultats']) == false) ? $donnees['resultats'] : array();
1115 mathias 106
		return $this->formaterResultatImages($images);
624 mathilde 107
	}
898 aurelien 108
 
624 mathilde 109
	public function getInfosImagesTaxons() {
898 aurelien 110
		$pas = 800;
111
		$idsTaxons = explode(',', $this->nntaxon);
112
		if(count($idsTaxons) >= $pas) {
113
			$images = array();
114
			$idsPartages = array_chunk($idsTaxons, $pas);
115
			foreach ($idsPartages as $sousEnsembleIdsTaxons) {
116
				$url = $this->getUrlImagesTaxons(implode(',',$sousEnsembleIdsTaxons));
117
				$donnees = $this->chargerDonnees($url);
118
				$resultats = (empty($donnees['resultats']) == false) ? $donnees['resultats'] : array();
119
				$images += $resultats;
120
			}
121
		} else {
122
			$url = $this->getUrlImagesTaxons($idsTaxons);
123
			$donnees = $this->chargerDonnees($url);
124
			$images = (isset($donnees['resultats'])) ? $donnees['resultats'] : array();
125
		}
1115 mathias 126
		return $this->formaterResultatImages($images);
127
	}
128
 
129
	public function getInfosPremiereImageParIdsNoms($idsNoms) {
130
		$url = $this->getUrlPremiereImageParIdsNoms($idsNoms);
131
		$donnees = $this->chargerDonnees($url);
132
		$images = (isset($donnees['resultats'])) ? $donnees['resultats'] : array();
133
		return $this->formaterResultatImages($images);
134
	}
135
 
136
	public function getInfosImagesGalerieMobile($nn) {
137
		$url = $this->getUrlImagesGalerieMobile($nn);
138
		$donnees = $this->chargerDonnees($url);
139
		$images = (isset($donnees['resultats'])) ? $donnees['resultats'] : array();
624 mathilde 140
		return $images;
141
	}
1115 mathias 142
 
1116 mathias 143
	/**
1136 mathias 144
	 * Retourne les $limite images ayant le plus de votes pour CHAQUE tag de $tags pour le protocole $protocole
1116 mathias 145
	 */
1123 mathias 146
	public function getInfosMeilleuresImagesParTag($nn, $tags, $protocole = Eflore::PROTOCOLE_CAPITALISATION, $limite = 10, $format = 'CRS') {
1116 mathias 147
		if (! is_array($tags)) {
148
			$tags = array($tags);
149
		}
150
		$images_tag = array();
151
		foreach ($tags as $tag) {
1123 mathias 152
			$url = $this->getUrlMeilleuresImagesParTag($nn, $tag, $protocole, $limite, $format);
1116 mathias 153
			$donnees = $this->chargerDonnees($url);
154
			$images = (isset($donnees['resultats'])) ? $donnees['resultats'] : array();
1123 mathias 155
			$images_tag[$tag] = $this->formaterResultatImagesDel($images);
1116 mathias 156
		}
157
		return $images_tag;
158
	}
159
 
1136 mathias 160
	/**
161
	 * Retourne l'image ayant le plus de votes pour le pour capitalisation d'images, pour le premier tags de $tags. S'il
162
	 * n'y a aucune image pour le premier tag, parcourt les autres tags jusqu'à en trouver une.
163
	 */
164
	public function getInfosMeilleureImageParPrioriteTags($nn, $tags, $format = 'CRS') {
165
		if (! is_array($tags)) {
166
			$tags = array($tags);
167
		}
168
		$image = null;
169
		foreach ($tags as $tag) {
170
			$url = $this->getUrlMeilleuresImagesParTag($nn, $tag, Eflore::PROTOCOLE_CAPITALISATION, 1, $format);
171
			$donnees = $this->chargerDonnees($url);
172
			$image = (isset($donnees['resultats'])) ? $donnees['resultats'] : array();
173
			$image = $this->formaterResultatImagesDel($image);
174
			if (empty($image) == false) {
175
				break;
176
			}
177
		}
178
		//echo "<pre>" . print_r($image, true) . "</pre>";
179
		if (is_array($image)) {
180
			$image = array_pop($image);
181
		}
182
		return $image;
183
	}
184
 
1382 aurelien 185
	private function getUrlImagesParIdsNoms($idsNoms, $limite = 801) {
1115 mathias 186
		$tpl = $this->obtenirSqueletteSelonApi('imagesResultatsDetermination');
1382 aurelien 187
		$params = array('idsNoms' => implode(',', $idsNoms), 'referentiel' => Registre::get('parametres.referentiel'), 'limite' => $limite);
130 jpm 188
		$url = $this->formaterUrl($tpl, $params);
189
		return $url;
190
	}
495 jpm 191
 
1127 mathias 192
	public function getUrlPremiereImageParIdsNoms($idsNoms) {
1115 mathias 193
		$tpl = $this->obtenirSqueletteSelonApi('imagesPremiere');
947 aurelien 194
		$params = array('idsNoms' => implode(',', $idsNoms), 'referentiel' => Registre::get('parametres.referentiel'));
1403 mathias 195
		$url = $this->formaterUrl($tpl, $params);
196
		return $url;
414 delphine 197
	}
1115 mathias 198
 
199
	private function getUrlImages($nn = false) {
200
		$tpl = $this->obtenirSqueletteSelonApi('images');
201
		if ($this->getApi() == Eflore::API_EFLORE) {
202
			$params = array('projet' => $this->getProjet(), 'limite' => $this->limite, 'depart' => $this->depart, 'referentiel' => Registre::get('parametres.referentiel'));
203
		}
624 mathilde 204
		$url = $this->formaterUrl($tpl, $params);
205
		return $url;
206
	}
1115 mathias 207
 
898 aurelien 208
	private function getUrlImagesTaxons($idsTaxons) {
1115 mathias 209
		$tpl = $this->obtenirSqueletteSelonApi('imagesTaxons');
947 aurelien 210
		$params = array('projet' => $this->getProjet(),'nntaxon'=> $idsTaxons, 'referentiel' => Registre::get('parametres.referentiel'));
624 mathilde 211
		$url = $this->formaterUrl($tpl, $params);
212
		return $url;
213
	}
1115 mathias 214
 
215
	private function getUrlImagesGalerieMobile($nn) {
216
		$tpl = Config::get('delGalerieMobileTpl');
1321 mathias 217
		$params = array('nn' => $nn, 'referentiel' => Registre::get('parametres.referentiel'));
1115 mathias 218
		$url = $this->formaterUrl($tpl, $params);
219
		return $url;
220
	}
221
 
1123 mathias 222
	private function getUrlMeilleuresImagesParTag($nn, $tag, $protocole = Eflore::PROTOCOLE_CAPITALISATION, $limite = 10, $format = 'CRS') {
1116 mathias 223
		$tpl = Config::get('delMeilleuresImagesParTagTpl');
224
		$params = array('nn'=> $nn,
225
						'tag'=> $tag,
226
						'protocole' => $protocole,
227
						'referentiel' => Registre::get('parametres.referentiel'),
1123 mathias 228
						'limite' => $limite,
229
						'format' => $format);
1116 mathias 230
		$url = $this->formaterUrl($tpl, $params);
231
		return $url;
232
	}
233
 
1115 mathias 234
	/**
235
	 * Transforme les résultats issus des Webservices autres que eflore/cel afin de conserver un format homogène
236
	 * @param mixed $images
237
	 */
238
	private function formaterResultatImages($images, $seulementUne = false) {
239
		switch ($this->getApi()) {
240
			case Eflore::API_DEL:
241
				return $this->formaterResultatImagesDel($images, $seulementUne);
242
			break;
243
			default:
244
				return $images;
245
		}
246
	}
247
 
248
	private function formaterResultatImagesDel($images, $seulementUne = false) {
249
		if ($seulementUne) {
250
			return $this->formaterUnResultatImagesDel($images);
251
		} else {
252
			$retour = array();
253
			foreach ($images as $idObsImage => $image) {
254
				$retour[$image['id_image']] = array_merge($images[$idObsImage], $this->formaterUnResultatImagesDel($image));
255
			}
256
			return $retour;
257
		}
258
	}
259
 
260
	/**
261
	 * Convertit un array venant d'un Webservice del vers le format retourné par eflore/cel
262
	 * @param array $image
263
	 * @return array
264
	 */
265
	private function formaterUnResultatImagesDel(array $image) {
266
		$libelleAuteur = $image['observation']['auteur.prenom'].' '.$image['observation']['auteur.nom'];
267
		$codeReferentiel = substr($image['observation']['determination.referentiel'], 0, strpos($image['observation']['determination.referentiel'], ':'));
268
		$localiteLibelle = array($image['observation']['zone_geo'],
269
				$image['observation']['lieudit'],
270
				$image['observation']['station'],
271
				$image['observation']['milieu']);
272
		$retourImage = array(
273
				'date' => $image['observation']['date_observation'],
274
				'mime' => 'image/jpeg',
275
				'auteur.libelle' => $libelleAuteur,
276
				'auteur.id' => $image['observation']['auteur.id'],
277
				'binaire.href' => $image['binaire.href'],
278
				'observation.id' => $image['observation']['id_observation'],
279
				'determination.libelle' => $image['observation']['determination.ns'].'[Dét. : '.$libelleAuteur.']',
280
				'determination.nom_sci' => $image['observation']['determination.ns'],
281
				'determination.nom_sci.code' => $codeReferentiel.'.'.$image['observation']['determination.nn'],
282
				'station.commune' => $image['observation']['zone_geo'],
283
				'station.lieudit' => $image['observation']['lieudit'],
284
				'station.station' => $image['observation']['station'],
285
				'station.milieu' => $image['observation']['milieu'],
286
				'station.libelle' => $this->formaterLocalite($localiteLibelle)
287
		);
288
		return $retourImage;
289
	}
290
 
291
	private function formaterLocalite($infosLocalite) {
292
		$localiteFmt = array();
293
		foreach ($infosLocalite as $localite) {
294
			if($localite != '') {
295
				$localiteFmt[] = $localite;
296
			}
297
		}
298
		if (empty($localiteFmt)) {
299
			$localiteFmt[0] = 'localité inconnue';
300
		}
301
		return implode(" > ", $localiteFmt);
302
	}
130 jpm 303
}
304
?>