Rev 1585 | Blame | Compare with Previous | Last modification | View Log | RSS feed
<?php
// declare(encoding='UTF-8');
/**
* Classe gérant les images.
*
* @category PHP 5.2
* @package eflore-consultation
* @author Jean-Pascal MILCENT <jpm@tela-botanica.org>
* @author Delphine CAUQUIL <delphine@tela-botanica.org>
* @copyright 2011 Tela-Botanica
* @license http://www.gnu.org/licenses/gpl.html Licence GNU-GPL-v3
* @license http://www.cecill.info/licences/Licence_CeCILL_V2-fr.txt Licence CECILL-v2
* @version $Id$
*/
class Images extends Eflore {
private $nntaxon;
private $limite;
private $depart;
public function setNnTaxon($nntax) {
$this->nntaxon = $nntax;
}
public function setLimite($limite) {
$this->limite = $limite;
}
public function setDepart($depart) {
$this->depart = $depart;
}
//TODO: créer des fonctions spécifiques cel et photoflora pour plus de clarté ?
public function getUrlsImagesParIdsNoms(Array $idsNoms) {
$infosImages = $this->getInfosImagesParIdsNoms($idsNoms);
$urls = array();
if (count($infosImages) > 0) {
foreach ($infosImages as $img) {
$id = $img['determination.nom_sci.code'];
$urls[$id][] = $img['binaire.href'];
}
}
return $urls;
}
// retourne les urls d'une série d'images tirées de del, avec en premier les
// images d'organes les mieux votées, et ensuite toute les autres images disponibles
public function getUrlsImagesOrganesParIdsNom($idNom) {
$infosImages0 = $this->getInfosMeilleuresImagesParTag($idNom, array('fleur', 'feuille', 'fruit', 'ecorce', 'port', 'rameau'), Eflore::PROTOCOLE_CAPITALISATION, 6);
$infosImages1 = $this->getInfosImagesParIdsNoms(array($idNom));
$urls = array();
foreach ($infosImages0 as $imgs) {
foreach ($imgs as $img) {
$id = $img['determination.nom_sci.code'];
$urls[$id][] = $img['binaire.href'];
}
}
foreach ($infosImages1 as $img) {
$id = $img['determination.nom_sci.code'];
if (! in_array($img['binaire.href'], $urls[$id])) {
$urls[$id][] = $img['binaire.href'];
}
}
return $urls;
}
public function getInfosImagesParIdsNoms(Array $idsNoms) {
$pas = 800;
if(count($idsNoms) >= $pas) {
$images = array();
$idsPartages = array_chunk($idsNoms, $pas);
foreach ($idsPartages as $sousEnsembleIdsNoms) {
$url = $this->getUrlImagesParIdsNoms($sousEnsembleIdsNoms);
$donnees = $this->chargerDonnees($url);
$resultats = (isset($donnees['resultats'])) ? $donnees['resultats'] : array();
$images += $resultats;
}
} else {
$url = $this->getUrlImagesParIdsNoms($idsNoms);
$donnees = $this->chargerDonnees($url);
$images = (isset($donnees['resultats'])) ? $donnees['resultats'] : array();
}
return $this->formaterResultatImages($images);
}
public function getInfosTrancheImagesParIdsNoms($idNom, $limite = 12) {
// 12 fait 4 lignes de 3 images donc bien pour l'affichage
$url = $this->getUrlImagesParIdsNoms($idNom, $limite);
$donnees = $this->chargerDonnees($url);
$images = (isset($donnees['resultats'])) ? $donnees['resultats'] : array();
return $this->formaterResultatImages($images);
}
public function getInfosImageParIdImage($id_image) {
$tpl = $this->obtenirSqueletteSelonApi('imagesPopup');
$url = $this->formaterUrl($tpl, array('id' => $id_image, 'referentiel' => Registre::get('parametres.referentiel')));
$image = $this->chargerDonnees($url);
return $this->formaterResultatImages($image, true);
}
public function getInfosImages() {
$url = $this->getUrlImages();
$donnees = $this->chargerDonnees($url);
$images = (empty($donnees['resultats']) == false) ? $donnees['resultats'] : array();
return $this->formaterResultatImages($images);
}
public function getInfosImagesParFicheEtSentier($tagFiche, $sentier) {
$tpl = Config::get('smartFloreIllustrationsParSentier');
$url = $this->formaterUrl($tpl, array('tagFiche' => $tagFiche, 'sentier' => $sentier));
$donnees = $this->chargerDonnees($url);
return $donnees['illustrations'] ?? false;
}
public function getInfosImageParId($imageId) {
$tpl = Config::get('baseUrlServicesCelTpl');
$urlTpl = sprintf($tpl, 'CelImage').'/image?imgId=%d';
$url = sprintf($urlTpl, $imageId);
return $this->chargerDonnees($url);
}
public function getInfosImagesTaxons() {
$pas = 800;
$idsTaxons = explode(',', $this->nntaxon);
if(count($idsTaxons) >= $pas) {
$images = array();
$idsPartages = array_chunk($idsTaxons, $pas);
foreach ($idsPartages as $sousEnsembleIdsTaxons) {
$url = $this->getUrlImagesTaxons(implode(',',$sousEnsembleIdsTaxons));
$donnees = $this->chargerDonnees($url);
$resultats = (empty($donnees['resultats']) == false) ? $donnees['resultats'] : array();
$images += $resultats;
}
} else {
$url = $this->getUrlImagesTaxons($idsTaxons);
$donnees = $this->chargerDonnees($url);
$images = (isset($donnees['resultats'])) ? $donnees['resultats'] : array();
}
return $this->formaterResultatImages($images);
}
public function getInfosPremiereImageParIdsNoms($idsNoms) {
$url = $this->getUrlPremiereImageParIdsNoms($idsNoms);
$donnees = $this->chargerDonnees($url);
$images = (isset($donnees['resultats'])) ? $donnees['resultats'] : array();
return $this->formaterResultatImages($images);
}
public function getInfosImagesGalerieMobile($nn) {
$url = $this->getUrlImagesGalerieMobile($nn);
$donnees = $this->chargerDonnees($url);
$images = (isset($donnees['resultats'])) ? $donnees['resultats'] : array();
return $images;
}
/**
* Retourne les $limite images ayant le plus de votes pour CHAQUE tag de $tags pour le protocole $protocole
*/
public function getInfosMeilleuresImagesParTag($nn, $tags, $protocole = Eflore::PROTOCOLE_CAPITALISATION, $limite = 10, $format = 'CRS') {
if (! is_array($tags)) {
$tags = array($tags);
}
$images_tag = array();
foreach ($tags as $tag) {
$url = $this->getUrlMeilleuresImagesParTag($nn, $tag, $protocole, $limite, $format);
$donnees = $this->chargerDonnees($url);
$images = (isset($donnees['resultats'])) ? $donnees['resultats'] : array();
$images_tag[$tag] = $this->formaterResultatImagesDel($images);
}
return $images_tag;
}
/**
* Retourne l'image ayant le plus de votes pour le pour capitalisation d'images, pour le premier tags de $tags. S'il
* n'y a aucune image pour le premier tag, parcourt les autres tags jusqu'à en trouver une.
*/
public function getInfosMeilleureImageParPrioriteTags($nn, $tags, $format = 'CRS') {
if (! is_array($tags)) {
$tags = array($tags);
}
$image = null;
foreach ($tags as $tag) {
$url = $this->getUrlMeilleuresImagesParTag($nn, $tag, Eflore::PROTOCOLE_CAPITALISATION, 1, $format);
$donnees = $this->chargerDonnees($url);
$image = (isset($donnees['resultats'])) ? $donnees['resultats'] : array();
$image = $this->formaterResultatImagesDel($image);
if (empty($image) == false) {
break;
}
}
//echo "<pre>" . print_r($image, true) . "</pre>";
if (is_array($image)) {
$image = array_pop($image);
}
return $image;
}
private function getUrlImagesParIdsNoms($idsNoms, $limite = 801) {
$tpl = $this->obtenirSqueletteSelonApi('imagesResultatsDetermination');
$params = array('idsNoms' => implode(',', $idsNoms), 'referentiel' => Registre::get('parametres.referentiel'), 'limite' => $limite);
$url = $this->formaterUrl($tpl, $params);
return $url;
}
public function getUrlPremiereImageParIdsNoms($idsNoms) {
$tpl = $this->obtenirSqueletteSelonApi('imagesPremiere');
$params = array('idsNoms' => implode(',', $idsNoms), 'referentiel' => Registre::get('parametres.referentiel'));
$url = $this->formaterUrl($tpl, $params);
return $url;
}
private function getUrlImages($nn = false) {
$tpl = $this->obtenirSqueletteSelonApi('images');
if ($this->getApi() == Eflore::API_EFLORE) {
$params = array('projet' => $this->getProjet(), 'limite' => $this->limite, 'depart' => $this->depart, 'referentiel' => Registre::get('parametres.referentiel'));
}
$url = $this->formaterUrl($tpl, $params);
return $url;
}
private function getUrlImagesTaxons($idsTaxons) {
$tpl = $this->obtenirSqueletteSelonApi('imagesTaxons');
$params = array('projet' => $this->getProjet(),'nntaxon'=> $idsTaxons, 'referentiel' => Registre::get('parametres.referentiel'));
$url = $this->formaterUrl($tpl, $params);
return $url;
}
private function getUrlImagesGalerieMobile($nn) {
$tpl = Config::get('delGalerieMobileTpl');
$params = array('nn' => $nn, 'referentiel' => Registre::get('parametres.referentiel'));
$url = $this->formaterUrl($tpl, $params);
return $url;
}
private function getUrlMeilleuresImagesParTag($nn, $tag, $protocole = Eflore::PROTOCOLE_CAPITALISATION, $limite = 10, $format = 'CRS') {
$tpl = Config::get('delMeilleuresImagesParTagTpl');
$params = array('nn'=> $nn,
'tag'=> $tag,
'protocole' => $protocole,
'referentiel' => Registre::get('parametres.referentiel'),
'limite' => $limite,
'format' => $format);
$url = $this->formaterUrl($tpl, $params);
return $url;
}
/**
* Transforme les résultats issus des Webservices autres que eflore/cel afin de conserver un format homogène
* @param mixed $images
*/
private function formaterResultatImages($images, $seulementUne = false) {
switch ($this->getApi()) {
case Eflore::API_DEL:
return $this->formaterResultatImagesDel($images, $seulementUne);
break;
default:
return $images;
}
}
private function formaterResultatImagesDel($images, $seulementUne = false) {
if ($seulementUne) {
return $this->formaterUnResultatImagesDel($images);
} else {
$retour = array();
foreach ($images as $idObsImage => $image) {
$retour[$image['id_image']] = array_merge($images[$idObsImage], $this->formaterUnResultatImagesDel($image));
}
return $retour;
}
}
/**
* Convertit un array venant d'un Webservice del vers le format retourné par eflore/cel
* @param array $image
* @return array
*/
private function formaterUnResultatImagesDel(array $image) {
$libelleAuteur = $image['observation']['auteur.prenom'].' '.$image['observation']['auteur.nom'];
$codeReferentiel = $image['observation']['determination.referentiel'];
if (strpos($codeReferentiel, ':') !== false) {
$codeReferentiel = substr($image['observation']['determination.referentiel'], 0, strpos($image['observation']['determination.referentiel'], ':'));
}
$localiteLibelle = array($image['observation']['zone_geo'],
$image['observation']['lieudit'],
$image['observation']['station'],
$image['observation']['milieu']);
$retourImage = array(
'date' => $image['observation']['date_observation'],
'mime' => 'image/jpeg',
'auteur.libelle' => $libelleAuteur,
'auteur.id' => $image['observation']['auteur.id'],
'binaire.href' => $image['binaire.href'],
'observation.id' => $image['observation']['id_observation'],
'determination.libelle' => $image['observation']['determination.ns'].'[Dét. : '.$libelleAuteur.']',
'determination.nom_sci' => $image['observation']['determination.ns'],
'determination.nom_sci.code' => $codeReferentiel.'.'.$image['observation']['determination.nn'],
'station.commune' => $image['observation']['zone_geo'],
'station.lieudit' => $image['observation']['lieudit'],
'station.station' => $image['observation']['station'],
'station.milieu' => $image['observation']['milieu'],
'station.libelle' => $this->formaterLocalite($localiteLibelle)
);
return $retourImage;
}
private function formaterLocalite($infosLocalite) {
$localiteFmt = array();
foreach ($infosLocalite as $localite) {
if($localite != '') {
$localiteFmt[] = $localite;
}
}
if (empty($localiteFmt)) {
$localiteFmt[0] = 'localité inconnue';
}
return implode(" > ", $localiteFmt);
}
}
?>