Subversion Repositories eFlore/Projets.eflore-projets

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
602 mathilde 1
<?php
2
 
3
class BaseflorVerif extends VerificateurDonnees {
4
 
5
 
6
	private $type_bio = array();
7
	private $ss_type_bio = array();
8
	private $signes_seuls = array();// basés sur valeurs trouvées (--> pas de légende !)
9
	private $signes_nn_seuls = array();// basés sur valeurs trouvées (--> pas de légende !)
10
	private $intervalles = array();
11
	private $motifs = array();
12
 
13
 
14
	//obligatoire
15
	public function definirTraitementsColonnes() {
16
		$this->initialiserParametresVerif() ;
17
		if (( $this->colonne_num > 0 && $this->colonne_num < 15 )
18
		|| $this->colonne_num == 16
19
		|| ($this->colonne_num > 18 && $this->colonne_num < 23)
20
		|| $this->colonne_num > 39) {
21
			$this->verifierColonne();
22
		} elseif ($this->colonne_num == 15) {
23
			$this->verifierTypeBio();
24
		} elseif ($this->colonne_num >= 23 && $this->colonne_num <= 32) {
25
			$this->verifierIntervalles($this->colonne_valeur);
26
		} elseif ($this->colonne_num >= 33 && $this->colonne_num < 41) {
27
			$this->verifierValeursIndic();
28
		}
29
	}
30
 
31
 
32
 
33
	private function initialiserParametresVerif() {
34
		$this->type_bio = $this->getParametreTableau('Parametres.typesBio');
35
		$this->ss_type_bio = $this->getParametreTableau('Parametres.sousTypesBio');
36
		$this->signes_seuls = $this->getParametreTableau('Parametres.signesSeuls');
37
		$this->signes_nn_seuls = $this->getParametreTableau('Parametres.signesNonSeuls');
38
		$this->intervalles = $this->inverserTableau($this->getParametreTableau('Parametres.intervalles'));
39
		$this->motifs = $this->inverserTableau($this->getParametreTableau('Parametres.motifs'));
40
 
41
	}
42
 
43
	//++---------------------------------traitements des colonnes baseflor------------------------------------++
44
 
45
 
46
	private function verifierColonne(){
47
		$motif = $this->motifs[$this->colonne_num];
48
		if (preg_match($motif, $this->colonne_valeur) == 0 && $this->verifierSiVide() == false){
49
			$this->erreurs_ligne[$this->colonne_num] = $this->colonne_valeur;
50
		}
51
	}
52
 
53
	private function verifierSiVide(){
54
		$vide = ($this->colonne_valeur  == '') ? true : false;
55
		return $vide;
56
	}
57
 
58
	private function verifierTypeBio(){
59
		if (preg_match("/(.+)\((.+)\)$/", $this->colonne_valeur, $retour) == 1) {
60
			$this->verifierTypeEtSsType($retour[1]);
61
			$this->verifierTypeEtSsType($retour[2]);
62
		} else {
63
			$this->verifierTypeEtSsType($this->colonne_valeur);
64
		}
65
	}
66
 
67
	private function verifierTypeEtSsType($chaine_a_verif){
68
		if (preg_match("/^([a-zA-Zé]+)\-(.+)$|^([a-zA-Zé]+[^\-])$/", $chaine_a_verif, $retour) == 1) {
69
			$type = (isset($retour[3])) ? $retour[3] : $retour[1];
70
			$this->verifierType($type);
71
 
72
			$sousType = $retour[2];
73
			$this->verifierSousType($sousType);
74
		}
75
	}
76
 
77
	private function verifierType($type) {
78
		if (in_array($type, $this->type_bio) == false) {
79
			$this->erreurs_ligne[$this->colonne_num] = $this->colonne_valeur;
80
		}
81
	}
82
 
83
	private function verifierSousType($sousType) {
84
		if ($sousType != ''){
85
			$ss_type = explode('-', $sousType);
86
			foreach ($ss_type as $sst) {
87
				if (in_array($sst, $this->ss_type_bio) == false) {
88
					$this->erreurs_ligne[$this->colonne_num] = $this->colonne_valeur;
89
				}
90
			}
91
		}
92
	}
93
 
94
	private function verifierIntervalles($valeur){
95
		if ($valeur != '') {
96
			list($min, $max) = explode('-', $this->intervalles[$this->colonne_num]);
97
			if ($valeur < $min || $valeur > $max){
98
				$this->erreurs_ligne[$this->colonne_num] = $this->colonne_valeur;
99
			}
100
		}
101
	}
102
 
103
	private function verifierValeursIndic(){
104
		if (preg_match("/^([^0-9])*([0-9]+)([^0-9])*$/", $this->colonne_valeur, $retour) == 1){
105
			$this->verifierIntervalles($retour[2]);
106
			if (isset($retour[3]) && in_array($retour[3], $this->signes_nn_seuls) == false){
107
				$this->erreurs_ligne[$this->colonne_num] = $this->colonne_valeur;
108
			}
109
			if ($retour[1] != '-' && $retour[1] != ''){
110
				$this->erreurs_ligne[$this->colonne_num] = $this->colonne_valeur;
111
			}
112
		} elseif (in_array( $this->colonne_valeur, $this->signes_seuls) == false && $this->verifierSiVide() == false) {
113
			$this->erreurs_ligne[$this->colonne_num] = $this->colonne_valeur;
114
		}
115
	}
116
 
117
	/*--------------------------------------------OUtils-------------------------------------------*/
118
 
119
	private function getParametreTableau($cle) {
120
		$tableau = array();
121
		$parametre = Config::get($cle);
122
		if (empty($parametre) === false) {
123
			$tableauPartiel = explode(',', $parametre);
124
			$tableauPartiel = array_map('trim', $tableauPartiel);
125
			foreach ($tableauPartiel as $champ) {
126
				if (strpos($champ, '=') !== false && strlen($champ) >= 3) {
127
					list($cle, $val) = explode('=', $champ);
128
					$tableau[trim($cle)] = trim($val);
129
				} else {
130
					$tableau[] = trim($champ);
131
				}
132
			}
133
		}
134
		return $tableau;
135
	}
136
 
137
	private function inverserTableau($tableau) {
138
		$inverse = array();
139
		foreach ($tableau as $cle => $valeurs) {
140
			$valeurs = explode(';', $valeurs);
141
			foreach ($valeurs as $valeur) {
142
				$inverse[$valeur] = $cle;
143
			}
144
		}
145
		return $inverse;
146
	}
147
}
148
 
149
?>