Subversion Repositories eFlore/Projets.eflore-projets

Rev

Rev 598 | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
598 mathilde 1
<?php
2
/**
3
 *
4
 * regroupement de fonctions de vérification des fichiers de données .tsv qui créé des fichiers log
5
 * les classes qui vérifie des données pour des projets peuvent l'étendre
6
 * @author mathilde
7
 *
8
 */
9
abstract class VerificateurDonnees  {
10
 
11
	private $projet;
12
	private $Message;
13
	private $Conteneur;
14
 
15
	private $ligne_num; //numéro de la ligne parcourue
16
	private $log = ''; //texte du journal
17
	protected $colonne_valeur; //valeur d'une colonne
18
	protected $colonne_num; // numéro d'un colonne
19
	private $nb_erreurs = 0; // nombre total
20
	private $erreurs_ligne; // consigne les erreurs d'une ligne :  $erreurs_ligne[$num_col] = $valeur_erronnee
21
 
22
 
23
 
24
 
25
	public function __construct(Conteneur $conteneur, $projet) {
26
		$this->Conteneur = $conteneur;
27
		$this->Message = $this->Conteneur->getMessages();
28
		$this->projet = $projet;
29
	}
30
 
31
 
32
	/**
33
	 *
34
	 * fonction principale qui parcourt chaque ligne du fichier pour en vérifier la cohérence
35
	 * et déclenche l'écriture du fichier log
36
	 * @param chaine, nom du fichier de données à vérifier
37
	 */
38
	public function verifierFichier($fichierDonnees){
39
		$lignes = file($fichierDonnees, FILE_IGNORE_NEW_LINES);
40
		if ($lignes != false) {
41
			foreach ($lignes as $this->ligne_num => $ligne) {
42
				$this->verifierErreursLigne($ligne);
43
				$this->Message->afficherAvancement("Vérification des lignes");
44
			}
45
			echo "\n";
46
		} else {
47
			$this->Message->traiterErreur("Le fichier $fichierDonnees ne peut pas être ouvert.");
48
		}
49
 
50
		if ($this->nb_erreurs == 0) {
51
			$this->ajouterAuLog("Il n'y a pas d'erreurs.");
52
		}
53
		$this->Message->traiterInfo($this->nb_erreurs." erreurs");
54
 
55
		$this->ecrireFichierLog();
56
 
57
		return $this->nb_erreurs;
58
	}
59
 
60
 
61
	/**
62
	 *
63
	 * découpe une ligne en colonnes pour en vérifier le contenu
64
	 * @param chaine, une ligne du fichier
65
	 */
66
 
67
	private function verifierErreursLigne($ligne){
68
		$this->erreurs_ligne = array();
69
		$colonnes = explode("\t", $ligne);
70
		if (isset($colonnes)) {
71
			foreach ($colonnes as $this->colonne_num => $this->colonne_valeur) {
72
				$this->definirTraitementsColonnes();
73
			}
74
		} else {
75
			$message = "Ligne {$this->ligne_num} : pas de tabulation";
76
			$this->ajouterAuLog($message);
77
		}
78
 
79
		$this->consignerErreursLigne();
80
	}
81
 
82
 
83
	/**
84
	*
85
	* pour le traitement spécifique colonne par colonne
86
	*
87
	*/
88
 
89
	abstract protected function definirTraitementsColonnes();
90
 
91
	/**
92
	*
93
	* note dans le log s'il y a des erreurs dans une ligne
94
	*/
95
 
96
	private function consignerErreursLigne() {
97
		$nbreErreursLigne = count($this->erreurs_ligne);
98
		$this->nb_erreurs += $nbreErreursLigne;
99
		if ($nbreErreursLigne != 0) {
100
			$this->ajouterAuLog("Erreurs sur la ligne {$this->ligne_num}");
101
			$ligneLog = '';
102
			foreach ($this->erreurs_ligne as $cle => $v){
103
				$ligneLog .= "colonne $cle : $v - ";
104
			}
105
			$this->ajouterAuLog($ligneLog);
106
		}
107
	}
108
 
109
 
110
	/**
111
	 * garde la trace d'une erreur dans une ligne
112
	 *
113
	 */
114
 
115
	protected function noterErreur() {
116
		$this->erreurs_ligne[$this->colonne_num] = $this->colonne_valeur;
117
	}
118
 
119
 
120
 
121
 
122
	//+------------------------------------------------------------------------------------------------------+
123
	// Gestion du Log
124
 
125
	private function ajouterAuLog($txt) {
126
		$this->log .= "$txt\n";
127
	}
128
 
129
	private function ecrireFichierLog() {
130
		$base = Config::get('chemin_scripts');
131
		$fichierLog = $base.'/modules/'.$this->projet.'/log/verification.log';
132
		file_put_contents($fichierLog, $this->log);
133
	}
134
}
135
?>