Subversion Repositories eFlore/Applications.eflore-consultation

Rev

Rev 1159 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | RSS feed

<?php
// declare(encoding='UTF-8');
/**
 * Classe mère du module fiche metadonnées.
 *
 * @category    PHP 5.2
 * @package             eflore-consultation
 * @author              Aurélien Peronnet <aurelien@tela-botanica.org>
 * @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 FicheMetadonnees extends aControleur {

        private $projet = '';
        private $serviceMetaDonnees;

        public function __construct($metadonnees = null) {
                $this->capturerParametres();
                $this->serviceMetaDonnees = (is_null($this->serviceMetaDonnees)) ? new MetaDonnees($this->projet) : $metadonnees;
        }

        public function executerActionParDefaut() {
                $this->executerAffichageMetaDonnees();
        }

        public function chargerMetadonneesHtml() {
                $meta = $this->serviceMetaDonnees->getMetaDonnees();
                $meta_resume = $this->formaterResumeMetadonnees($meta[0]);
                $donnees['i18n'] = I18n::get('Metadonnees');
                foreach ($meta as $index => $metadonnees) {
                        $meta[$index] = $this->formaterClesMetadonnees($metadonnees);
                }
                $donnees['metadonnees'] = $meta;
                $donnees['metadonnees_resume'] = $meta_resume;
                $html = $this->getVue(dirname(__FILE__).'/squelettes/metadonnees', $donnees);
                return $html;
        }
        
        private function formaterResumeMetadonnees($meta) {
                // tentative de retrouver une date de mise à jour
                $dateCreationOuMaj = null;
                if (! empty($meta['date_creation'])) {
                        $dateCreationOuMaj = $meta['date_creation'];
                } else  if (! empty($meta['version'])) {
                        $dateCreationOuMaj = $meta['version'];
                }
                // formatage
                if ($dateCreationOuMaj != null) {
                        strftime("%d/%m/%Y", strtotime($dateCreationOuMaj));
                } else {
                        $dateCreationOuMaj = 'Inconnue';
                }
                // retour
                return array('auteurs' => $this->formaterAuteurs($meta),
                                'url' => $this->formaterUrl($meta),
                                'description' => $meta['description'],
                                'citation' => $meta['citation'],
                                'titre' => $meta['titre'],
                                'date' => $dateCreationOuMaj
                );
        }
        
        private function formaterAuteurs($meta) {
                $contacts = array();
                $noms = array();
                if(isset($meta['createurs.details'])) {
                        foreach($meta['createurs.details'] as $createur_detail) {
                                $auteur_nom_fmt = isset($createur_detail["p.nom"]) ? $createur_detail["p.nom"] : "";
                                $auteur_prenom_fmt = isset($createur_detail["p.prenom"]) ? $createur_detail["p.prenom"] : "";
                                $structure_fmt = isset($createur_detail["o.nom"]) ? $createur_detail["o.nom"] : "";
                                $auteur_contact = isset($createur_detail["p.courriel"]) ? $createur_detail["p.courriel"] : "";
                                if($auteur_prenom_fmt != "" || $auteur_nom_fmt != "") {
                                        $nom_prenom_structure_fmt = $auteur_prenom_fmt.' '.$auteur_nom_fmt;
                                        if($structure_fmt != "") {
                                                $nom_prenom_structure_fmt .= " (".$structure_fmt.")";
                                        }
                                        $noms[] = $nom_prenom_structure_fmt;
                                }
                                if($auteur_contact != "") {
                                        $contacts[] = $auteur_contact;
                                }
                        }
                }
                $createurs = array('noms' => implode(", ", $noms), 'contacts' => implode(", ", $contacts));
                return $createurs;
        }
        
        private function formaterUrl($meta) {
                return $meta['url_projet'];
        }

        public function executerAffichageMetaDonnees($donnees) {
                header('Content-type: text/html; charset=UTF-8');
                $html = $this->chargerMetadonneesHtml();
                echo $html;
                exit;
        }

        private function capturerParametres() {
                if (isset($_GET['projet'])) {
                        $this->projet = $_GET['projet'];
                }
        }
        
        private function formaterClesMetadonnees($metadonnees) {
                $meta_fmt = array();
                foreach ($metadonnees as $cle => $metadonnee) {
                        $cle_fmt = str_replace('.', '_', $cle);
                        if(is_array($metadonnee)) {
                                $metadonnee = $this->formaterClesMetadonnees($metadonnee);
                        } elseif($this->estUnLien($metadonnee)) {
                                $metadonnee = $this->formaterLienMetadonnee($metadonnee);
                        }
                        $meta_fmt[$cle_fmt] = $metadonnee;              
                }
                return $meta_fmt;
        }
        
        private function estUnLien($valeur) {
                // le test du pauvre, mais ça suffit ici
                // car nous controlons le format des métadonnées
                return strpos($valeur, "http://") !== false;
        }
        
        private function formaterLienMetadonnee($lien) {
                return '<a href="'.$lien.'" target="_blank">'.$lien.'</a>';
        }
}
?>