Rev 1321 | 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 disponiblespublic 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 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 "<pre>" . print_r($image, true) . "</pre>";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, '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 = 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);}}?>