* @author Delphine CAUQUIL * @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)); //echo "ORGANES
" . print_r($infosImages0, true) . "
"; //echo "TOUT
" . print_r($infosImages1, true) . "
"; $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']; } } //echo "URLS
" . print_r($urls, true) . "
"; //exit; 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 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 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 "
" . print_r($image, true) . "
"; if (is_array($image)) { $image = array_pop($image); } return $image; } private function getUrlImagesParIdsNoms($idsNoms) { $tpl = $this->obtenirSqueletteSelonApi('imagesResultatsDetermination'); $params = array('idsNoms' => implode(',', $idsNoms), 'referentiel' => Registre::get('parametres.referentiel')); $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')); return $this->formaterUrl($tpl, $params); } 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); $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 = 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); } } ?>