Rev 342 | Rev 356 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | RSS feed
<?php// declare(encoding='UTF-8');/*** Classe Controleur du module Accueil.* Affichage les infos sur l'ensemble des référentiels disponibles.** @package Referentiel* @category Php5.2* @author Jean-Pascal MILCENT <jpm@tela-botanica.org>* @copyright 2010 Tela-Botanica* @license http://www.cecill.info/licences/Licence_CeCILL_V2-fr.txt Licence CECILL* @license http://www.gnu.org/licenses/gpl.html Licence GNU-GPL* @version SVN: $Id$*/class Informations extends AppliControleur {private $referentiel = null;private $referentielDao = null;private $traitementDao = null;private $resultatDao = null;private $metaDao = null;private $colonnesOrdonnees = array();public function __construct() {parent::__construct();// Récupération de paramêtresif (isset($_GET['ref'])) { // code du projet courrant$this->referentiel = strtolower(strip_tags($_GET['ref']));}// Chargement des DAO nécessaires$this->resultatDao = new ResultatDao();$this->traitementDao = new TraitementDao();$this->referentielDao = new ReferentielDao();$this->metaDao = new MetaDao();// tableau colonnesOrdonnees à modifier aussi dans service/Recherche.php$this->colonnesOrdonnees = array("nn" => array("Numéro nomenclatural","checked","Identifiant numérique du nom scientifique"),"nr" => array("Numéro nomenclatural du nom retenu","checked","Identifiant numérique du nom scientifique (num_nom) retenu pour désigner le taxon"),"nt" => array("Numéro taxonomique","checked","Identifiant numérique du taxon auquel est rattaché le nom"),"cd" => array("Numéro INPN","checked","Identifiant numérique unique du nom scientifique attribué par l’INPN"),"rg" => array("Code rang","checked","Code numérique indiquant le rang du nom scientifique (voir tableau 7 du manuel technique)"),"fam" => array("Famille (APG III)","checked","Nom de la famille dans APG III"),"nsc" => array("Nom avec auteur","checked","Nom scientifique avec auteur(s)"),"bibc" => array("Année et bibliographie","checked","Format à étudier celui de Tela : 1868, Brev. Pl. Nov., 2 : 70 ou celui de Kew : Brev. Pl. Nov., 2 : 70 (1868)"),"nsrc" => array("Nom retenu avec auteur","checked","Nom retenu pour tous les taxons (identique si le nom est édjà le nom retenu)"),"nf" => array("Nom français normalisé","checked","Nom français conseillé pour ce taxon (à venir)"),"extax" => array("Présent dans Taxref","checked",""),"lien" => array("Permalien","checked","Lien http vers la fiche nomenclaturale"),"ntsup" => array("Numéro nomenclatural rang supérieur","","Identifiant numérique du nom (num_nom) de rang supérieur dans la classification par défaut de l'index"),"pre" => array("Répartition géographique","","Code indiquant si le taxon est présent dans la zone géographique définie par le référentiel (tableau 9)"),"ns" => array("Nom sans auteur","","Nom scientifique sans auteur"),"aut" => array("Auteur","","Intitulé de(s) l'auteur(s) du nom (abréviations standards de Brummitt et Powell)"),"ann" => array("Année publication","","Année de la publication effective du support papier"),"bib" => array("Bibliographie","","Référence bibliographique de la publication d'origine du nom"),"ntype" => array("Numéro du type","","Identifiant numérique (num_nom) du 1er basionyme appliqué à la planche d'herbier"),"nbas" => array("Numéro du basionyme","","Identifiant numérique (num_nom) du basionyme du nom"),"genre" => array("Genre","","Nom d'un genre dans le cas d'un monôme du rang genre ou d'une combinaison"),"esp" => array("Epithète espèce","","Épithète de l'espèce"),"eing" => array("Epithète infragénérique","","Épithète infra-générique d'une combinaison dont le rang est situé entre le genre et l'espèce"),"te" => array("Type d'épithète infraspécifique","","Abréviation indiquant le type de l'épithète infra-spécifique"),"einsp" => array("Epithète infraspécifique","","Épithète infra-spécifique d'une combinaison"),"hybp01" => array("Hybride parent 1","","Identifiant du nom (num_nom) du parent numéro 1 (dans le cas d'un hybride)"),"nomsupgen" => array("Nom supra générique","","Monôme dont le rang est supérieur au genre"),"hybp02" => array("Hybride parent 2","","Identifiant du nom (num_nom) du parent numéro 2 (dans le cas d'un hybride)"),"stori" => array("Statut d'origine","","Code indiquant le statut d'origine du taxon dans la zone géographique définie par le référentiel (tableau 10)"),"stint" => array("Statut d'introduction","","Code indiquant le statut d'introduction du taxon dans la zone géographique définie par le référentiel (tableau 11)"),"stcult" => array("Statut de culture","","Code indiquant le statut de culture du taxon dans la zone géographique définie par le référentiel (tableau 12)"),"notes" => array("Remarques","","Notes complémentaires"),"nomadd" => array("Commentaires nomenclaturaux","","Commentaires nomenclaturaux pouvant être associés à un nom (voir tableau 8 du manuel technique)"),"nsr" => array("Nom retenu sans auteur","","Nom scientifique du nom retenu sans auteur"),"hom" => array("Homonymie","","Contient la valeur 1 si le nom possède un homonyme ou si le nom est un homonyme. Dans le cas contraire"),"synprop" => array("Synonyme proprate","","Contient plusieurs identifiants numériques (num_nom) dans le cas d'un nom obtenu suite à la division d'un taxon. Contient un seul identifiant numérique (num_nom) dans le cas d'un nom obtenu suite à la fusion de plusieurs taxons."),"syndout" => array("Synonyme douteux","","Contient la valeur 1 si le nom est un synonyme douteux. Dans le cas contraire"),"synmapp" => array("Synonyme mal appliqué","","Contient la valeur 1 si le nom est un synonyme mal appliqué (cas des sensu). Dans le cas contraire"),"synorth" => array("Synonyme orthographique","","Contient l'identifiant numérique du nom (num_nom) correctement orthographié"),"orthori" => array("Orthographe originelle","","Contient la graphie originelle d'un nom non-conforme faisant l'objet d'une correction orthographique obligatoire"),"hybp01n" => array("Hybride parent 1 notes","","Notes éventuelles sur l'hybridité et le parent numéro 1"),"hybp02n" => array("Hybride parent 2 notes","","Notes éventuelles sur l'hybridité et le parent numéro 2"),"cultgp" => array("Groupe de cultivar","","Nom d'un groupe de cultivar (sansl'abréviation « Gp »)"),"cult" => array("Nom cultivar","","Nom d'un cultivar (sans les guillemets simple ou abréviation « cv. »)"),"nomcomm" => array("Nom commercial","","Nom commercial d'une plante (en majuscule"),"autres" => array("Autres","","colonnes spécifiques au référentiel"));}//+----------------------------------------------------------------------------------------------------------------+// Méthodes/*** Fonction d'affichage par défaut*/public function executerActionParDefaut() {return $this->afficherDetail();}/*** Affiche le détail d'un référentiel et la liste des actions possibles*/public function afficherDetail() {$this->definirCommeModulePrincipal('Informations');$donnees = $this->preparerPagePourDetailReferentielEtTelechargement();$donnees['messages'] = $this->getMessages();$this->traiterEsperluette($donnees);$this->setSortie(self::RENDU_CORPS, $this->getVue('detail_referentiel', $donnees), false);}public function telecharger() {$dossier = Config::get('chemin_tmp');$parametres['ref'] = $this->referentiel;$parametres['version'] = $_POST["version"];$parametres['version'] = str_replace(".", "_", $parametres['version']);if (isset($_POST["champs"])) $parametres['champs'] = implode(",",$_POST["champs"]);if (isset($_POST["filtres"])) $parametres['filtres'] = implode(",",$_POST["filtres"]);$this->supprimerAncienExport($dossier);$ref = $this->referentielDao->exporter($parametres);$meta = $this->metaDao->exporter($parametres);$dossierDateEtNomDeFichier = date('Y_m_d').'/'.$this->referentiel.time().'.zip';$cheminZip = $dossier.$dossierDateEtNomDeFichier;$zip = new ZipArchive();if($zip->open($cheminZip, ZipArchive::CREATE) === true) {// Ajout des fichiers métadonnées, référentiel et manuel technique$meta = str_replace("\\/", "/", $meta);if (file_exists($meta)) {$metazip = $zip->addFile($meta, "informations.csv");}if (file_exists($ref)) {$refzip = $zip->addFile($ref, "referentiel.csv");}if (file_exists($dossier.'mtpr_V4_4.pdf')) {$zip->addFile($dossier.'mtpr_V4_4.pdf', 'manuel_technique.pdf');}// Et on referme l'archive$zip->close();} else {echo "Erreur : impossible d'ouvrir le fichier [$cheminZip]<br/>";}// on revient à la page de détail, avec un lien de téléchargement en prime$donnees = $this->preparerPagePourDetailReferentielEtTelechargement();if (file_exists($cheminZip)) {$urlLien = Config::get("base_url_telechargements") . $dossierDateEtNomDeFichier;$donnees['url_telechargement_zip'] = $urlLien;}$this->setSortie(self::RENDU_CORPS, $this->getVue('detail_referentiel', $donnees), false);}// exécute la partie commune entre l'action "detail" et l'action "telecharger"protected function preparerPagePourDetailReferentielEtTelechargement() {$donnees = array();// Traitement de l'info sur le code du référentielif (isset($this->referentiel)) {$this->construireMenu($this->referentiel);$this->construireFilAriane($this->referentiel);$donnees['referentiel'] = $this->referentiel;$donnees['nom_referentiel'] = $this->referentielDao->getNom($this->referentiel);$donnees['url_menu_test'] = $this->obtenirUrlMenuTest($this->referentiel);$donnees['url_menu_versionnage'] = $this->obtenirUrlMenuVersionnage($this->referentiel);$donnees['url_menu_consultation'] = $this->obtenirUrlMenuConsultation($this->referentiel);$donnees['url_form_telech'] = $this->obtenirUrlDetailReferentielTelechargement($this->referentiel);// suppression du téléchargement pour bdbfxif ($this->referentiel != 'bdbfx') {$donnees['versions'] = $this->afficherFormulaireTelechargementsReferentiels();$donnees['infos_telechargements'] = $this->afficherTelechargementsReferentiels();$donnees['colonnesOrdonnees'] = $this->colonnesOrdonnees;}} else {$this->addMessage("Aucun code de projet de référentiel n'est indiqué (Ex. bdtfx).");}return $donnees;}private function supprimerAncienExport($dossier) {$pointeur = opendir($dossier);// si pas d'erreur d'ouverture du dossier on lance le scanif( $pointeur != false ) {// Parcours du repertoirewhile( $ss_dossier = readdir($pointeur)) {if($ss_dossier != "." && $ss_dossier != "..") {$chemin_complet = $dossier . $ss_dossier;if (is_dir($chemin_complet) && $ss_dossier < date('Y_m_d')) {$fichiers = scandir($chemin_complet);foreach ($fichiers as $fichier) {if($fichier != "." && $fichier != "..") {unlink($chemin_complet."/".$fichier);}}rmdir($chemin_complet);}}}closedir($pointeur);}}private function afficherFormulaireTelechargementsReferentiels() {$versions = $this->traitementDao->getTraitementsTermines($this->referentiel, 'versionnage');if ($versions != null) {foreach ($versions as $id => $version) {$versions[$id] = (unserialize($versions[$id]["script_parametres"]));}}return $versions;}private function afficherTelechargementsReferentiels() {$infos_telechargements = array();// Recherche des traitements déjà effectué$resultat = $this->traitementDao->getTraitementsTermines($this->referentiel, 'versionnage');if (is_array($resultat)) {foreach ($resultat as &$traitement) {$infos_traitement = $this->traitementDao->getInfos($traitement['id_traitement']);if ($infos_traitement != false) {// Recherche des fichiers disponibles$infos_zip = $this->obtenirUrlsZipPourTraitement($infos_traitement);$infos_telechargements[] = array('infos_traitement' => $traitement,'description' => $this->creerDescriptionTelechargement($traitement),'urls_zip' => $infos_zip);}}}return $infos_telechargements;}private function creerDescriptionTelechargement($traitement) {return strftime('%e %B %Y', strtotime($traitement['meta_date_creation'])).' ('.$this->referentielDao->getNom($this->referentiel).') ';}}?>