New file |
0,0 → 1,303 |
<?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); |
echo $url;exit; |
$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 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')); |
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); |
} |
} |
?> |