19,12 → 19,19 |
class Versionnage extends ScriptCommande { |
|
const SCRIPT_NOM = 'versionnage'; |
const MANUEL_VERSION = "2.1"; |
|
private $projet = null; |
private $traitement = null; |
private $meta = null; |
private $version_courante = null; |
private $messages = null; |
private $manuel = null; |
private $manuel_nom = null; |
private $manuel_chemin = null; |
private $zip_chemin_dossier = null; |
private $zip_chemin_fichier = null; |
|
private $noms = null; |
private $noms_precedents = null; |
private $noms_stat = null; |
61,10 → 68,7 |
$cmd = $this->getParam('a'); |
switch ($cmd) { |
case 'tout' : |
$this->metaDao = new MetaDao(); |
$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'); |
$this->initialiserScript(); |
Debug::printr('Départ lancement versionnage:'); |
$this->lancerVersionnage(); |
break; |
75,13 → 79,29 |
Debug::printr('Termine:'.$this->traitementDao->terminerTraitement($this->traitement['id_traitement'])); |
} |
} |
|
|
private function initialiserScript() { |
$this->metaDao = new MetaDao(); |
$this->resultatDao = new ResultatDao(); |
$this->referentielDao = new ReferentielDao(); |
|
$this->manuel_nom = 'mtpr_v'.str_replace('.', '_', self::MANUEL_VERSION).'.pdf'; |
$this->manuel_chemin = Config::get('chemin_appli').DS.'..'.DS.'configurations'.DS; |
|
$manuel_config_nom = 'referentiel_v'.self::MANUEL_VERSION.'.ini'; |
$this->manuel = parse_ini_file($this->manuel_chemin.$manuel_config_nom); |
} |
|
public function lancerVersionnage() { |
$this->chargerTraitementParametre(); |
$this->initialiserNomVersionCOurante(); |
$this->initialiserCheminsZip(); |
$this->creerDossierZip(); |
$this->archiver(); |
$this->chargerNomsATraiter(); |
$this->analyserNomsATraiter(); |
$this->creerFichiers(); |
$this->nettoyerFichiers(); |
$this->traiterMessages(); |
} |
|
100,10 → 120,25 |
} |
} |
|
private function initialiserNomVersionCOurante() { |
$this->version_courante = strtolower($this->projet).'_v'.str_replace('.', '_', $this->meta['version']); |
Debug::printr("Nom archive courante :".$this->version_courante); |
} |
|
private function initialiserCheminsZip() { |
$this->zip_chemin_dossier = Config::get('chemin_referentiel_zip').$this->version_courante.DIRECTORY_SEPARATOR; |
$this->zip_chemin_fichier = Config::get('chemin_referentiel_zip').$this->version_courante.'.zip'; |
} |
|
private function creerDossierZip() { |
$recursivite = true; |
if (mkdir($this->zip_chemin_dossier, 0777, $recursivite) === false) { |
$this->ajouterMessage("La création du dossier '$this->zip_chemin_dossier' devant contenir les fichiers a échouée."); |
} |
} |
|
private function chargerNomsATraiter() { |
$archive_courante = strtolower($this->projet).'_v'.str_replace('.', '_', $this->meta['version']); |
Debug::printr("Nom archive courante :".$archive_courante); |
$this->noms = $this->referentielDao->getTout($archive_courante); |
$this->noms = $this->referentielDao->getTout($this->version_courante); |
} |
|
private function analyserNomsATraiter() { |
131,6 → 166,9 |
$this->creerFichierBdnt(); |
$this->creerFichierDiff(); |
$this->creerFichierMeta(); |
$this->nettoyerMemoire(); |
$this->copierManuel(); |
$this->creerFichierZip(); |
} |
|
private function creerFichierBdnt() { |
191,8 → 229,8 |
} |
|
private function ecrireFichierBdnt($contenu) { |
$fichier_nom = $this->getBaseNomFichier().$this->manuel['ext_fichier_ref']; |
$fichier_chemin = Config::get('chemin_referentiel_zip').$fichier_nom; |
$fichier_nom = $this->getBaseNomFichier().$this->manuel['ext_fichier_bdnt']; |
$fichier_chemin = $this->zip_chemin_dossier.$fichier_nom; |
|
if ($this->ecrireFichier($fichier_chemin, $contenu)) { |
$this->ajouterMessage("Écriture du fichier bdnt réussie."); |
223,15 → 261,19 |
} else if (is_null($derniere_meta)) { |
$this->ajouterMessage("Premier versionnage pour ce projet, aucun fichier différentiel ne sera créé."); |
} else { |
Debug::printr("Méta dernier enregistrement : ".print_r($derniere_meta,true)); |
$code_projet_precedent = strtolower($derniere_meta['code']).'_v'.str_replace('.', '_', $derniere_meta['version']); |
Debug::printr("Code projet précédent : $code_projet_precedent"); |
$this->noms_precedents = $this->referentielDao->getTout($code_projet_precedent); |
$donnees = array(); |
$donnees['diff'] = $this->realiserDiff(); |
$donnees['champs'] = $this->champs_nom; |
$diff_tsv = $this->getVue('versionnage/squelettes/diff', $donnees, '.tpl.tsv'); |
$this->ecrireFichierDiff($diff_tsv); |
if ($code_projet_precedent == $this->version_courante) { |
$e = "La code de la version préalablement versionnée ($code_projet_precedent) est le même que celui ". |
"de la demande actuel ({$this->version_courante}) pour ce projet, aucun fichier différentiel ne sera créé."; |
$this->ajouterMessage($e); |
} else { |
$this->noms_precedents = $this->referentielDao->getTout($code_projet_precedent); |
$donnees = array(); |
$donnees['diff'] = $this->realiserDiff(); |
$donnees['champs'] = $this->champs_nom; |
$diff_tsv = $this->getVue('versionnage/squelettes/diff', $donnees, '.tpl.tsv'); |
$this->ecrireFichierDiff($diff_tsv); |
} |
} |
} |
|
289,7 → 331,7 |
|
private function ecrireFichierDiff($contenu) { |
$fichier_nom = $this->getBaseNomFichier().$this->manuel['ext_fichier_diff']; |
$fichier_chemin = Config::get('chemin_referentiel_zip').$fichier_nom; |
$fichier_chemin = $this->zip_chemin_dossier.$fichier_nom; |
|
if ($this->ecrireFichier($fichier_chemin, $contenu)) { |
$this->ajouterMessage("Écriture du fichier diff réussie."); |
307,7 → 349,7 |
|
private function ecrireFichierMeta($contenu) { |
$fichier_nom = $this->getBaseNomFichier().$this->manuel['ext_fichier_meta']; |
$fichier_chemin = Config::get('chemin_referentiel_zip').$fichier_nom; |
$fichier_chemin = $this->zip_chemin_dossier.$fichier_nom; |
|
if ($this->ecrireFichier($fichier_chemin, $contenu)) { |
$this->ajouterMessage("Écriture du fichier meta réussie."); |
338,6 → 380,46 |
} |
} |
|
private function nettoyerMemoire() { |
$this->noms = null; |
$this->noms_precedents = null; |
$this->noms_stat = null; |
} |
|
private function copierManuel() { |
$fichier_source = $this->manuel_chemin.$this->manuel_nom; |
$fichier_destination = $this->zip_chemin_dossier.$this->manuel_nom; |
if (copy($fichier_source, $fichier_destination) === false) { |
$this->ajouterMessage("La copie du manuel '$fichier_destination' a échouée."); |
} |
} |
|
private function creerFichierZip() { |
$fichierZip = new PclZip($this->zip_chemin_fichier); |
if ($fichierZip->add($this->zip_chemin_dossier, PCLZIP_OPT_REMOVE_ALL_PATH) == 0) { |
$e = "La création du fichier zip '$this->zip_chemin_fichier' a échoué avec l'erreur : ".$fichierZip>errorInfo(true); |
$this->ajouterMessage($e); |
} |
} |
|
private function nettoyerFichiers() { |
$dossier = $this->zip_chemin_dossier; |
if (is_dir($dossier)) { |
$objets = scandir($dossier); |
foreach ($objets as $objet) { |
if ($objet != '.' && $objet != '..') { |
if (filetype($dossier.'/'.$objet) == 'dir') { |
rrmdir($dossier.'/'.$objet); |
} else { |
unlink($dossier.'/'.$objet); |
} |
} |
} |
reset($objets); |
rmdir($dossier); |
} |
} |
|
private function traiterMessages() { |
if (isset($this->messages)) { |
$num_message = 1; |