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);
|
|
|
74 |
$donnees = $this->chargerDonnees($url);
|
|
|
75 |
$resultats = (isset($donnees['resultats'])) ? $donnees['resultats'] : array();
|
|
|
76 |
$images += $resultats;
|
|
|
77 |
}
|
|
|
78 |
} else {
|
|
|
79 |
$url = $this->getUrlImagesParIdsNoms($idsNoms);
|
|
|
80 |
$donnees = $this->chargerDonnees($url);
|
|
|
81 |
$images = (isset($donnees['resultats'])) ? $donnees['resultats'] : array();
|
|
|
82 |
}
|
1115 |
mathias |
83 |
return $this->formaterResultatImages($images);
|
130 |
jpm |
84 |
}
|
1382 |
aurelien |
85 |
|
1383 |
aurelien |
86 |
public function getInfosTrancheImagesParIdsNoms($idNom, $limite = 12) {
|
1468 |
mathias |
87 |
// 12 fait 4 lignes de 3 images donc bien pour l'affichage
|
|
|
88 |
$url = $this->getUrlImagesParIdsNoms($idNom, $limite);
|
|
|
89 |
$donnees = $this->chargerDonnees($url);
|
|
|
90 |
$images = (isset($donnees['resultats'])) ? $donnees['resultats'] : array();
|
|
|
91 |
return $this->formaterResultatImages($images);
|
1382 |
aurelien |
92 |
}
|
495 |
jpm |
93 |
|
475 |
delphine |
94 |
public function getInfosImageParIdImage($id_image) {
|
1115 |
mathias |
95 |
$tpl = $this->obtenirSqueletteSelonApi('imagesPopup');
|
947 |
aurelien |
96 |
$url = $this->formaterUrl($tpl, array('id' => $id_image, 'referentiel' => Registre::get('parametres.referentiel')));
|
1115 |
mathias |
97 |
$image = $this->chargerDonnees($url);
|
|
|
98 |
return $this->formaterResultatImages($image, true);
|
475 |
delphine |
99 |
}
|
624 |
mathilde |
100 |
|
|
|
101 |
public function getInfosImages() {
|
|
|
102 |
$url = $this->getUrlImages();
|
1115 |
mathias |
103 |
$donnees = $this->chargerDonnees($url);
|
624 |
mathilde |
104 |
$images = (empty($donnees['resultats']) == false) ? $donnees['resultats'] : array();
|
1115 |
mathias |
105 |
return $this->formaterResultatImages($images);
|
624 |
mathilde |
106 |
}
|
1591 |
killian |
107 |
|
|
|
108 |
public function getInfosImagesParFicheEtSentier($tagFiche, $sentier) {
|
|
|
109 |
$tpl = Config::get('smartFloreIllustrationsParSentier');
|
|
|
110 |
$url = $this->formaterUrl($tpl, array('tagFiche' => $tagFiche, 'sentier' => $sentier));
|
|
|
111 |
$donnees = $this->chargerDonnees($url);
|
|
|
112 |
return $donnees['illustrations'] ?? false;
|
|
|
113 |
}
|
898 |
aurelien |
114 |
|
1591 |
killian |
115 |
public function getInfosImageParId($imageId) {
|
|
|
116 |
$tpl = Config::get('baseUrlServicesCelTpl');
|
|
|
117 |
$urlTpl = sprintf($tpl, 'CelImage').'/image?imgId=%d';
|
|
|
118 |
$url = sprintf($urlTpl, $imageId);
|
|
|
119 |
return $this->chargerDonnees($url);
|
|
|
120 |
}
|
|
|
121 |
|
624 |
mathilde |
122 |
public function getInfosImagesTaxons() {
|
898 |
aurelien |
123 |
$pas = 800;
|
|
|
124 |
$idsTaxons = explode(',', $this->nntaxon);
|
|
|
125 |
if(count($idsTaxons) >= $pas) {
|
|
|
126 |
$images = array();
|
|
|
127 |
$idsPartages = array_chunk($idsTaxons, $pas);
|
|
|
128 |
foreach ($idsPartages as $sousEnsembleIdsTaxons) {
|
|
|
129 |
$url = $this->getUrlImagesTaxons(implode(',',$sousEnsembleIdsTaxons));
|
|
|
130 |
$donnees = $this->chargerDonnees($url);
|
|
|
131 |
$resultats = (empty($donnees['resultats']) == false) ? $donnees['resultats'] : array();
|
|
|
132 |
$images += $resultats;
|
|
|
133 |
}
|
|
|
134 |
} else {
|
|
|
135 |
$url = $this->getUrlImagesTaxons($idsTaxons);
|
|
|
136 |
$donnees = $this->chargerDonnees($url);
|
|
|
137 |
$images = (isset($donnees['resultats'])) ? $donnees['resultats'] : array();
|
|
|
138 |
}
|
1115 |
mathias |
139 |
return $this->formaterResultatImages($images);
|
|
|
140 |
}
|
|
|
141 |
|
|
|
142 |
public function getInfosPremiereImageParIdsNoms($idsNoms) {
|
|
|
143 |
$url = $this->getUrlPremiereImageParIdsNoms($idsNoms);
|
|
|
144 |
$donnees = $this->chargerDonnees($url);
|
|
|
145 |
$images = (isset($donnees['resultats'])) ? $donnees['resultats'] : array();
|
|
|
146 |
return $this->formaterResultatImages($images);
|
|
|
147 |
}
|
|
|
148 |
|
|
|
149 |
public function getInfosImagesGalerieMobile($nn) {
|
|
|
150 |
$url = $this->getUrlImagesGalerieMobile($nn);
|
|
|
151 |
$donnees = $this->chargerDonnees($url);
|
|
|
152 |
$images = (isset($donnees['resultats'])) ? $donnees['resultats'] : array();
|
624 |
mathilde |
153 |
return $images;
|
|
|
154 |
}
|
1115 |
mathias |
155 |
|
1116 |
mathias |
156 |
/**
|
1136 |
mathias |
157 |
* Retourne les $limite images ayant le plus de votes pour CHAQUE tag de $tags pour le protocole $protocole
|
1116 |
mathias |
158 |
*/
|
1123 |
mathias |
159 |
public function getInfosMeilleuresImagesParTag($nn, $tags, $protocole = Eflore::PROTOCOLE_CAPITALISATION, $limite = 10, $format = 'CRS') {
|
1116 |
mathias |
160 |
if (! is_array($tags)) {
|
|
|
161 |
$tags = array($tags);
|
|
|
162 |
}
|
|
|
163 |
$images_tag = array();
|
|
|
164 |
foreach ($tags as $tag) {
|
1123 |
mathias |
165 |
$url = $this->getUrlMeilleuresImagesParTag($nn, $tag, $protocole, $limite, $format);
|
1116 |
mathias |
166 |
$donnees = $this->chargerDonnees($url);
|
|
|
167 |
$images = (isset($donnees['resultats'])) ? $donnees['resultats'] : array();
|
1123 |
mathias |
168 |
$images_tag[$tag] = $this->formaterResultatImagesDel($images);
|
1116 |
mathias |
169 |
}
|
|
|
170 |
return $images_tag;
|
|
|
171 |
}
|
|
|
172 |
|
1136 |
mathias |
173 |
/**
|
|
|
174 |
* Retourne l'image ayant le plus de votes pour le pour capitalisation d'images, pour le premier tags de $tags. S'il
|
|
|
175 |
* n'y a aucune image pour le premier tag, parcourt les autres tags jusqu'à en trouver une.
|
|
|
176 |
*/
|
|
|
177 |
public function getInfosMeilleureImageParPrioriteTags($nn, $tags, $format = 'CRS') {
|
|
|
178 |
if (! is_array($tags)) {
|
|
|
179 |
$tags = array($tags);
|
|
|
180 |
}
|
|
|
181 |
$image = null;
|
|
|
182 |
foreach ($tags as $tag) {
|
|
|
183 |
$url = $this->getUrlMeilleuresImagesParTag($nn, $tag, Eflore::PROTOCOLE_CAPITALISATION, 1, $format);
|
|
|
184 |
$donnees = $this->chargerDonnees($url);
|
|
|
185 |
$image = (isset($donnees['resultats'])) ? $donnees['resultats'] : array();
|
|
|
186 |
$image = $this->formaterResultatImagesDel($image);
|
|
|
187 |
if (empty($image) == false) {
|
|
|
188 |
break;
|
|
|
189 |
}
|
|
|
190 |
}
|
|
|
191 |
//echo "<pre>" . print_r($image, true) . "</pre>";
|
|
|
192 |
if (is_array($image)) {
|
|
|
193 |
$image = array_pop($image);
|
|
|
194 |
}
|
|
|
195 |
return $image;
|
|
|
196 |
}
|
|
|
197 |
|
1382 |
aurelien |
198 |
private function getUrlImagesParIdsNoms($idsNoms, $limite = 801) {
|
1115 |
mathias |
199 |
$tpl = $this->obtenirSqueletteSelonApi('imagesResultatsDetermination');
|
1382 |
aurelien |
200 |
$params = array('idsNoms' => implode(',', $idsNoms), 'referentiel' => Registre::get('parametres.referentiel'), 'limite' => $limite);
|
130 |
jpm |
201 |
$url = $this->formaterUrl($tpl, $params);
|
|
|
202 |
return $url;
|
|
|
203 |
}
|
495 |
jpm |
204 |
|
1127 |
mathias |
205 |
public function getUrlPremiereImageParIdsNoms($idsNoms) {
|
1115 |
mathias |
206 |
$tpl = $this->obtenirSqueletteSelonApi('imagesPremiere');
|
947 |
aurelien |
207 |
$params = array('idsNoms' => implode(',', $idsNoms), 'referentiel' => Registre::get('parametres.referentiel'));
|
1403 |
mathias |
208 |
$url = $this->formaterUrl($tpl, $params);
|
|
|
209 |
return $url;
|
414 |
delphine |
210 |
}
|
1115 |
mathias |
211 |
|
|
|
212 |
private function getUrlImages($nn = false) {
|
|
|
213 |
$tpl = $this->obtenirSqueletteSelonApi('images');
|
|
|
214 |
if ($this->getApi() == Eflore::API_EFLORE) {
|
|
|
215 |
$params = array('projet' => $this->getProjet(), 'limite' => $this->limite, 'depart' => $this->depart, 'referentiel' => Registre::get('parametres.referentiel'));
|
|
|
216 |
}
|
624 |
mathilde |
217 |
$url = $this->formaterUrl($tpl, $params);
|
|
|
218 |
return $url;
|
|
|
219 |
}
|
1115 |
mathias |
220 |
|
898 |
aurelien |
221 |
private function getUrlImagesTaxons($idsTaxons) {
|
1115 |
mathias |
222 |
$tpl = $this->obtenirSqueletteSelonApi('imagesTaxons');
|
947 |
aurelien |
223 |
$params = array('projet' => $this->getProjet(),'nntaxon'=> $idsTaxons, 'referentiel' => Registre::get('parametres.referentiel'));
|
624 |
mathilde |
224 |
$url = $this->formaterUrl($tpl, $params);
|
|
|
225 |
return $url;
|
|
|
226 |
}
|
1115 |
mathias |
227 |
|
|
|
228 |
private function getUrlImagesGalerieMobile($nn) {
|
|
|
229 |
$tpl = Config::get('delGalerieMobileTpl');
|
1321 |
mathias |
230 |
$params = array('nn' => $nn, 'referentiel' => Registre::get('parametres.referentiel'));
|
1115 |
mathias |
231 |
$url = $this->formaterUrl($tpl, $params);
|
|
|
232 |
return $url;
|
|
|
233 |
}
|
|
|
234 |
|
1123 |
mathias |
235 |
private function getUrlMeilleuresImagesParTag($nn, $tag, $protocole = Eflore::PROTOCOLE_CAPITALISATION, $limite = 10, $format = 'CRS') {
|
1116 |
mathias |
236 |
$tpl = Config::get('delMeilleuresImagesParTagTpl');
|
|
|
237 |
$params = array('nn'=> $nn,
|
|
|
238 |
'tag'=> $tag,
|
|
|
239 |
'protocole' => $protocole,
|
|
|
240 |
'referentiel' => Registre::get('parametres.referentiel'),
|
1123 |
mathias |
241 |
'limite' => $limite,
|
|
|
242 |
'format' => $format);
|
1116 |
mathias |
243 |
$url = $this->formaterUrl($tpl, $params);
|
|
|
244 |
return $url;
|
|
|
245 |
}
|
|
|
246 |
|
1115 |
mathias |
247 |
/**
|
|
|
248 |
* Transforme les résultats issus des Webservices autres que eflore/cel afin de conserver un format homogène
|
|
|
249 |
* @param mixed $images
|
|
|
250 |
*/
|
|
|
251 |
private function formaterResultatImages($images, $seulementUne = false) {
|
|
|
252 |
switch ($this->getApi()) {
|
|
|
253 |
case Eflore::API_DEL:
|
|
|
254 |
return $this->formaterResultatImagesDel($images, $seulementUne);
|
|
|
255 |
break;
|
|
|
256 |
default:
|
|
|
257 |
return $images;
|
|
|
258 |
}
|
|
|
259 |
}
|
|
|
260 |
|
|
|
261 |
private function formaterResultatImagesDel($images, $seulementUne = false) {
|
|
|
262 |
if ($seulementUne) {
|
|
|
263 |
return $this->formaterUnResultatImagesDel($images);
|
|
|
264 |
} else {
|
|
|
265 |
$retour = array();
|
|
|
266 |
foreach ($images as $idObsImage => $image) {
|
|
|
267 |
$retour[$image['id_image']] = array_merge($images[$idObsImage], $this->formaterUnResultatImagesDel($image));
|
|
|
268 |
}
|
|
|
269 |
return $retour;
|
|
|
270 |
}
|
|
|
271 |
}
|
|
|
272 |
|
|
|
273 |
/**
|
|
|
274 |
* Convertit un array venant d'un Webservice del vers le format retourné par eflore/cel
|
|
|
275 |
* @param array $image
|
|
|
276 |
* @return array
|
|
|
277 |
*/
|
|
|
278 |
private function formaterUnResultatImagesDel(array $image) {
|
|
|
279 |
$libelleAuteur = $image['observation']['auteur.prenom'].' '.$image['observation']['auteur.nom'];
|
1468 |
mathias |
280 |
$codeReferentiel = $image['observation']['determination.referentiel'];
|
|
|
281 |
if (strpos($codeReferentiel, ':') !== false) {
|
|
|
282 |
$codeReferentiel = substr($image['observation']['determination.referentiel'], 0, strpos($image['observation']['determination.referentiel'], ':'));
|
|
|
283 |
}
|
1115 |
mathias |
284 |
$localiteLibelle = array($image['observation']['zone_geo'],
|
|
|
285 |
$image['observation']['lieudit'],
|
|
|
286 |
$image['observation']['station'],
|
|
|
287 |
$image['observation']['milieu']);
|
|
|
288 |
$retourImage = array(
|
|
|
289 |
'date' => $image['observation']['date_observation'],
|
|
|
290 |
'mime' => 'image/jpeg',
|
|
|
291 |
'auteur.libelle' => $libelleAuteur,
|
|
|
292 |
'auteur.id' => $image['observation']['auteur.id'],
|
|
|
293 |
'binaire.href' => $image['binaire.href'],
|
|
|
294 |
'observation.id' => $image['observation']['id_observation'],
|
|
|
295 |
'determination.libelle' => $image['observation']['determination.ns'].'[Dét. : '.$libelleAuteur.']',
|
|
|
296 |
'determination.nom_sci' => $image['observation']['determination.ns'],
|
|
|
297 |
'determination.nom_sci.code' => $codeReferentiel.'.'.$image['observation']['determination.nn'],
|
|
|
298 |
'station.commune' => $image['observation']['zone_geo'],
|
|
|
299 |
'station.lieudit' => $image['observation']['lieudit'],
|
|
|
300 |
'station.station' => $image['observation']['station'],
|
|
|
301 |
'station.milieu' => $image['observation']['milieu'],
|
|
|
302 |
'station.libelle' => $this->formaterLocalite($localiteLibelle)
|
|
|
303 |
);
|
|
|
304 |
return $retourImage;
|
|
|
305 |
}
|
|
|
306 |
|
|
|
307 |
private function formaterLocalite($infosLocalite) {
|
|
|
308 |
$localiteFmt = array();
|
|
|
309 |
foreach ($infosLocalite as $localite) {
|
|
|
310 |
if($localite != '') {
|
|
|
311 |
$localiteFmt[] = $localite;
|
|
|
312 |
}
|
|
|
313 |
}
|
|
|
314 |
if (empty($localiteFmt)) {
|
|
|
315 |
$localiteFmt[0] = 'localité inconnue';
|
|
|
316 |
}
|
|
|
317 |
return implode(" > ", $localiteFmt);
|
|
|
318 |
}
|
130 |
jpm |
319 |
}
|
1591 |
killian |
320 |
?>
|