Subversion Repositories eFlore/Projets.eflore-projets

Rev

Rev 370 | Rev 373 | Go to most recent revision | Only display areas with differences | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 370 Rev 372
1
<?php
1
<?php
2
/** Exemple lancement:
2
/** Exemple lancement:
3
 * /opt/lampp/bin/php -d memory_limit=3500M ~/web/eflore-projets/scripts/cli.php baseflor -a chargerTous
3
 * /opt/lampp/bin/php -d memory_limit=3500M ~/web/eflore-projets/scripts/cli.php baseflor -a chargerTous
4
*/
4
*/
5
class Baseflor extends EfloreScript {
5
class Baseflor extends EfloreScript {
6
	
6
	
7
	private $table = null;
7
	private $table = null;
8
	private $nb_erreurs; 
8
	private $nb_erreurs; 
9
	private $erreurs_ligne;
9
	private $erreurs_ligne;
10
	private $ligne_num;
10
	private $ligne_num;
11
	private $colonne_valeur;
11
	private $colonne_valeur;
12
	private $colonne_num;
12
	private $colonne_num;
13
	private $type_bio = array(
13
	private $type_bio = array(
14
		"A","a","B","b","C","c","Cfru","cfru","Csuf","csuf","Ccou","ccou","H","h","Heri",
14
		"A","a","B","b","C","c","Cfru","cfru","Csuf","csuf","Ccou","ccou","H","h","Heri",
15
		"heri","Hsto","hsto","Hces","hces","Hros","hros","Hrub","hrub","Hbis","hbis","G",
15
		"heri","Hsto","hsto","Hces","hces","Hros","hros","Hrub","hrub","Hbis","hbis","G",
16
		"g","Gbul","gbul","Gtub","gtub","Grhi","grhi","T","t","Tver","tver","Test","test");
16
		"g","Gbul","gbul","Gtub","gtub","Grhi","grhi","T","t","Tver","tver","Test","test");
17
	private $ss_type_bio = array("aqua", "lia", "épi", "hpar", "par", "suc", "semp", "cad", "car");
17
	private $ss_type_bio = array("aqua", "lia", "épi", "hpar", "par", "suc", "semp", "cad", "car");
18
	//les deux suivants basés sur valeurs trouvées (--> pas de légende !)
18
	//les deux suivants basés sur valeurs trouvées (--> pas de légende !)
19
	private $signes_seuls = array("?", "x", "x~", "x=","xb","xB","-"); 
19
	private $signes_seuls = array("?", "x", "x~", "x=","xb","xB","-"); 
20
	private $signes_nn_seuls = array("~", "=","b","B");
20
	private $signes_nn_seuls = array("~", "=","b","B");
21
	//paramètres pour lancement de fonctions sur colonnes
21
	//paramètres pour lancement de fonctions sur colonnes
22
	private $verifierIntervalle = array(23 => array(1,9), 24 => array(1,9), 25 => array(1,9),
22
	private $verifierIntervalle = array(23 => array(1,9), 24 => array(1,9), 25 => array(1,9),
23
		26 => array(1,9), 27 => array(1,12), 28 => array(1,9), 29 => array(1,9), 30 => array(0,9),
23
		26 => array(1,9), 27 => array(1,12), 28 => array(1,9), 29 => array(1,9), 30 => array(0,9),
24
		31 => array(1,9), 32 => array(1,9), 33 => array(1,9), 34 => array(1,9), 35 => array(1,9),
24
		31 => array(1,9), 32 => array(1,9), 33 => array(1,9), 34 => array(1,9), 35 => array(1,9),
25
		36 => array(1,12), 37 => array(1,9), 38 => array(1,9), 39 => array(0,9),);
25
		36 => array(1,12), 37 => array(1,9), 38 => array(1,9), 39 => array(0,9),);
26
	private $verifierColonnesBasiques = array(1 =>"/(^[0-9]*\/)|(inconnu)/", 2 => "/(^[AB]?[0-9]+$)|(^nc$)/",
26
	private $verifierColonnesBasiques = array(1 =>"/(^[0-9]*\/)|(inconnu)/", 2 => "/(^[AB]?[0-9]+$)|(^nc$)/",
27
		3 => "/(^[AB]?[0-9]+$)|(^nc$)/", 4 => "/[^0-9]+/", 5 => "/[^0-9]+/", 6 => "/[^0-9]+/", 7 => "/[^0-9]+/",
27
		3 => "/(^[AB]?[0-9]+$)|(^nc$)/", 4 => "/[^0-9]+/", 5 => "/[^0-9]+/", 6 => "/[^0-9]+/", 7 => "/[^0-9]+/",
28
		8 => "/[^0-9]+/", 9 => "/[^0-9]+/", 10 => "/[^0-9]+/", 11 => "/[^0-9]+/", 12 => "/[^0-9]+/",
28
		8 => "/[^0-9]+/", 9 => "/[^0-9]+/", 10 => "/[^0-9]+/", 11 => "/[^0-9]+/", 12 => "/[^0-9]+/",
29
		13 => "/[^0-9]+/", 14 => "/^([1-9]|1[0-2])(\-([1-9]|1[0-2]))*$/", 16 => "/[^0-9]+/", 19 => "/[^0-9]+/", 
29
		13 => "/[^0-9]+/", 14 => "/^([1-9]|1[0-2])(\-([1-9]|1[0-2]))*$/", 16 => "/[^0-9]+/", 19 => "/[^0-9]+/", 
30
		20 => "/[^0-9]+/", 21 => "/[^0-9]+/", 22 => "/[^0-9]+/",  40 => "/[^0-9]+/", 
30
		20 => "/[^0-9]+/", 21 => "/[^0-9]+/", 22 => "/[^0-9]+/",  40 => "/[^0-9]+/", 
31
		41 => "/[^0-9]+/", 42 => "/[^0-9]+/", 43 => "/[^0-9]+/", 44 => "/[^0-9]+/", 45 => "/[^0-9]+/", 
31
		41 => "/[^0-9]+/", 42 => "/[^0-9]+/", 43 => "/[^0-9]+/", 44 => "/[^0-9]+/", 45 => "/[^0-9]+/", 
32
		46 => "/[^0-9]+/", 47 => "/[^0-9]+/", 48 => "/[^0-9]+/", 49 => "/[^0-9]+/", 50 => "/[^0-9]+/", 
32
		46 => "/[^0-9]+/", 47 => "/[^0-9]+/", 48 => "/[^0-9]+/", 49 => "/[^0-9]+/", 50 => "/[^0-9]+/", 
33
		51 => "/[^0-9]+/", 52 => "/[^0-9]+/", 53 => "/[^0-9]+/", 54 => "/[^0-9]+/", 55 => "/[^0-9]+/"
33
		51 => "/[^0-9]+/", 52 => "/[^0-9]+/", 53 => "/[^0-9]+/", 54 => "/[^0-9]+/", 55 => "/[^0-9]+/"
34
		);
34
		);
35
 
35
 
36
	
36
	
37
	public function executer() {
37
	public function executer() {
38
		// Lancement de l'action demandée
38
		// Lancement de l'action demandée
39
		try {
39
		try {
40
			$this->initialiserProjet('baseflor');
40
			$this->initialiserProjet('baseflor');
41
			$cmd = $this->getParametre('a');
41
			$cmd = $this->getParametre('a');
42
		    switch ($cmd) {
42
		    switch ($cmd) {
43
		    	case 'chargerTous' :
43
		    	case 'chargerTous' :
44
		    		$this->supprimerTous();
44
		    		$this->supprimerTous();
45
		    		$this->chargerStructureSql();
45
		    		$this->chargerStructureSql();
46
		    		$this->chargerOntologies();
46
		    		$this->chargerOntologies();
47
		    		$this->verifFichier();
47
		    		$this->verifFichier();
48
	    			if ($this->$nb_erreurs == 0){
48
	    			if ($this->$nb_erreurs == 0){
49
	    			$this->chargerDonnees();
49
		    			$this->chargerDonnees();
-
 
50
		    			$This->genererChamps();
50
	    			} else {
51
	    			} else {
51
	    				echo "je ne peux pas charger les données car le fichier comporte des erreurs.\n";
52
	    				echo "je ne peux pas charger les données car le fichier comporte des erreurs. 
-
 
53
	    					Voir le fichier baseflor_verif.txt\n";
52
	    			}
54
	    			}
53
	    			$This->genererChamps();
-
 
54
		    		break;
55
	    			break;
55
	    		case 'chargerStructureSql' :
56
	    		case 'chargerStructureSql' :
56
	    			$this->chargerStructureSql();
57
	    			$this->chargerStructureSql();
57
	    			break;
58
	    			break;
58
	    		case 'chargerDonnees' :
59
	    		case 'chargerDonnees' :
59
	    			$this->verifFichier();
60
	    			$this->verifFichier();
60
	    			if($this->$nb_erreurs == 0){
61
	    			if($this->$nb_erreurs == 0){
61
	    				$this->chargerDonnees();
62
	    				$this->chargerDonnees();
62
	    			} else {
63
	    			} else {
63
	    				echo "je ne peux pas charger les données car le fichier comporte des erreurs.\n";
64
	    				echo "je ne peux pas charger les données car le fichier comporte des erreurs.
-
 
65
	    				Voir le fichier baseflor_verif.txt\n";
64
	    			}
66
	    			}
65
	    			break;
67
	    			break;
66
				case 'supprimerTous' :
68
				case 'supprimerTous' :
67
					$this->supprimerTous();
69
					$this->supprimerTous();
68
					break;
70
					break;
69
				case 'chargerOntologies' :
71
				case 'chargerOntologies' :
70
					$this->chargerOntologies();
72
					$this->chargerOntologies();
71
					break;
73
					break;
72
				case 'verifierDonnees' :
74
				case 'verifierDonnees' :
73
					 $this->verifFichier();
75
					 $this->verifFichier();
74
					 break;
76
					 break;
75
				case 'genererChamps' :
77
				case 'genererChamps' :
76
					 $this->genererChpsBDNT();
78
					 $this->genererChpsBDNT();
77
					 $this->genererChpsNumTaxon();
79
					 $this->genererChpsNumTaxon();
78
					 $this->genererChpsNumNomen();
80
					 $this->genererChpsNumNomen();
79
					 break;
81
					 break;
80
				default :
82
				default :
81
					throw new Exception("Erreur : la commande '$cmd' n'existe pas!");
83
					throw new Exception("Erreur : la commande '$cmd' n'existe pas!");
82
			}
84
			}
83
		} catch (Exception $e) {
85
		} catch (Exception $e) {
84
			$this->traiterErreur($e->getMessage());
86
			$this->traiterErreur($e->getMessage());
85
		}
87
		}
86
    }
88
    }
87
    
89
    
88
   //-- génération de champs --// 
90
   //-- génération de champs --// 
89
    private function genererChamps(){
91
    private function genererChamps(){
90
    	$this->genererChpsBDNT();
92
    	$this->genererChpsBDNT();
91
    	$this->genererChpsNumTaxon();
93
    	$this->genererChpsNumTaxon();
92
    	$this->genererChpsNumNomen();
94
    	$this->genererChpsNumNomen();
93
    }
95
    }
94
    
96
    
95
    private function genererChpsBDNT(){
97
    private function genererChpsBDNT(){
96
    	$this->initialiserGenerationChamps();
98
    	$this->initialiserGenerationChamps();
97
    	$this->preparerTablePrChpsBDNT();
99
    	$this->preparerTablePrChpsBDNT();
98
    	$resultats = $this->recupererTuplesNumsOriginels();
100
    	$resultats = $this->recupererTuplesNumsOriginels();
99
    	$bdnt = array();
101
    	$bdnt = array();
100
    	foreach ($resultats as $chps => $res) {
102
    	foreach ($resultats as $chps => $res) {
101
    		$cle = $res['cle'];
103
    		$cle = $res['cle'];
102
    		$nno = $res['num_nomen_originel'];
104
    		$nno = $res['num_nomen_originel'];
103
    		$nto = $res['num_taxon_originel'];
105
    		$nto = $res['num_taxon_originel'];
104
    		if ( (preg_match("/^([AB])[0-9]+$/", $nno, $retour)) || (preg_match("/^([AB])[0-9]+$/", $nto, $retour)) ){
106
    		if ( (preg_match("/^([AB])[0-9]+$/", $nno, $retour)) || (preg_match("/^([AB])[0-9]+$/", $nto, $retour)) ){
105
    			if($retour[1]=='A'){
107
    			if($retour[1]=='A'){
106
    				$bdnt[$cle]= "BDAFX";
108
    				$bdnt[$cle]= "BDAFX";
107
    			}else{
109
    			}else{
108
    				$bdnt[$cle]= "BDBFX";
110
    				$bdnt[$cle]= "BDBFX";
109
    			}
111
    			}
110
    			
112
    			
111
    		}elseif(($nno == 'nc') && ($nto == 'nc')){
113
    		}elseif(($nno == 'nc') && ($nto == 'nc')){
112
    			$bdnt[$cle]= "nc";
114
    			$bdnt[$cle]= "nc";
113
    		}else{
115
    		}else{
114
    			$bdnt[$cle]= "BDTFX";
116
    			$bdnt[$cle]= "BDTFX";
115
    		}
117
    		}
116
    		
118
    		
117
    	}
119
    	}
118
    	$this->remplirChamps($bdnt, "BDNT");
120
    	$this->remplirChamps($bdnt, "BDNT");
119
    }
121
    }
120
    
122
    
121
    private function genererChpsNumTaxon(){
123
    private function genererChpsNumTaxon(){
122
    	$this->initialiserGenerationChamps();
124
    	$this->initialiserGenerationChamps();
123
    	$this->preparerTablePrChpsNumTaxon();
125
    	$this->preparerTablePrChpsNumTaxon();
124
    	$resultats = $this->recupererTuplesNumsOriginels();
126
    	$resultats = $this->recupererTuplesNumsOriginels();
125
    	$num_taxon= array();
127
    	$num_taxon= array();
126
    	foreach ($resultats as $chps => $res) {
128
    	foreach ($resultats as $chps => $res) {
127
    		$cle = $res['cle'];
129
    		$cle = $res['cle'];
128
    	  	$nto = $res['num_taxon_originel'];
130
    	  	$nto = $res['num_taxon_originel'];
129
    		if  (preg_match("/^[AB]([0-9]+)$/", $nto, $retour)){
131
    		if  (preg_match("/^[AB]([0-9]+)$/", $nto, $retour)){
130
    			$num_taxon[$cle]= intval($retour[1]);
132
    			$num_taxon[$cle]= intval($retour[1]);
131
    		}elseif($nto == 'nc'){
133
    		}elseif($nto == 'nc'){
132
    			$num_taxon[$cle]= 0;
134
    			$num_taxon[$cle]= 0;
133
    		}else{
135
    		}else{
134
    			$num_taxon[$cle]= intval($nto);
136
    			$num_taxon[$cle]= intval($nto);
135
    		}
137
    		}
136
    
138
    
137
    	}
139
    	}
138
    	$this->remplirChamps($num_taxon, "num_taxon");
140
    	$this->remplirChamps($num_taxon, "num_taxon");
139
    }
141
    }
140
    
142
    
141
    private function genererChpsNumNomen(){
143
    private function genererChpsNumNomen(){
142
    	$this->initialiserGenerationChamps();
144
    	$this->initialiserGenerationChamps();
143
    	$this->preparerTablePrChpsNumNomen();
145
    	$this->preparerTablePrChpsNumNomen();
144
    	$resultats = $this->recupererTuplesNumsOriginels();
146
    	$resultats = $this->recupererTuplesNumsOriginels();
145
    	$num_nomen= array();
147
    	$num_nomen= array();
146
    	foreach ($resultats as $chps => $res) {
148
    	foreach ($resultats as $chps => $res) {
147
    		$cle = $res['cle'];
149
    		$cle = $res['cle'];
148
    		$nno = $res['num_nomen_originel'];
150
    		$nno = $res['num_nomen_originel'];
149
    		if  (preg_match("/^[AB]([0-9]+)$/", $nno, $retour)){
151
    		if  (preg_match("/^[AB]([0-9]+)$/", $nno, $retour)){
150
				$num_nomen[$cle]= intval($retour[1]);
152
				$num_nomen[$cle]= intval($retour[1]);
151
    		}elseif($nno == 'nc'){
153
    		}elseif($nno == 'nc'){
152
    			$num_nomen[$cle]= 0;
154
    			$num_nomen[$cle]= 0;
153
    		}else{
155
    		}else{
154
    			$num_nomen[$cle]=intval($nno);
156
    			$num_nomen[$cle]=intval($nno);
155
    		}
157
    		}
156
    	}
158
    	}
157
    	$this->remplirChamps($num_nomen, "num_nomen");
159
    	$this->remplirChamps($num_nomen, "num_nomen");
158
    }
160
    }
159
    
161
    
160
     private function remplirChamps($champs, $nom_colonne) {
162
     private function remplirChamps($champs, $nom_colonne) {
161
    	foreach ($champs as $cle => $val) {
163
    	foreach ($champs as $cle => $val) {
162
    		$val = $this->getBdd()->proteger($val);
164
    		$val = $this->getBdd()->proteger($val);
163
    		$requete = "UPDATE {$this->table} SET $nom_colonne = $val WHERE cle = $cle ";
165
    		$requete = "UPDATE {$this->table} SET $nom_colonne = $val WHERE cle = $cle ";
164
    		$resultat = $this->getBdd()->requeter($requete);
166
    		$resultat = $this->getBdd()->requeter($requete);
165
    		if ($resultat === false) {
167
    		if ($resultat === false) {
166
    			throw new Exception("Erreur d'insertion pour le tuple clé = ".$cle);
168
    			throw new Exception("Erreur d'insertion pour le tuple clé = ".$cle);
167
    		}
169
    		}
168
    		$this->afficherAvancement("Insertion des valeurs pour ".$nom_colonne." dans la base en cours");
170
    		$this->afficherAvancement("Insertion des valeurs pour ".$nom_colonne." dans la base en cours");
169
    	}
171
    	}
170
    	echo "\n";
172
    	echo "\n";
171
    }
173
    }
172
    
174
    
173
    
175
    
174
 
176
 
175
    
177
    
176
    private function initialiserGenerationChamps() {
178
    private function initialiserGenerationChamps() {
177
    	$this->table = Config::get('tables.donnees');
179
    	$this->table = Config::get('tables.donnees');
178
    }
180
    }
179
    
181
    
180
    private function preparerTablePrChpsBDNT() {
182
    private function preparerTablePrChpsBDNT() {
181
    	$requete = "SHOW COLUMNS FROM {$this->table} LIKE 'BDNT' ";
183
    	$requete = "SHOW COLUMNS FROM {$this->table} LIKE 'BDNT' ";
182
    	$resultat = $this->getBdd()->recuperer($requete);
184
    	$resultat = $this->getBdd()->recuperer($requete);
183
    	if ($resultat === false) {
185
    	if ($resultat === false) {
184
    		$requete = 	"ALTER TABLE {$this->table} ".
186
    		$requete = 	"ALTER TABLE {$this->table} ".
185
    				'ADD BDNT VARCHAR( 6 ) '.
187
    				'ADD BDNT VARCHAR( 6 ) '.
186
    				'CHARACTER SET utf8 COLLATE utf8_general_ci'.
188
    				'CHARACTER SET utf8 COLLATE utf8_general_ci'.
187
    				' NOT NULL AFTER catminat_code ';
189
    				' NOT NULL AFTER catminat_code ';
188
    		$this->getBdd()->requeter($requete);
190
    		$this->getBdd()->requeter($requete);
189
    	}
191
    	}
190
    }
192
    }
191
    
193
    
192
    private function preparerTablePrChpsNumTaxon() {
194
    private function preparerTablePrChpsNumTaxon() {
193
    	$requete = "SHOW COLUMNS FROM {$this->table} LIKE 'num_taxon' ";
195
    	$requete = "SHOW COLUMNS FROM {$this->table} LIKE 'num_taxon' ";
194
    	$resultat = $this->getBdd()->recuperer($requete);
196
    	$resultat = $this->getBdd()->recuperer($requete);
195
    	if ($resultat === false) {
197
    	if ($resultat === false) {
196
    		$requete = 	"ALTER TABLE {$this->table} ".
198
    		$requete = 	"ALTER TABLE {$this->table} ".
197
        				'ADD num_taxon INT( 10 ) NOT NULL'.
199
        				'ADD num_taxon INT( 10 ) NOT NULL'.
198
        				'BEFORE num_taxon_originel';
200
        				'BEFORE num_taxon_originel';
199
    		$this->getBdd()->requeter($requete);
201
    		$this->getBdd()->requeter($requete);
200
    	}
202
    	}
201
    }
203
    }
202
    
204
    
203
    private function preparerTablePrChpsNumNomen() {
205
    private function preparerTablePrChpsNumNomen() {
204
    	$requete = "SHOW COLUMNS FROM {$this->table} LIKE 'num_nomen' ";
206
    	$requete = "SHOW COLUMNS FROM {$this->table} LIKE 'num_nomen' ";
205
    	$resultat = $this->getBdd()->recuperer($requete);
207
    	$resultat = $this->getBdd()->recuperer($requete);
206
    	if ($resultat === false) {
208
    	if ($resultat === false) {
207
    		$requete = 	"ALTER TABLE {$this->table} ".
209
    		$requete = 	"ALTER TABLE {$this->table} ".
208
            				'ADD num_nomen INT( 10 ) NOT NULL'.
210
            				'ADD num_nomen INT( 10 ) NOT NULL'.
209
            				'BEFORE num_taxon_originel';
211
            				'BEFORE num_taxon_originel';
210
    		$this->getBdd()->requeter($requete);
212
    		$this->getBdd()->requeter($requete);
211
    	}
213
    	}
212
    }
214
    }
213
    private function recupererTuplesNumsOriginels(){
215
    private function recupererTuplesNumsOriginels(){
214
    	$requete = 'SELECT cle, num_taxon_originel, num_nomen_originel '.
216
    	$requete = 'SELECT cle, num_taxon_originel, num_nomen_originel '.
215
    					"FROM {$this->table} ";
217
    					"FROM {$this->table} ";
216
    	$resultat = $this->getBdd()->recupererTous($requete);
218
    	$resultat = $this->getBdd()->recupererTous($requete);
217
    	return $resultat;
219
    	return $resultat;
218
    }
220
    }
219
    
221
    
220
    //-- chargements, suppression, exécution  --//
222
    //-- chargements, suppression, exécution  --//
221
    
223
    
222
    private function chargerOntologies() {
224
    private function chargerOntologies() {
223
    	$chemin = Config::get('chemins.ontologies');
225
    	$chemin = Config::get('chemins.ontologies');
224
    	$table = Config::get('tables.ontologies');
226
    	$table = Config::get('tables.ontologies');
225
    	$requete = "LOAD DATA INFILE '$chemin' ".
227
    	$requete = "LOAD DATA INFILE '$chemin' ".
226
    			"REPLACE INTO TABLE $table ".
228
    			"REPLACE INTO TABLE $table ".
227
    			'CHARACTER SET utf8 '.
229
    			'CHARACTER SET utf8 '.
228
    			'FIELDS '.
230
    			'FIELDS '.
229
    			"	TERMINATED BY '\t' ".
231
    			"	TERMINATED BY '\t' ".
230
    			"	ENCLOSED BY '' ".
232
    			"	ENCLOSED BY '' ".
231
    			"	ESCAPED BY '\\\' "
233
    			"	ESCAPED BY '\\\' "
232
    			;
234
    			;
233
    	$this->getBdd()->requeter($requete);
235
    	$this->getBdd()->requeter($requete);
234
    }
236
    }
235
    
237
    
236
    protected function chargerStructureSql() {
238
    protected function chargerStructureSql() {
237
    	$contenuSql = $this->recupererContenu(Config::get('chemins.structureSql'));
239
    	$contenuSql = $this->recupererContenu(Config::get('chemins.structureSql'));
238
    	$this->executerScripSql($contenuSql);
240
    	$this->executerScripSql($contenuSql);
239
    }
241
    }
240
    
242
    
241
    
243
    
242
    protected function executerScripSql($sql) {
244
    protected function executerScripSql($sql) {
243
    	$requetes = Outils::extraireRequetes($sql);
245
    	$requetes = Outils::extraireRequetes($sql);
244
    	foreach ($requetes as $requete) {
246
    	foreach ($requetes as $requete) {
245
    		$this->getBdd()->requeter($requete);
247
    		$this->getBdd()->requeter($requete);
246
    	}
248
    	}
247
    }
249
    }
248
 
250
 
249
    private function chargerDonnees() {
251
    private function chargerDonnees() {
250
    	$table = Config::get('tables.donnees');
252
    	$table = Config::get('tables.donnees');
251
    	$requete = "LOAD DATA INFILE '".Config::get('chemins.donnees')."' ".
253
    	$requete = "LOAD DATA INFILE '".Config::get('chemins.donnees')."' ".
252
        				"REPLACE INTO TABLE $table ".
254
        				"REPLACE INTO TABLE $table ".
253
        				'CHARACTER SET utf8 '.
255
        				'CHARACTER SET utf8 '.
254
        				'FIELDS '.
256
        				'FIELDS '.
255
        				"	TERMINATED BY '\t' ".
257
        				"	TERMINATED BY '\t' ".
256
        				"	ENCLOSED BY '' ".
258
        				"	ENCLOSED BY '' ".
257
        				"	ESCAPED BY '\\\'";
259
        				"	ESCAPED BY '\\\'";
258
    	$this->getBdd()->requeter($requete);
260
    	$this->getBdd()->requeter($requete);
259
    }
261
    }
260
    
262
    
261
    private function supprimerTous() {
263
    private function supprimerTous() {
262
    	$requete = "DROP TABLE IF EXISTS baseflor_meta, baseflor_v2012_03_19";
264
    	$requete = "DROP TABLE IF EXISTS baseflor_meta, baseflor_v2012_03_19";
263
    	$this->getBdd()->requeter($requete);
265
    	$this->getBdd()->requeter($requete);
264
    }
266
    }
265
	
267
	
266
    
268
    
267
    //-- vérifications de données  --//
269
    //-- vérifications de données  --//
268
    
270
    
269
    private function verifierSiVide(){
271
    private function verifierSiVide(){
270
    	$bool=false;
272
    	$bool=false;
271
    	if ( $this->colonne_valeur  == "" ){
273
    	if ( $this->colonne_valeur  == "" ){
272
    		$bool=true;
274
    		$bool=true;
273
    	}
275
    	}
274
    	return $bool;
276
    	return $bool;
275
    }
277
    }
276
    
278
    
277
    
279
    
278
    private function verifierIntervallesTous($valeur){
280
    private function verifierIntervallesTous($valeur){
279
    	$intervalle=$this->verifierIntervalle[$this->colonne_num];
281
    	$intervalle=$this->verifierIntervalle[$this->colonne_num];
280
      	$this->verifierIntervalleChiffres($intervalle[0], $intervalle[1],$valeur);
282
      	$this->verifierIntervalleChiffres($intervalle[0], $intervalle[1],$valeur);
281
    }
283
    }
282
    
284
    
283
 
285
 
284
    private function verifierIntervalleChiffres($mini, $max, $valeur){
286
    private function verifierIntervalleChiffres($mini, $max, $valeur){
285
    	 if (( ($valeur < $mini) || ($valeur > $max) ) && ($valeur != "")){
287
    	 if (( ($valeur < $mini) || ($valeur > $max) ) && ($valeur != "")){
286
    		$this->erreurs_ligne[$this->colonne_num] = $this->colonne_valeur;
288
    		$this->erreurs_ligne[$this->colonne_num] = $this->colonne_valeur;
287
   			$this->nb_erreurs++;
289
   			$this->nb_erreurs++;
288
    	}
290
    	}
289
    	
291
    	
290
    }
292
    }
291
 
293
 
292
  
294
  
293
    private function verifierValeursIndic(){
295
    private function verifierValeursIndic(){
294
    	if (( preg_match("/^([^0-9])*([0-9]+)([^0-9])*$/", $this->colonne_valeur,$retour) == 1  )){
296
    	if (( preg_match("/^([^0-9])*([0-9]+)([^0-9])*$/", $this->colonne_valeur,$retour) == 1  )){
295
    		$this->verifierIntervallesTous($retour[2]);
297
    		$this->verifierIntervallesTous($retour[2]);
296
    		if((isset($retour[3]))&&(!(in_array($retour[3], $this->signes_nn_seuls))) ){
298
    		if((isset($retour[3]))&&(!(in_array($retour[3], $this->signes_nn_seuls))) ){
297
    			$this->erreurs_ligne[$this->colonne_num] =$this->colonne_valeur;
299
    			$this->erreurs_ligne[$this->colonne_num] =$this->colonne_valeur;
298
    			$this->nb_erreurs++;
300
    			$this->nb_erreurs++;
299
    		}	
301
    		}	
300
    		if(($retour[1] != "-")&&($retour[1]!="") ){
302
    		if(($retour[1] != "-")&&($retour[1]!="") ){
301
    			$this->erreurs_ligne[$this->colonne_num] =$this->colonne_valeur;
303
    			$this->erreurs_ligne[$this->colonne_num] =$this->colonne_valeur;
302
    			$this->nb_erreurs++;
304
    			$this->nb_erreurs++;
303
    			if($this->ligne_num==3){
305
    			if($this->ligne_num==3){
304
    			}
306
    			}
305
    		}	
307
    		}	
306
    	}elseif(!(in_array( $this->colonne_valeur, $this->signes_seuls))&& !($this->verifierSiVide())) {
308
    	}elseif(!(in_array( $this->colonne_valeur, $this->signes_seuls))&& !($this->verifierSiVide())) {
307
    			$this->erreurs_ligne[$this->colonne_num] = $this->colonne_valeur;
309
    			$this->erreurs_ligne[$this->colonne_num] = $this->colonne_valeur;
308
    			$this->nb_erreurs++;
310
    			$this->nb_erreurs++;
309
    		}
311
    		}
310
    }
312
    }
311
 
313
 
312
 private function verifierTypeBio(){
314
 private function verifierTypeBio(){
313
 	if (( preg_match("/(.+)\((.+)\)$/", $this->colonne_valeur,$retour) == 1  )){
315
 	if (( preg_match("/(.+)\((.+)\)$/", $this->colonne_valeur,$retour) == 1  )){
314
 		$this->verifType_SsType($retour[1]);
316
 		$this->verifType_SsType($retour[1]);
315
 		$this->verifType_SsType($retour[2]);
317
 		$this->verifType_SsType($retour[2]);
316
 	}else{
318
 	}else{
317
 		$this->verifType_SsType($this->colonne_valeur);
319
 		$this->verifType_SsType($this->colonne_valeur);
318
 	}
320
 	}
319
 }
321
 }
320
 
322
 
321
    private function verifType_SsType($chaine_a_verif){
323
    private function verifType_SsType($chaine_a_verif){
322
    	//verifie type
324
    	//verifie type
323
    	if(( preg_match("/^([a-zA-Zé]+)\-(.+)$|^([a-zA-Zé]+[^\-])$/", $chaine_a_verif, $retour) == 1  )){
325
    	if(( preg_match("/^([a-zA-Zé]+)\-(.+)$|^([a-zA-Zé]+[^\-])$/", $chaine_a_verif, $retour) == 1  )){
324
    		$type=$retour[1];
326
    		$type=$retour[1];
325
    		if(isset($retour[3])){
327
    		if(isset($retour[3])){
326
    			$type=$retour[3];
328
    			$type=$retour[3];
327
    		}
329
    		}
328
    		 if(!(in_array($type, $this->type_bio))) {
330
    		 if(!(in_array($type, $this->type_bio))) {
329
    			$this->erreurs_ligne[$this->colonne_num] = $this->colonne_valeur;
331
    			$this->erreurs_ligne[$this->colonne_num] = $this->colonne_valeur;
330
    			$this->nb_erreurs++;
332
    			$this->nb_erreurs++;
331
    		}
333
    		}
332
    		//verifie sous_type(s)
334
    		//verifie sous_type(s)
333
    		if ($retour[2]!=""){
335
    		if ($retour[2]!=""){
334
    			$ss_type[0]=$retour[2];
336
    			$ss_type[0]=$retour[2];
335
    			if (( preg_match("/\-/", $ss_type[0])) == 1 ){
337
    			if (( preg_match("/\-/", $ss_type[0])) == 1 ){
336
    				$ss_type = preg_split("/\-/", $retour[2]);
338
    				$ss_type = preg_split("/\-/", $retour[2]);
337
    			}
339
    			}
338
    			foreach($ss_type as $sst){
340
    			foreach($ss_type as $sst){
339
    				if(!(in_array($sst, $this->ss_type_bio))) {
341
    				if(!(in_array($sst, $this->ss_type_bio))) {
340
    					$this->erreurs_ligne[$this->colonne_num] = $this->colonne_valeur;
342
    					$this->erreurs_ligne[$this->colonne_num] = $this->colonne_valeur;
341
    					$this->nb_erreurs++;
343
    					$this->nb_erreurs++;
342
    				}
344
    				}
343
    			}
345
    			}
344
    		}
346
    		}
345
    	}
347
    	}
346
    }
348
    }
347
 
349
 
348
    private function verifierColonne($chaine){
350
    private function verifierColonne($chaine){
349
    	if ( ( preg_match($chaine, $this->colonne_valeur) == 0 ) && !($this->verifierSiVide()) ){
351
    	if ( ( preg_match($chaine, $this->colonne_valeur) == 0 ) && !($this->verifierSiVide()) ){
350
    		$this->erreurs_ligne[$this->colonne_num]=$this->colonne_valeur;
352
    		$this->erreurs_ligne[$this->colonne_num]=$this->colonne_valeur;
351
    		$this->nb_erreurs++;
353
    		$this->nb_erreurs++;
352
    	}
354
    	}
353
    }
355
    }
354
    
356
    
355
    //vérifie par colonnes les erreurs d'une ligne 
357
    //vérifie par colonnes les erreurs d'une ligne 
356
   private function verifErreursLignes($colonne_array){
358
   private function verifErreursLignes($colonne_array){
357
   	$this->erreurs_ligne=array();
359
   	$this->erreurs_ligne=array();
358
     for ($this->colonne_num = 0; $this->colonne_num < count($colonne_array); $this->colonne_num++){
360
     for ($this->colonne_num = 0; $this->colonne_num < count($colonne_array); $this->colonne_num++){
359
     	 if ( isset($colonne_array) ){
361
     	 if ( isset($colonne_array) ){
360
     	 	$this->colonne_valeur = $colonne_array[$this->colonne_num];
362
     	 	$this->colonne_valeur = $colonne_array[$this->colonne_num];
361
   			if ( (( ($this->colonne_num > 0) && ($this->colonne_num < 15) ) || ( $this->colonne_num == 16 )  
363
   			if ( (( ($this->colonne_num > 0) && ($this->colonne_num < 15) ) || ( $this->colonne_num == 16 )  
362
   				|| (($this->colonne_num > 18 ) && ( $this->colonne_num < 23 ) ) 
364
   				|| (($this->colonne_num > 18 ) && ( $this->colonne_num < 23 ) ) 
363
   				||  ( $this->colonne_num > 39 ))  ){
365
   				||  ( $this->colonne_num > 39 ))  ){
364
   				$motif = $this->verifierColonnesBasiques[$this->colonne_num];
366
   				$motif = $this->verifierColonnesBasiques[$this->colonne_num];
365
   			  	$this->verifierColonne($motif);
367
   			  	$this->verifierColonne($motif);
366
   			}elseif ( $this->colonne_num == 15 ){
368
   			}elseif ( $this->colonne_num == 15 ){
367
   				$this->verifierTypeBio();
369
   				$this->verifierTypeBio();
368
   			} elseif (($this->colonne_num > 22 ) && ( $this->colonne_num < 33 )){
370
   			} elseif (($this->colonne_num > 22 ) && ( $this->colonne_num < 33 )){
369
   				$this->verifierIntervallesTous($this->colonne_valeur);   				
371
   				$this->verifierIntervallesTous($this->colonne_valeur);   				
370
   			}elseif (( $this->colonne_num > 32) && ( $this->colonne_num < 41)){
372
   			}elseif (( $this->colonne_num > 32) && ( $this->colonne_num < 41)){
371
   				  $this->verifierValeursIndic();
373
   				  $this->verifierValeursIndic();
372
   			}
374
   			}
373
   		} else {
375
   		} else {
374
   			echo "ligne ".$this->ligne_num.": pas de tabulation  \n ";
376
   			echo "ligne ".$this->ligne_num.": pas de tabulation  \n ";
375
   		}	
377
   		}	
376
   }
378
   }
377
   
379
   
378
}
380
}
379
    
381
    
380
    //verifie la cohérence des valeurs des colonnes 
382
    //verifie la cohérence des valeurs des colonnes 
381
    private function verifFichier(){
383
    private function verifFichier(){
382
    	$dernier_nb_erreur =0;
384
    	$dernier_nb_erreur =0;
383
    	unlink(Config::get('chemins.donnees_verif'));
385
    	unlink(Config::get('chemins.donnees_verif'));
384
    	$fichier = fopen(Config::get('chemins.donnees'), "r");
386
    	$fichier = fopen(Config::get('chemins.donnees'), "r");
385
    	$fichier2 = fopen(Config::get('chemins.donnees_verif'), "w");
387
    	$fichier2 = fopen(Config::get('chemins.donnees_verif'), "w");
386
    	$this->valeurs=array();
388
    	$this->valeurs=array();
387
    	$this->nb_erreurs=0;
389
    	$this->nb_erreurs=0;
388
    	if ( ($fichier != false) && ($fichier2 != false) ){
390
    	if ( ($fichier != false) && ($fichier2 != false) ){
389
    		$this->ligne_num=1;
391
    		$this->ligne_num=1;
390
    		while ( !feof($fichier) ) {
392
    		while ( !feof($fichier) ) {
391
    			if ($this->ligne_num == 1){
393
    			if ($this->ligne_num == 1){
392
    				fputs($fichier2," !!! REGARDEZ LES COLONNES DANS NUMERO_COLONNES_IMPORTANT.TXT.\n");
394
    				fputs($fichier2," !!! REGARDEZ LES COLONNES DANS NUMERO_COLONNES_IMPORTANT.TXT.\n");
393
    			}
395
    			}
394
    			$this->ligne_num++;
396
    			$this->ligne_num++;
395
    			$ligne = fgets($fichier);
397
    			$ligne = fgets($fichier);
396
    			$col = preg_split("/	/", $ligne);
398
    			$col = preg_split("/	/", $ligne);
397
    			$this->verifErreursLignes($col);
399
    			$this->verifErreursLignes($col);
398
    			//rédaction du fichier de vérif
400
    			//rédaction du fichier de vérif
399
    			if(count($this->nb_erreurs)!= 0){
401
    			if(count($this->nb_erreurs)!= 0){
400
    				if($dernier_nb_erreur != $this->nb_erreurs){
402
    				if($dernier_nb_erreur != $this->nb_erreurs){
401
    					$dernier_nb_erreur = $this->nb_erreurs;
403
    					$dernier_nb_erreur = $this->nb_erreurs;
402
    					fputs($fichier2," \n erreurs sur la ligne".$this->ligne_num."\n");
404
    					fputs($fichier2," \n erreurs sur la ligne".$this->ligne_num."\n");
403
    					foreach ($this->erreurs_ligne as $cle => $v){
405
    					foreach ($this->erreurs_ligne as $cle => $v){
404
    						fputs($fichier2,"colonne ".$cle." : ".$v." - ");
406
    						fputs($fichier2,"colonne ".$cle." : ".$v." - ");
405
    					}
407
    					}
406
    				}
408
    				}
407
    			} 
409
    			} 
408
    		}  
410
    		}  
409
    	}
411
    	}
410
    	if ($this->nb_erreurs == 0){
412
    	if ($this->nb_erreurs == 0){
411
    		fputs($fichier2,"/n il n'y a pas d'erreurs./n");
413
    		fputs($fichier2,"/n il n'y a pas d'erreurs./n");
412
    	}
414
    	}
413
    	echo $this->nb_erreurs."erreurs";
415
    	echo $this->nb_erreurs."erreurs";
414
    	fclose($fichier);
416
    	fclose($fichier);
415
    	fclose($fichier2);
417
    	fclose($fichier2);
416
    }
418
    }
417
 
419
 
418
 
420
 
419
    
421
    
420
}
422
}
421
 
423
 
422
?>
424
?>