Rev 46 | Rev 49 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | RSS feed
<?php// Encodage : UTF-8// +-------------------------------------------------------------------------------------------------------------------+/*** Versionnage de référentiels de nomenclature et taxonomie** Description : classe permettant de versionner les référentiels selon le manuel technique* Utilisation : php script.php versionnage -p bdnff -a tout*//Auteur original :* @author Jean-Pascal MILCENT <jpm@tela-botanica.org>* @copyright Tela-Botanica 1999-2010* @link http://www.tela-botanica.org/wikini/RTaxMethodo/wakka.php?wiki=MaNuel* @licence GPL v3 & CeCILL v2* @version $Id$*/// +-------------------------------------------------------------------------------------------------------------------+// TODO : supprimer l'utilisation du paramêtres 'p' et chercher les infos depuis la bddclass Versionnage extends ScriptCommande {const SCRIPT_NOM = 'versionnage';private $projet = null;private $traitement = null;private $erreurs = null;private $manuel = null;private $resultatDao = null;private $traitementDao = null;private $tableStructureDao = null;private $referentielDao = null;public function executer() {// Récupération de paramêtres$this->projet = $this->getParam('p');// Récupération du dernier traitement demandé$this->traitementDao = new TraitementDao();$this->traitement = $this->traitementDao->getDernierTraitement($this->projet, self::SCRIPT_NOM);if (isset($this->traitement)) {Debug::printr($this->traitement);// Écriture de la date de début du traitementDebug::printr('Debute:'.$this->traitementDao->debuterTraitement($this->traitement['id_traitement']));// Nettoyage des traitements obsolètes$traitements_obsoletes = $this->traitementDao->getTraitementsObsoletes($this->projet, self::SCRIPT_NOM);if (isset($traitements_obsoletes)) {Debug::printr('Supp. obsoletes:'.$this->traitementDao->supprimer($traitements_obsoletes));}// Lancement du test demandé$cmd = $this->getParam('a');switch ($cmd) {case 'tout' :$this->resultatDao = new ResultatDao();$this->referentielDao = new ReferentielDao();$this->manuel = parse_ini_file(Config::get('chemin_appli').DS.'..'.DS.'configurations'.DS.'referentiel_v2.1.ini');Debug::printr('Départ lancement test:');$this->lancerVersionnage();break;default :$this->traiterErreur('Erreur : la commande "%s" n\'existe pas!', array($cmd));}// Écriture de la date de fin du traitementDebug::printr('Termine:'.$this->traitementDao->terminerTraitement($this->traitement['id_traitement']));}}public function lancerVersionnage() {// Récupération des données à tester$noms = $this->referentielDao->getTout($this->projet);Debug::printr('Nbre noms :'.count($noms));$this->versionnerBdnt($noms);$this->traiterMessagesErreur();}private function versionnerBdnt($noms) {Debug::printr("Element courrant du tableau des noms : ".print_r(current($noms),true));//Debug::printr("Taille mémoire du tableau des noms : ".Debug::tailleMemoireVar($noms));$champs_ordre = $this->determinerOrdreDesChamps(current($noms));Debug::printr("Tableau ordre des champs : ".print_r($champs_ordre, true));$donnees = array();$donnees['champs'] = array_flip($champs_ordre);//$donnees['noms'] = $noms;foreach ($noms as $id => $nom) {// Suppression de la ligne du tableau pour gagner de l'espace mémoireunset($noms[$id]);$infos = array();foreach ($nom as $champ => $valeur) {if (isset($champs_ordre[$champ])) {$ordre = $champs_ordre[$champ];$infos[$ordre] = $valeur;} else {$e = "Le champ '$champ' n'a pas été pris en compte dans l'attribution de l'ordre des champs.";$this->ajouterMessageErreur($e);}}$donnees['noms'][] = $infos;}$bdtn_tsv = $this->getVue('versionnage/squelettes/bdnt', $donnees, '.tpl.tsv');if (file_put_contents('/home/jpm/web/referentiel/zip/bdnt.txt', $bdtn_tsv) == false) {Debug::printr("une erreur est survenu lors de l'écriture du fichier");}}private function determinerOrdreDesChamps($nom) {$champs_ordre = explode(',', $this->manuel['champs']);$champs_ordre = array_flip($champs_ordre);$champs_ordre = $this->attribuerOrdreChampsSupplémentaires($champs_ordre, $nom);asort($champs_ordre);return $champs_ordre;}private function attribuerOrdreChampsSupplémentaires($champs_ordre, $nom) {foreach ($nom as $champ => $info) {if (!isset($champs_ordre[$champ])) {$champs_ordre[$champ] = count($champs_ordre);}}return $champs_ordre;}private function ajouterMessageErreur($message) {$titre = self::SCRIPT_NOM.' #'.$this->traitement['id_traitement'];$this->erreurs[] = array($titre, $message);}private function traiterMessagesErreur() {if (isset($this->erreurs)) {$this->resultatDao->ajouter($this->traitement['id_traitement'], $this->erreurs);}}}?>