| Line 17... |
Line 17... |
| 17 |
// +-------------------------------------------------------------------------------------------------------------------+
|
17 |
// +-------------------------------------------------------------------------------------------------------------------+
|
| 18 |
// TODO : supprimer l'utilisation du paramêtres 'p' et chercher les infos depuis la bdd
|
18 |
// TODO : supprimer l'utilisation du paramêtres 'p' et chercher les infos depuis la bdd
|
| 19 |
class Versionnage extends ScriptCommande {
|
19 |
class Versionnage extends ScriptCommande {
|
| Line 20... |
Line 20... |
| 20 |
|
20 |
|
| - |
|
21 |
const SCRIPT_NOM = 'versionnage';
|
| Line 21... |
Line 22... |
| 21 |
const SCRIPT_NOM = 'versionnage';
|
22 |
const MANUEL_VERSION = "2.1";
|
| 22 |
|
23 |
|
| 23 |
private $projet = null;
|
24 |
private $projet = null;
|
| - |
|
25 |
private $traitement = null;
|
| 24 |
private $traitement = null;
|
26 |
private $meta = null;
|
| 25 |
private $meta = null;
|
27 |
private $version_courante = null;
|
| - |
|
28 |
private $messages = null;
|
| - |
|
29 |
private $manuel = null;
|
| - |
|
30 |
private $manuel_nom = null;
|
| - |
|
31 |
private $manuel_chemin = null;
|
| - |
|
32 |
private $zip_chemin_dossier = null;
|
| 26 |
private $messages = null;
|
33 |
private $zip_chemin_fichier = null;
|
| 27 |
private $manuel = null;
|
34 |
|
| 28 |
private $noms = null;
|
35 |
private $noms = null;
|
| 29 |
private $noms_precedents = null;
|
36 |
private $noms_precedents = null;
|
| 30 |
private $noms_stat = null;
|
37 |
private $noms_stat = null;
|
| Line 59... |
Line 66... |
| 59 |
|
66 |
|
| 60 |
// Lancement du test demandé
|
67 |
// Lancement du test demandé
|
| 61 |
$cmd = $this->getParam('a');
|
68 |
$cmd = $this->getParam('a');
|
| 62 |
switch ($cmd) {
|
69 |
switch ($cmd) {
|
| 63 |
case 'tout' :
|
70 |
case 'tout' :
|
| 64 |
$this->metaDao = new MetaDao();
|
- |
|
| 65 |
$this->resultatDao = new ResultatDao();
|
- |
|
| 66 |
$this->referentielDao = new ReferentielDao();
|
- |
|
| 67 |
$this->manuel = parse_ini_file(Config::get('chemin_appli').DS.'..'.DS.'configurations'.DS.'referentiel_v2.1.ini');
|
71 |
$this->initialiserScript();
|
| 68 |
Debug::printr('Départ lancement versionnage:');
|
72 |
Debug::printr('Départ lancement versionnage:');
|
| 69 |
$this->lancerVersionnage();
|
73 |
$this->lancerVersionnage();
|
| 70 |
break;
|
74 |
break;
|
| 71 |
default :
|
75 |
default :
|
| 72 |
$this->traiterErreur('Erreur : la commande "%s" n\'existe pas!', array($cmd));
|
76 |
$this->traiterErreur('Erreur : la commande "%s" n\'existe pas!', array($cmd));
|
| 73 |
}
|
77 |
}
|
| 74 |
// Écriture de la date de fin du traitement
|
78 |
// Écriture de la date de fin du traitement
|
| 75 |
Debug::printr('Termine:'.$this->traitementDao->terminerTraitement($this->traitement['id_traitement']));
|
79 |
Debug::printr('Termine:'.$this->traitementDao->terminerTraitement($this->traitement['id_traitement']));
|
| 76 |
}
|
80 |
}
|
| 77 |
}
|
81 |
}
|
| - |
|
82 |
|
| - |
|
83 |
private function initialiserScript() {
|
| - |
|
84 |
$this->metaDao = new MetaDao();
|
| - |
|
85 |
$this->resultatDao = new ResultatDao();
|
| - |
|
86 |
$this->referentielDao = new ReferentielDao();
|
| - |
|
87 |
|
| - |
|
88 |
$this->manuel_nom = 'mtpr_v'.str_replace('.', '_', self::MANUEL_VERSION).'.pdf';
|
| - |
|
89 |
$this->manuel_chemin = Config::get('chemin_appli').DS.'..'.DS.'configurations'.DS;
|
| - |
|
90 |
|
| - |
|
91 |
$manuel_config_nom = 'referentiel_v'.self::MANUEL_VERSION.'.ini';
|
| - |
|
92 |
$this->manuel = parse_ini_file($this->manuel_chemin.$manuel_config_nom);
|
| - |
|
93 |
}
|
| 78 |
|
94 |
|
| 79 |
public function lancerVersionnage() {
|
95 |
public function lancerVersionnage() {
|
| - |
|
96 |
$this->chargerTraitementParametre();
|
| - |
|
97 |
$this->initialiserNomVersionCOurante();
|
| - |
|
98 |
$this->initialiserCheminsZip();
|
| 80 |
$this->chargerTraitementParametre();
|
99 |
$this->creerDossierZip();
|
| 81 |
$this->archiver();
|
100 |
$this->archiver();
|
| 82 |
$this->chargerNomsATraiter();
|
101 |
$this->chargerNomsATraiter();
|
| 83 |
$this->analyserNomsATraiter();
|
102 |
$this->analyserNomsATraiter();
|
| - |
|
103 |
$this->creerFichiers();
|
| 84 |
$this->creerFichiers();
|
104 |
$this->nettoyerFichiers();
|
| 85 |
$this->traiterMessages();
|
105 |
$this->traiterMessages();
|
| Line 86... |
Line 106... |
| 86 |
}
|
106 |
}
|
| 87 |
|
107 |
|
| Line 98... |
Line 118... |
| 98 |
$m = "L'archivage de la version '{$this->meta['version']}' du référentiel '{$this->projet}' a échoué";
|
118 |
$m = "L'archivage de la version '{$this->meta['version']}' du référentiel '{$this->projet}' a échoué";
|
| 99 |
$this->ajouterMessage($m);
|
119 |
$this->ajouterMessage($m);
|
| 100 |
}
|
120 |
}
|
| 101 |
}
|
121 |
}
|
| Line -... |
Line 122... |
| - |
|
122 |
|
| - |
|
123 |
private function initialiserNomVersionCOurante() {
|
| - |
|
124 |
$this->version_courante = strtolower($this->projet).'_v'.str_replace('.', '_', $this->meta['version']);
|
| - |
|
125 |
Debug::printr("Nom archive courante :".$this->version_courante);
|
| - |
|
126 |
}
|
| - |
|
127 |
|
| - |
|
128 |
private function initialiserCheminsZip() {
|
| - |
|
129 |
$this->zip_chemin_dossier = Config::get('chemin_referentiel_zip').$this->version_courante.DIRECTORY_SEPARATOR;
|
| - |
|
130 |
$this->zip_chemin_fichier = Config::get('chemin_referentiel_zip').$this->version_courante.'.zip';
|
| - |
|
131 |
}
|
| - |
|
132 |
|
| - |
|
133 |
private function creerDossierZip() {
|
| - |
|
134 |
$recursivite = true;
|
| - |
|
135 |
if (mkdir($this->zip_chemin_dossier, 0777, $recursivite) === false) {
|
| - |
|
136 |
$this->ajouterMessage("La création du dossier '$this->zip_chemin_dossier' devant contenir les fichiers a échouée.");
|
| - |
|
137 |
}
|
| - |
|
138 |
}
|
| 102 |
|
139 |
|
| 103 |
private function chargerNomsATraiter() {
|
- |
|
| 104 |
$archive_courante = strtolower($this->projet).'_v'.str_replace('.', '_', $this->meta['version']);
|
- |
|
| 105 |
Debug::printr("Nom archive courante :".$archive_courante);
|
140 |
private function chargerNomsATraiter() {
|
| 106 |
$this->noms = $this->referentielDao->getTout($archive_courante);
|
141 |
$this->noms = $this->referentielDao->getTout($this->version_courante);
|
| Line 107... |
Line 142... |
| 107 |
}
|
142 |
}
|
| 108 |
|
143 |
|
| 109 |
private function analyserNomsATraiter() {
|
144 |
private function analyserNomsATraiter() {
|
| Line 129... |
Line 164... |
| 129 |
private function creerFichiers() {
|
164 |
private function creerFichiers() {
|
| 130 |
// Respecter l'ordre de traitement : BDNT puis DIFF puis META
|
165 |
// Respecter l'ordre de traitement : BDNT puis DIFF puis META
|
| 131 |
$this->creerFichierBdnt();
|
166 |
$this->creerFichierBdnt();
|
| 132 |
$this->creerFichierDiff();
|
167 |
$this->creerFichierDiff();
|
| 133 |
$this->creerFichierMeta();
|
168 |
$this->creerFichierMeta();
|
| - |
|
169 |
$this->nettoyerMemoire();
|
| - |
|
170 |
$this->copierManuel();
|
| - |
|
171 |
$this->creerFichierZip();
|
| 134 |
}
|
172 |
}
|
| Line 135... |
Line 173... |
| 135 |
|
173 |
|
| 136 |
private function creerFichierBdnt() {
|
174 |
private function creerFichierBdnt() {
|
| 137 |
$noms =& $this->noms;
|
175 |
$noms =& $this->noms;
|
| Line 189... |
Line 227... |
| 189 |
$titre = self::SCRIPT_NOM.' #'.$this->traitement['id_traitement'];
|
227 |
$titre = self::SCRIPT_NOM.' #'.$this->traitement['id_traitement'];
|
| 190 |
$this->messages[] = array('message' => $message, 'resultat' => true);
|
228 |
$this->messages[] = array('message' => $message, 'resultat' => true);
|
| 191 |
}
|
229 |
}
|
| Line 192... |
Line 230... |
| 192 |
|
230 |
|
| 193 |
private function ecrireFichierBdnt($contenu) {
|
231 |
private function ecrireFichierBdnt($contenu) {
|
| 194 |
$fichier_nom = $this->getBaseNomFichier().$this->manuel['ext_fichier_ref'];
|
232 |
$fichier_nom = $this->getBaseNomFichier().$this->manuel['ext_fichier_bdnt'];
|
| Line 195... |
Line 233... |
| 195 |
$fichier_chemin = Config::get('chemin_referentiel_zip').$fichier_nom;
|
233 |
$fichier_chemin = $this->zip_chemin_dossier.$fichier_nom;
|
| 196 |
|
234 |
|
| 197 |
if ($this->ecrireFichier($fichier_chemin, $contenu)) {
|
235 |
if ($this->ecrireFichier($fichier_chemin, $contenu)) {
|
| 198 |
$this->ajouterMessage("Écriture du fichier bdnt réussie.");
|
236 |
$this->ajouterMessage("Écriture du fichier bdnt réussie.");
|
| Line 221... |
Line 259... |
| 221 |
if (is_null($derniere_meta === false)) {
|
259 |
if (is_null($derniere_meta === false)) {
|
| 222 |
$this->ajouterMessage("Un problème est survenu lors de la récupération des métadonnées précédentes.");
|
260 |
$this->ajouterMessage("Un problème est survenu lors de la récupération des métadonnées précédentes.");
|
| 223 |
} else if (is_null($derniere_meta)) {
|
261 |
} else if (is_null($derniere_meta)) {
|
| 224 |
$this->ajouterMessage("Premier versionnage pour ce projet, aucun fichier différentiel ne sera créé.");
|
262 |
$this->ajouterMessage("Premier versionnage pour ce projet, aucun fichier différentiel ne sera créé.");
|
| 225 |
} else {
|
263 |
} else {
|
| 226 |
Debug::printr("Méta dernier enregistrement : ".print_r($derniere_meta,true));
|
- |
|
| 227 |
$code_projet_precedent = strtolower($derniere_meta['code']).'_v'.str_replace('.', '_', $derniere_meta['version']);
|
264 |
$code_projet_precedent = strtolower($derniere_meta['code']).'_v'.str_replace('.', '_', $derniere_meta['version']);
|
| 228 |
Debug::printr("Code projet précédent : $code_projet_precedent");
|
265 |
if ($code_projet_precedent == $this->version_courante) {
|
| - |
|
266 |
$e = "La code de la version préalablement versionnée ($code_projet_precedent) est le même que celui ".
|
| - |
|
267 |
"de la demande actuel ({$this->version_courante}) pour ce projet, aucun fichier différentiel ne sera créé.";
|
| - |
|
268 |
$this->ajouterMessage($e);
|
| - |
|
269 |
} else {
|
| 229 |
$this->noms_precedents = $this->referentielDao->getTout($code_projet_precedent);
|
270 |
$this->noms_precedents = $this->referentielDao->getTout($code_projet_precedent);
|
| 230 |
$donnees = array();
|
271 |
$donnees = array();
|
| 231 |
$donnees['diff'] = $this->realiserDiff();
|
272 |
$donnees['diff'] = $this->realiserDiff();
|
| 232 |
$donnees['champs'] = $this->champs_nom;
|
273 |
$donnees['champs'] = $this->champs_nom;
|
| 233 |
$diff_tsv = $this->getVue('versionnage/squelettes/diff', $donnees, '.tpl.tsv');
|
274 |
$diff_tsv = $this->getVue('versionnage/squelettes/diff', $donnees, '.tpl.tsv');
|
| 234 |
$this->ecrireFichierDiff($diff_tsv);
|
275 |
$this->ecrireFichierDiff($diff_tsv);
|
| - |
|
276 |
}
|
| 235 |
}
|
277 |
}
|
| 236 |
}
|
278 |
}
|
| Line 237... |
Line 279... |
| 237 |
|
279 |
|
| 238 |
private function realiserDiff() {
|
280 |
private function realiserDiff() {
|
| Line 287... |
Line 329... |
| 287 |
return $type;
|
329 |
return $type;
|
| 288 |
}
|
330 |
}
|
| Line 289... |
Line 331... |
| 289 |
|
331 |
|
| 290 |
private function ecrireFichierDiff($contenu) {
|
332 |
private function ecrireFichierDiff($contenu) {
|
| 291 |
$fichier_nom = $this->getBaseNomFichier().$this->manuel['ext_fichier_diff'];
|
333 |
$fichier_nom = $this->getBaseNomFichier().$this->manuel['ext_fichier_diff'];
|
| Line 292... |
Line 334... |
| 292 |
$fichier_chemin = Config::get('chemin_referentiel_zip').$fichier_nom;
|
334 |
$fichier_chemin = $this->zip_chemin_dossier.$fichier_nom;
|
| 293 |
|
335 |
|
| 294 |
if ($this->ecrireFichier($fichier_chemin, $contenu)) {
|
336 |
if ($this->ecrireFichier($fichier_chemin, $contenu)) {
|
| 295 |
$this->ajouterMessage("Écriture du fichier diff réussie.");
|
337 |
$this->ajouterMessage("Écriture du fichier diff réussie.");
|
| Line 305... |
Line 347... |
| 305 |
$this->ecrireFichierMeta($meta_tsv);
|
347 |
$this->ecrireFichierMeta($meta_tsv);
|
| 306 |
}
|
348 |
}
|
| Line 307... |
Line 349... |
| 307 |
|
349 |
|
| 308 |
private function ecrireFichierMeta($contenu) {
|
350 |
private function ecrireFichierMeta($contenu) {
|
| 309 |
$fichier_nom = $this->getBaseNomFichier().$this->manuel['ext_fichier_meta'];
|
351 |
$fichier_nom = $this->getBaseNomFichier().$this->manuel['ext_fichier_meta'];
|
| Line 310... |
Line 352... |
| 310 |
$fichier_chemin = Config::get('chemin_referentiel_zip').$fichier_nom;
|
352 |
$fichier_chemin = $this->zip_chemin_dossier.$fichier_nom;
|
| 311 |
|
353 |
|
| 312 |
if ($this->ecrireFichier($fichier_chemin, $contenu)) {
|
354 |
if ($this->ecrireFichier($fichier_chemin, $contenu)) {
|
| 313 |
$this->ajouterMessage("Écriture du fichier meta réussie.");
|
355 |
$this->ajouterMessage("Écriture du fichier meta réussie.");
|
| Line 336... |
Line 378... |
| 336 |
if ($ok === false) {
|
378 |
if ($ok === false) {
|
| 337 |
$this->ajouterMessage("L'archivage des métadonnées a échoué.");
|
379 |
$this->ajouterMessage("L'archivage des métadonnées a échoué.");
|
| 338 |
}
|
380 |
}
|
| 339 |
}
|
381 |
}
|
| Line -... |
Line 382... |
| - |
|
382 |
|
| - |
|
383 |
private function nettoyerMemoire() {
|
| - |
|
384 |
$this->noms = null;
|
| - |
|
385 |
$this->noms_precedents = null;
|
| - |
|
386 |
$this->noms_stat = null;
|
| - |
|
387 |
}
|
| - |
|
388 |
|
| - |
|
389 |
private function copierManuel() {
|
| - |
|
390 |
$fichier_source = $this->manuel_chemin.$this->manuel_nom;
|
| - |
|
391 |
$fichier_destination = $this->zip_chemin_dossier.$this->manuel_nom;
|
| - |
|
392 |
if (copy($fichier_source, $fichier_destination) === false) {
|
| - |
|
393 |
$this->ajouterMessage("La copie du manuel '$fichier_destination' a échouée.");
|
| - |
|
394 |
}
|
| - |
|
395 |
}
|
| - |
|
396 |
|
| - |
|
397 |
private function creerFichierZip() {
|
| - |
|
398 |
$fichierZip = new PclZip($this->zip_chemin_fichier);
|
| - |
|
399 |
if ($fichierZip->add($this->zip_chemin_dossier, PCLZIP_OPT_REMOVE_ALL_PATH) == 0) {
|
| - |
|
400 |
$e = "La création du fichier zip '$this->zip_chemin_fichier' a échoué avec l'erreur : ".$fichierZip>errorInfo(true);
|
| - |
|
401 |
$this->ajouterMessage($e);
|
| - |
|
402 |
}
|
| - |
|
403 |
}
|
| - |
|
404 |
|
| - |
|
405 |
private function nettoyerFichiers() {
|
| - |
|
406 |
$dossier = $this->zip_chemin_dossier;
|
| - |
|
407 |
if (is_dir($dossier)) {
|
| - |
|
408 |
$objets = scandir($dossier);
|
| - |
|
409 |
foreach ($objets as $objet) {
|
| - |
|
410 |
if ($objet != '.' && $objet != '..') {
|
| - |
|
411 |
if (filetype($dossier.'/'.$objet) == 'dir') {
|
| - |
|
412 |
rrmdir($dossier.'/'.$objet);
|
| - |
|
413 |
} else {
|
| - |
|
414 |
unlink($dossier.'/'.$objet);
|
| - |
|
415 |
}
|
| - |
|
416 |
}
|
| - |
|
417 |
}
|
| - |
|
418 |
reset($objets);
|
| - |
|
419 |
rmdir($dossier);
|
| - |
|
420 |
}
|
| - |
|
421 |
}
|
| 340 |
|
422 |
|
| 341 |
private function traiterMessages() {
|
423 |
private function traiterMessages() {
|
| 342 |
if (isset($this->messages)) {
|
424 |
if (isset($this->messages)) {
|
| 343 |
$num_message = 1;
|
425 |
$num_message = 1;
|
| 344 |
foreach ($this->messages as $message) {
|
426 |
foreach ($this->messages as $message) {
|