* @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 Illustrations extends aControleur { private $conteneur = null; private $nomCourant = null; private $images = null; private $appUrls = null; private $meta = null; private $referentiel = 'bdtfx'; private $donnees = array(); public function __construct(Conteneur $conteneur) { $this->conteneur = $conteneur; $this->nomCourant = $this->conteneur->getNomCourant(); $this->referentiel = $this->conteneur->getParametre('referentiel'); $this->images = $this->conteneur->getApiImages(); $this->appUrls = $this->conteneur->getAppUrls(); $this->meta = $this->conteneur->getApiMetaDonnees(); } public function obtenirDonnees() { $this->donnees['nt'] = $this->nomCourant->getNt(); $this->donnees['nnr'] = $this->nomCourant->getNnr(); $this->donnees['referentiel'] = $this->referentiel; $this->donnees['nomSciRetenu'] = $this->nomCourant->getNomRetenu()->get('nom_sci_html'); $infosNomRetenu = $this->nomCourant->getNomRetenu()->getInfos(); $this->donnees['nomComplet'] = $infosNomRetenu['nom_complet']; $this->getPhotos(); $this->getDessin(); //$this->getPhotosOrganes(); $this->getPhotosCaracteresIdentification(); $pso = $this->getPhotosSixOrganes(); // reconstruction de getPhotosOrganes à partir des données de getPhotosSixOrganes /*$this->donnees['organes'] = array(); foreach ($pso as $organe => $images) { $clefs = array_keys($images); $image = $images[$clefs[0]]; // changement de format - en dur, cracra ! $image['binaire.href'] = str_replace('CRX2S', 'CRS', $image['binaire.href']); $this->donnees['organes'][$organe] = $image; }*/ // -- $this->setCheminSquelette('modules/fiche/squelettes/'); // @FIXME le chemin devrait déjà être défini correctement !? $params = array('organes' => $pso, 'referentiel' => $this->referentiel, 'nnr' => $this->donnees['nnr'], 'nomComplet' => $this->donnees['nomComplet']); $this->donnees['illustrationsOrganes'] = $this->getVue('fiche_illustrations_organes',$params); // chemins $this->donnees['base_url_widget'] = Config::get('base_url_widget'); $this->donnees['base_url_del'] = Config::get('base_url_del'); return $this->donnees; } public function obtenirDonneesExport() { $this->donnees['nt'] = $this->nomCourant->getNt(); $this->donnees['nomSciRetenu'] = $this->nomCourant->getNomRetenu()->get('nom_sci_html'); $this->donnees['cel'] = $this->getCelExport(); $this->donnees['coste'] = $this->getCoste(); return $this->donnees; } public function getBloc() { $this->donnees = $this->images->getInfosMeilleureImageParPrioriteTags($nnr = $this->nomCourant->getNnr(), array( 'fleur', 'feuille', 'fruit', 'ecorce', 'port', 'rameau')); if (empty($this->donnees)) { $this->donnees = $this->getPhoto('cel'); if (empty($this->donnees)) { $infos_image = $this->getDessin(); if (empty($infos_image) == false ) { $this->donnees['imageUrl'] = array_shift($infos_image['images']); } } } else { // extraction de l'url $this->donnees = array('imageUrl' => $this->donnees['binaire.href']); } if (empty($this->donnees)) { $this->donnees = $this->getPhoto('photoflora'); } return $this->donnees; } public function getPhoto($source) { $donnees = array(); $this->images->setProjet($source); $nnr = $this->nomCourant->getNnr(); $infos_image = $this->images->setApi(Eflore::API_EFLORE)->getInfosPremiereImageParIdsNoms(array($nnr)); if ($infos_image != array()) { $image = array_shift($infos_image); $donnees['imageUrl'] = $image['binaire.href']; } return $donnees; } public function getCoste() { $coste = array(); $tax = $this->nomCourant->getNomRetenu()->get('num_taxonomique'); $this->images->setProjet('coste'); $this->images->setNnTaxon($tax); $costeImg = $this->images->setApi(Eflore::API_EFLORE)->getInfosImagesTaxons(); foreach ($costeImg as $infos) { $coste['images'][] = $infos['binaire.href']; } $this->meta->setProjet('coste'); $meta = $this->meta->getMetaDonnees(); $coste['meta'] = $meta[0]; $coste['meta']['url'] = $this->appUrls->obtenirUrlMetaDonnees('coste'); return $coste; } public function getDessin() { $projet = Config::get($this->referentiel.'.baseDessins'); if ($projet != "") { $dessin = array(); $tax = $this->nomCourant->getNomRetenu()->get('num_taxonomique'); $this->images->setProjet($projet); $this->images->setNnTaxon($tax); $costeImg = $this->images->setApi(Eflore::API_EFLORE)->getInfosImagesTaxons(); foreach ($costeImg as $infos) { $dessin['images'][] = $infos['binaire.href']; } $this->meta->setProjet('coste'); $meta = $this->meta->getMetaDonnees(); $dessin['meta'] = $meta[0]; $dessin['meta']['url'] = $this->appUrls->obtenirUrlMetaDonnees($projet); $this->donnees['coste'] = $dessin; } } public function getPhotos() { $projets[] = Config::get($this->referentiel.'.baseImages'); $projets[] = Config::get($this->referentiel.'.baseImagesSupp'); foreach ($projets as $projet) { if ($projet != "") { if ($projet == "cel") { $this->images->setApi(Eflore::API_EFLORE); // prêt à passer à API_DEL } else { $this->images->setApi(Eflore::API_EFLORE); } $images = $this->initialiserPhotos($projet); $this->formaterListePhotos($projet, $images); $this->formaterMetaPhotos($projet); } } } public function getPhotosSixOrganes() { $organes = $this->getOrganes(); $nnr = $this->nomCourant->getNnr(); $infosOrganes = $this->images->getInfosMeilleuresImagesParTag($nnr, array_keys($organes), Eflore::PROTOCOLE_CAPITALISATION, 6, 'CRX2S'); $vide = true; foreach ($infosOrganes as $tag => $organe) { $organes[$tag] = $organe; $nbImages = count($organe); if ($nbImages != 0) { $vide = false; for ($i = 6; $i > $nbImages; $i--) { $organes[$tag][] = null; } } } if ($vide) { $organes = array(); } return $organes; } public function getPhotosOrganes() { $organes = $this->getOrganes(); $nnr = $this->nomCourant->getNnr(); $infosOrganes = $this->images->getInfosMeilleuresImagesParTag($nnr, array_keys($organes), Eflore::PROTOCOLE_CAPITALISATION, 1); $vide = true; foreach ($infosOrganes as $tag => $organe) { $nbImages = count($organe); // une image par organe seulement $organes[$tag] = array_pop($organe); if ($nbImages != 0) { $vide = false; } } if ($vide) { $organes = array(); } $this->donnees['organes'] = $organes; } public function getPhotosCaracteresIdentification() { $caracteres = array(); $nnr = $this->nomCourant->getNnr(); // pas de tag: on cherche les mieux votées pour ce protocole sans tenir compte des tags $infosCaracteres = $this->images->getInfosMeilleuresImagesParTag($nnr, '', Eflore::PROTOCOLE_CARACTERES, 3); if (! empty($infosCaracteres) && ! empty($infosCaracteres[''])) { // le tag est vide, ici $caracteres = $infosCaracteres['']; } $this->donnees['caracteres'] = $caracteres; } private function getOrganes() { return array( 'fleur' => array(), 'feuille' => array(), 'fruit' => array(), 'ecorce' => array(), 'port' => array(), 'rameau' => array()); } // XXX: webservice: // /service:eflore:0.1/cel/images?masque.nn=XXX&referentiel=bdtfx&retour.format=CS&navigation.limite=801 private function initialiserPhotos($projet) { $this->images->setProjet($projet); $nnr = $this->nomCourant->getNnr(); $ret = $this->images->getInfosImagesParIdsNoms(array($nnr)); return $ret; } private function formaterListePhotos($projet, $images) { foreach ($images as $idImg => $img) { $infosImg = array(); $infosImg['src'] = $img['binaire.href']; $infosImg['nomSci'] = $img['determination.nom_sci']; $infosImg['station'] = $img['station.libelle']; $infosImg['date'] = $this->formaterDateImg($img['date']); $infosImg['auteur'] = $img['auteur.libelle']; $infosImg['auteur.id'] = $img['auteur.id']; if ($projet == "cel") { $infosImg['urlDetailImg'] = $this->appUrls->obtenirUrlPopUpIllustrations($idImg); $infosImg['urlContact'] = $this->appUrls->obtenirUrlPopUpContact($img['auteur.id'], $idImg); $infosImg['urlProfil'] = $this->appUrls->obtenirUrlProfilAnnuaire($img['auteur.id']); $infosImg['urlMauvaiseIdentification'] = $this->appUrls->obtenirUrlMauvaiseIdentification($img['observation.id']); } $this->donnees[$projet]['images'][$idImg] = $infosImg; } } private function formaterMetaPhotos($projet) { $this->meta->setProjet($projet); $meta = $this->meta->getMetaDonnees(); $titreMeta = $meta[0]; $this->donnees[$projet]['meta'] = $titreMeta; $this->donnees[$projet]['meta']['url'] = $this->appUrls->obtenirUrlMetaDonnees($projet); } public function getCelExport() { $cel = array(); $this->images->setProjet('cel'); $nnr = $this->nomCourant->getNnr(); $img = $this->images->getUrlPremiereImageParIdsNoms(array($nnr)); if($img) { $img = array_values($img); $cel['images']['src'] = $img[0]['binaire.href']; $cel['images']['nomSci'] = $img[0]['determination.nom_sci']; $cel['images']['station'] = $img[0]['station.libelle']; $cel['images']['date'] = $this->formaterDateImg($img[0]['date']); $cel['images']['auteur'] = $img[0]['auteur.libelle']; $this->meta->setProjet('cel'); $meta = $this->meta->getMetaDonnees(); $cel['meta'] = $meta[0]; $cel['meta']['url'] = $this->appUrls->obtenirUrlMetaDonnees('cel'); } return $cel; } private function formaterDateImg($date) { $dateFmt = $date; if ($date == '' || $date == null || $date == '0000-00-00' || $date == '1970-01-01 01:01:01') { return 'inconnue'; } $time = strtotime($date); if(!$time) { /* TODO: php -r "echo strtotime('1891-00-00 00:00:00');" TODO: fixer le template pour affiche "en l'année X", plutôt que "le X" si FALSE pour avant 1901: problème php On retourne alors simplement l'année. si correction, ne pas oublier modules/popup_illustrations/PopupIllustrations.php */ $dateFmt = explode('-', $date); return $dateFmt[0]; } return strftime('%e %B %Y', strtotime($date)); } private function formaterNomSci($nom) { $nomFmt = $nom; if (is_null($nom) || $nom == '') { $nomFmt = 'inconnu'; } return $nomFmt; } } ?>