New file |
0,0 → 1,146 |
<?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 bdd |
class 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 traitement |
Debug::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 traitement |
Debug::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)); |
$noms = $this->classerNomsParNumNom($noms); |
|
$this->versionnerBdnt($noms); |
|
$this->traiterMessagesErreur(); |
} |
|
private function classerNomsParNumNom($noms) { |
$noms_classes = array(); |
foreach ($noms as $nom) { |
$noms_classes[$nom['num_nom']] = $nom; |
} |
return $noms_classes; |
} |
|
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 $nom) { |
$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); |
} |
} |
} |
?> |