Subversion Repositories Applications.referentiel

Rev

Rev 216 | Rev 218 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 216 Rev 217
Line 46... Line 46...
46
	private $champs_diff = null;
46
	private $champs_diff = null;
47
	private $diff_champs_nom = null;
47
	private $diff_champs_nom = null;
48
	private $diff_modif_types = null;
48
	private $diff_modif_types = null;
49
	private $signature_md5 = null;
49
	private $signature_md5 = null;
50
	private $signature_md5_partiel = null;
50
	private $signature_md5_partiel = null;
-
 
51
	private $derniere_meta = null;
-
 
52
	private $rangs_bdnt_taxref = null;
-
 
53
	private $statuts_bdnt_taxref = null;
Line 51... Line 54...
51
	
54
	
52
	private $resultatDao = null;
55
	private $resultatDao = null;
53
	private $traitementDao = null;
56
	private $traitementDao = null;
54
	private $metaDao = null;
57
	private $metaDao = null;
Line 133... Line 136...
133
	}
136
	}
Line 134... Line 137...
134
	
137
	
135
	private function initialiserCheminsZip() {
138
	private function initialiserCheminsZip() {
136
		$this->zip_chemin_dossier = Config::get('chemin_referentiel_zip').$this->version_courante.DIRECTORY_SEPARATOR;
139
		$this->zip_chemin_dossier = Config::get('chemin_referentiel_zip').$this->version_courante.DIRECTORY_SEPARATOR;
137
		$this->zip_chemin_fichier = Config::get('chemin_referentiel_zip').$this->version_courante.'.zip';
140
		$this->zip_chemin_fichier = Config::get('chemin_referentiel_zip').$this->version_courante.'.zip';
138
		$this->zip_chemin_dossier_partiel = Config::get('chemin_referentiel_zip').$this->version_courante.'_partiel'.DIRECTORY_SEPARATOR;
141
		$this->zip_chemin_dossier_partiel = Config::get('chemin_referentiel_zip').$this->version_courante.$this->manuel['suffixe_partiel'].DIRECTORY_SEPARATOR;
139
		$this->zip_chemin_fichier_partiel = Config::get('chemin_referentiel_zip').$this->version_courante.'_partiel.zip';
142
		$this->zip_chemin_fichier_partiel = Config::get('chemin_referentiel_zip').$this->version_courante.$this->manuel['suffixe_partiel'].'.zip';
Line 140... Line 143...
140
	}
143
	}
141
	
144
	
142
	private function creerDossiersZip() {
145
	private function creerDossiersZip() {
Line 214... Line 217...
214
		$this->definirNomDesChampsDiff();
217
		$this->definirNomDesChampsDiff();
Line 215... Line 218...
215
		
218
		
216
		$donnees = array();
219
		$donnees = array();
Line 217... Line 220...
217
		$donnees['champs'] = $this->champs_nom;
220
		$donnees['champs'] = $this->champs_nom;
218
		
221
		
219
		$fichier_nom = $this->getBaseNomFichier().$this->manuel['ext_fichier_bdnt'];
222
		$fichier_nom = $this->getBaseNomFichier().$this->manuel['suffixe_bdnt'].$this->manuel['ext_fichier'];
220
		$fichier_chemin = $this->zip_chemin_dossier.$fichier_nom;
223
		$fichier_chemin = $this->zip_chemin_dossier.$fichier_nom;
Line 221... Line 224...
221
		$bdnt_tsv_entete = $this->getVue('versionnage/squelettes/bdnt_entete', array('champs' => $donnees['champs']), '.tpl.tsv');
224
		$bdnt_tsv_entete = $this->getVue('versionnage/squelettes/bdnt_entete', array('champs' => $donnees['champs']), '.tpl.tsv');
Line 311... Line 314...
311
		return strtolower($this->meta['acronyme'].'_v'.str_replace('.', '_', $this->meta['version']));
314
		return strtolower($this->meta['acronyme'].'_v'.str_replace('.', '_', $this->meta['version']));
312
	}
315
	}
Line 313... Line 316...
313
		
316
		
314
	private function creerFichierBdntPartiel(&$donnees) {
317
	private function creerFichierBdntPartiel(&$donnees) {
-
 
318
		$this->definirChampsPartiel();
315
		$this->definirChampsPartiel();
319
		$this->creerCorrespondanceRangBdntTaxref();
316
		Debug::printr(current($donnees['noms']));
320
		Debug::printr(current($donnees['noms']));
317
		$donnees['champs_partiel'] = $this->champs_nom_partiel;
321
		$donnees['champs_partiel'] = $this->champs_nom_partiel;
318
		$donnees['dernier_champ'] = end($this->champs_nom_partiel);
322
		$donnees['dernier_champ'] = end($this->champs_nom_partiel);
319
		$this->ecrireFichierBdntPartielle($donnees);
323
		$this->ecrireFichierBdntPartielle($donnees);
Line 320... Line 324...
320
	}
324
	}
321
	
325
	
-
 
326
	private function definirChampsPartiel() {
-
 
327
		$this->champs_nom_partiel = explode(',', $this->manuel['champs_partiel']);
322
	private function definirChampsPartiel() {
328
		$champs_taxref = explode(',', $this->manuel['champs_taxref']);
323
		$this->champs_nom_partiel = explode(',', $this->manuel['champs_partiel']);
329
		$this->champs_nom_partiel = array_merge($this->champs_nom_partiel, $champs_taxref);
Line -... Line 330...
-
 
330
		Debug::printr("Champs partiels : ".print_r($this->champs_nom_partiel,true));
-
 
331
	}
-
 
332
	
-
 
333
	private function creerCorrespondanceRangBdntTaxref() {
-
 
334
		$rangs = explode(',', $this->manuel['rangs_bdnt_taxref']);
-
 
335
		foreach ($rangs as $rang) {
-
 
336
			list($id_bdnt, $code_taxref) = explode(':', trim($rang));
-
 
337
			$this->rangs_bdnt_taxref[$id_bdnt] = $code_taxref;
-
 
338
		}
-
 
339
	}
-
 
340
	
-
 
341
	private function creerCorrespondanceStatutBdntTaxref() {
-
 
342
		$statuts = explode(',', $this->manuel['statuts_bdnt_taxref']);
-
 
343
		foreach ($statuts as $statut) {
-
 
344
			list($code_taxref, $champ_et_code_bdnt) = explode('=', trim($statut));
-
 
345
			list($nom_champ_bdnt, $code_bdnt) = explode(':', trim($champ_et_code_bdnt));
-
 
346
			$this->statuts_bdnt_taxref[$nom_champ_bdnt][$code_bdnt] = $code_taxref;
-
 
347
		}
324
		Debug::printr("Champs partiels : ".print_r($this->champs_nom_partiel,true));
348
		Debug::printr($this->statuts_bdnt_taxref);
325
	}
349
	}
326
	
350
	
327
	private function ecrireFichierBdntPartielle(&$donnees) {
351
	private function ecrireFichierBdntPartielle(&$donnees) {
328
		$fichier_nom = $this->getBaseNomFichier().$this->manuel['ext_fichier_bdnt'];
352
		$fichier_nom = $this->getBaseNomFichier().$this->manuel['suffixe_bdnt'].$this->manuel['suffixe_partiel'].$this->manuel['ext_fichier'];
Line 329... Line 353...
329
		$fichier_chemin = $this->zip_chemin_dossier_partiel.$fichier_nom;
353
		$fichier_chemin = $this->zip_chemin_dossier_partiel.$fichier_nom;
330
		$bdnt_tsv_entete = $this->getVue('versionnage/squelettes/bdnt_partiel_entete', array('champs_partiel' => $donnees['champs_partiel']), '.tpl.tsv');
354
		$bdnt_tsv_entete = $this->getVue('versionnage/squelettes/bdnt_partiel_entete', array('champs_partiel' => $donnees['champs_partiel']), '.tpl.tsv');
-
 
355
		$this->ecrireFichier($fichier_chemin, $bdnt_tsv_entete);
-
 
356
			
-
 
357
		foreach ($this->noms as $id => &$nom) {
-
 
358
			$donnees['nom_infos'] = $nom;
-
 
359
			
331
		$this->ecrireFichier($fichier_chemin, $bdnt_tsv_entete);
360
			// Ajout de champs spécifique à Taxref généré depuis les données BDNT
332
			
361
			$donnees['nom_infos']['taxref_rang'] = $this->attribuerRangTaxref($nom['rang']);
333
		foreach ($this->noms as $id => &$nom) {
362
			$donnees['nom_infos']['taxref_statut'] = $this->attribuerStatutTaxref($nom);
334
			$donnees['nom_infos'] = $nom;
363
			
335
			$bdnt_tsv_ligne = $this->getVue('versionnage/squelettes/bdnt_partiel_ligne', $donnees, '.tpl.tsv');
364
			$bdnt_tsv_ligne = $this->getVue('versionnage/squelettes/bdnt_partiel_ligne', $donnees, '.tpl.tsv');
Line 344... Line 373...
344
			$this->ajouterMessage("Signature MD5 du fichier bdnt partiel :".$this->signature_md5_partiel);
373
			$this->ajouterMessage("Signature MD5 du fichier bdnt partiel :".$this->signature_md5_partiel);
345
			$this->ajouterMessage("Nombre de combinaisons traitées : ".$this->noms_stat['combinaison']);
374
			$this->ajouterMessage("Nombre de combinaisons traitées : ".$this->noms_stat['combinaison']);
346
		}
375
		}
347
	}
376
	}
Line -... Line 377...
-
 
377
	
-
 
378
	private function attribuerRangTaxref($rang) {
-
 
379
		$rang_taxref = '';
-
 
380
		if (isset($this->rangs_bdnt_taxref[$rang])) {
-
 
381
			$rang_taxref = $this->rangs_bdnt_taxref[$rang];
-
 
382
		}
-
 
383
		return $rang_taxref;
-
 
384
	}
-
 
385
	
-
 
386
	private function attribuerStatutTaxref($nom) {
-
 
387
		$statut_taxref = '';
-
 
388
		$champs_statuts = array('presence', 'statut_origine', 'statut_introduction', 'statut_culture');
-
 
389
		foreach ($champs_statuts as $champ) {
-
 
390
			$valeur = trim($nom[$champ]);
-
 
391
			if (isset($this->statuts_bdnt_taxref[$champ][$valeur])) {
-
 
392
				$statut_taxref = $this->statuts_bdnt_taxref[$champ][$valeur];
-
 
393
			}
-
 
394
		}
-
 
395
		return $statut_taxref;
-
 
396
	}
348
	
397
	
349
	private function ecrireFichier($fichier_chemin, &$contenu) {
398
	private function ecrireFichier($fichier_chemin, &$contenu) {
350
		$retour = true;
399
		$retour = true;
351
		if (file_put_contents($fichier_chemin, $contenu) == false) {
400
		if (file_put_contents($fichier_chemin, $contenu) == false) {
352
			$e = "Une erreur est survenu lors de l'écriture du fichier : $fichier_chemin";
401
			$e = "Une erreur est survenu lors de l'écriture du fichier : $fichier_chemin";
Line 368... Line 417...
368
		return $retour;
417
		return $retour;
369
	}	
418
	}	
Line 370... Line 419...
370
	
419
	
371
	private function creerFichierDiff() {
420
	private function creerFichierDiff() {
372
		$donnees = array();
421
		$donnees = array();
373
		$derniere_meta = $this->metaDao->getDerniere($this->projet);
422
		$this->derniere_meta = $this->metaDao->getDerniere($this->projet);
374
		if (is_null($derniere_meta === false)) {
423
		if (is_null($this->derniere_meta === false)) {
375
			$this->ajouterMessage("Un problème est survenu lors de la récupération des métadonnées précédentes.");
424
			$this->ajouterMessage("Un problème est survenu lors de la récupération des métadonnées précédentes.");
376
		} else if (is_null($derniere_meta)) {
425
		} else if (is_null($this->derniere_meta)) {
377
			$this->ajouterMessage("Premier versionnage pour ce projet, aucun fichier différentiel ne sera créé.");
426
			$this->ajouterMessage("Premier versionnage pour ce projet, aucun fichier différentiel ne sera créé.");
378
		} else {
427
		} else {
379
			$code_projet_precedent = strtolower($derniere_meta['code']).'_v'.str_replace('.', '_', $derniere_meta['version']);
428
			$code_projet_precedent = strtolower($this->derniere_meta['code']).'_v'.str_replace('.', '_', $this->derniere_meta['version']);
380
			if ($code_projet_precedent == $this->version_courante) {
429
			if ($code_projet_precedent == $this->version_courante) {
381
				$e = "La code de la version préalablement versionnée ($code_projet_precedent) est le même que celui ".
430
				$e = "La code de la version préalablement versionnée ($code_projet_precedent) est le même que celui ".
382
					"de la demande actuel ({$this->version_courante}) pour ce projet, aucun fichier différentiel ne sera créé.";
431
					"de la demande actuel ({$this->version_courante}) pour ce projet, aucun fichier différentiel ne sera créé.";
383
				$this->ajouterMessage($e);
432
				$this->ajouterMessage($e);
Line 408... Line 457...
408
						unset($this->noms[$id][$champ]);
457
						unset($this->noms[$id][$champ]);
409
					}
458
					}
410
				}
459
				}
411
			}
460
			}
412
			$infos = array();
461
			$infos = array();
413
			if (isset($this->noms_supprimes[$id])) {
-
 
414
					$infos = $this->traiterDiffSuppression($nom);
-
 
415
			} else if (!isset($this->noms_precedents[$id])) {
462
			if (!isset($this->noms_precedents[$id])) {
416
				$infos = $this->traiterDiffAjout($nom);
463
				$infos = $this->traiterDiffAjout($nom);
417
			} else {
464
			} else {
418
				$nom_precedent = $this->noms_precedents[$id];
465
				$nom_precedent = $this->noms_precedents[$id];
419
				if ($this->noms_precedents[$id]['exclure_taxref'] == '1') {
466
				if ($this->noms_precedents[$id]['exclure_taxref'] == '1') {
420
					unset($this->noms_precedents[$id]);
467
					unset($this->noms_precedents[$id]);
Line 439... Line 486...
439
		
486
		
440
		return $diff;
487
		return $diff;
Line 441... Line 488...
441
	}
488
	}
442
	
489
	
443
	private function verifierNomsSupprimes($edition = '«Complète»') {
490
	private function verifierNomsSupprimes($edition = '«Complète»') {
444
		$this->noms_supprimes = array_diff_key($this->noms, $this->noms_precedents);
491
		$this->noms_supprimes = array_diff_key($this->noms_precedents, $this->noms);
445
		$e = count($this->noms_supprimes)." lignes ont été supprimées vis à vis de la version ".
492
		$e = count($this->noms_supprimes)." lignes ont été supprimées vis à vis de la version ".
446
			"précédentes pour l'édition $edition. Cela concerne les noms : ".implode(', ', array_keys($this->noms_supprimes));
493
			"précédentes pour l'édition $edition. Cela concerne les noms : ".implode(', ', array_keys($this->noms_supprimes));
447
		Debug::printr($e);
494
		Debug::printr($e);
Line 510... Line 557...
510
		$type = isset($this->diff_modif_types[$champ_nom]) ? $this->diff_modif_types[$champ_nom] : '3';
557
		$type = isset($this->diff_modif_types[$champ_nom]) ? $this->diff_modif_types[$champ_nom] : '3';
511
		return $type;
558
		return $type;
512
	}
559
	}
Line 513... Line 560...
513
	
560
	
514
	private function ecrireFichierDiff(&$contenu) {
561
	private function ecrireFichierDiff(&$contenu) {
515
		$fichier_nom = $this->getBaseNomFichier().$this->manuel['ext_fichier_diff'];
562
		$fichier_nom = $this->getBaseNomFichier().$this->manuel['suffixe_diff'].$this->manuel['ext_fichier'];
Line 516... Line 563...
516
		$fichier_chemin = $this->zip_chemin_dossier.$fichier_nom;
563
		$fichier_chemin = $this->zip_chemin_dossier.$fichier_nom;
517
		
564
		
518
		if ($this->ecrireFichier($fichier_chemin, $contenu)) {
565
		if ($this->ecrireFichier($fichier_chemin, $contenu)) {
519
			$this->ajouterMessage("Écriture du fichier diff réussie.");
566
			$this->ajouterMessage("Écriture du fichier diff réussie.");
Line 520... Line 567...
520
		}
567
		}
521
	}
568
	}
522
	
569
	
523
	private function creerFichierDiffPartiel(&$donnees) {
570
	private function creerFichierDiffPartiel(&$donnees) {
524
		$this->noms_stat_partiel['modification'] = 0;
571
		$this->noms_stat_partiel['modification'] = 0;
525
		if (! is_null($derniere_meta) && $derniere_meta !== false) {
572
		if (! is_null($this->derniere_meta) && $this->derniere_meta !== false) {
526
			$donnees['diff_partiel'] = $this->realiserDiff();
573
			$donnees['diff_partiel'] = $this->realiserDiffPartiel();
527
			$donnees['champs_partiel_diff'] = array_merge($this->champs_nom_partiel, $this->champs_diff);
574
			$donnees['champs_partiel_diff'] = array_merge($this->champs_nom_partiel, $this->champs_diff);
-
 
575
			$donnees['dernier_champ'] = end($donnees['champs_partiel_diff']);
-
 
576
			$diff_tsv_partiel =& $this->getVue('versionnage/squelettes/diff_partiel', &$donnees, '.tpl.tsv');
528
			$donnees['dernier_champ'] = end($donnees['champs_partiel_diff']);
577
			$this->ecrireFichierDiffPartiel($diff_tsv_partiel);
529
			$diff_tsv_partiel =& $this->getVue('versionnage/squelettes/diff_partiel', &$donnees, '.tpl.tsv');
578
		} else {
Line 530... Line 579...
530
			$this->ecrireFichierDiffPartiel($diff_tsv_partiel);
579
			$this->ajouterMessage("Aucun fichier différentiel pour l'édition «Partielle» ne sera créé.");
531
		}
580
		}
Line 538... Line 587...
538
		$this->verifierNomsSupprimes('«Partielle»');
587
		$this->verifierNomsSupprimes('«Partielle»');
539
		$diff = array();
588
		$diff = array();
540
		foreach ($this->noms as $id => $nom) {
589
		foreach ($this->noms as $id => $nom) {
541
			unset($this->noms[$id]);
590
			unset($this->noms[$id]);
542
			$infos = array();
591
			$infos = array();
543
			if (isset($this->noms_supprimes[$id])) {
-
 
544
				$infos = $this->traiterDiffSuppression($nom);
-
 
545
			} else if (!isset($this->noms_precedents[$id])) {
592
			if (!isset($this->noms_precedents[$id])) {
546
				$infos = $this->traiterDiffAjout($nom);
593
				$infos = $this->traiterDiffAjout($nom);
547
			} else {
594
			} else {
548
				$nom_precedent = $this->noms_precedents[$id];
595
				$nom_precedent = $this->noms_precedents[$id];
549
				unset($this->noms_precedents[$id]);
596
				unset($this->noms_precedents[$id]);
550
				array_walk($nom_precedent, create_function('&$val', '$val = trim($val);')); 
597
				array_walk($nom_precedent, create_function('&$val', '$val = trim($val);')); 
Line 561... Line 608...
561
		
608
		
562
		return $diff;
609
		return $diff;
Line 563... Line 610...
563
	}
610
	}
564
	
611
	
565
	private function ecrireFichierDiffPartiel(&$contenu) {
612
	private function ecrireFichierDiffPartiel(&$contenu) {
Line 566... Line 613...
566
		$fichier_nom = $this->getBaseNomFichier().$this->manuel['ext_fichier_diff'];
613
		$fichier_nom = $this->getBaseNomFichier().$this->manuel['suffixe_diff'].$this->manuel['suffixe_partiel'].$this->manuel['ext_fichier'];
567
		$fichier_chemin = $this->zip_chemin_dossier_partiel.$fichier_nom;
614
		$fichier_chemin = $this->zip_chemin_dossier_partiel.$fichier_nom;
568
		
615
		
Line 584... Line 631...
584
		$this->ecrireFichierMeta($meta_tsv);
631
		$this->ecrireFichierMeta($meta_tsv);
585
		return $donnees;
632
		return $donnees;
586
	}
633
	}
Line 587... Line 634...
587
	
634
	
588
	private function ecrireFichierMeta(&$contenu) {
635
	private function ecrireFichierMeta(&$contenu) {
589
		$fichier_nom = $this->getBaseNomFichier().$this->manuel['ext_fichier_meta'];
636
		$fichier_nom = $this->getBaseNomFichier().$this->manuel['suffixe_meta'].$this->manuel['ext_fichier'];
Line 590... Line 637...
590
		$fichier_chemin = $this->zip_chemin_dossier.$fichier_nom;
637
		$fichier_chemin = $this->zip_chemin_dossier.$fichier_nom;
591
		
638
		
592
		if ($this->ecrireFichier($fichier_chemin, $contenu)) {
639
		if ($this->ecrireFichier($fichier_chemin, $contenu)) {
Line 602... Line 649...
602
		$meta_tsv_partiel =& $this->getVue('versionnage/squelettes/meta', &$donnees, '.tpl.tsv');
649
		$meta_tsv_partiel =& $this->getVue('versionnage/squelettes/meta', &$donnees, '.tpl.tsv');
603
		$this->ecrireFichierMetaPartiel($meta_tsv_partiel);
650
		$this->ecrireFichierMetaPartiel($meta_tsv_partiel);
604
	}
651
	}
Line 605... Line 652...
605
	
652
	
606
	private function ecrireFichierMetaPartiel(&$contenu) {
653
	private function ecrireFichierMetaPartiel(&$contenu) {
607
		$fichier_nom = $this->getBaseNomFichier().$this->manuel['ext_fichier_meta'];
654
		$fichier_nom = $this->getBaseNomFichier().$this->manuel['suffixe_meta'].$this->manuel['suffixe_partiel'].$this->manuel['ext_fichier'];
Line 608... Line 655...
608
		$fichier_chemin = $this->zip_chemin_dossier_partiel.$fichier_nom;
655
		$fichier_chemin = $this->zip_chemin_dossier_partiel.$fichier_nom;
609
		
656
		
610
		if ($this->ecrireFichier($fichier_chemin, $contenu)) {
657
		if ($this->ecrireFichier($fichier_chemin, $contenu)) {