Subversion Repositories Applications.referentiel

Rev

Rev 164 | Rev 167 | Go to most recent revision | Only display areas with differences | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 164 Rev 165
1
<?php
1
<?php
2
// Encodage : UTF-8
2
// Encodage : UTF-8
3
// +-------------------------------------------------------------------------------------------------------------------+
3
// +-------------------------------------------------------------------------------------------------------------------+
4
/**
4
/**
5
* Tests de référentiels de nomenclature et taxonomie
5
* Tests de référentiels de nomenclature et taxonomie
6
*
6
*
7
* Description : classe permettant de tester les référentiels selon le manuel technique
7
* Description : classe permettant de tester les référentiels selon le manuel technique
8
* Utilisation : php script.php tests -p bdnff -a tout
8
* Utilisation : php script.php tests -p bdnff -a tout
9
*
9
*
10
//Auteur original :
10
//Auteur original :
11
* @author       Jean-Pascal MILCENT <jpm@tela-botanica.org>
11
* @author       Jean-Pascal MILCENT <jpm@tela-botanica.org>
12
* @copyright	Tela-Botanica 1999-2010
12
* @copyright	Tela-Botanica 1999-2010
13
* @link			http://www.tela-botanica.org/wikini/RTaxMethodo/wakka.php?wiki=MaNuel
13
* @link			http://www.tela-botanica.org/wikini/RTaxMethodo/wakka.php?wiki=MaNuel
14
* @licence		GPL v3 & CeCILL v2
14
* @licence		GPL v3 & CeCILL v2
15
* @version		$Id$
15
* @version		$Id$
16
*/
16
*/
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 Tests extends ScriptCommande {
19
class Tests extends ScriptCommande {
20
	
20
	
21
	const SCRIPT_NOM = 'tests';
21
	const SCRIPT_NOM = 'tests';
22
	
22
	
23
	private $projet = null;
23
	private $projet = null;
24
	private $traitement = null;
24
	private $traitement = null;
25
	
25
	
26
	private $manuel = null;
26
	private $manuel = null;
27
	private $noms = null;
27
	private $noms = null;
28
	
28
	
29
	private $resultatDao = null;
29
	private $resultatDao = null;
30
	private $traitementDao = null;
30
	private $traitementDao = null;
31
	private $tableStructureDao = null;
31
	private $tableStructureDao = null;
32
	private $referentielDao = null;
32
	private $referentielDao = null;
33
	
33
	
34
	public function executer() {
34
	public function executer() {
35
		$this->manuel = parse_ini_file(Config::get('chemin_appli').DS.'..'.DS.'configurations'.DS.'referentiel_v4.1.ini');
35
		$this->manuel = parse_ini_file(Config::get('chemin_appli').DS.'..'.DS.'configurations'.DS.'referentiel_v4.1.ini');
36
		
36
		
37
		$this->resultatDao = new ResultatDao();
37
		$this->resultatDao = new ResultatDao();
38
		$this->traitementDao = new TraitementDao();
38
		$this->traitementDao = new TraitementDao();
39
		Debug::printr('Dans le script test');
39
		Debug::printr('Dans le script test');
40
		// Récupération du dernier traitement demandé
40
		// Récupération du dernier traitement demandé
41
		$this->traitement = $this->traitementDao->getDernierTraitement('tout', self::SCRIPT_NOM);
41
		$this->traitement = $this->traitementDao->getDernierTraitement('tout', self::SCRIPT_NOM);
42
		if (isset($this->traitement)) {
42
		if (isset($this->traitement)) {
43
			$this->projet = $this->traitement['referentiel_code']; // Récupération du nom de projet
43
			$this->projet = $this->traitement['referentiel_code']; // Récupération du nom de projet
44
			Debug::printr($this->traitement);
44
			Debug::printr($this->traitement);
45
			// Écriture de la date de début du traitement
45
			// Écriture de la date de début du traitement
46
			Debug::printr('Debute:'.$this->traitementDao->debuterTraitement($this->traitement['id_traitement']));
46
			Debug::printr('Debute:'.$this->traitementDao->debuterTraitement($this->traitement['id_traitement']));
47
			
47
			
48
			// Nettoyage des traitements obsolètes
48
			// Nettoyage des traitements obsolètes
49
			$traitements_obsoletes = $this->traitementDao->getTraitementsObsoletes($this->projet, self::SCRIPT_NOM);
49
			$traitements_obsoletes = $this->traitementDao->getTraitementsObsoletes($this->projet, self::SCRIPT_NOM);
50
			if (isset($traitements_obsoletes)) {
50
			if (isset($traitements_obsoletes)) {
51
				Debug::printr('Supp. obsoletes:'.$this->traitementDao->supprimer($traitements_obsoletes));
51
				Debug::printr('Supp. obsoletes:'.$this->traitementDao->supprimer($traitements_obsoletes));
52
			}
52
			}
-
 
53
			
-
 
54
			$this->tableStructureDao = new TableStructureDao();
-
 
55
			$this->referentielDao = new ReferentielDao();
53
			
56
			
54
			// Lancement du test demandé
57
			// Lancement du test demandé
55
			$cmd = $this->getParam('a');
58
			$cmd = $this->getParam('a');
56
	    	switch ($cmd) {
59
	    	switch ($cmd) {
57
				case 'tout' :
60
				case 'tout' :
58
					$this->tableStructureDao = new TableStructureDao();
-
 
59
					$this->referentielDao = new ReferentielDao();
-
 
60
					Debug::printr('Départ lancement test:');
61
					Debug::printr('Départ lancement test:');
-
 
62
					$this->recupererDonnees();
61
					$this->lancerTests();
63
					$this->lancerTests();
62
					break;
64
					break;
-
 
65
				case 'test11' :
-
 
66
					$this->recupererDonnees();
-
 
67
					Debug::printr('Départ lancement test 11 :');
-
 
68
					$this->testerClassificationRang();
-
 
69
					break;
63
				default :
70
				default :
64
					$this->traiterErreur('Erreur : la commande "%s" n\'existe pas!', array($cmd));
71
					$this->traiterErreur('Erreur : la commande "%s" n\'existe pas!', array($cmd));
65
			}
72
			}
66
			// Écriture de la date de fin du traitement
73
			// Écriture de la date de fin du traitement
67
			Debug::printr('Termine:'.$this->traitementDao->terminerTraitement($this->traitement['id_traitement']));
74
			Debug::printr('Termine:'.$this->traitementDao->terminerTraitement($this->traitement['id_traitement']));
68
		} else {
75
		} else {
69
			Debug::printr("Aucun dernier traitement trouvé pour le script '".self::SCRIPT_NOM."' !");
76
			Debug::printr("Aucun dernier traitement trouvé pour le script '".self::SCRIPT_NOM."' !");
70
		}
77
		}
71
    }
78
    }
72
 
79
    
73
    public function lancerTests() {
-
 
74
		$donnees = array();
-
 
75
		$donnees['tests'] = array();
-
 
76
		
80
    public function recupererDonnees() {
77
		// Récupération des données à tester
81
		// Récupération des données à tester
78
		$colonnes = $this->tableStructureDao->getColonnes($this->projet);
82
		$colonnes = $this->tableStructureDao->getColonnes($this->projet);
79
		$analyses = $this->tableStructureDao->getAnalyse($this->projet);
83
		$analyses = $this->tableStructureDao->getAnalyse($this->projet);
80
		$this->noms = $this->referentielDao->getTout($this->projet);
84
		$this->noms = $this->referentielDao->getTout($this->projet);
81
		Debug::printr('Nbre noms :'.count($this->noms));
85
		Debug::printr('Nbre noms :'.count($this->noms));
-
 
86
    }
-
 
87
    
82
		
88
    public function lancerTests() {
83
		// Lancement des tests unitaires
89
		// Lancement des tests unitaires
84
		$resultats = array();
90
		$resultats = array();
85
		$resultats[] = $this->testerNombreDeChamps($colonnes);
91
		$resultats[] = $this->testerNombreDeChamps($colonnes);
86
		$resultats[] = $this->testerNomDesChamps($colonnes);
92
		$resultats[] = $this->testerNomDesChamps($colonnes);
87
		$resultats[] = $this->testerTypeDesChamps($colonnes);
93
		$resultats[] = $this->testerTypeDesChamps($colonnes);
88
		$resultats[] = $this->testerNumNomClePrimaire($colonnes);
94
		$resultats[] = $this->testerNumNomClePrimaire($colonnes);
89
		
95
		
90
		// Si la structure est bonne nous lançons les autres tests
96
		// Si la structure est bonne nous lançons les autres tests
91
		Debug::printr($resultats);
97
		Debug::printr($resultats);
92
		if ($this->verifierResultats($resultats)) {
98
		if ($this->verifierResultats($resultats)) {
93
			$this->testerTailleDesChamps($colonnes, $analyses);
99
			$this->testerTailleDesChamps($colonnes, $analyses);
94
			
100
			
95
			$this->testerNumNomSuperieurAZero();
101
			$this->testerNumNomSuperieurAZero();
96
			
102
			
97
			$this->testerNumNomRetenuSuperieurAZero();
103
			$this->testerNumNomRetenuSuperieurAZero();
98
			$this->testerNumTaxSupEgalZeroUnique();
104
			$this->testerNumTaxSupEgalZeroUnique();
99
			$this->testerTaxSupPourTaxon();
105
			$this->testerTaxSupPourTaxon();
100
			$this->testerExitenceTaxonSuperieur();
106
			$this->testerExitenceTaxonSuperieur();
101
			$this->testerClassificationRang();		
107
			$this->testerClassificationRang();	
102
			$this->testerClassification();
108
			$this->testerClassification();
103
			
109
			
104
			$this->testerRang();
110
			$this->testerRang();
105
			
111
			
106
			$this->testerNomCompletSupraGenerique();
112
			$this->testerNomCompletSupraGenerique();
107
			$this->testerNomCompletGenre();
113
			$this->testerNomCompletGenre();
108
			$this->testerNomCompletInfraGenre();
114
			$this->testerNomCompletInfraGenre();
109
			$this->testerNomCompletEspece();
115
			$this->testerNomCompletEspece();
110
			$this->testerNomCompletInfraSpecifique();
116
			$this->testerNomCompletInfraSpecifique();
111
	
117
	
112
			$this->testerNomSupraGeneriqueEspaces();
118
			$this->testerNomSupraGeneriqueEspaces();
113
			$this->testerNomSupraGeneriqueSyntaxe();
119
			$this->testerNomSupraGeneriqueSyntaxe();
114
			$this->testerNomSupraGeneriqueRang();
120
			$this->testerNomSupraGeneriqueRang();
115
			
121
			
116
			$this->testerGenreEspaces();
122
			$this->testerGenreEspaces();
117
			$this->testerGenreSyntaxe();
123
			$this->testerGenreSyntaxe();
118
			$this->testerGenreRang();
124
			$this->testerGenreRang();
119
			
125
			
120
			$this->testerEpitheteInfraGeneriqueEspaces();
126
			$this->testerEpitheteInfraGeneriqueEspaces();
121
			$this->testerEpitheteInfraGeneriqueSyntaxe();
127
			$this->testerEpitheteInfraGeneriqueSyntaxe();
122
			$this->testerEpitheteInfraGeneriqueRang();
128
			$this->testerEpitheteInfraGeneriqueRang();
123
			
129
			
124
			$this->testerEpitheteSpEspaces();
130
			$this->testerEpitheteSpEspaces();
125
			$this->testerEpitheteSpSyntaxe();
131
			$this->testerEpitheteSpSyntaxe();
126
			$this->testerEpitheteSpRang();
132
			$this->testerEpitheteSpRang();
127
			
133
			
128
			$this->testerTypeEpitheteEspaces();
134
			$this->testerTypeEpitheteEspaces();
129
			$this->testerTypeEpitheteSyntaxe();
135
			$this->testerTypeEpitheteSyntaxe();
130
			$this->testerTypeEpitheteHybridite();
136
			$this->testerTypeEpitheteHybridite();
131
			
137
			
132
			$this->testerEpitheteInfraSpEspaces();
138
			$this->testerEpitheteInfraSpEspaces();
133
			$this->testerEpitheteInfraSpSyntaxe();
139
			$this->testerEpitheteInfraSpSyntaxe();
134
			$this->testerEpitheteInfraSpRang();
140
			$this->testerEpitheteInfraSpRang();
135
			
141
			
136
			$this->testerGroupeCultivarSyntaxe();
142
			$this->testerGroupeCultivarSyntaxe();
137
			$this->testerGroupeCultivarRang();		
143
			$this->testerGroupeCultivarRang();		
138
			
144
			
139
			$this->testerCultivarSyntaxe();
145
			$this->testerCultivarSyntaxe();
140
			$this->testerCultivarRang();
146
			$this->testerCultivarRang();
141
			
147
			
142
			$this->testerNomCommercialSyntaxe();
148
			$this->testerNomCommercialSyntaxe();
143
			$this->testerNomCommercialPresenceCultivar();
149
			$this->testerNomCommercialPresenceCultivar();
144
			
150
			
145
			$this->testerAuteurSyntaxe();
151
			$this->testerAuteurSyntaxe();
146
			
152
			
147
			$this->testerAnneeSyntaxe();
153
			$this->testerAnneeSyntaxe();
148
			
154
			
149
			$this->testerBiblioOrigineSyntaxe();
155
			$this->testerBiblioOrigineSyntaxe();
150
			
156
			
151
			$this->testerHomonymieSyntaxe();
157
			$this->testerHomonymieSyntaxe();
152
			$this->testerHomonymieExistence();
158
			$this->testerHomonymieExistence();
153
			
159
			
154
			$this->testerBasionymeSyntaxe();
160
			$this->testerBasionymeSyntaxe();
155
			$this->testerBasionymeExistence();
161
			$this->testerBasionymeExistence();
156
			
162
			
157
			$this->testerSynonymeProparteSyntaxe();
163
			$this->testerSynonymeProparteSyntaxe();
158
			$this->testerSynonymeProparteExistence();
164
			$this->testerSynonymeProparteExistence();
159
			
165
			
160
			$this->testerSynonymeDouteuxSyntaxe();
166
			$this->testerSynonymeDouteuxSyntaxe();
161
			$this->testerSynonymeDouteuxNumNomRetenu();
167
			$this->testerSynonymeDouteuxNumNomRetenu();
162
			
168
			
163
			$this->testerSynonymeMalAppliqueSyntaxe();
169
			$this->testerSynonymeMalAppliqueSyntaxe();
164
			
170
			
165
			$this->testerSynonymeOrthographiqueSyntaxe();
171
			$this->testerSynonymeOrthographiqueSyntaxe();
166
			$this->testerSynonymeOrthographiqueExistence();
172
			$this->testerSynonymeOrthographiqueExistence();
167
			
173
			
168
			$this->testerHybrideParent01Syntaxe();
174
			$this->testerHybrideParent01Syntaxe();
169
			$this->testerHybrideParent01Existence();
175
			$this->testerHybrideParent01Existence();
170
			$this->testerHybrideParent02Syntaxe();
176
			$this->testerHybrideParent02Syntaxe();
171
			$this->testerHybrideParent02Existence();
177
			$this->testerHybrideParent02Existence();
172
			
178
			
173
			$this->testerPresenceSyntaxe();
179
			$this->testerPresenceSyntaxe();
174
			$this->testerStatutOrigineSyntaxe();
180
			$this->testerStatutOrigineSyntaxe();
175
			$this->testerStatutIntroductionSyntaxe();
181
			$this->testerStatutIntroductionSyntaxe();
176
			$this->testerStatutCultureSyntaxe();
182
			$this->testerStatutCultureSyntaxe();
177
			$this->testerExclureTaxRefSyntaxe();
183
			$this->testerExclureTaxRefSyntaxe();
178
		}
184
		}
179
	}
185
	}
180
	private function verifierResultats($resultats) {
186
	private function verifierResultats($resultats) {
181
		$ok = true;
187
		$ok = true;
182
		foreach ($resultats as $resultat) {
188
		foreach ($resultats as $resultat) {
183
			if ($resultat == '0') {
189
			if ($resultat == '0') {
184
				$ok = false;
190
				$ok = false;
185
				break;
191
				break;
186
			}
192
			}
187
		}
193
		}
188
		return $ok;
194
		return $ok;
189
	}
195
	}
190
	
196
	
191
	//+--------------------------------------------------------------------------------------------------------------+//
197
	//+--------------------------------------------------------------------------------------------------------------+//
192
	// Enregistrement des résultats
198
	// Enregistrement des résultats
193
	private function traiterResultatTest($info) {
199
	private function traiterResultatTest($info) {
194
		Debug::printr($info['nom']);
200
		Debug::printr($info['nom']);
195
		if (isset($info['message'])) {
201
		if (isset($info['message'])) {
196
			if (is_array($info['message'])) {
202
			if (is_array($info['message'])) {
197
				$info['message'] = $this->getVue('tests/squelettes/message_table', $info);
203
				$info['message'] = $this->getVue('tests/squelettes/message_table', $info);
198
			} else {
204
			} else {
199
				$info['message'] = $this->getVue('tests/squelettes/message_p', $info);
205
				$info['message'] = $this->getVue('tests/squelettes/message_p', $info);
200
			}
206
			}
201
		}
207
		}
202
		$this->resultatDao->ajouter($this->traitement['id_traitement'], $info);
208
		$this->resultatDao->ajouter($this->traitement['id_traitement'], $info);
203
		$info = null;
209
		$info = null;
204
	}
210
	}
205
	
211
	
206
	//+--------------------------------------------------------------------------------------------------------------+//
212
	//+--------------------------------------------------------------------------------------------------------------+//
207
	// TESTS
213
	// TESTS
208
	
214
	
209
	private function testerStatutCultureSyntaxe() {
215
	private function testerStatutCultureSyntaxe() {
210
		$info = array('nom' => 'statut_culture -> syntaxe',
216
		$info = array('nom' => 'statut_culture -> syntaxe',
211
			'description' => "Le champ statut_culture peut contenir :\n".
217
			'description' => "Le champ statut_culture peut contenir :\n".
212
								" - le symbole tiret «-» précédant une autre information non référencée...\n".
218
								" - le symbole tiret «-» précédant une autre information non référencée...\n".
213
								" - une première lettre en majuscule indiquant le code standard attribué à ce taxon,\n".
219
								" - une première lettre en majuscule indiquant le code standard attribué à ce taxon,\n".
214
								" - éventuellement suivie d'un tiret puis d'une deuxième lettre en majuscule indiquant ".
220
								" - éventuellement suivie d'un tiret puis d'une deuxième lettre en majuscule indiquant ".
215
								"un code de présence spécifique au référentiel.",
221
								"un code de présence spécifique au référentiel.",
216
			'resultat' => false);
222
			'resultat' => false);
217
		
223
		
218
		// Réalisation du test
224
		// Réalisation du test
219
		$noms_erreur = array();
225
		$noms_erreur = array();
220
		foreach ($this->noms as &$nom) {
226
		foreach ($this->noms as &$nom) {
221
			if ($nom['statut_culture'] != '') {
227
			if ($nom['statut_culture'] != '') {
222
				if (!$this->verifierStatutCulture($nom['statut_culture'])) {
228
				if (!$this->verifierStatutCulture($nom['statut_culture'])) {
223
					$noms_erreur[] = array($nom['num_nom'], $nom['statut_culture']);
229
					$noms_erreur[] = array($nom['num_nom'], $nom['statut_culture']);
224
				}
230
				}
225
			}
231
			}
226
		}
232
		}
227
		
233
		
228
		// Analyse des résultats
234
		// Analyse des résultats
229
		if (count($noms_erreur) > 0) {
235
		if (count($noms_erreur) > 0) {
230
			$info['message']['entete'] = array('num_nom', 'statut_culture erroné');
236
			$info['message']['entete'] = array('num_nom', 'statut_culture erroné');
231
			$info['message']['lignes'] = $noms_erreur;
237
			$info['message']['lignes'] = $noms_erreur;
232
		} else {
238
		} else {
233
			$info['resultat'] = true;
239
			$info['resultat'] = true;
234
		}
240
		}
235
		$noms_erreur = null;
241
		$noms_erreur = null;
236
		
242
		
237
		$this->traiterResultatTest($info);
243
		$this->traiterResultatTest($info);
238
	}
244
	}
239
	
245
	
240
	private function testerStatutIntroductionSyntaxe() {
246
	private function testerStatutIntroductionSyntaxe() {
241
		$info = array('nom' => 'statut_introduction -> syntaxe',
247
		$info = array('nom' => 'statut_introduction -> syntaxe',
242
			'description' => "Le champ statut_introduction peut contenir :\n".
248
			'description' => "Le champ statut_introduction peut contenir :\n".
243
								" - le symbole tiret «-» précédant une autre information non référencée...\n".
249
								" - le symbole tiret «-» précédant une autre information non référencée...\n".
244
								" - une première lettre en majuscule indiquant le code standard attribué à ce taxon,\n".
250
								" - une première lettre en majuscule indiquant le code standard attribué à ce taxon,\n".
245
								" - éventuellement suivie d'un tiret puis d'une deuxième lettre en majuscule indiquant ".
251
								" - éventuellement suivie d'un tiret puis d'une deuxième lettre en majuscule indiquant ".
246
								"un code de présence spécifique au référentiel.",
252
								"un code de présence spécifique au référentiel.",
247
			'resultat' => false);
253
			'resultat' => false);
248
		
254
		
249
		// Réalisation du test
255
		// Réalisation du test
250
		$noms_erreur = array();
256
		$noms_erreur = array();
251
		foreach ($this->noms as &$nom) {
257
		foreach ($this->noms as &$nom) {
252
			if ($nom['statut_introduction'] != '') {
258
			if ($nom['statut_introduction'] != '') {
253
				if (!$this->verifierStatutIntroduction($nom['statut_introduction'])) {
259
				if (!$this->verifierStatutIntroduction($nom['statut_introduction'])) {
254
					$noms_erreur[] = array($nom['num_nom'], $nom['statut_introduction']);
260
					$noms_erreur[] = array($nom['num_nom'], $nom['statut_introduction']);
255
				}
261
				}
256
			}
262
			}
257
		}
263
		}
258
		
264
		
259
		// Analyse des résultats
265
		// Analyse des résultats
260
		if (count($noms_erreur) > 0) {
266
		if (count($noms_erreur) > 0) {
261
			$info['message']['entete'] = array('num_nom', 'statut_introduction erroné');
267
			$info['message']['entete'] = array('num_nom', 'statut_introduction erroné');
262
			$info['message']['lignes'] = $noms_erreur;
268
			$info['message']['lignes'] = $noms_erreur;
263
		} else {
269
		} else {
264
			$info['resultat'] = true;
270
			$info['resultat'] = true;
265
		}
271
		}
266
		$noms_erreur = null;
272
		$noms_erreur = null;
267
		
273
		
268
		$this->traiterResultatTest($info);
274
		$this->traiterResultatTest($info);
269
	}
275
	}
270
	
276
	
271
	private function testerStatutOrigineSyntaxe() {
277
	private function testerStatutOrigineSyntaxe() {
272
		$info = array('nom' => 'statut_origine -> syntaxe',
278
		$info = array('nom' => 'statut_origine -> syntaxe',
273
			'description' => "Le champ statut_origine peut contenir :\n".
279
			'description' => "Le champ statut_origine peut contenir :\n".
274
								" - le symbole tiret «-» précédant une autre information non référencée...\n".
280
								" - le symbole tiret «-» précédant une autre information non référencée...\n".
275
								" - une première lettre en majuscule indiquant le code standard attribué à ce taxon.\n".
281
								" - une première lettre en majuscule indiquant le code standard attribué à ce taxon.\n".
276
								" - éventuellement suivie d'un tiret puis d'une deuxième lettre en majuscule indiquant ".
282
								" - éventuellement suivie d'un tiret puis d'une deuxième lettre en majuscule indiquant ".
277
								"un code de présence spécifique au référentiel.",
283
								"un code de présence spécifique au référentiel.",
278
			'resultat' => false);
284
			'resultat' => false);
279
		
285
		
280
		// Réalisation du test
286
		// Réalisation du test
281
		$noms_erreur = array();
287
		$noms_erreur = array();
282
		foreach ($this->noms as &$nom) {
288
		foreach ($this->noms as &$nom) {
283
			if ($nom['statut_origine'] != '') {
289
			if ($nom['statut_origine'] != '') {
284
				if (!$this->verifierStatutOrigine($nom['statut_origine'])) {
290
				if (!$this->verifierStatutOrigine($nom['statut_origine'])) {
285
					$noms_erreur[] = array($nom['num_nom'], $nom['statut_origine']);
291
					$noms_erreur[] = array($nom['num_nom'], $nom['statut_origine']);
286
				}
292
				}
287
			}
293
			}
288
		}
294
		}
289
		
295
		
290
		// Analyse des résultats
296
		// Analyse des résultats
291
		if (count($noms_erreur) > 0) {
297
		if (count($noms_erreur) > 0) {
292
			$info['message']['entete'] = array('num_nom', 'statut_origine erroné');
298
			$info['message']['entete'] = array('num_nom', 'statut_origine erroné');
293
			$info['message']['lignes'] = $noms_erreur;
299
			$info['message']['lignes'] = $noms_erreur;
294
		} else {
300
		} else {
295
			$info['resultat'] = true;
301
			$info['resultat'] = true;
296
		}
302
		}
297
		$noms_erreur = null;
303
		$noms_erreur = null;
298
		
304
		
299
		$this->traiterResultatTest($info);
305
		$this->traiterResultatTest($info);
300
	}
306
	}
301
	
307
	
302
	private function testerPresenceSyntaxe() {
308
	private function testerPresenceSyntaxe() {
303
		$info = array('nom' => 'presence -> syntaxe',
309
		$info = array('nom' => 'presence -> syntaxe',
304
			'description' => "Le champ presence contient soit :\n".
310
			'description' => "Le champ presence contient soit :\n".
305
								" - le symbole tiret «-» précédant une autre information non référencée...\n".
311
								" - le symbole tiret «-» précédant une autre information non référencée...\n".
306
								" - une première lettre en majuscule indiquant le code standard attribué à ce taxon,\n".
312
								" - une première lettre en majuscule indiquant le code standard attribué à ce taxon,\n".
307
								" - éventuellement suivie d'un tiret puis d'une deuxième lettre en majuscule indiquant ".
313
								" - éventuellement suivie d'un tiret puis d'une deuxième lettre en majuscule indiquant ".
308
								"un code de présence spécifique au référentiel.",
314
								"un code de présence spécifique au référentiel.",
309
			'resultat' => false);
315
			'resultat' => false);
310
		
316
		
311
		// Réalisation du test
317
		// Réalisation du test
312
		$noms_erreur = array();
318
		$noms_erreur = array();
313
		foreach ($this->noms as &$nom) {
319
		foreach ($this->noms as &$nom) {
314
			if ($nom['presence'] != '') {
320
			if ($nom['presence'] != '') {
315
				if (!$this->verifierPresence($nom['presence'])) {
321
				if (!$this->verifierPresence($nom['presence'])) {
316
					$noms_erreur[] = array($nom['num_nom'], $nom['presence']);
322
					$noms_erreur[] = array($nom['num_nom'], $nom['presence']);
317
				}
323
				}
318
			}
324
			}
319
		}
325
		}
320
		
326
		
321
		// Analyse des résultats
327
		// Analyse des résultats
322
		if (count($noms_erreur) > 0) {
328
		if (count($noms_erreur) > 0) {
323
			$info['message']['entete'] = array('num_nom', 'presence erroné');
329
			$info['message']['entete'] = array('num_nom', 'presence erroné');
324
			$info['message']['lignes'] = $noms_erreur;
330
			$info['message']['lignes'] = $noms_erreur;
325
		} else {
331
		} else {
326
			$info['resultat'] = true;
332
			$info['resultat'] = true;
327
		}
333
		}
328
		$noms_erreur = null;
334
		$noms_erreur = null;
329
		
335
		
330
		$this->traiterResultatTest($info);
336
		$this->traiterResultatTest($info);
331
	}
337
	}
332
	
338
	
333
	private function testerHybrideParent02Existence() {
339
	private function testerHybrideParent02Existence() {
334
		$info = array('nom' => 'hybride_parent_02 -> existence',
340
		$info = array('nom' => 'hybride_parent_02 -> existence',
335
			'description' => "Si le champ hybride_parent_02 contient un nombre alors il doit correspondre à une valeur ".
341
			'description' => "Si le champ hybride_parent_02 contient un nombre alors il doit correspondre à une valeur ".
336
								"du champ num_nom.",
342
								"du champ num_nom.",
337
			'resultat' => false);
343
			'resultat' => false);
338
		
344
		
339
		// Réalisation du test
345
		// Réalisation du test
340
		$noms_erreur = array();
346
		$noms_erreur = array();
341
		foreach ($this->noms as &$nom) {
347
		foreach ($this->noms as &$nom) {
342
			if ($nom['hybride_parent_02'] != '') {
348
			if ($nom['hybride_parent_02'] != '') {
343
				if (!isset($this->noms[$nom['hybride_parent_02']]) && $nom['hybride_parent_02'] != '0') {
349
				if (!isset($this->noms[$nom['hybride_parent_02']]) && $nom['hybride_parent_02'] != '0') {
344
					$noms_erreur[] = array($nom['num_nom'], $this->repererEspace($nom['hybride_parent_02']));
350
					$noms_erreur[] = array($nom['num_nom'], $this->repererEspace($nom['hybride_parent_02']));
345
				}
351
				}
346
			}
352
			}
347
		}
353
		}
348
		
354
		
349
		// Analyse des résultats
355
		// Analyse des résultats
350
		if (count($noms_erreur) > 0) {
356
		if (count($noms_erreur) > 0) {
351
			$info['message']['entete'] = array('num_nom', 'hybride_parent_02 introuvable');
357
			$info['message']['entete'] = array('num_nom', 'hybride_parent_02 introuvable');
352
			$info['message']['lignes'] = $noms_erreur;
358
			$info['message']['lignes'] = $noms_erreur;
353
		} else {
359
		} else {
354
			$info['resultat'] = true;
360
			$info['resultat'] = true;
355
		}
361
		}
356
		$noms_erreur = null;
362
		$noms_erreur = null;
357
		
363
		
358
		$this->traiterResultatTest($info);
364
		$this->traiterResultatTest($info);
359
	}
365
	}
360
	
366
	
361
	private function testerHybrideParent02Syntaxe() {
367
	private function testerHybrideParent02Syntaxe() {
362
		$info = array('nom' => 'hybride_parent_02 -> syntaxe',
368
		$info = array('nom' => 'hybride_parent_02 -> syntaxe',
363
			'description' => "Le champ hybride_parent_02 contient soit :\n".
369
			'description' => "Le champ hybride_parent_02 contient soit :\n".
364
								" - une valeur vide,\n".
370
								" - une valeur vide,\n".
365
								" - un nombre.",
371
								" - un nombre.",
366
			'resultat' => false);
372
			'resultat' => false);
367
		
373
		
368
		// Réalisation du test
374
		// Réalisation du test
369
		$noms_erreur = array();
375
		$noms_erreur = array();
370
		foreach ($this->noms as &$nom) {
376
		foreach ($this->noms as &$nom) {
371
			if ($nom['hybride_parent_02'] != '') {
377
			if ($nom['hybride_parent_02'] != '') {
372
				if (!$this->verifierNombre($nom['hybride_parent_02'])) {
378
				if (!$this->verifierNombre($nom['hybride_parent_02'])) {
373
					$noms_erreur[] = array($nom['num_nom'], $this->repererEspace($nom['hybride_parent_02']));
379
					$noms_erreur[] = array($nom['num_nom'], $this->repererEspace($nom['hybride_parent_02']));
374
				}
380
				}
375
			}
381
			}
376
		}
382
		}
377
		
383
		
378
		// Analyse des résultats
384
		// Analyse des résultats
379
		if (count($noms_erreur) > 0) {
385
		if (count($noms_erreur) > 0) {
380
			$info['message']['entete'] = array('num_nom', 'hybride_parent_02 erroné');
386
			$info['message']['entete'] = array('num_nom', 'hybride_parent_02 erroné');
381
			$info['message']['lignes'] = $noms_erreur;
387
			$info['message']['lignes'] = $noms_erreur;
382
		} else {
388
		} else {
383
			$info['resultat'] = true;
389
			$info['resultat'] = true;
384
		}
390
		}
385
		$noms_erreur = null;
391
		$noms_erreur = null;
386
		
392
		
387
		$this->traiterResultatTest($info);
393
		$this->traiterResultatTest($info);
388
	}
394
	}
389
	
395
	
390
	
396
	
391
	private function testerHybrideParent01Existence() {
397
	private function testerHybrideParent01Existence() {
392
		$info = array('nom' => 'hybride_parent_01 -> existence',
398
		$info = array('nom' => 'hybride_parent_01 -> existence',
393
			'description' => "Si le champ hybride_parent_01 contient un nombre alors il doit correspondre à une valeur ".
399
			'description' => "Si le champ hybride_parent_01 contient un nombre alors il doit correspondre à une valeur ".
394
								"du champ num_nom.",
400
								"du champ num_nom.",
395
			'resultat' => false);
401
			'resultat' => false);
396
		
402
		
397
		// Réalisation du test
403
		// Réalisation du test
398
		$noms_erreur = array();
404
		$noms_erreur = array();
399
		foreach ($this->noms as &$nom) {
405
		foreach ($this->noms as &$nom) {
400
			if ($nom['hybride_parent_01'] != '' && $nom['hybride_parent_01'] != '0') {
406
			if ($nom['hybride_parent_01'] != '' && $nom['hybride_parent_01'] != '0') {
401
				if (!isset($this->noms[$nom['hybride_parent_01']])) {
407
				if (!isset($this->noms[$nom['hybride_parent_01']])) {
402
					$noms_erreur[] = array($nom['num_nom'], $this->repererEspace($nom['hybride_parent_01']));
408
					$noms_erreur[] = array($nom['num_nom'], $this->repererEspace($nom['hybride_parent_01']));
403
				}
409
				}
404
			}
410
			}
405
		}
411
		}
406
		
412
		
407
		// Analyse des résultats
413
		// Analyse des résultats
408
		if (count($noms_erreur) > 0) {
414
		if (count($noms_erreur) > 0) {
409
			$info['message']['entete'] = array('num_nom', 'hybride_parent_01 introuvable');
415
			$info['message']['entete'] = array('num_nom', 'hybride_parent_01 introuvable');
410
			$info['message']['lignes'] = $noms_erreur;
416
			$info['message']['lignes'] = $noms_erreur;
411
		} else {
417
		} else {
412
			$info['resultat'] = true;
418
			$info['resultat'] = true;
413
		}
419
		}
414
		$noms_erreur = null;
420
		$noms_erreur = null;
415
		
421
		
416
		$this->traiterResultatTest($info);
422
		$this->traiterResultatTest($info);
417
	}
423
	}
418
	
424
	
419
	private function testerHybrideParent01Syntaxe() {
425
	private function testerHybrideParent01Syntaxe() {
420
		$info = array('nom' => 'hybride_parent_01 -> syntaxe',
426
		$info = array('nom' => 'hybride_parent_01 -> syntaxe',
421
			'description' => "Le champ hybride_parent_01 contient soit :\n".
427
			'description' => "Le champ hybride_parent_01 contient soit :\n".
422
								" - une valeur vide,\n".
428
								" - une valeur vide,\n".
423
								" - un nombre.",
429
								" - un nombre.",
424
			'resultat' => false);
430
			'resultat' => false);
425
		
431
		
426
		// Réalisation du test
432
		// Réalisation du test
427
		$noms_erreur = array();
433
		$noms_erreur = array();
428
		foreach ($this->noms as &$nom) {
434
		foreach ($this->noms as &$nom) {
429
			if ($nom['hybride_parent_01'] != '') {
435
			if ($nom['hybride_parent_01'] != '') {
430
				if (!$this->verifierNombre($nom['hybride_parent_01'])) {
436
				if (!$this->verifierNombre($nom['hybride_parent_01'])) {
431
					$noms_erreur[] = array($nom['num_nom'], $this->repererEspace($nom['hybride_parent_01']));
437
					$noms_erreur[] = array($nom['num_nom'], $this->repererEspace($nom['hybride_parent_01']));
432
				}
438
				}
433
			}
439
			}
434
		}
440
		}
435
		
441
		
436
		// Analyse des résultats
442
		// Analyse des résultats
437
		if (count($noms_erreur) > 0) {
443
		if (count($noms_erreur) > 0) {
438
			$info['message']['entete'] = array('num_nom', 'hybride_parent_01 erroné');
444
			$info['message']['entete'] = array('num_nom', 'hybride_parent_01 erroné');
439
			$info['message']['lignes'] = $noms_erreur;
445
			$info['message']['lignes'] = $noms_erreur;
440
		} else {
446
		} else {
441
			$info['resultat'] = true;
447
			$info['resultat'] = true;
442
		}
448
		}
443
		$noms_erreur = null;
449
		$noms_erreur = null;
444
		
450
		
445
		$this->traiterResultatTest($info);
451
		$this->traiterResultatTest($info);
446
	}
452
	}
447
	
453
	
448
	private function testerSynonymeOrthographiqueExistence() {
454
	private function testerSynonymeOrthographiqueExistence() {
449
		$info = array('nom' => 'synonyme_orthographique -> existence',
455
		$info = array('nom' => 'synonyme_orthographique -> existence',
450
			'description' => "Si le champ synonyme_orthographique contient un nombre alors il doit correspondre ".
456
			'description' => "Si le champ synonyme_orthographique contient un nombre alors il doit correspondre ".
451
								"à une valeur du champ num_nom.",
457
								"à une valeur du champ num_nom.",
452
			'resultat' => false);
458
			'resultat' => false);
453
		
459
		
454
		// Réalisation du test
460
		// Réalisation du test
455
		$noms_erreur = array();
461
		$noms_erreur = array();
456
		foreach ($this->noms as &$nom) {
462
		foreach ($this->noms as &$nom) {
457
			if ($nom['synonyme_orthographique'] != '') {
463
			if ($nom['synonyme_orthographique'] != '') {
458
				if (!isset($this->noms[$nom['synonyme_orthographique']])) {
464
				if (!isset($this->noms[$nom['synonyme_orthographique']])) {
459
					$noms_erreur[] = array($nom['num_nom'], $nom['synonyme_orthographique']);
465
					$noms_erreur[] = array($nom['num_nom'], $nom['synonyme_orthographique']);
460
				}
466
				}
461
			}
467
			}
462
		}
468
		}
463
		
469
		
464
		// Analyse des résultats
470
		// Analyse des résultats
465
		if (count($noms_erreur) > 0) {
471
		if (count($noms_erreur) > 0) {
466
			$info['message']['entete'] = array('num_nom', 'synonyme_orthographique introuvable');
472
			$info['message']['entete'] = array('num_nom', 'synonyme_orthographique introuvable');
467
			$info['message']['lignes'] = $noms_erreur;
473
			$info['message']['lignes'] = $noms_erreur;
468
		} else {
474
		} else {
469
			$info['resultat'] = true;
475
			$info['resultat'] = true;
470
		}
476
		}
471
		$noms_erreur = null;
477
		$noms_erreur = null;
472
		
478
		
473
		$this->traiterResultatTest($info);
479
		$this->traiterResultatTest($info);
474
	}
480
	}
475
	
481
	
476
	private function testerSynonymeOrthographiqueSyntaxe() {
482
	private function testerSynonymeOrthographiqueSyntaxe() {
477
		$info = array('nom' => 'synonyme_orthographique -> syntaxe',
483
		$info = array('nom' => 'synonyme_orthographique -> syntaxe',
478
			'description' => "Le champ synonyme_orthographique contient soit :\n".
484
			'description' => "Le champ synonyme_orthographique contient soit :\n".
479
								" - une valeur vide,\n".
485
								" - une valeur vide,\n".
480
								" - un nombre.",
486
								" - un nombre.",
481
			'resultat' => false);
487
			'resultat' => false);
482
		
488
		
483
		// Réalisation du test
489
		// Réalisation du test
484
		$noms_erreur = array();
490
		$noms_erreur = array();
485
		foreach ($this->noms as $nom) {
491
		foreach ($this->noms as $nom) {
486
			if ($nom['synonyme_orthographique'] != '') {
492
			if ($nom['synonyme_orthographique'] != '') {
487
				if (!$this->verifierNombre($nom['synonyme_orthographique'])) {
493
				if (!$this->verifierNombre($nom['synonyme_orthographique'])) {
488
					$noms_erreur[] = array($nom['num_nom'], $nom['synonyme_orthographique']);
494
					$noms_erreur[] = array($nom['num_nom'], $nom['synonyme_orthographique']);
489
				}
495
				}
490
			}
496
			}
491
		}
497
		}
492
		
498
		
493
		// Analyse des résultats
499
		// Analyse des résultats
494
		if (count($noms_erreur) > 0) {
500
		if (count($noms_erreur) > 0) {
495
			$info['message']['entete'] = array('num_nom', 'synonyme_orthographique erroné');
501
			$info['message']['entete'] = array('num_nom', 'synonyme_orthographique erroné');
496
			$info['message']['lignes'] = $noms_erreur;
502
			$info['message']['lignes'] = $noms_erreur;
497
		} else {
503
		} else {
498
			$info['resultat'] = true;
504
			$info['resultat'] = true;
499
		}
505
		}
500
		$noms_erreur = null;
506
		$noms_erreur = null;
501
		
507
		
502
		$this->traiterResultatTest($info);
508
		$this->traiterResultatTest($info);
503
	}
509
	}
504
	
510
	
505
	private function testerSynonymeMalAppliqueSyntaxe() {
511
	private function testerSynonymeMalAppliqueSyntaxe() {
506
		$info = array('nom' => 'synonyme_mal_applique -> syntaxe',
512
		$info = array('nom' => 'synonyme_mal_applique -> syntaxe',
507
			'description' => "Le champ synonyme_mal_applique contient soit :\n".
513
			'description' => "Le champ synonyme_mal_applique contient soit :\n".
508
			" - une valeur vide,\n".
514
			" - une valeur vide,\n".
509
			" - le chiffre 1.",
515
			" - le chiffre 1.",
510
			'resultat' => false);
516
			'resultat' => false);
511
		
517
		
512
		// Réalisation du test
518
		// Réalisation du test
513
		$noms_erreur = array();
519
		$noms_erreur = array();
514
		foreach ($this->noms as &$nom) {
520
		foreach ($this->noms as &$nom) {
515
			if ($nom['synonyme_mal_applique'] != '') {
521
			if ($nom['synonyme_mal_applique'] != '') {
516
				if (!$this->verifierBooleen($nom['synonyme_mal_applique'])) {
522
				if (!$this->verifierBooleen($nom['synonyme_mal_applique'])) {
517
					$noms_erreur[] = array($nom['num_nom'], $nom['synonyme_mal_applique']);
523
					$noms_erreur[] = array($nom['num_nom'], $nom['synonyme_mal_applique']);
518
				}
524
				}
519
			}
525
			}
520
		}
526
		}
521
		
527
		
522
		// Analyse des résultats
528
		// Analyse des résultats
523
		if (count($noms_erreur) > 0) {
529
		if (count($noms_erreur) > 0) {
524
			$info['message']['entete'] = array('num_nom', 'synonyme_mal_applique erroné');
530
			$info['message']['entete'] = array('num_nom', 'synonyme_mal_applique erroné');
525
			$info['message']['lignes'] = $noms_erreur;
531
			$info['message']['lignes'] = $noms_erreur;
526
		} else {
532
		} else {
527
			$info['resultat'] = true;
533
			$info['resultat'] = true;
528
		}
534
		}
529
		$noms_erreur = null;
535
		$noms_erreur = null;
530
		
536
		
531
		$this->traiterResultatTest($info);
537
		$this->traiterResultatTest($info);
532
	}
538
	}
533
	
539
	
534
	
540
	
535
	private function testerSynonymeDouteuxSyntaxe() {
541
	private function testerSynonymeDouteuxSyntaxe() {
536
		$info = array('nom' => 'synonyme_douteux -> syntaxe',
542
		$info = array('nom' => 'synonyme_douteux -> syntaxe',
537
			'description' => "Le champ synonyme_douteux contient soit :\n".
543
			'description' => "Le champ synonyme_douteux contient soit :\n".
538
			" - une valeur vide,\n".
544
			" - une valeur vide,\n".
539
			" - le chiffre 1.",
545
			" - le chiffre 1.",
540
			'resultat' => false);
546
			'resultat' => false);
541
		
547
		
542
		// Réalisation du test
548
		// Réalisation du test
543
		$noms_erreur = array();
549
		$noms_erreur = array();
544
		foreach ($this->noms as &$nom) {
550
		foreach ($this->noms as &$nom) {
545
			if ($nom['synonyme_douteux'] != '') {
551
			if ($nom['synonyme_douteux'] != '') {
546
				if (!$this->verifierBooleen($nom['synonyme_douteux'])) {
552
				if (!$this->verifierBooleen($nom['synonyme_douteux'])) {
547
					$noms_erreur[] = array($nom['num_nom'], $nom['synonyme_douteux']);
553
					$noms_erreur[] = array($nom['num_nom'], $nom['synonyme_douteux']);
548
				}
554
				}
549
			}
555
			}
550
		}
556
		}
551
		
557
		
552
		// Analyse des résultats
558
		// Analyse des résultats
553
		if (count($noms_erreur) > 0) {
559
		if (count($noms_erreur) > 0) {
554
			$info['message']['entete'] = array('num_nom', 'synonyme_douteux erroné');
560
			$info['message']['entete'] = array('num_nom', 'synonyme_douteux erroné');
555
			$info['message']['lignes'] = $noms_erreur;
561
			$info['message']['lignes'] = $noms_erreur;
556
		} else {
562
		} else {
557
			$info['resultat'] = true;
563
			$info['resultat'] = true;
558
		}
564
		}
559
		$noms_erreur = null;
565
		$noms_erreur = null;
560
		
566
		
561
		$this->traiterResultatTest($info);
567
		$this->traiterResultatTest($info);
562
	}
568
	}
563
	
569
	
564
	private function testerSynonymeDouteuxNumNomRetenu() {
570
	private function testerSynonymeDouteuxNumNomRetenu() {
565
		$info = array('nom' => 'synonyme_douteux -> présence num_nom_retenu',
571
		$info = array('nom' => 'synonyme_douteux -> présence num_nom_retenu',
566
			'description' => "Si le nom est un synonyme douteux, le champs num_nom_retenu doit être vide.",
572
			'description' => "Si le nom est un synonyme douteux, le champs num_nom_retenu doit être vide.",
567
			'resultat' => false);
573
			'resultat' => false);
568
		
574
		
569
		// Réalisation du test
575
		// Réalisation du test
570
		$noms_erreur = array();
576
		$noms_erreur = array();
571
		foreach ($this->noms as &$nom) {
577
		foreach ($this->noms as &$nom) {
572
			if ($nom['synonyme_douteux'] == 1 && $nom['num_nom_retenu'] != ' ') {
578
			if ($nom['synonyme_douteux'] == 1 && $nom['num_nom_retenu'] != ' ') {
573
				$noms_erreur[] = array($nom['num_nom'], $nom['synonyme_douteux'], $nom['num_nom_retenu']);
579
				$noms_erreur[] = array($nom['num_nom'], $nom['synonyme_douteux'], $nom['num_nom_retenu']);
574
			}
580
			}
575
		}
581
		}
576
		
582
		
577
		// Analyse des résultats
583
		// Analyse des résultats
578
		if (count($noms_erreur) > 0) {
584
		if (count($noms_erreur) > 0) {
579
			$info['message']['entete'] = array('num_nom', 'synonyme_douteux', 'num_nom_retenu');
585
			$info['message']['entete'] = array('num_nom', 'synonyme_douteux', 'num_nom_retenu');
580
			$info['message']['lignes'] = $noms_erreur;
586
			$info['message']['lignes'] = $noms_erreur;
581
		} else {
587
		} else {
582
			$info['resultat'] = true;
588
			$info['resultat'] = true;
583
		}
589
		}
584
		$noms_erreur = null;
590
		$noms_erreur = null;
585
		$this->traiterResultatTest($info);
591
		$this->traiterResultatTest($info);
586
	}
592
	}
587
	
593
	
588
	
594
	
589
	private function testerSynonymeProparteExistence() {
595
	private function testerSynonymeProparteExistence() {
590
		$info = array('nom' => 'synonyme_proparte -> existence',
596
		$info = array('nom' => 'synonyme_proparte -> existence',
591
			'description' => "Si le champ synonyme_proparte contient un ou plusieurs nombres alors chacun d'entre eux ".
597
			'description' => "Si le champ synonyme_proparte contient un ou plusieurs nombres alors chacun d'entre eux ".
592
								"doit correspondre à une valeur du champ num_nom.",
598
								"doit correspondre à une valeur du champ num_nom.",
593
			'resultat' => false);
599
			'resultat' => false);
594
		
600
		
595
		// Réalisation du test
601
		// Réalisation du test
596
		$noms_erreur = array();
602
		$noms_erreur = array();
597
		foreach ($this->noms as &$nom) {
603
		foreach ($this->noms as &$nom) {
598
			if ($nom['synonyme_proparte'] != '') {
604
			if ($nom['synonyme_proparte'] != '') {
599
				$num_nom_a_verifier = explode(',', $nom['synonyme_proparte']);
605
				$num_nom_a_verifier = explode(',', $nom['synonyme_proparte']);
600
				$num_nom_en_erreur = array();
606
				$num_nom_en_erreur = array();
601
				foreach ($num_nom_a_verifier as $num_nom) {
607
				foreach ($num_nom_a_verifier as $num_nom) {
602
					if (!isset($this->noms[$num_nom])) {
608
					if (!isset($this->noms[$num_nom])) {
603
						$num_nom_en_erreur[] = $num_nom;
609
						$num_nom_en_erreur[] = $num_nom;
604
					}
610
					}
605
				}
611
				}
606
				if (count($nbre_en_erreur) > 0) {
612
				if (count($nbre_en_erreur) > 0) {
607
					$noms_erreur[] = array($nom['num_nom'], implode(',', $num_nom_en_erreur));
613
					$noms_erreur[] = array($nom['num_nom'], implode(',', $num_nom_en_erreur));
608
				}
614
				}
609
			}
615
			}
610
		}
616
		}
611
		
617
		
612
		// Analyse des résultats
618
		// Analyse des résultats
613
		if (count($noms_erreur) > 0) {
619
		if (count($noms_erreur) > 0) {
614
			$info['message']['entete'] = array('num_nom', 'synonyme_proparte introuvable');
620
			$info['message']['entete'] = array('num_nom', 'synonyme_proparte introuvable');
615
			$info['message']['lignes'] = $noms_erreur;
621
			$info['message']['lignes'] = $noms_erreur;
616
		} else {
622
		} else {
617
			$info['resultat'] = true;
623
			$info['resultat'] = true;
618
		}
624
		}
619
		$noms_erreur = null;
625
		$noms_erreur = null;
620
		
626
		
621
		$this->traiterResultatTest($info);
627
		$this->traiterResultatTest($info);
622
	}
628
	}
623
	
629
	
624
	private function testerSynonymeProparteSyntaxe() {
630
	private function testerSynonymeProparteSyntaxe() {
625
		$info = array('nom' => 'synonyme_proparte -> syntaxe',
631
		$info = array('nom' => 'synonyme_proparte -> syntaxe',
626
			'description' => "Le champ synonyme_proparte contient soit :\n".
632
			'description' => "Le champ synonyme_proparte contient soit :\n".
627
			" - une valeur vide,\n".
633
			" - une valeur vide,\n".
628
			" - un nombre,\n".
634
			" - un nombre,\n".
629
			" - une suite de nombres séparés par des virgules.",
635
			" - une suite de nombres séparés par des virgules.",
630
			'resultat' => false);
636
			'resultat' => false);
631
		
637
		
632
		// Réalisation du test
638
		// Réalisation du test
633
		$noms_erreur = array();
639
		$noms_erreur = array();
634
		foreach ($this->noms as &$nom) {
640
		foreach ($this->noms as &$nom) {
635
			if ($nom['synonyme_proparte'] != '') {
641
			if ($nom['synonyme_proparte'] != '') {
636
				if (!$this->verifierNombreSuite($nom['synonyme_proparte'])) {
642
				if (!$this->verifierNombreSuite($nom['synonyme_proparte'])) {
637
					$noms_erreur[] = array($nom['num_nom'], $nom['synonyme_proparte']);
643
					$noms_erreur[] = array($nom['num_nom'], $nom['synonyme_proparte']);
638
				}
644
				}
639
			}
645
			}
640
		}
646
		}
641
		
647
		
642
		// Analyse des résultats
648
		// Analyse des résultats
643
		if (count($noms_erreur) > 0) {
649
		if (count($noms_erreur) > 0) {
644
			$info['message']['entete'] = array('num_nom', 'synonyme_proparte erroné');
650
			$info['message']['entete'] = array('num_nom', 'synonyme_proparte erroné');
645
			$info['message']['lignes'] = $noms_erreur;
651
			$info['message']['lignes'] = $noms_erreur;
646
		} else {
652
		} else {
647
			$info['resultat'] = true;
653
			$info['resultat'] = true;
648
		}
654
		}
649
		$noms_erreur = null;
655
		$noms_erreur = null;
650
		
656
		
651
		$this->traiterResultatTest($info);
657
		$this->traiterResultatTest($info);
652
	}
658
	}
653
	
659
	
654
	private function testerBasionymeExistence() {
660
	private function testerBasionymeExistence() {
655
		$info = array('nom' => 'basionyme -> existence',
661
		$info = array('nom' => 'basionyme -> existence',
656
			'description' => "Si le champ basionyme contient un nombre alors il doit correspondre à une valeur du champ ".
662
			'description' => "Si le champ basionyme contient un nombre alors il doit correspondre à une valeur du champ ".
657
								"num_nom.",
663
								"num_nom.",
658
			'resultat' => false);
664
			'resultat' => false);
659
		
665
		
660
		// Réalisation du test
666
		// Réalisation du test
661
		$noms_erreur = array();
667
		$noms_erreur = array();
662
		foreach ($this->noms as &$nom) {
668
		foreach ($this->noms as &$nom) {
663
			if ($nom['basionyme'] != '') {
669
			if ($nom['basionyme'] != '') {
664
				if (!isset($this->noms[$nom['basionyme']])) {
670
				if (!isset($this->noms[$nom['basionyme']])) {
665
					$noms_erreur[] = array($nom['num_nom'], $nom['basionyme']);
671
					$noms_erreur[] = array($nom['num_nom'], $nom['basionyme']);
666
				}
672
				}
667
			}
673
			}
668
		}
674
		}
669
		
675
		
670
		// Analyse des résultats
676
		// Analyse des résultats
671
		if (count($noms_erreur) > 0) {
677
		if (count($noms_erreur) > 0) {
672
			$info['message']['entete'] = array('num_nom', 'basionyme introuvable');
678
			$info['message']['entete'] = array('num_nom', 'basionyme introuvable');
673
			$info['message']['lignes'] = $noms_erreur;
679
			$info['message']['lignes'] = $noms_erreur;
674
		} else {
680
		} else {
675
			$info['resultat'] = true;
681
			$info['resultat'] = true;
676
		}
682
		}
677
		$noms_erreur = null;
683
		$noms_erreur = null;
678
		
684
		
679
		$this->traiterResultatTest($info);
685
		$this->traiterResultatTest($info);
680
	}
686
	}
681
	
687
	
682
	private function testerBasionymeSyntaxe() {
688
	private function testerBasionymeSyntaxe() {
683
		$info = array('nom' => 'basionyme -> syntaxe',
689
		$info = array('nom' => 'basionyme -> syntaxe',
684
			'description' => "Le champ basionyme contient :\n".
690
			'description' => "Le champ basionyme contient :\n".
685
								" - une valeur vide,\n".
691
								" - une valeur vide,\n".
686
								" - un nombre.",
692
								" - un nombre.",
687
			'resultat' => false);
693
			'resultat' => false);
688
		
694
		
689
		// Réalisation du test
695
		// Réalisation du test
690
		$noms_erreur = array();
696
		$noms_erreur = array();
691
		foreach ($this->noms as &$nom) {
697
		foreach ($this->noms as &$nom) {
692
			if ($nom['basionyme'] != '') {
698
			if ($nom['basionyme'] != '') {
693
				if (!$this->verifierNombre($nom['basionyme'])) {
699
				if (!$this->verifierNombre($nom['basionyme'])) {
694
					$noms_erreur[] = array($nom['num_nom'], $nom['basionyme']);
700
					$noms_erreur[] = array($nom['num_nom'], $nom['basionyme']);
695
				}
701
				}
696
			}
702
			}
697
		}
703
		}
698
		
704
		
699
		// Analyse des résultats
705
		// Analyse des résultats
700
		if (count($noms_erreur) > 0) {
706
		if (count($noms_erreur) > 0) {
701
			$info['message']['entete'] = array('num_nom', 'basionyme erroné');
707
			$info['message']['entete'] = array('num_nom', 'basionyme erroné');
702
			$info['message']['lignes'] = $noms_erreur;
708
			$info['message']['lignes'] = $noms_erreur;
703
		} else {
709
		} else {
704
			$info['resultat'] = true;
710
			$info['resultat'] = true;
705
		}
711
		}
706
		$noms_erreur = null;
712
		$noms_erreur = null;
707
		
713
		
708
		$this->traiterResultatTest($info);
714
		$this->traiterResultatTest($info);
709
	}
715
	}
710
	
716
	
711
	private function testerHomonymieExistence() {
717
	private function testerHomonymieExistence() {
712
		$info = array('nom' => 'homonyme -> existence',
718
		$info = array('nom' => 'homonyme -> existence',
713
			'description' => "Si le champ homonyme contient «1» alors plusieurs noms doivent posséder la même valeur ".
719
			'description' => "Si le champ homonyme contient «1» alors plusieurs noms doivent posséder la même valeur ".
714
								"dans le champ nom_sci.",
720
								"dans le champ nom_sci.",
715
			'resultat' => false);
721
			'resultat' => false);
716
		
722
		
717
		$noms_homonymie = $this->classerNomsParNomComplet();
723
		$noms_homonymie = $this->classerNomsParNomComplet();
718
		
724
		
719
		// Réalisation du test
725
		// Réalisation du test
720
		$noms_erreur = array();
726
		$noms_erreur = array();
721
		foreach ($this->noms as &$nom) {
727
		foreach ($this->noms as &$nom) {
722
			if ($nom['homonyme'] != '0' && $nom['homonyme'] != '') {
728
			if ($nom['homonyme'] != '0' && $nom['homonyme'] != '') {
723
				if ($noms_homonymie[$nom['nom_sci']] <= 1) {
729
				if ($noms_homonymie[$nom['nom_sci']] <= 1) {
724
					$noms_erreur[] = array($nom['num_nom'], $nom['nom_sci']);
730
					$noms_erreur[] = array($nom['num_nom'], $nom['nom_sci']);
725
				}
731
				}
726
			}
732
			}
727
		}
733
		}
728
		$noms_homonymie = null;
734
		$noms_homonymie = null;
729
		
735
		
730
		// Analyse des résultats
736
		// Analyse des résultats
731
		if (count($noms_erreur) > 0) {
737
		if (count($noms_erreur) > 0) {
732
			$info['message']['entete'] = array('num_nom', 'homonyme introuvable');
738
			$info['message']['entete'] = array('num_nom', 'homonyme introuvable');
733
			$info['message']['lignes'] = $noms_erreur;
739
			$info['message']['lignes'] = $noms_erreur;
734
		} else {
740
		} else {
735
			$info['resultat'] = true;
741
			$info['resultat'] = true;
736
		}
742
		}
737
		$noms_erreur = null;
743
		$noms_erreur = null;
738
		
744
		
739
		$this->traiterResultatTest($info);
745
		$this->traiterResultatTest($info);
740
	}
746
	}
741
	
747
	
742
	private function testerHomonymieSyntaxe() {
748
	private function testerHomonymieSyntaxe() {
743
		$info = array('nom' => 'homonyme -> syntaxe',
749
		$info = array('nom' => 'homonyme -> syntaxe',
744
			'description' => "Le champ homonyme contient :\n".
750
			'description' => "Le champ homonyme contient :\n".
745
				" - une valeur vide,\n".
751
				" - une valeur vide,\n".
746
				" - le chiffre 1.",
752
				" - le chiffre 1.",
747
			'resultat' => false);
753
			'resultat' => false);
748
		
754
		
749
		// Réalisation du test
755
		// Réalisation du test
750
		$noms_erreur = array();
756
		$noms_erreur = array();
751
		foreach ($this->noms as &$nom) {
757
		foreach ($this->noms as &$nom) {
752
			if ($nom['homonyme'] != '') {
758
			if ($nom['homonyme'] != '') {
753
				if (!$this->verifierBooleen($nom['homonyme'])) {
759
				if (!$this->verifierBooleen($nom['homonyme'])) {
754
					$noms_erreur[] = array($nom['num_nom'], $nom['homonyme']);
760
					$noms_erreur[] = array($nom['num_nom'], $nom['homonyme']);
755
				}
761
				}
756
			}
762
			}
757
		}
763
		}
758
		
764
		
759
		// Analyse des résultats
765
		// Analyse des résultats
760
		if (count($noms_erreur) > 0) {
766
		if (count($noms_erreur) > 0) {
761
			$info['message']['entete'] = array('num_nom', 'homonyme erroné');
767
			$info['message']['entete'] = array('num_nom', 'homonyme erroné');
762
			$info['message']['lignes'] = $noms_erreur;
768
			$info['message']['lignes'] = $noms_erreur;
763
		} else {
769
		} else {
764
			$info['resultat'] = true;
770
			$info['resultat'] = true;
765
		}
771
		}
766
		$noms_erreur = null;
772
		$noms_erreur = null;
767
		
773
		
768
		$this->traiterResultatTest($info);
774
		$this->traiterResultatTest($info);
769
	}
775
	}
770
	
776
	
771
	private function testerBiblioOrigineSyntaxe() {
777
	private function testerBiblioOrigineSyntaxe() {
772
		$info = array('nom' => 'biblio_origine -> syntaxe',
778
		$info = array('nom' => 'biblio_origine -> syntaxe',
773
			'description' => "Le champ biblio_origine se compose de plusieurs parties séparées par des caractères ".
779
			'description' => "Le champ biblio_origine se compose de plusieurs parties séparées par des caractères ".
774
			"précis qui sont dans l'ordre de gauche à droite :\n".
780
			"précis qui sont dans l'ordre de gauche à droite :\n".
775
			" - éventuellement, le mot « in » suivi d'un intitulé auteur (utilisé pour indiquer l'intitulé auteur de ".
781
			" - éventuellement, le mot « in » suivi d'un intitulé auteur (utilisé pour indiquer l'intitulé auteur de ".
776
			"l'ouvrage dans lequel la publication est parue),\n".
782
			"l'ouvrage dans lequel la publication est parue),\n".
777
			" - point-virgule « ; » (si l'info précédent a été renseignée),\n".
783
			" - point-virgule « ; » (si l'info précédent a été renseignée),\n".
778
			" - abréviation, ou nom, de l'ouvrage ou de la revue selon le standard en vigueur dans le code du nom. ".
784
			" - abréviation, ou nom, de l'ouvrage ou de la revue selon le standard en vigueur dans le code du nom. ".
779
			"Cette information ne doit pas contenir de caractère virgule « , »,\n".
785
			"Cette information ne doit pas contenir de caractère virgule « , »,\n".
780
			" - virgule « , »,\n".
786
			" - virgule « , »,\n".
781
			" - informations permettant d'identifier plus précisément le document contenant le nom... ".
787
			" - informations permettant d'identifier plus précisément le document contenant le nom... ".
782
			"(par exemple, l'éditeur, le tome, le numéro d'édition, le volume...) séparées par des virgules ou d'autres ".
788
			"(par exemple, l'éditeur, le tome, le numéro d'édition, le volume...) séparées par des virgules ou d'autres ".
783
			"caractères sauf deux points « : ».\n".
789
			"caractères sauf deux points « : ».\n".
784
			" - deux points « : »,\n".
790
			" - deux points « : »,\n".
785
			" - numéro(s) de la page contenant la publication du nom ou de l'ensemble de pages (première et dernière ".
791
			" - numéro(s) de la page contenant la publication du nom ou de l'ensemble de pages (première et dernière ".
786
			"pages de l'ensemble séparées par un tiret « - »). Quelques fois des numéros ou d'autres informations indiquant ".
792
			"pages de l'ensemble séparées par un tiret « - »). Quelques fois des numéros ou d'autres informations indiquant ".
787
			"la position du nom dans le document. Le tiret « - » doit toujours servir à séparer un ensemble.",
793
			"la position du nom dans le document. Le tiret « - » doit toujours servir à séparer un ensemble.",
788
			'resultat' => false);
794
			'resultat' => false);
789
		
795
		
790
		// Réalisation du test
796
		// Réalisation du test
791
		$noms_erreur = array();
797
		$noms_erreur = array();
792
		foreach ($this->noms as &$nom) {
798
		foreach ($this->noms as &$nom) {
793
			if ($nom['biblio_origine'] != '') {
799
			if ($nom['biblio_origine'] != '') {
794
				if (!$this->verifierBiblioOrigine($nom['biblio_origine'])) {
800
				if (!$this->verifierBiblioOrigine($nom['biblio_origine'])) {
795
					$biblio_traite = $this->repererEspace($nom['biblio_origine']);
801
					$biblio_traite = $this->repererEspace($nom['biblio_origine']);
796
					$noms_erreur[] = array($nom['num_nom'], $biblio_traite);
802
					$noms_erreur[] = array($nom['num_nom'], $biblio_traite);
797
				}
803
				}
798
			}
804
			}
799
		}
805
		}
800
		
806
		
801
		// Analyse des résultats
807
		// Analyse des résultats
802
		if (count($noms_erreur) > 0) {
808
		if (count($noms_erreur) > 0) {
803
			$info['message']['entete'] = array('num_nom', 'biblio_origine erroné');
809
			$info['message']['entete'] = array('num_nom', 'biblio_origine erroné');
804
			$info['message']['lignes'] = $noms_erreur;
810
			$info['message']['lignes'] = $noms_erreur;
805
		} else {
811
		} else {
806
			$info['resultat'] = true;
812
			$info['resultat'] = true;
807
		}
813
		}
808
		$noms_erreur = null;
814
		$noms_erreur = null;
809
		
815
		
810
		$this->traiterResultatTest($info);
816
		$this->traiterResultatTest($info);
811
	}
817
	}
812
	
818
	
813
	private function testerAnneeSyntaxe() {
819
	private function testerAnneeSyntaxe() {
814
		$info = array('nom' => 'annee -> syntaxe',
820
		$info = array('nom' => 'annee -> syntaxe',
815
			'description' => "Le champ annee doit :\n".
821
			'description' => "Le champ annee doit :\n".
816
			" - contenir un nombre de 4 chiffres,\n".
822
			" - contenir un nombre de 4 chiffres,\n".
817
			" - être supérieur ou égal à 1753.",
823
			" - être supérieur ou égal à 1753.",
818
			'resultat' => false);
824
			'resultat' => false);
819
		
825
		
820
		// Réalisation du test
826
		// Réalisation du test
821
		$noms_erreur = array();
827
		$noms_erreur = array();
822
		foreach ($this->noms as &$nom) {
828
		foreach ($this->noms as &$nom) {
823
			if ($nom['annee'] != '') {
829
			if ($nom['annee'] != '') {
824
				if (!$this->verifierAnnee($nom['annee'])) {
830
				if (!$this->verifierAnnee($nom['annee'])) {
825
					$noms_erreur[] = array($nom['num_nom'], $nom['annee']);
831
					$noms_erreur[] = array($nom['num_nom'], $nom['annee']);
826
				}
832
				}
827
			}
833
			}
828
		}
834
		}
829
		
835
		
830
		// Analyse des résultats
836
		// Analyse des résultats
831
		if (count($noms_erreur) > 0) {
837
		if (count($noms_erreur) > 0) {
832
			$info['message']['entete'] = array('num_nom', 'annee erroné');
838
			$info['message']['entete'] = array('num_nom', 'annee erroné');
833
			$info['message']['lignes'] = $noms_erreur;
839
			$info['message']['lignes'] = $noms_erreur;
834
		} else {
840
		} else {
835
			$info['resultat'] = true;
841
			$info['resultat'] = true;
836
		}
842
		}
837
		$noms_erreur = null;
843
		$noms_erreur = null;
838
		
844
		
839
		$this->traiterResultatTest($info);
845
		$this->traiterResultatTest($info);
840
	}
846
	}
841
	
847
	
842
	private function testerAuteurSyntaxe() {
848
	private function testerAuteurSyntaxe() {
843
		$info = array('nom' => 'auteur -> syntaxe',
849
		$info = array('nom' => 'auteur -> syntaxe',
844
			'description' => "Le champ auteur doit :\n".
850
			'description' => "Le champ auteur doit :\n".
845
			" - contenir l'intitulé complet des noms de l'auteur, ou des auteurs, ayant publié à l'origine la combinaison latine courante.\n".
851
			" - contenir l'intitulé complet des noms de l'auteur, ou des auteurs, ayant publié à l'origine la combinaison latine courante.\n".
846
    		" - OU débuter par le mot « sensu » et contenir l'intitulé complet des noms de l'auteur, ou des auteurs, ".
852
    		" - OU débuter par le mot « sensu » et contenir l'intitulé complet des noms de l'auteur, ou des auteurs, ".
847
			"ayant publié un nom dont la description ne correspond pas à celle de l'auteur, ou des auteurs, d'origine.\n".
853
			"ayant publié un nom dont la description ne correspond pas à celle de l'auteur, ou des auteurs, d'origine.\n".
848
			" - se composer de caractères alphabétiques (A-Z, a-z), incluant les signes diacritiques, le symbole point (.), les paires de parenthèses ( () ), les apostrophes, l'esperluette (&) et l'espace ( ).\n".
854
			" - se composer de caractères alphabétiques (A-Z, a-z), incluant les signes diacritiques, le symbole point (.), les paires de parenthèses ( () ), les apostrophes, l'esperluette (&) et l'espace ( ).\n".
849
			" - contenir, si nécessaire, des abréviations de noms d'auteurs respectant les standards.\n".
855
			" - contenir, si nécessaire, des abréviations de noms d'auteurs respectant les standards.\n".
850
			" - contenir une translittération des noms d'alphabet cyrillique, arabe, chinois... en alphabet latin.\n".
856
			" - contenir une translittération des noms d'alphabet cyrillique, arabe, chinois... en alphabet latin.\n".
851
			" - inclure entre parenthèses l'intitulé des noms de l'auteur ou des auteurs ayant publié le basionyme.\n".
857
			" - inclure entre parenthèses l'intitulé des noms de l'auteur ou des auteurs ayant publié le basionyme.\n".
852
			" - toujours utiliser l'esperluette (&) à la place du mot « et » pour séparer les noms d'auteurs.\n".
858
			" - toujours utiliser l'esperluette (&) à la place du mot « et » pour séparer les noms d'auteurs.\n".
853
			" - conformément à la recommandation 46C.2 du CINB, si une un citation comprend plus de deux auteurs, ".
859
			" - conformément à la recommandation 46C.2 du CINB, si une un citation comprend plus de deux auteurs, ".
854
			"elle devrait être limitée au nom du premier, suivi de « & al.».\n",
860
			"elle devrait être limitée au nom du premier, suivi de « & al.».\n",
855
			'resultat' => false);
861
			'resultat' => false);
856
		
862
		
857
		// Réalisation du test
863
		// Réalisation du test
858
		$noms_erreur = array();
864
		$noms_erreur = array();
859
		foreach ($this->noms as &$nom) {
865
		foreach ($this->noms as &$nom) {
860
			if ($nom['auteur'] != '') {
866
			if ($nom['auteur'] != '') {
861
				if (!$this->verifierAuteur($nom['auteur'])) {
867
				if (!$this->verifierAuteur($nom['auteur'])) {
862
					$intitule_traite = $this->repererEspace($nom['auteur']);
868
					$intitule_traite = $this->repererEspace($nom['auteur']);
863
					$noms_erreur[] = array($nom['num_nom'], $intitule_traite);
869
					$noms_erreur[] = array($nom['num_nom'], $intitule_traite);
864
				}
870
				}
865
			}
871
			}
866
		}
872
		}
867
		
873
		
868
		// Analyse des résultats
874
		// Analyse des résultats
869
		if (count($noms_erreur) > 0) {
875
		if (count($noms_erreur) > 0) {
870
			$info['message']['entete'] = array('num_nom', 'auteur erroné');
876
			$info['message']['entete'] = array('num_nom', 'auteur erroné');
871
			$info['message']['lignes'] = $noms_erreur;
877
			$info['message']['lignes'] = $noms_erreur;
872
		} else {
878
		} else {
873
			$info['resultat'] = true;
879
			$info['resultat'] = true;
874
		}
880
		}
875
		$noms_erreur = null;
881
		$noms_erreur = null;
876
		
882
		
877
		$this->traiterResultatTest($info);
883
		$this->traiterResultatTest($info);
878
	}
884
	}
879
	
885
	
880
	private function testerNomCommercialSyntaxe() {
886
	private function testerNomCommercialSyntaxe() {
881
		$info = array('nom' => 'nom_commercial -> syntaxe',
887
		$info = array('nom' => 'nom_commercial -> syntaxe',
882
			'description' => "Le champ nom_commercial doit contenir un nom commercial conforme aux règles du ".
888
			'description' => "Le champ nom_commercial doit contenir un nom commercial conforme aux règles du ".
883
				"Code Internationnal de Nomenclature des Plantes Cultivées (CINPC) ".
889
				"Code Internationnal de Nomenclature des Plantes Cultivées (CINPC) ".
884
				"qui se compose de caractères majuscules (A-Z) incluant des signes diacritiques et des espaces.\n",
890
				"qui se compose de caractères majuscules (A-Z) incluant des signes diacritiques et des espaces.\n",
885
			'resultat' => false);
891
			'resultat' => false);
886
		
892
		
887
		// Réalisation du test
893
		// Réalisation du test
888
		$noms_erreur = array();
894
		$noms_erreur = array();
889
		foreach ($this->noms as &$nom) {
895
		foreach ($this->noms as &$nom) {
890
			if ($nom['nom_commercial'] != '') {
896
			if ($nom['nom_commercial'] != '') {
891
				if (!$this->verifierNomCommercial($nom['nom_commercial'])) {
897
				if (!$this->verifierNomCommercial($nom['nom_commercial'])) {
892
					$epithete_traite = $this->repererEspace($nom['nom_commercial']);
898
					$epithete_traite = $this->repererEspace($nom['nom_commercial']);
893
					$noms_erreur[] = array($nom['num_nom'], $epithete_traite);
899
					$noms_erreur[] = array($nom['num_nom'], $epithete_traite);
894
				}
900
				}
895
			}
901
			}
896
		}
902
		}
897
		
903
		
898
		// Analyse des résultats
904
		// Analyse des résultats
899
		if (count($noms_erreur) > 0) {
905
		if (count($noms_erreur) > 0) {
900
			$info['message']['entete'] = array('num_nom', 'cultivar erroné');
906
			$info['message']['entete'] = array('num_nom', 'cultivar erroné');
901
			$info['message']['lignes'] = $noms_erreur;
907
			$info['message']['lignes'] = $noms_erreur;
902
		} else {
908
		} else {
903
			$info['resultat'] = true;
909
			$info['resultat'] = true;
904
		}
910
		}
905
		$noms_erreur = null;
911
		$noms_erreur = null;
906
		
912
		
907
		$this->traiterResultatTest($info);
913
		$this->traiterResultatTest($info);
908
	}
914
	}
909
	
915
	
910
	private function testerNomCommercialPresenceCultivar() {
916
	private function testerNomCommercialPresenceCultivar() {
911
		$info = array('nom' => 'nom_commercial -> groupe_cultivar OU cultivar non vide',
917
		$info = array('nom' => 'nom_commercial -> groupe_cultivar OU cultivar non vide',
912
			'description' => "Si le champ nom_commercial contient un nom commercial alors le champ cultivar OU ".
918
			'description' => "Si le champ nom_commercial contient un nom commercial alors le champ cultivar OU ".
913
				"cultivar_groupe ne doit pas être vide.",
919
				"cultivar_groupe ne doit pas être vide.",
914
			'resultat' => false);
920
			'resultat' => false);
915
		
921
		
916
		// Réalisation du test
922
		// Réalisation du test
917
		$noms_erreur = array();
923
		$noms_erreur = array();
918
		foreach ($this->noms as &$nom) {
924
		foreach ($this->noms as &$nom) {
919
			if ((isset($nom['nom_commercial']) && $nom['nom_commercial'] != '') && ($nom['cultivar'] == '' && $nom['cultivar_groupe'] == '')) {
925
			if ((isset($nom['nom_commercial']) && $nom['nom_commercial'] != '') && ($nom['cultivar'] == '' && $nom['cultivar_groupe'] == '')) {
920
				$noms_erreur[] = array($nom['num_nom'], $nom['nom_sci']);
926
				$noms_erreur[] = array($nom['num_nom'], $nom['nom_sci']);
921
			}
927
			}
922
		}
928
		}
923
		
929
		
924
		// Analyse des résultats
930
		// Analyse des résultats
925
		if (count($noms_erreur) > 0) {
931
		if (count($noms_erreur) > 0) {
926
			$info['message']['entete'] = array('num_nom', 'nom_commercial sans cultivar ou cultivar_groupe');
932
			$info['message']['entete'] = array('num_nom', 'nom_commercial sans cultivar ou cultivar_groupe');
927
			$info['message']['lignes'] = $noms_erreur;
933
			$info['message']['lignes'] = $noms_erreur;
928
		} else {
934
		} else {
929
			$info['resultat'] = true;
935
			$info['resultat'] = true;
930
		}
936
		}
931
		$noms_erreur = null;
937
		$noms_erreur = null;
932
		
938
		
933
		$this->traiterResultatTest($info);
939
		$this->traiterResultatTest($info);
934
	}
940
	}
935
	
941
	
936
	private function testerCultivarSyntaxe() {
942
	private function testerCultivarSyntaxe() {
937
		$info = array('nom' => 'cultivar -> syntaxe',
943
		$info = array('nom' => 'cultivar -> syntaxe',
938
			'description' => "Le champ cultivar_groupe doit contenir :\n".
944
			'description' => "Le champ cultivar_groupe doit contenir :\n".
939
				" - un nom de cultivar conforme aux règles du Code Internationnal de Nomenclature \n".
945
				" - un nom de cultivar conforme aux règles du Code Internationnal de Nomenclature \n".
940
				"   des Plantes Cultivées (CINPC), c.-à-d. composer de caractères alphanumériques \n".
946
				"   des Plantes Cultivées (CINPC), c.-à-d. composer de caractères alphanumériques \n".
941
				"   (A-Z,a-z et 0-9) incluant signes diacritiques et marques de ponctuations.\n".
947
				"   (A-Z,a-z et 0-9) incluant signes diacritiques et marques de ponctuations.\n".
942
				" - un nom en alphabet latin, ce qui implique une translittération des noms d'alphabet \n".
948
				" - un nom en alphabet latin, ce qui implique une translittération des noms d'alphabet \n".
943
				"   cyrillique, arabe, chinois...\n".
949
				"   cyrillique, arabe, chinois...\n".
944
				" - une lettre majuscule obligatoire pour le premier caractère du premier mot et pour \n".
950
				" - une lettre majuscule obligatoire pour le premier caractère du premier mot et pour \n".
945
				"   les autres mots importants mais pas pour les mots mineurs.\n".
951
				"   les autres mots importants mais pas pour les mots mineurs.\n".
946
				"Ne doit pas contenir :\n".
952
				"Ne doit pas contenir :\n".
947
				" - cv., convar. ou de guillemets simples (').\n",
953
				" - cv., convar. ou de guillemets simples (').\n",
948
			'resultat' => false);
954
			'resultat' => false);
949
		
955
		
950
		// Réalisation du test
956
		// Réalisation du test
951
		$noms_erreur = array();
957
		$noms_erreur = array();
952
		foreach ($this->noms as &$nom) {
958
		foreach ($this->noms as &$nom) {
953
			if ($nom['cultivar'] != '') {
959
			if ($nom['cultivar'] != '') {
954
				if (!$this->verifierEpitheteCultivar($nom['cultivar'])) {
960
				if (!$this->verifierEpitheteCultivar($nom['cultivar'])) {
955
					$epithete_traite = $this->repererEspace($nom['cultivar']);
961
					$epithete_traite = $this->repererEspace($nom['cultivar']);
956
					$noms_erreur[] = array($nom['num_nom'], $epithete_traite);
962
					$noms_erreur[] = array($nom['num_nom'], $epithete_traite);
957
				}
963
				}
958
			}
964
			}
959
		}
965
		}
960
		
966
		
961
		// Analyse des résultats
967
		// Analyse des résultats
962
		if (count($noms_erreur) > 0) {
968
		if (count($noms_erreur) > 0) {
963
			$info['message']['entete'] = array('num_nom', 'cultivar erroné');
969
			$info['message']['entete'] = array('num_nom', 'cultivar erroné');
964
			$info['message']['lignes'] = $noms_erreur;
970
			$info['message']['lignes'] = $noms_erreur;
965
		} else {
971
		} else {
966
			$info['resultat'] = true;
972
			$info['resultat'] = true;
967
		}
973
		}
968
		$noms_erreur = null;
974
		$noms_erreur = null;
969
		
975
		
970
		$this->traiterResultatTest($info);
976
		$this->traiterResultatTest($info);
971
	}
977
	}
972
	
978
	
973
	private function testerCultivarRang() {
979
	private function testerCultivarRang() {
974
		$info = array('nom' => "cultivar -> rang >= {$this->manuel['rang_genre']}",
980
		$info = array('nom' => "cultivar -> rang >= {$this->manuel['rang_genre']}",
975
			'description' => "Si le champ cultivar n'est pas vide alors le rang du nom doit être supérieur ou égal à ". 
981
			'description' => "Si le champ cultivar n'est pas vide alors le rang du nom doit être supérieur ou égal à ". 
976
								"{$this->manuel['rang_genre']}.",
982
								"{$this->manuel['rang_genre']}.",
977
			'resultat' => false);
983
			'resultat' => false);
978
		
984
		
979
		// Réalisation du test
985
		// Réalisation du test
980
		$noms_erreur = array();
986
		$noms_erreur = array();
981
		foreach ($this->noms as &$nom) {
987
		foreach ($this->noms as &$nom) {
982
			if ($nom['cultivar'] != '') {
988
			if ($nom['cultivar'] != '') {
983
				if ($nom['rang'] < $this->manuel['rang_genre']) {
989
				if ($nom['rang'] < $this->manuel['rang_genre']) {
984
					$noms_erreur[] = array($nom['num_nom'], $nom['nom_sci'], $nom['rang']);
990
					$noms_erreur[] = array($nom['num_nom'], $nom['nom_sci'], $nom['rang']);
985
				}
991
				}
986
			}
992
			}
987
		}
993
		}
988
		
994
		
989
		// Analyse des résultats
995
		// Analyse des résultats
990
		if (count($noms_erreur) > 0) {
996
		if (count($noms_erreur) > 0) {
991
			$info['message']['entete'] = array('num_nom', 'nom_sci', 'rang erroné');
997
			$info['message']['entete'] = array('num_nom', 'nom_sci', 'rang erroné');
992
			$info['message']['lignes'] = $noms_erreur;
998
			$info['message']['lignes'] = $noms_erreur;
993
		} else {
999
		} else {
994
			$info['resultat'] = true;
1000
			$info['resultat'] = true;
995
		}
1001
		}
996
		$noms_erreur = null;
1002
		$noms_erreur = null;
997
		
1003
		
998
		$this->traiterResultatTest($info);
1004
		$this->traiterResultatTest($info);
999
	}
1005
	}
1000
	
1006
	
1001
	private function testerGroupeCultivarSyntaxe() {
1007
	private function testerGroupeCultivarSyntaxe() {
1002
		$info = array('nom' => 'cultivar_groupe -> syntaxe',
1008
		$info = array('nom' => 'cultivar_groupe -> syntaxe',
1003
			'description' => "Le champ cultivar_groupe doit contenir un nom de groupe de cultivar conforme aux règles ".
1009
			'description' => "Le champ cultivar_groupe doit contenir un nom de groupe de cultivar conforme aux règles ".
1004
				"du code des plantes cultivées, c.-à-d. composer de caractères alphanumériques (A-Z,a-z et 0-9) incluant ".
1010
				"du code des plantes cultivées, c.-à-d. composer de caractères alphanumériques (A-Z,a-z et 0-9) incluant ".
1005
				"signes diacritiques et marques de ponctuations.\n".
1011
				"signes diacritiques et marques de ponctuations.\n".
1006
				"Il ne doit pas contenir le mot Groupe, l'abbréviation «gp» ou des parenthèses.\n".
1012
				"Il ne doit pas contenir le mot Groupe, l'abbréviation «gp» ou des parenthèses.\n".
1007
				"Il peut se terminer par l'abréviation «gx» pour distinguer les groupes des grex.",
1013
				"Il peut se terminer par l'abréviation «gx» pour distinguer les groupes des grex.",
1008
			'resultat' => false);
1014
			'resultat' => false);
1009
		
1015
		
1010
		// Réalisation du test
1016
		// Réalisation du test
1011
		$noms_erreur = array();
1017
		$noms_erreur = array();
1012
		foreach ($this->noms as &$nom) {
1018
		foreach ($this->noms as &$nom) {
1013
			if ($nom['cultivar_groupe'] != '') {
1019
			if ($nom['cultivar_groupe'] != '') {
1014
				if (!$this->verifierEpitheteGroupeCultivar($nom['cultivar_groupe'])) {
1020
				if (!$this->verifierEpitheteGroupeCultivar($nom['cultivar_groupe'])) {
1015
					$epithete_traite = $this->repererEspace($nom['cultivar_groupe']);
1021
					$epithete_traite = $this->repererEspace($nom['cultivar_groupe']);
1016
					$noms_erreur[] = array($nom['num_nom'], $epithete_traite);
1022
					$noms_erreur[] = array($nom['num_nom'], $epithete_traite);
1017
				}
1023
				}
1018
			}
1024
			}
1019
		}
1025
		}
1020
		
1026
		
1021
		// Analyse des résultats
1027
		// Analyse des résultats
1022
		if (count($noms_erreur) > 0) {
1028
		if (count($noms_erreur) > 0) {
1023
			$info['message']['entete'] = array('num_nom', 'cultivar_groupe erroné');
1029
			$info['message']['entete'] = array('num_nom', 'cultivar_groupe erroné');
1024
			$info['message']['lignes'] = $noms_erreur;
1030
			$info['message']['lignes'] = $noms_erreur;
1025
		} else {
1031
		} else {
1026
			$info['resultat'] = true;
1032
			$info['resultat'] = true;
1027
		}
1033
		}
1028
		$noms_erreur = null;
1034
		$noms_erreur = null;
1029
		
1035
		
1030
		$this->traiterResultatTest($info);
1036
		$this->traiterResultatTest($info);
1031
	}
1037
	}
1032
	
1038
	
1033
	private function testerGroupeCultivarRang() {
1039
	private function testerGroupeCultivarRang() {
1034
		$info = array('nom' => "cultivar_groupe -> rang >= {$this->manuel['rang_genre']}",
1040
		$info = array('nom' => "cultivar_groupe -> rang >= {$this->manuel['rang_genre']}",
1035
			'description' => "Si le champ cultivar_groupe n'est pas vide alors le rang du nom doit être supérieur ou ".
1041
			'description' => "Si le champ cultivar_groupe n'est pas vide alors le rang du nom doit être supérieur ou ".
1036
								"égal à {$this->manuel['rang_genre']}.",
1042
								"égal à {$this->manuel['rang_genre']}.",
1037
			'resultat' => false);
1043
			'resultat' => false);
1038
		
1044
		
1039
		// Réalisation du test
1045
		// Réalisation du test
1040
		$noms_erreur = array();
1046
		$noms_erreur = array();
1041
		foreach ($this->noms as &$nom) {
1047
		foreach ($this->noms as &$nom) {
1042
			if ($nom['cultivar_groupe'] != '') {
1048
			if ($nom['cultivar_groupe'] != '') {
1043
				if ($nom['rang'] < $this->manuel['rang_genre']) {
1049
				if ($nom['rang'] < $this->manuel['rang_genre']) {
1044
					$noms_erreur[] = array($nom['num_nom'], $nom['nom_sci'], $nom['rang']);
1050
					$noms_erreur[] = array($nom['num_nom'], $nom['nom_sci'], $nom['rang']);
1045
				}
1051
				}
1046
			}
1052
			}
1047
		}
1053
		}
1048
		
1054
		
1049
		// Analyse des résultats
1055
		// Analyse des résultats
1050
		if (count($noms_erreur) > 0) {
1056
		if (count($noms_erreur) > 0) {
1051
			$info['message']['entete'] = array('num_nom', 'nom_sci', 'rang erroné');
1057
			$info['message']['entete'] = array('num_nom', 'nom_sci', 'rang erroné');
1052
			$info['message']['lignes'] = $noms_erreur;
1058
			$info['message']['lignes'] = $noms_erreur;
1053
		} else {
1059
		} else {
1054
			$info['resultat'] = true;
1060
			$info['resultat'] = true;
1055
		}
1061
		}
1056
		$noms_erreur = null;
1062
		$noms_erreur = null;
1057
		
1063
		
1058
		$this->traiterResultatTest($info);
1064
		$this->traiterResultatTest($info);
1059
	}
1065
	}
1060
	
1066
	
1061
	private function testerEpitheteInfraSpEspaces() {
1067
	private function testerEpitheteInfraSpEspaces() {
1062
		$info = array('nom' => 'epithete_infra_sp -> espaces en trop',
1068
		$info = array('nom' => 'epithete_infra_sp -> espaces en trop',
1063
			'description' => "Le champ epithete_infra_sp ne doit pas contenir d'espace avant ou après le nom.\n".
1069
			'description' => "Le champ epithete_infra_sp ne doit pas contenir d'espace avant ou après le nom.\n".
1064
				"Si des espaces sont compris dans la valeur du champ, il ne doit pas en avoir plusieurs consécutifs.",
1070
				"Si des espaces sont compris dans la valeur du champ, il ne doit pas en avoir plusieurs consécutifs.",
1065
			'resultat' => false);
1071
			'resultat' => false);
1066
		
1072
		
1067
		// Réalisation du test
1073
		// Réalisation du test
1068
		$noms_erreur = array();
1074
		$noms_erreur = array();
1069
		foreach ($this->noms as &$nom) {
1075
		foreach ($this->noms as &$nom) {
1070
			if ($nom['epithete_infra_sp'] != '') {
1076
			if ($nom['epithete_infra_sp'] != '') {
1071
				if (preg_match('/(?:^\s+(?!:\s+)|(?!:\s+)\s{2,}(?!:\s+)|(?!:\s+)\s+$)/', $nom['epithete_infra_sp'])) {
1077
				if (preg_match('/(?:^\s+(?!:\s+)|(?!:\s+)\s{2,}(?!:\s+)|(?!:\s+)\s+$)/', $nom['epithete_infra_sp'])) {
1072
					$epithete_traite = $this->repererEspace($nom['epithete_infra_sp']);
1078
					$epithete_traite = $this->repererEspace($nom['epithete_infra_sp']);
1073
					$noms_erreur[] = array($nom['num_nom'], $epithete_traite);
1079
					$noms_erreur[] = array($nom['num_nom'], $epithete_traite);
1074
				}
1080
				}
1075
			}
1081
			}
1076
		}
1082
		}
1077
		
1083
		
1078
		// Analyse des résultats
1084
		// Analyse des résultats
1079
		if (count($noms_erreur) > 0) {
1085
		if (count($noms_erreur) > 0) {
1080
			$info['message']['entete'] = array('num_nom', 'epithete_infra_sp erroné');
1086
			$info['message']['entete'] = array('num_nom', 'epithete_infra_sp erroné');
1081
			$info['message']['lignes'] = $noms_erreur;
1087
			$info['message']['lignes'] = $noms_erreur;
1082
		} else {
1088
		} else {
1083
			$info['resultat'] = true;
1089
			$info['resultat'] = true;
1084
		}
1090
		}
1085
		$noms_erreur = null;
1091
		$noms_erreur = null;
1086
		
1092
		
1087
		$this->traiterResultatTest($info);
1093
		$this->traiterResultatTest($info);
1088
	}
1094
	}
1089
	
1095
	
1090
	private function testerEpitheteInfraSpSyntaxe() {
1096
	private function testerEpitheteInfraSpSyntaxe() {
1091
		$info = array('nom' => 'epithete_infra_sp -> syntaxe',
1097
		$info = array('nom' => 'epithete_infra_sp -> syntaxe',
1092
			'description' => "Le champ epithete_infra_sp peut contenir :\n".
1098
			'description' => "Le champ epithete_infra_sp peut contenir :\n".
1093
			 	" - un mot unique composé de lettres minuscules, avec ou sans tréma (¨), et de tirets (-). \n".
1099
			 	" - un mot unique composé de lettres minuscules, avec ou sans tréma (¨), et de tirets (-). \n".
1094
				"   Il commence par une lettre minuscule (avec ou sans tréma).\n". 
1100
				"   Il commence par une lettre minuscule (avec ou sans tréma).\n". 
1095
				"   Il peut être précédé par le signe + ou la lettre x suivi d'un espace.\n".
1101
				"   Il peut être précédé par le signe + ou la lettre x suivi d'un espace.\n".
1096
				" - une formule d'hybridité composée d'une série de noms d'espèce ou d'infra espèce \n".
1102
				" - une formule d'hybridité composée d'une série de noms d'espèce ou d'infra espèce \n".
1097
				"   (au moins 2) séparés entre eux par la lettre x entourée de caractères espaces.",
1103
				"   (au moins 2) séparés entre eux par la lettre x entourée de caractères espaces.",
1098
			'resultat' => false);
1104
			'resultat' => false);
1099
		
1105
		
1100
		// Réalisation du test
1106
		// Réalisation du test
1101
		$noms_erreur = array();
1107
		$noms_erreur = array();
1102
		foreach ($this->noms as &$nom) {
1108
		foreach ($this->noms as &$nom) {
1103
			if ($nom['epithete_infra_sp'] != '') {
1109
			if ($nom['epithete_infra_sp'] != '') {
1104
				$mots = explode(' ', $nom['epithete_infra_sp']);
1110
				$mots = explode(' ', $nom['epithete_infra_sp']);
1105
				foreach ($mots as $mot) {
1111
				foreach ($mots as $mot) {
1106
					if (!(preg_match('/^[+x]$/', $mot) || $this->verifierTypeEpithete($mot)|| $this->verifierEpitheteSp($mot))) {
1112
					if (!(preg_match('/^[+x]$/', $mot) || $this->verifierTypeEpithete($mot)|| $this->verifierEpitheteSp($mot))) {
1107
						$epithete_traite = $this->repererEspace($nom['epithete_infra_sp']);
1113
						$epithete_traite = $this->repererEspace($nom['epithete_infra_sp']);
1108
						$noms_erreur[] = array($nom['num_nom'], $epithete_traite);
1114
						$noms_erreur[] = array($nom['num_nom'], $epithete_traite);
1109
					}
1115
					}
1110
				}
1116
				}
1111
			}
1117
			}
1112
		}
1118
		}
1113
		
1119
		
1114
		// Analyse des résultats
1120
		// Analyse des résultats
1115
		if (count($noms_erreur) > 0) {
1121
		if (count($noms_erreur) > 0) {
1116
			$info['message']['entete'] = array('num_nom', 'epithete_infra_sp erroné');
1122
			$info['message']['entete'] = array('num_nom', 'epithete_infra_sp erroné');
1117
			$info['message']['lignes'] = $noms_erreur;
1123
			$info['message']['lignes'] = $noms_erreur;
1118
		} else {
1124
		} else {
1119
			$info['resultat'] = true;
1125
			$info['resultat'] = true;
1120
		}
1126
		}
1121
		$noms_erreur = null;
1127
		$noms_erreur = null;
1122
		
1128
		
1123
		$this->traiterResultatTest($info);
1129
		$this->traiterResultatTest($info);
1124
	}
1130
	}
1125
	
1131
	
1126
	private function testerEpitheteInfraSpRang() {
1132
	private function testerEpitheteInfraSpRang() {
1127
		$info = array('nom' => "epithete_infra_sp -> rang > {$this->manuel['rang_sp']}",
1133
		$info = array('nom' => "epithete_infra_sp -> rang > {$this->manuel['rang_sp']}",
1128
			'description' => "Si le champ epithete_infra_sp n'est pas vide alors le rang du nom doit être supérieur à {$this->manuel['rang_sp']}.",
1134
			'description' => "Si le champ epithete_infra_sp n'est pas vide alors le rang du nom doit être supérieur à {$this->manuel['rang_sp']}.",
1129
			'resultat' => false);
1135
			'resultat' => false);
1130
		
1136
		
1131
		// Réalisation du test
1137
		// Réalisation du test
1132
		$noms_erreur = array();
1138
		$noms_erreur = array();
1133
		foreach ($this->noms as &$nom) {
1139
		foreach ($this->noms as &$nom) {
1134
			if ($nom['epithete_infra_sp'] != '') {
1140
			if ($nom['epithete_infra_sp'] != '') {
1135
				if ($nom['rang'] < $this->manuel['rang_sp']) {
1141
				if ($nom['rang'] < $this->manuel['rang_sp']) {
1136
					$noms_erreur[] = array($nom['num_nom'], $nom['nom_sci'], $nom['rang']);
1142
					$noms_erreur[] = array($nom['num_nom'], $nom['nom_sci'], $nom['rang']);
1137
				}
1143
				}
1138
			}
1144
			}
1139
		}
1145
		}
1140
		
1146
		
1141
		// Analyse des résultats
1147
		// Analyse des résultats
1142
		if (count($noms_erreur) > 0) {
1148
		if (count($noms_erreur) > 0) {
1143
			$info['message']['entete'] = array('num_nom', 'nom_sci', 'rang erroné');
1149
			$info['message']['entete'] = array('num_nom', 'nom_sci', 'rang erroné');
1144
			$info['message']['lignes'] = $noms_erreur;
1150
			$info['message']['lignes'] = $noms_erreur;
1145
		} else {
1151
		} else {
1146
			$info['resultat'] = true;
1152
			$info['resultat'] = true;
1147
		}
1153
		}
1148
		$noms_erreur = null;
1154
		$noms_erreur = null;
1149
		
1155
		
1150
		$this->traiterResultatTest($info);
1156
		$this->traiterResultatTest($info);
1151
	}
1157
	}
1152
	
1158
	
1153
	private function testerTypeEpitheteEspaces() {
1159
	private function testerTypeEpitheteEspaces() {
1154
		$info = array('nom' => 'type_epithete -> espaces en trop',
1160
		$info = array('nom' => 'type_epithete -> espaces en trop',
1155
			'description' => "Le champ type_epithete ne doit pas contenir d'espace.",
1161
			'description' => "Le champ type_epithete ne doit pas contenir d'espace.",
1156
			'resultat' => false);
1162
			'resultat' => false);
1157
		
1163
		
1158
		// Réalisation du test
1164
		// Réalisation du test
1159
		$noms_erreur = array();
1165
		$noms_erreur = array();
1160
		foreach ($this->noms as &$nom) {
1166
		foreach ($this->noms as &$nom) {
1161
			if ($nom['type_epithete'] != '') {
1167
			if ($nom['type_epithete'] != '') {
1162
				if (preg_match('/\s+/', $nom['type_epithete'])) {
1168
				if (preg_match('/\s+/', $nom['type_epithete'])) {
1163
					$valeur_traitee = $this->repererEspace($nom['epithete_sp']);
1169
					$valeur_traitee = $this->repererEspace($nom['epithete_sp']);
1164
					$noms_erreur[] = array($nom['num_nom'], $valeur_traitee);
1170
					$noms_erreur[] = array($nom['num_nom'], $valeur_traitee);
1165
				}
1171
				}
1166
			}
1172
			}
1167
		}
1173
		}
1168
		
1174
		
1169
		// Analyse des résultats
1175
		// Analyse des résultats
1170
		if (count($noms_erreur) > 0) {
1176
		if (count($noms_erreur) > 0) {
1171
			$info['message']['entete'] = array('num_nom', 'type_epithete erroné');
1177
			$info['message']['entete'] = array('num_nom', 'type_epithete erroné');
1172
			$info['message']['lignes'] = $noms_erreur;
1178
			$info['message']['lignes'] = $noms_erreur;
1173
		} else {
1179
		} else {
1174
			$info['resultat'] = true;
1180
			$info['resultat'] = true;
1175
		}
1181
		}
1176
		
1182
		
1177
		$this->traiterResultatTest($info);
1183
		$this->traiterResultatTest($info);
1178
	}
1184
	}
1179
	
1185
	
1180
	private function testerTypeEpitheteSyntaxe() {
1186
	private function testerTypeEpitheteSyntaxe() {
1181
		$info = array('nom' => 'type_epithete -> syntaxe',
1187
		$info = array('nom' => 'type_epithete -> syntaxe',
1182
			'description' => "Le champ type_epithete doit contenir un mot unique composé de lettres minuscules, sans ".
1188
			'description' => "Le champ type_epithete doit contenir un mot unique composé de lettres minuscules, sans ".
1183
				" accents, et de tirets (-). Il commence par une lettre minuscule sans accent.",
1189
				" accents, et de tirets (-). Il commence par une lettre minuscule sans accent.",
1184
			'resultat' => false);
1190
			'resultat' => false);
1185
		
1191
		
1186
		// Réalisation du test
1192
		// Réalisation du test
1187
		$noms_erreur = array();
1193
		$noms_erreur = array();
1188
		foreach ($this->noms as &$nom) {
1194
		foreach ($this->noms as &$nom) {
1189
			if ($nom['type_epithete'] != '') {
1195
			if ($nom['type_epithete'] != '') {
1190
				if (!$this->verifierTypeEpithete($nom['type_epithete'])) {
1196
				if (!$this->verifierTypeEpithete($nom['type_epithete'])) {
1191
					$noms_erreur[] = array($nom['num_nom'],  $nom['type_epithete']);
1197
					$noms_erreur[] = array($nom['num_nom'],  $nom['type_epithete']);
1192
				}
1198
				}
1193
			}
1199
			}
1194
		}
1200
		}
1195
		
1201
		
1196
		// Analyse des résultats
1202
		// Analyse des résultats
1197
		if (count($noms_erreur) > 0) {
1203
		if (count($noms_erreur) > 0) {
1198
			$info['message']['entete'] = array('num_nom', 'type_epithete erroné');
1204
			$info['message']['entete'] = array('num_nom', 'type_epithete erroné');
1199
			$info['message']['lignes'] = $noms_erreur;
1205
			$info['message']['lignes'] = $noms_erreur;
1200
		} else {
1206
		} else {
1201
			$info['resultat'] = true;
1207
			$info['resultat'] = true;
1202
		}
1208
		}
1203
		
1209
		
1204
		$this->traiterResultatTest($info);
1210
		$this->traiterResultatTest($info);
1205
	}
1211
	}
1206
	
1212
	
1207
	private function testerTypeEpitheteHybridite() {
1213
	private function testerTypeEpitheteHybridite() {
1208
		$info = array('nom' => 'type_epithete -> hybridité',
1214
		$info = array('nom' => 'type_epithete -> hybridité',
1209
			'description' => "Le champ type_epithete ne doit pas contenir de préfixe indiquant l'hybridité comme : \n".
1215
			'description' => "Le champ type_epithete ne doit pas contenir de préfixe indiquant l'hybridité comme : \n".
1210
				" - «n-» \n".
1216
				" - «n-» \n".
1211
				" - «notho-» \n",
1217
				" - «notho-» \n",
1212
			'resultat' => false);
1218
			'resultat' => false);
1213
		
1219
		
1214
		// Réalisation du test
1220
		// Réalisation du test
1215
		$noms_erreur = array();
1221
		$noms_erreur = array();
1216
		foreach ($this->noms as &$nom) {
1222
		foreach ($this->noms as &$nom) {
1217
			if ($nom['type_epithete'] != '') {
1223
			if ($nom['type_epithete'] != '') {
1218
				if (preg_match('/^(?:n-|notho-)/', $nom['type_epithete'])) {
1224
				if (preg_match('/^(?:n-|notho-)/', $nom['type_epithete'])) {
1219
					$noms_erreur[] = array($nom['num_nom'], $nom['type_epithete']);
1225
					$noms_erreur[] = array($nom['num_nom'], $nom['type_epithete']);
1220
				}
1226
				}
1221
			}
1227
			}
1222
		}
1228
		}
1223
		
1229
		
1224
		// Analyse des résultats
1230
		// Analyse des résultats
1225
		if (count($noms_erreur) > 0) {
1231
		if (count($noms_erreur) > 0) {
1226
			$info['message']['entete'] = array('num_nom', 'type_epithete erroné');
1232
			$info['message']['entete'] = array('num_nom', 'type_epithete erroné');
1227
			$info['message']['lignes'] = $noms_erreur;
1233
			$info['message']['lignes'] = $noms_erreur;
1228
		} else {
1234
		} else {
1229
			$info['resultat'] = true;
1235
			$info['resultat'] = true;
1230
		}
1236
		}
1231
		
1237
		
1232
		$this->traiterResultatTest($info);
1238
		$this->traiterResultatTest($info);
1233
	}
1239
	}
1234
	
1240
	
1235
	private function testerNombreDeChamps($colonnes) {
1241
	private function testerNombreDeChamps($colonnes) {
1236
		$info = array('nom' => 'Structure -> nombre de champs',
1242
		$info = array('nom' => 'Structure -> nombre de champs',
1237
			'description' => 'Le nombre de champs présent dans la table doit être supérieur ou égal à 35.',
1243
			'description' => 'Le nombre de champs présent dans la table doit être supérieur ou égal à 35.',
1238
			'resultat' => false);
1244
			'resultat' => false);
1239
		
1245
		
1240
		$nbre_colonnes = count($colonnes);
1246
		$nbre_colonnes = count($colonnes);
1241
		$info['message'] = $nbre_colonnes;
1247
		$info['message'] = $nbre_colonnes;
1242
		if ($nbre_colonnes >= 35) {
1248
		if ($nbre_colonnes >= 35) {
1243
			$info['resultat'] = true;
1249
			$info['resultat'] = true;
1244
		}
1250
		}
1245
		$this->traiterResultatTest($info);
1251
		$this->traiterResultatTest($info);
1246
		return ($info['resultat'] ? '1' : '0');
1252
		return ($info['resultat'] ? '1' : '0');
1247
	}
1253
	}
1248
	
1254
	
1249
	private function testerNomDesChamps($colonnes) {
1255
	private function testerNomDesChamps($colonnes) {
1250
		$info = array('nom' => 'Structure -> noms des champs',
1256
		$info = array('nom' => 'Structure -> noms des champs',
1251
			'description' => 'Les noms des champs de la table contenant le référentiel doivent être conformes à ceux '. 
1257
			'description' => 'Les noms des champs de la table contenant le référentiel doivent être conformes à ceux '. 
1252
								'définis par le manuel technique.',
1258
								'définis par le manuel technique.',
1253
			'resultat' => false);
1259
			'resultat' => false);
1254
		
1260
		
1255
		$champs_attendus = explode(',', $this->manuel['champs']);
1261
		$champs_attendus = explode(',', $this->manuel['champs']);
1256
		$champs_presents = array();
1262
		$champs_presents = array();
1257
		foreach ($colonnes as $colonne) {
1263
		foreach ($colonnes as $colonne) {
1258
			$champs_presents[$colonne['Field']] = $colonne;
1264
			$champs_presents[$colonne['Field']] = $colonne;
1259
		}
1265
		}
1260
		
1266
		
1261
		$ok = true;
1267
		$ok = true;
1262
		$champs_manquant = array(); 
1268
		$champs_manquant = array(); 
1263
		foreach ($champs_attendus as $champ_attendu) {
1269
		foreach ($champs_attendus as $champ_attendu) {
1264
			if (!isset($champs_presents[$champ_attendu])) {
1270
			if (!isset($champs_presents[$champ_attendu])) {
1265
				$champs_manquant[] = $champ_attendu; 
1271
				$champs_manquant[] = $champ_attendu; 
1266
				$ok = false;
1272
				$ok = false;
1267
			}
1273
			}
1268
		}
1274
		}
1269
		$info['resultat'] = $ok;
1275
		$info['resultat'] = $ok;
1270
		if (!$ok) {
1276
		if (!$ok) {
1271
			$info['message'] = 'Champs manquants : '.implode(', ', $champs_manquant).'.';
1277
			$info['message'] = 'Champs manquants : '.implode(', ', $champs_manquant).'.';
1272
		}
1278
		}
1273
		
1279
		
1274
		$this->traiterResultatTest($info);
1280
		$this->traiterResultatTest($info);
1275
		return ($info['resultat'] ? '1' : '0');
1281
		return ($info['resultat'] ? '1' : '0');
1276
	}
1282
	}
1277
	
1283
	
1278
	private function testerTypeDesChamps($colonnes) {
1284
	private function testerTypeDesChamps($colonnes) {
1279
		$info = array('nom' => 'Structure -> types des champs',
1285
		$info = array('nom' => 'Structure -> types des champs',
1280
			'description' => 'Les types des champs de la table contenant le référentiel doivent être conformes à ceux '.
1286
			'description' => 'Les types des champs de la table contenant le référentiel doivent être conformes à ceux '.
1281
								'définis par le manuel technique.',
1287
								'définis par le manuel technique.',
1282
			'resultat' => false);
1288
			'resultat' => false);
1283
		
1289
		
1284
		$champs_attendus = explode(',', $this->manuel['champs_type']);
1290
		$champs_attendus = explode(',', $this->manuel['champs_type']);
1285
		$champs_presents = array();
1291
		$champs_presents = array();
1286
		foreach ($colonnes as $colonne) {
1292
		foreach ($colonnes as $colonne) {
1287
			$champs_presents[$colonne['Field']] = $colonne['Type'];
1293
			$champs_presents[$colonne['Field']] = $colonne['Type'];
1288
		}
1294
		}
1289
		
1295
		
1290
		// Recercherche des erreurs
1296
		// Recercherche des erreurs
1291
		$champs_erreur = array(); 
1297
		$champs_erreur = array(); 
1292
		foreach ($champs_attendus as $champ_attendu) {
1298
		foreach ($champs_attendus as $champ_attendu) {
1293
			list($champ_attendu_nom, $champ_attendu_type_taille) = explode('=', trim($champ_attendu));
1299
			list($champ_attendu_nom, $champ_attendu_type_taille) = explode('=', trim($champ_attendu));
1294
			list($champ_attendu_type, $champ_attendu_taille) = explode('|', trim($champ_attendu_type_taille));
1300
			list($champ_attendu_type, $champ_attendu_taille) = explode('|', trim($champ_attendu_type_taille));
1295
			
1301
			
1296
			if (isset($champs_presents[$champ_attendu_nom])) {
1302
			if (isset($champs_presents[$champ_attendu_nom])) {
1297
				$champs_present_type = $champs_presents[$champ_attendu_nom];
1303
				$champs_present_type = $champs_presents[$champ_attendu_nom];
1298
				
1304
				
1299
				if (($champ_attendu_type == 'VARCHAR' && strstr($champs_present_type, 'varchar') === false)
1305
				if (($champ_attendu_type == 'VARCHAR' && strstr($champs_present_type, 'varchar') === false)
1300
					|| ($champ_attendu_type == 'TEXT' && strstr($champs_present_type, 'text') === false)
1306
					|| ($champ_attendu_type == 'TEXT' && strstr($champs_present_type, 'text') === false)
1301
					|| ($champ_attendu_type == 'INT' && strstr($champs_present_type, 'int') === false) 
1307
					|| ($champ_attendu_type == 'INT' && strstr($champs_present_type, 'int') === false) 
1302
					|| ($champ_attendu_type == 'BOOL' && preg_match('/(?:bool|boolean|tinyint\(1\))/i', $champs_present_type) === false)) {
1308
					|| ($champ_attendu_type == 'BOOL' && preg_match('/(?:bool|boolean|tinyint\(1\))/i', $champs_present_type) === false)) {
1303
					$champs_erreur[] = $champ_attendu." vaut ".$champs_present_type;
1309
					$champs_erreur[] = $champ_attendu." vaut ".$champs_present_type;
1304
				}
1310
				}
1305
			}
1311
			}
1306
		}
1312
		}
1307
		
1313
		
1308
		// Analyse des résultats
1314
		// Analyse des résultats
1309
		if (count($champs_erreur) > 0) {
1315
		if (count($champs_erreur) > 0) {
1310
			$info['message'] = "Champs n'ayant pas un type conforme : ".implode(', ', $champs_erreur).'.';
1316
			$info['message'] = "Champs n'ayant pas un type conforme : ".implode(', ', $champs_erreur).'.';
1311
		} else {
1317
		} else {
1312
			$info['resultat'] = true;
1318
			$info['resultat'] = true;
1313
		}
1319
		}
1314
		
1320
		
1315
		$this->traiterResultatTest($info);
1321
		$this->traiterResultatTest($info);
1316
		return ($info['resultat'] ? '1' : '0');
1322
		return ($info['resultat'] ? '1' : '0');
1317
	}
1323
	}
1318
	
1324
	
1319
	private function testerTailleDesChamps($colonnes, $analyses) {
1325
	private function testerTailleDesChamps($colonnes, $analyses) {
1320
		$info = array('nom' => 'Structure -> champs tronqués',
1326
		$info = array('nom' => 'Structure -> champs tronqués',
1321
			'description' => "Evalue le risque que des données de type texte aient pu être tronquées lors de leur insertion.\n".
1327
			'description' => "Evalue le risque que des données de type texte aient pu être tronquées lors de leur insertion.\n".
1322
				"Un résultat de type KO ne signifie pas forcément un problème à résoudre mais attire l'attention du coordinateur ".
1328
				"Un résultat de type KO ne signifie pas forcément un problème à résoudre mais attire l'attention du coordinateur ".
1323
				"sur un problème éventuel.",
1329
				"sur un problème éventuel.",
1324
			'resultat' => false);
1330
			'resultat' => false);
1325
		
1331
		
1326
		$tailles_champs_maxi = array();
1332
		$tailles_champs_maxi = array();
1327
		foreach ($colonnes as $colonne) {
1333
		foreach ($colonnes as $colonne) {
1328
			if (preg_match('/^varchar\(([0-9]+)\)$/', $colonne['Type'], $match)) {
1334
			if (preg_match('/^varchar\(([0-9]+)\)$/', $colonne['Type'], $match)) {
1329
				$tailles_champs_maxi[$colonne['Field']] = $match[1];
1335
				$tailles_champs_maxi[$colonne['Field']] = $match[1];
1330
			}
1336
			}
1331
		}
1337
		}
1332
		
1338
		
1333
		$tailles_trouvees = array();
1339
		$tailles_trouvees = array();
1334
		foreach ($analyses as $analyse) {
1340
		foreach ($analyses as $analyse) {
1335
			if (preg_match('/\.([^.]+)$/', $analyse['Field_name'], $match)) {
1341
			if (preg_match('/\.([^.]+)$/', $analyse['Field_name'], $match)) {
1336
				$tailles_trouvees[$match[1]] = $analyse['Max_length'];
1342
				$tailles_trouvees[$match[1]] = $analyse['Max_length'];
1337
			}
1343
			}
1338
		}
1344
		}
1339
		
1345
		
1340
		$champs_erreur = array();
1346
		$champs_erreur = array();
1341
		$champs_attendus = explode(',', $this->manuel['champs']);
1347
		$champs_attendus = explode(',', $this->manuel['champs']);
1342
		foreach ($champs_attendus as $champ_attendu) {
1348
		foreach ($champs_attendus as $champ_attendu) {
1343
			if (isset($tailles_champs_maxi[$champ_attendu]) && isset($tailles_trouvees[$champ_attendu])) {
1349
			if (isset($tailles_champs_maxi[$champ_attendu]) && isset($tailles_trouvees[$champ_attendu])) {
1344
				if ($tailles_champs_maxi[$champ_attendu] == $tailles_trouvees[$champ_attendu]) {
1350
				if ($tailles_champs_maxi[$champ_attendu] == $tailles_trouvees[$champ_attendu]) {
1345
					$champs_erreur[] = $champ_attendu;
1351
					$champs_erreur[] = $champ_attendu;
1346
				}
1352
				}
1347
			}
1353
			}
1348
		}
1354
		}
1349
		
1355
		
1350
		// Analyse des résultats
1356
		// Analyse des résultats
1351
		if (count($champs_erreur) > 0) {
1357
		if (count($champs_erreur) > 0) {
1352
			$info['message'] = "Champs possédant des enregistrements qui atteignent la taille maximum autorisée : ".
1358
			$info['message'] = "Champs possédant des enregistrements qui atteignent la taille maximum autorisée : ".
1353
								implode(', ', $champs_erreur).'.';
1359
								implode(', ', $champs_erreur).'.';
1354
		} else {
1360
		} else {
1355
			$info['resultat'] = true;
1361
			$info['resultat'] = true;
1356
		}
1362
		}
1357
		
1363
		
1358
		$this->traiterResultatTest($info);
1364
		$this->traiterResultatTest($info);
1359
	}
1365
	}
1360
	
1366
	
1361
	private function testerNumNomClePrimaire($colonnes) {
1367
	private function testerNumNomClePrimaire($colonnes) {
1362
		$info = array('nom' => 'Structure -> num_nom est clé primaire',
1368
		$info = array('nom' => 'Structure -> num_nom est clé primaire',
1363
			'description' => "Vérifie que le champ num_nom est bien la clé primaire de la table.",
1369
			'description' => "Vérifie que le champ num_nom est bien la clé primaire de la table.",
1364
			'resultat' => false);
1370
			'resultat' => false);
1365
		
1371
		
1366
		foreach ($colonnes as $colonne) {
1372
		foreach ($colonnes as $colonne) {
1367
			if ($colonne['Field'] == 'num_nom' && $colonne['Key'] == 'PRI') {
1373
			if ($colonne['Field'] == 'num_nom' && $colonne['Key'] == 'PRI') {
1368
				$info['resultat'] = true;
1374
				$info['resultat'] = true;
1369
			}
1375
			}
1370
		}
1376
		}
1371
		
1377
		
1372
		$this->traiterResultatTest($info);
1378
		$this->traiterResultatTest($info);
1373
		return ($info['resultat'] ? '1' : '0');
1379
		return ($info['resultat'] ? '1' : '0');
1374
	}
1380
	}
1375
	
1381
	
1376
	private function testerNumNomSuperieurAZero() {
1382
	private function testerNumNomSuperieurAZero() {
1377
		$info = array('nom' => 'num_nom -> supérieur à 0',
1383
		$info = array('nom' => 'num_nom -> supérieur à 0',
1378
			'description' => "Le champ num_nom doit contenir des nombres entiers supérieurs à 0.",
1384
			'description' => "Le champ num_nom doit contenir des nombres entiers supérieurs à 0.",
1379
			'resultat' => false);
1385
			'resultat' => false);
1380
		
1386
		
1381
		// Réalisation du test
1387
		// Réalisation du test
1382
		$noms_erreur = array();
1388
		$noms_erreur = array();
1383
		foreach ($this->noms as &$nom) {
1389
		foreach ($this->noms as &$nom) {
1384
			if ($nom['num_nom'] <= 0) {
1390
			if ($nom['num_nom'] <= 0) {
1385
				$noms_erreur[] = $nom['num_nom'];
1391
				$noms_erreur[] = $nom['num_nom'];
1386
			}
1392
			}
1387
		}
1393
		}
1388
		
1394
		
1389
		// Analyse des résultats
1395
		// Analyse des résultats
1390
		if (count($noms_erreur) > 0) {
1396
		if (count($noms_erreur) > 0) {
1391
			$info['message'] = count($noms_erreur)." enregistrements contiennent dans le champ num_nom une valeur ".
1397
			$info['message'] = count($noms_erreur)." enregistrements contiennent dans le champ num_nom une valeur ".
1392
								"inférieure ou égale à 0.";
1398
								"inférieure ou égale à 0.";
1393
		} else {
1399
		} else {
1394
			$info['resultat'] = true;
1400
			$info['resultat'] = true;
1395
		}
1401
		}
1396
		
1402
		
1397
		$this->traiterResultatTest($info);
1403
		$this->traiterResultatTest($info);
1398
	}
1404
	}
1399
	
1405
	
1400
	private function testerNumNomRetenuSuperieurAZero() {
1406
	private function testerNumNomRetenuSuperieurAZero() {
1401
		$info = array('nom' => 'num_nom_retenu -> supérieur à 0',
1407
		$info = array('nom' => 'num_nom_retenu -> supérieur à 0',
1402
			'description' => "Le champ num_nom_retenu doit contenir des nombres entiers supérieurs à 0 ou être vide.",
1408
			'description' => "Le champ num_nom_retenu doit contenir des nombres entiers supérieurs à 0 ou être vide.",
1403
			'resultat' => false);
1409
			'resultat' => false);
1404
		
1410
		
1405
		// Réalisation du test
1411
		// Réalisation du test
1406
		$noms_erreur = array();
1412
		$noms_erreur = array();
1407
		foreach ($this->noms as &$nom) {
1413
		foreach ($this->noms as &$nom) {
1408
			if ($nom['num_nom_retenu'] != '' && $nom['num_nom_retenu'] <= 0) {
1414
			if ($nom['num_nom_retenu'] != '' && $nom['num_nom_retenu'] <= 0) {
1409
				$noms_erreur[] = $nom['num_nom'];
1415
				$noms_erreur[] = $nom['num_nom'];
1410
			}
1416
			}
1411
		}
1417
		}
1412
		
1418
		
1413
		// Analyse des résultats
1419
		// Analyse des résultats
1414
		if (count($noms_erreur) > 0) {
1420
		if (count($noms_erreur) > 0) {
1415
			$info['message'] = count($noms_erreur)." enregistrements dont le champ num_nom_retenu est inférieur ou égal à 0 : ".
1421
			$info['message'] = count($noms_erreur)." enregistrements dont le champ num_nom_retenu est inférieur ou égal à 0 : ".
1416
								implode(', ', $noms_erreur).'.';
1422
								implode(', ', $noms_erreur).'.';
1417
		} else {
1423
		} else {
1418
			$info['resultat'] = true;
1424
			$info['resultat'] = true;
1419
		}
1425
		}
1420
		
1426
		
1421
		$this->traiterResultatTest($info);
1427
		$this->traiterResultatTest($info);
1422
	}
1428
	}
1423
	
1429
	
1424
	private function testerNumTaxSupEgalZeroUnique() {
1430
	private function testerNumTaxSupEgalZeroUnique() {
1425
		$info = array('nom' => 'num_tax_sup -> égal à 0 unique',
1431
		$info = array('nom' => 'num_tax_sup -> égal à 0 unique',
1426
			'description' => "Un seul enregistrement doit posséder la valeur 0 dans le champ num_tax_sup. Il correspond ".
1432
			'description' => "Un seul enregistrement doit posséder la valeur 0 dans le champ num_tax_sup. Il correspond ".
1427
								"au premier taxon de la classification.",
1433
								"au premier taxon de la classification.",
1428
			'resultat' => false);
1434
			'resultat' => false);
1429
		
1435
		
1430
		// Réalisation du test
1436
		// Réalisation du test
1431
		$noms_erreur = array();
1437
		$noms_erreur = array();
1432
		foreach ($this->noms as &$nom) {
1438
		foreach ($this->noms as &$nom) {
1433
			if (preg_match('/^0$/', $nom['num_tax_sup'])) {
1439
			if (preg_match('/^0$/', $nom['num_tax_sup'])) {
1434
				$noms_erreur[] = $nom['num_nom'];
1440
				$noms_erreur[] = $nom['num_nom'];
1435
			}
1441
			}
1436
		}
1442
		}
1437
		
1443
		
1438
		// Analyse des résultats
1444
		// Analyse des résultats
1439
		if (count($noms_erreur) > 1) {
1445
		if (count($noms_erreur) > 1) {
1440
			$info['message'] = count($noms_erreur)." enregistrements ont une valeur de 0 dans le champ num_tax_sup : ".
1446
			$info['message'] = count($noms_erreur)." enregistrements ont une valeur de 0 dans le champ num_tax_sup : ".
1441
								implode(', ', $noms_erreur).'.';
1447
								implode(', ', $noms_erreur).'.';
1442
		} else {
1448
		} else {
1443
			$info['resultat'] = true;
1449
			$info['resultat'] = true;
1444
		}
1450
		}
1445
		
1451
		
1446
		$this->traiterResultatTest($info);
1452
		$this->traiterResultatTest($info);
1447
	}
1453
	}
1448
	
1454
	
1449
	private function testerTaxSupPourTaxon() {
1455
	private function testerTaxSupPourTaxon() {
1450
		$info = array('nom' => 'Classification -> uniquement pour les taxons',
1456
		$info = array('nom' => 'Classification -> uniquement pour les taxons',
1451
			'description' => "Seuls les enregistrements représentant un taxon doivent posséder une valeur dans le champ ".
1457
			'description' => "Seuls les enregistrements représentant un taxon doivent posséder une valeur dans le champ ".
1452
				"num_tax_sup.\n Si num_nom_retenu est différent de num_nom (= nom synonyme) alors num_tax_sup doit être vide.",
1458
				"num_tax_sup.\n Si num_nom_retenu est différent de num_nom (= nom synonyme) alors num_tax_sup doit être vide.",
1453
			'resultat' => false);
1459
			'resultat' => false);
1454
		
1460
		
1455
		// Réalisation du test
1461
		// Réalisation du test
1456
		$noms_erreur = array();
1462
		$noms_erreur = array();
1457
		foreach ($this->noms as &$nom) {
1463
		foreach ($this->noms as &$nom) {
1458
			if ($nom['num_nom_retenu'] != $nom['num_nom'] && $nom['num_tax_sup'] != '') {
1464
			if ($nom['num_nom_retenu'] != $nom['num_nom'] && $nom['num_tax_sup'] != '') {
1459
				$noms_erreur[] = $nom['num_nom']; 
1465
				$noms_erreur[] = $nom['num_nom']; 
1460
			}
1466
			}
1461
		}
1467
		}
1462
		
1468
		
1463
		// Analyse des résultats
1469
		// Analyse des résultats
1464
		if (count($noms_erreur) > 0) {
1470
		if (count($noms_erreur) > 0) {
1465
			$info['message'] = count($noms_erreur)." enregistrements ne sont pas des taxons et possèdent une ".
1471
			$info['message'] = count($noms_erreur)." enregistrements ne sont pas des taxons et possèdent une ".
1466
								"valeur dans num_tax_sup : ".implode(', ', $noms_erreur).'.';
1472
								"valeur dans num_tax_sup : ".implode(', ', $noms_erreur).'.';
1467
		} else {
1473
		} else {
1468
			$info['resultat'] = true;
1474
			$info['resultat'] = true;
1469
		}
1475
		}
1470
		
1476
		
1471
		$this->traiterResultatTest($info);
1477
		$this->traiterResultatTest($info);
1472
	}
1478
	}
1473
	
1479
	
1474
	private function testerExitenceTaxonSuperieur() {
1480
	private function testerExitenceTaxonSuperieur() {
1475
		$info = array('nom' => 'Classification -> existence du taxon supérieur',
1481
		$info = array('nom' => 'Classification -> existence du taxon supérieur',
1476
			'description' => "Chaque enregistrement représentant un taxon doit posséder un taxon supérieur sauf ".
1482
			'description' => "Chaque enregistrement représentant un taxon doit posséder un taxon supérieur sauf ".
1477
								"la racine de la classification.",
1483
								"la racine de la classification.",
1478
			'resultat' => false);
1484
			'resultat' => false);
1479
		
1485
		
1480
		// Réalisation du test
1486
		// Réalisation du test
1481
		$noms_erreur = array();
1487
		$noms_erreur = array();
1482
		foreach ($this->noms as &$nom) {
1488
		foreach ($this->noms as &$nom) {
1483
			if ($nom['num_nom_retenu'] == $nom['num_nom']) {
1489
			if ($nom['num_nom_retenu'] == $nom['num_nom']) {
1484
				if ($nom['num_tax_sup'] != 0 && !isset($this->noms[$nom['num_tax_sup']])) {
1490
				if ($nom['num_tax_sup'] != 0 && !isset($this->noms[$nom['num_tax_sup']])) {
1485
					$noms_erreur[] = $nom['num_nom'];
1491
					$noms_erreur[] = $nom['num_nom'];
1486
				} 
1492
				} 
1487
			}
1493
			}
1488
		}
1494
		}
1489
		
1495
		
1490
		// Analyse des résultats
1496
		// Analyse des résultats
1491
		if (count($noms_erreur) > 0) {
1497
		if (count($noms_erreur) > 0) {
1492
			$info['message'] = count($noms_erreur)." enregistrements dont le taxon supérieur n'existe pas : ".
1498
			$info['message'] = count($noms_erreur)." enregistrements dont le taxon supérieur n'existe pas : ".
1493
								implode(', ', $noms_erreur).'.';
1499
								implode(', ', $noms_erreur).'.';
1494
		} else {
1500
		} else {
1495
			$info['resultat'] = true;
1501
			$info['resultat'] = true;
1496
		}
1502
		}
1497
		
1503
		
1498
		$this->traiterResultatTest($info);
1504
		$this->traiterResultatTest($info);
1499
	}
1505
	}
1500
	
1506
	
1501
	private function testerClassificationRang() {
1507
	private function testerClassificationRang() {
1502
		$info = array('nom' => 'Classification -> taxon supérieur avec rang inférieur',
1508
		$info = array('nom' => 'Classification -> taxon supérieur avec rang inférieur',
1503
			'description' => "Pour chaque enregistrement représentant un taxon, le taxon supérieur doit avoir ".
1509
			'description' => "Pour chaque enregistrement représentant un taxon, le taxon supérieur doit avoir ".
1504
								"un rang inférieur au taxon courant.",
1510
								"un rang inférieur au taxon courant (à l'exception des noms ayant le rang de Clade).",
1505
			'resultat' => false);
1511
			'resultat' => false);
1506
		
1512
		
1507
		// Réalisation du test
1513
		// Réalisation du test
1508
		$noms_erreur = array();
1514
		$noms_erreur = array();
1509
		foreach ($this->noms as &$nom) {
1515
		foreach ($this->noms as &$nom) {
1510
			if ($nom['num_nom_retenu'] == $nom['num_nom']) {
1516
			if ($nom['num_nom_retenu'] == $nom['num_nom']) {
1511
				if (isset($this->noms[$nom['num_tax_sup']])) {
1517
				if (isset($this->noms[$nom['num_tax_sup']])) {
1512
					$nom_sup = $this->noms[$nom['num_tax_sup']];
1518
					$nom_sup = $this->noms[$nom['num_tax_sup']];
1513
					if ($nom_sup['rang'] > $nom['rang']) {
1519
					if ($nom_sup['rang'] >= $nom['rang']) {
-
 
1520
						// Prise en compte de l'exception des clades
-
 
1521
						if (! ($nom_sup['rang'] == 70 && $nom['rang'] == 70)) {
1514
						$noms_erreur[] = $nom['num_nom'];
1522
							$noms_erreur[] = $nom['num_nom'];
1515
					}
1523
						}
-
 
1524
					}
1516
				}
1525
				}
1517
			}
1526
			}
1518
		}
1527
		}
1519
		
1528
		
1520
		// Analyse des résultats
1529
		// Analyse des résultats
1521
		if (count($noms_erreur) > 0) {
1530
		if (count($noms_erreur) > 0) {
1522
			$info['message'] = count($noms_erreur)." enregistrements avec un problème : ".implode(', ', $noms_erreur).'.';
1531
			$info['message'] = count($noms_erreur)." enregistrements avec un problème : ".implode(', ', $noms_erreur).'.';
1523
		} else {
1532
		} else {
1524
			$info['resultat'] = true;
1533
			$info['resultat'] = true;
1525
		}
1534
		}
1526
		
1535
		
1527
		$this->traiterResultatTest($info);
1536
		$this->traiterResultatTest($info);
1528
	}
1537
	}
1529
	
1538
	
1530
	private function testerClassification() {
1539
	private function testerClassification() {
1531
		$info = array('nom' => 'Classification -> racine liée à chaque noeud',
1540
		$info = array('nom' => 'Classification -> racine liée à chaque noeud',
1532
			'description' => "Pour chaque enregistrement, la classification doit pouvoir être remontée ".
1541
			'description' => "Pour chaque enregistrement, la classification doit pouvoir être remontée ".
1533
								"jusqu'à un nom unique possédant une valeur num_tax_sup de 0.",
1542
								"jusqu'à un nom unique possédant une valeur num_tax_sup de 0.",
1534
			'resultat' => false);
1543
			'resultat' => false);
1535
		
1544
		
1536
		// Réalisation du test
1545
		// Réalisation du test
1537
		$noms_erreur = array();
1546
		$noms_erreur = array();
1538
		$this->noms_ok = array();
1547
		$this->noms_ok = array();
1539
		foreach ($this->noms as &$nom) {
1548
		foreach ($this->noms as &$nom) {
1540
			if ($nom['num_nom_retenu'] == $nom['num_nom']) {
1549
			if ($nom['num_nom_retenu'] == $nom['num_nom']) {
1541
				if (isset($this->noms_ok[$nom['num_tax_sup']])) {
1550
				if (isset($this->noms_ok[$nom['num_tax_sup']])) {
1542
					$this->noms_ok[$nom['num_nom']] = true;
1551
					$this->noms_ok[$nom['num_nom']] = true;
1543
				} else {
1552
				} else {
1544
					$this->detection_boucle_infini = array();
1553
					$this->detection_boucle_infini = array();
1545
					$classif_ok = $this->remonterClassif($nom);
1554
					$classif_ok = $this->remonterClassif($nom);
1546
					unset($this->detection_boucle_infini); 
1555
					unset($this->detection_boucle_infini); 
1547
					
1556
					
1548
					if ($classif_ok === false) {
1557
					if ($classif_ok === false) {
1549
						$noms_erreur[] = $nom['num_nom'];
1558
						$noms_erreur[] = $nom['num_nom'];
1550
					} else {
1559
					} else {
1551
						$this->noms_ok[$nom['num_nom']] = $classif_ok;
1560
						$this->noms_ok[$nom['num_nom']] = $classif_ok;
1552
					}
1561
					}
1553
				}
1562
				}
1554
			}
1563
			}
1555
		}
1564
		}
1556
		unset($this->noms_ok);
1565
		unset($this->noms_ok);
1557
		
1566
		
1558
		// Analyse des résultats
1567
		// Analyse des résultats
1559
		if (count($noms_erreur) > 0) {
1568
		if (count($noms_erreur) > 0) {
1560
			$info['message'] = count($noms_erreur)." taxons dont la classification n'est pas bonne : ".
1569
			$info['message'] = count($noms_erreur)." taxons dont la classification n'est pas bonne : ".
1561
								implode(', ', $noms_erreur).'.';
1570
								implode(', ', $noms_erreur).'.';
1562
		} else {
1571
		} else {
1563
			$info['resultat'] = true;
1572
			$info['resultat'] = true;
1564
		}
1573
		}
1565
		
1574
		
1566
		$this->traiterResultatTest($info);
1575
		$this->traiterResultatTest($info);
1567
	}
1576
	}
1568
	
1577
	
1569
	private function remonterClassif(&$nom) {
1578
	private function remonterClassif(&$nom) {
1570
		$this->detection_boucle_infini[$nom['num_nom']] = true;
1579
		$this->detection_boucle_infini[$nom['num_nom']] = true;
1571
		if (preg_match('/^[0-9]*$/', $nom['num_tax_sup'])) {
1580
		if (preg_match('/^[0-9]*$/', $nom['num_tax_sup'])) {
1572
			if (isset($this->noms_ok[$nom['num_tax_sup']])) {
1581
			if (isset($this->noms_ok[$nom['num_tax_sup']])) {
1573
				$this->noms_ok[$nom['num_nom']] = true;
1582
				$this->noms_ok[$nom['num_nom']] = true;
1574
				return true;
1583
				return true;
1575
			} else if (!isset($this->noms[$nom['num_tax_sup']]) && $nom['num_tax_sup'] == '0') {
1584
			} else if (!isset($this->noms[$nom['num_tax_sup']]) && $nom['num_tax_sup'] == '0') {
1576
				$this->noms_ok[$nom['num_nom']] = true;
1585
				$this->noms_ok[$nom['num_nom']] = true;
1577
				return true;
1586
				return true;
1578
			} else if (!isset($this->noms[$nom['num_tax_sup']]) && $nom['num_tax_sup'] != '0') {
1587
			} else if (!isset($this->noms[$nom['num_tax_sup']]) && $nom['num_tax_sup'] != '0') {
1579
				return false;
1588
				return false;
1580
			} else if (isset($this->detection_boucle_infini[$nom['num_tax_sup']])) {
1589
			} else if (isset($this->detection_boucle_infini[$nom['num_tax_sup']])) {
1581
				return false;
1590
				return false;
1582
			} else {
1591
			} else {
1583
				$retour = $this->remonterClassif($this->noms[$nom['num_tax_sup']]);
1592
				$retour = $this->remonterClassif($this->noms[$nom['num_tax_sup']]);
1584
				if ($retour === true) {
1593
				if ($retour === true) {
1585
					$this->noms_ok[$nom['num_tax_sup']] = true;
1594
					$this->noms_ok[$nom['num_tax_sup']] = true;
1586
				}
1595
				}
1587
				return $retour;
1596
				return $retour;
1588
			}
1597
			}
1589
		} else {
1598
		} else {
1590
			return false;
1599
			return false;
1591
		}
1600
		}
1592
	}
1601
	}
1593
	
1602
	
1594
	private function testerRang() {
1603
	private function testerRang() {
1595
		$info = array('nom' => 'rang',
1604
		$info = array('nom' => 'rang',
1596
			'description' => "Le rang doit correspondre à une valeur numérique définie dans le manuel.",
1605
			'description' => "Le rang doit correspondre à une valeur numérique définie dans le manuel.",
1597
			'resultat' => false);
1606
			'resultat' => false);
1598
		
1607
		
1599
		$rangs = array_flip(explode(',', $this->manuel['rangs']));
1608
		$rangs = array_flip(explode(',', $this->manuel['rangs']));
1600
		
1609
		
1601
		// Réalisation du test
1610
		// Réalisation du test
1602
		$noms_erreur = array();
1611
		$noms_erreur = array();
1603
		foreach ($this->noms as &$nom) {
1612
		foreach ($this->noms as &$nom) {
1604
			if (!isset($rangs[$nom['rang']])) {
1613
			if (!isset($rangs[$nom['rang']])) {
1605
				$noms_erreur[] = $nom['num_nom'];
1614
				$noms_erreur[] = $nom['num_nom'];
1606
			}
1615
			}
1607
		}
1616
		}
1608
		
1617
		
1609
		// Analyse des résultats
1618
		// Analyse des résultats
1610
		if (count($noms_erreur) > 0) {
1619
		if (count($noms_erreur) > 0) {
1611
			$info['message'] = count($noms_erreur)." noms dont le rang n'est pas bon : ".implode(', ', $noms_erreur).'.';
1620
			$info['message'] = count($noms_erreur)." noms dont le rang n'est pas bon : ".implode(', ', $noms_erreur).'.';
1612
		} else {
1621
		} else {
1613
			$info['resultat'] = true;
1622
			$info['resultat'] = true;
1614
		}
1623
		}
1615
		
1624
		
1616
		$this->traiterResultatTest($info);
1625
		$this->traiterResultatTest($info);
1617
	}
1626
	}
1618
	
1627
	
1619
	private function testerNomCompletSupraGenerique() {
1628
	private function testerNomCompletSupraGenerique() {
1620
		$info = array('nom' => 'nom_sci -> noms supra-génériques',
1629
		$info = array('nom' => 'nom_sci -> noms supra-génériques',
1621
			'description' => "Si le rang est < à {$this->manuel['rang_genre']}, le nom_sci doit correspondre à la valeur ".
1630
			'description' => "Si le rang est < à {$this->manuel['rang_genre']}, le nom_sci doit correspondre à la valeur ".
1622
								"du champ nom_supra_generique. Les valeurs des champs cultivar_groupe, cultivar et ".
1631
								"du champ nom_supra_generique. Les valeurs des champs cultivar_groupe, cultivar et ".
1623
								"nom_commercial peuvent s'y ajouter.",
1632
								"nom_commercial peuvent s'y ajouter.",
1624
			'resultat' => false);
1633
			'resultat' => false);
1625
		
1634
		
1626
		// Réalisation du test
1635
		// Réalisation du test
1627
		$noms_erreur = array();
1636
		$noms_erreur = array();
1628
		foreach ($this->noms as &$nom) {
1637
		foreach ($this->noms as &$nom) {
1629
			if ($nom['rang'] < $this->manuel['rang_genre']) {
1638
			if ($nom['rang'] < $this->manuel['rang_genre']) {
1630
				$suffixe_plte_cultivee = $this->construireSuffixeNomPltCultivee($nom);
1639
				$suffixe_plte_cultivee = $this->construireSuffixeNomPltCultivee($nom);
1631
				$nom_sci_ideal = $this->formaterStyleNomGenre($nom['nom_supra_generique']);
1640
				$nom_sci_ideal = $this->formaterStyleNomGenre($nom['nom_supra_generique']);
1632
				$nom_sci_ideal .= ($suffixe_plte_cultivee != '' ? ' '.$suffixe_plte_cultivee : '');
1641
				$nom_sci_ideal .= ($suffixe_plte_cultivee != '' ? ' '.$suffixe_plte_cultivee : '');
1633
				if ($nom['nom_sci'] != $nom_sci_ideal) {
1642
				if ($nom['nom_sci'] != $nom_sci_ideal) {
1634
					$nom_sci_traite = $this->repererEspace($nom['nom_sci']);
1643
					$nom_sci_traite = $this->repererEspace($nom['nom_sci']);
1635
					$noms_erreur[] = array($nom['num_nom'], $nom_sci_traite, $nom_sci_ideal);
1644
					$noms_erreur[] = array($nom['num_nom'], $nom_sci_traite, $nom_sci_ideal);
1636
				}
1645
				}
1637
			}
1646
			}
1638
		}
1647
		}
1639
		
1648
		
1640
		// Analyse des résultats
1649
		// Analyse des résultats
1641
		if (count($noms_erreur) > 0) {
1650
		if (count($noms_erreur) > 0) {
1642
			$info['message']['entete'] = array('num_nom', 'nom_sci', 'nom_sci corrigé');
1651
			$info['message']['entete'] = array('num_nom', 'nom_sci', 'nom_sci corrigé');
1643
			$info['message']['lignes'] = $noms_erreur;
1652
			$info['message']['lignes'] = $noms_erreur;
1644
		} else {
1653
		} else {
1645
			$info['resultat'] = true;
1654
			$info['resultat'] = true;
1646
		}
1655
		}
1647
		
1656
		
1648
		$this->traiterResultatTest($info);
1657
		$this->traiterResultatTest($info);
1649
	}
1658
	}
1650
	
1659
	
1651
	private function testerNomCompletGenre() {
1660
	private function testerNomCompletGenre() {
1652
		$info = array('nom' => 'nom_sci -> noms de genres',
1661
		$info = array('nom' => 'nom_sci -> noms de genres',
1653
			'description' => "Si le rang est = à {$this->manuel['rang_genre']}, le nom_sci doit correspondre à la valeur du champ genre. ".
1662
			'description' => "Si le rang est = à {$this->manuel['rang_genre']}, le nom_sci doit correspondre à la valeur du champ genre. ".
1654
				"Les valeurs des champs cultivar_groupe, cultivar et nom_commercial peuvent s'y ajouter.",
1663
				"Les valeurs des champs cultivar_groupe, cultivar et nom_commercial peuvent s'y ajouter.",
1655
			'resultat' => false);
1664
			'resultat' => false);
1656
		
1665
		
1657
		// Réalisation du test
1666
		// Réalisation du test
1658
		$noms_erreur = array();
1667
		$noms_erreur = array();
1659
		foreach ($this->noms as &$nom) {
1668
		foreach ($this->noms as &$nom) {
1660
			if ($nom['rang'] == $this->manuel['rang_genre']) {
1669
			if ($nom['rang'] == $this->manuel['rang_genre']) {
1661
				$suffixe_plte_cultivee = $this->construireSuffixeNomPltCultivee($nom);
1670
				$suffixe_plte_cultivee = $this->construireSuffixeNomPltCultivee($nom);
1662
				$nom_sci_ideal = $this->formaterStyleNomGenre($nom['genre']);
1671
				$nom_sci_ideal = $this->formaterStyleNomGenre($nom['genre']);
1663
				$nom_sci_ideal .= ($suffixe_plte_cultivee != '' ? ' '.$suffixe_plte_cultivee : '');
1672
				$nom_sci_ideal .= ($suffixe_plte_cultivee != '' ? ' '.$suffixe_plte_cultivee : '');
1664
				if ($nom['nom_sci'] != $nom_sci_ideal) {
1673
				if ($nom['nom_sci'] != $nom_sci_ideal) {
1665
					$nom_sci_traite = $this->repererEspace($nom['nom_sci']);
1674
					$nom_sci_traite = $this->repererEspace($nom['nom_sci']);
1666
					$noms_erreur[] = array($nom['num_nom'], $nom_sci_traite, $nom_sci_ideal);
1675
					$noms_erreur[] = array($nom['num_nom'], $nom_sci_traite, $nom_sci_ideal);
1667
				}
1676
				}
1668
			}
1677
			}
1669
		}
1678
		}
1670
		
1679
		
1671
		// Analyse des résultats
1680
		// Analyse des résultats
1672
		if (count($noms_erreur) > 0) {
1681
		if (count($noms_erreur) > 0) {
1673
			$info['message']['entete'] = array('num_nom', 'nom_sci', 'nom_sci corrigé');
1682
			$info['message']['entete'] = array('num_nom', 'nom_sci', 'nom_sci corrigé');
1674
			$info['message']['lignes'] = $noms_erreur;
1683
			$info['message']['lignes'] = $noms_erreur;
1675
		} else {
1684
		} else {
1676
			$info['resultat'] = true;
1685
			$info['resultat'] = true;
1677
		}
1686
		}
1678
		
1687
		
1679
		$this->traiterResultatTest($info);
1688
		$this->traiterResultatTest($info);
1680
	}
1689
	}
1681
	
1690
	
1682
	private function testerNomCompletInfraGenre() {
1691
	private function testerNomCompletInfraGenre() {
1683
		$info = array('nom' => 'nom_sci -> noms infra-génériques',
1692
		$info = array('nom' => 'nom_sci -> noms infra-génériques',
1684
			'description' => "Si le rang est > à {$this->manuel['rang_genre']} et < à {$this->manuel['rang_sp']},".
1693
			'description' => "Si le rang est > à {$this->manuel['rang_genre']} et < à {$this->manuel['rang_sp']},".
1685
			" le nom_sci doit correspondre à une des formules suivantes : \n".
1694
			" le nom_sci doit correspondre à une des formules suivantes : \n".
1686
			" genre + ' ' + type_epithete + ' ' + epithete_infra_generique \n".
1695
			" genre + ' ' + type_epithete + ' ' + epithete_infra_generique \n".
1687
			" genre + ' ' + epithete_infra_generique + ' ' + type_epithete=agg. \n".
1696
			" genre + ' ' + epithete_infra_generique + ' ' + type_epithete=agg. \n".
1688
			"Les valeurs des champs cultivar_groupe, cultivar et nom_commercial peuvent s'y ajouter.",
1697
			"Les valeurs des champs cultivar_groupe, cultivar et nom_commercial peuvent s'y ajouter.",
1689
			'resultat' => false);
1698
			'resultat' => false);
1690
		
1699
		
1691
		// Réalisation du test
1700
		// Réalisation du test
1692
		$noms_erreur = array();
1701
		$noms_erreur = array();
1693
		foreach ($this->noms as &$nom) {
1702
		foreach ($this->noms as &$nom) {
1694
			if ($nom['rang'] > $this->manuel['rang_genre'] && $nom['rang'] < $this->manuel['rang_sp']) {
1703
			if ($nom['rang'] > $this->manuel['rang_genre'] && $nom['rang'] < $this->manuel['rang_sp']) {
1695
				$suffixe_plte_cultivee = $this->construireSuffixeNomPltCultivee($nom);
1704
				$suffixe_plte_cultivee = $this->construireSuffixeNomPltCultivee($nom);
1696
				$nom_sci_ideal = '';
1705
				$nom_sci_ideal = '';
1697
				if ($nom['type_epithete'] == 'agg.') {
1706
				if ($nom['type_epithete'] == 'agg.') {
1698
					$nom_sci_ideal = $this->formaterStyleNomGenre($nom['genre']);
1707
					$nom_sci_ideal = $this->formaterStyleNomGenre($nom['genre']);
1699
					$nom_sci_ideal .= ' '.$this->formaterStyleNomGenre($nom['epithete_infra_generique']);
1708
					$nom_sci_ideal .= ' '.$this->formaterStyleNomGenre($nom['epithete_infra_generique']);
1700
					$nom_sci_ideal .= ' '.$nom['type_epithete'];
1709
					$nom_sci_ideal .= ' '.$nom['type_epithete'];
1701
				} else {
1710
				} else {
1702
					$nom_sci_ideal = $this->formaterStyleNomGenre($nom['genre']);
1711
					$nom_sci_ideal = $this->formaterStyleNomGenre($nom['genre']);
1703
					$nom_sci_ideal .= ' '.$nom['type_epithete'];
1712
					$nom_sci_ideal .= ' '.$nom['type_epithete'];
1704
					$nom_sci_ideal .= ' '.$this->formaterStyleNomGenre($nom['epithete_infra_generique']);
1713
					$nom_sci_ideal .= ' '.$this->formaterStyleNomGenre($nom['epithete_infra_generique']);
1705
				}
1714
				}
1706
				$nom_sci_ideal .= ($suffixe_plte_cultivee != '' ? ' '.$suffixe_plte_cultivee : '');
1715
				$nom_sci_ideal .= ($suffixe_plte_cultivee != '' ? ' '.$suffixe_plte_cultivee : '');
1707
				if ($nom['nom_sci'] != $nom_sci_ideal) {
1716
				if ($nom['nom_sci'] != $nom_sci_ideal) {
1708
					$nom_sci_traite = $this->repererEspace($nom['nom_sci']);
1717
					$nom_sci_traite = $this->repererEspace($nom['nom_sci']);
1709
					$noms_erreur[] = array($nom['num_nom'], $nom_sci_traite, $nom_sci_ideal);
1718
					$noms_erreur[] = array($nom['num_nom'], $nom_sci_traite, $nom_sci_ideal);
1710
				}
1719
				}
1711
			}
1720
			}
1712
		}
1721
		}
1713
		
1722
		
1714
		// Analyse des résultats
1723
		// Analyse des résultats
1715
		if (count($noms_erreur) > 0) {
1724
		if (count($noms_erreur) > 0) {
1716
			$info['message']['entete'] = array('num_nom', 'nom_sci', 'nom_sci corrigé');
1725
			$info['message']['entete'] = array('num_nom', 'nom_sci', 'nom_sci corrigé');
1717
			$info['message']['lignes'] = $noms_erreur;
1726
			$info['message']['lignes'] = $noms_erreur;
1718
		} else {
1727
		} else {
1719
			$info['resultat'] = true;
1728
			$info['resultat'] = true;
1720
		}
1729
		}
1721
		$noms_erreur = null;
1730
		$noms_erreur = null;
1722
		
1731
		
1723
		$this->traiterResultatTest($info);
1732
		$this->traiterResultatTest($info);
1724
	}
1733
	}
1725
	
1734
	
1726
	private function testerNomCompletEspece() {
1735
	private function testerNomCompletEspece() {
1727
		$info = array('nom' => "nom_sci -> noms d'espèce",
1736
		$info = array('nom' => "nom_sci -> noms d'espèce",
1728
			'description' => "Si le rang est = à {$this->manuel['rang_sp']}, le nom_sci doit correspondre à la formule : \n".
1737
			'description' => "Si le rang est = à {$this->manuel['rang_sp']}, le nom_sci doit correspondre à la formule : \n".
1729
				" genre + ' ' + epithete_sp \n".
1738
				" genre + ' ' + epithete_sp \n".
1730
				"Les valeurs des champs cultivar_groupe, cultivar et nom_commercial peuvent s'y ajouter.",
1739
				"Les valeurs des champs cultivar_groupe, cultivar et nom_commercial peuvent s'y ajouter.",
1731
			'resultat' => false);
1740
			'resultat' => false);
1732
		
1741
		
1733
		// Réalisation du test
1742
		// Réalisation du test
1734
		$noms_erreur = array();
1743
		$noms_erreur = array();
1735
		foreach ($this->noms as &$nom) {
1744
		foreach ($this->noms as &$nom) {
1736
			if ($nom['rang'] == $this->manuel['rang_sp']) {
1745
			if ($nom['rang'] == $this->manuel['rang_sp']) {
1737
				$suffixe_plte_cultivee = $this->construireSuffixeNomPltCultivee($nom);
1746
				$suffixe_plte_cultivee = $this->construireSuffixeNomPltCultivee($nom);
1738
				$nom_sci_ideal = $this->formaterStyleNomGenre($nom['genre']);
1747
				$nom_sci_ideal = $this->formaterStyleNomGenre($nom['genre']);
1739
				$nom_sci_ideal .= ' '.strtolower($nom['epithete_sp']);
1748
				$nom_sci_ideal .= ' '.strtolower($nom['epithete_sp']);
1740
				$nom_sci_ideal .= ($suffixe_plte_cultivee != '' ? ' '.$suffixe_plte_cultivee : '');
1749
				$nom_sci_ideal .= ($suffixe_plte_cultivee != '' ? ' '.$suffixe_plte_cultivee : '');
1741
				if ($nom['nom_sci'] != $nom_sci_ideal) {
1750
				if ($nom['nom_sci'] != $nom_sci_ideal) {
1742
					$nom_sci_traite = $this->repererEspace($nom['nom_sci']);
1751
					$nom_sci_traite = $this->repererEspace($nom['nom_sci']);
1743
					$noms_erreur[] = array($nom['num_nom'], $nom_sci_traite, $nom_sci_ideal);
1752
					$noms_erreur[] = array($nom['num_nom'], $nom_sci_traite, $nom_sci_ideal);
1744
				}
1753
				}
1745
			}
1754
			}
1746
		}
1755
		}
1747
		
1756
		
1748
		// Analyse des résultats
1757
		// Analyse des résultats
1749
		if (count($noms_erreur) > 0) {
1758
		if (count($noms_erreur) > 0) {
1750
			$info['message']['entete'] = array('num_nom', 'nom_sci', 'nom_sci corrigé');
1759
			$info['message']['entete'] = array('num_nom', 'nom_sci', 'nom_sci corrigé');
1751
			$info['message']['lignes'] = $noms_erreur;
1760
			$info['message']['lignes'] = $noms_erreur;
1752
		} else {
1761
		} else {
1753
			$info['resultat'] = true;
1762
			$info['resultat'] = true;
1754
		}
1763
		}
1755
		$noms_erreur = null;
1764
		$noms_erreur = null;
1756
		
1765
		
1757
		$this->traiterResultatTest($info);
1766
		$this->traiterResultatTest($info);
1758
	}
1767
	}
1759
	
1768
	
1760
	private function testerNomCompletInfraSpecifique() {
1769
	private function testerNomCompletInfraSpecifique() {
1761
		$info = array('nom' => 'nom_sci -> noms infra-spécifiques',
1770
		$info = array('nom' => 'nom_sci -> noms infra-spécifiques',
1762
			'description' => "Si le rang est > à {$this->manuel['rang_sp']}, le nom_sci doit correspondre à la formule : \n".
1771
			'description' => "Si le rang est > à {$this->manuel['rang_sp']}, le nom_sci doit correspondre à la formule : \n".
1763
				" genre + ' ' + epithete_sp + ' ' + type_epithete + ' ' + epithete_infra_generique\n".	
1772
				" genre + ' ' + epithete_sp + ' ' + type_epithete + ' ' + epithete_infra_generique\n".	
1764
				"Les valeurs des champs cultivar_groupe, cultivar et nom_commercial peuvent s'y ajouter.",
1773
				"Les valeurs des champs cultivar_groupe, cultivar et nom_commercial peuvent s'y ajouter.",
1765
			'resultat' => false);
1774
			'resultat' => false);
1766
		
1775
		
1767
		// Réalisation du test
1776
		// Réalisation du test
1768
		$noms_erreur = array();
1777
		$noms_erreur = array();
1769
		foreach ($this->noms as &$nom) {
1778
		foreach ($this->noms as &$nom) {
1770
			if ($nom['rang'] > $this->manuel['rang_sp']) {
1779
			if ($nom['rang'] > $this->manuel['rang_sp']) {
1771
				$suffixe_plte_cultivee = $this->construireSuffixeNomPltCultivee($nom);
1780
				$suffixe_plte_cultivee = $this->construireSuffixeNomPltCultivee($nom);
1772
				$nom_sci_ideal = $this->formaterStyleNomGenre($nom['genre']);
1781
				$nom_sci_ideal = $this->formaterStyleNomGenre($nom['genre']);
1773
				$nom_sci_ideal .= ' '.strtolower($nom['epithete_sp']);
1782
				$nom_sci_ideal .= ' '.strtolower($nom['epithete_sp']);
1774
				$nom_sci_ideal .= ' '.strtolower($nom['type_epithete']);
1783
				$nom_sci_ideal .= ' '.strtolower($nom['type_epithete']);
1775
				$nom_sci_ideal .= ' '.strtolower($nom['epithete_infra_sp']);
1784
				$nom_sci_ideal .= ' '.strtolower($nom['epithete_infra_sp']);
1776
				$nom_sci_ideal .= ($suffixe_plte_cultivee != '' ? ' '.$suffixe_plte_cultivee : '');
1785
				$nom_sci_ideal .= ($suffixe_plte_cultivee != '' ? ' '.$suffixe_plte_cultivee : '');
1777
				if ($nom['nom_sci'] != $nom_sci_ideal) {
1786
				if ($nom['nom_sci'] != $nom_sci_ideal) {
1778
					$nom_sci_traite = $this->repererEspace($nom['nom_sci']);
1787
					$nom_sci_traite = $this->repererEspace($nom['nom_sci']);
1779
					$noms_erreur[] = array($nom['num_nom'], $nom_sci_traite, $nom_sci_ideal);
1788
					$noms_erreur[] = array($nom['num_nom'], $nom_sci_traite, $nom_sci_ideal);
1780
				}
1789
				}
1781
			}
1790
			}
1782
		}
1791
		}
1783
		
1792
		
1784
		// Analyse des résultats
1793
		// Analyse des résultats
1785
		if (count($noms_erreur) > 0) {
1794
		if (count($noms_erreur) > 0) {
1786
			$info['message']['entete'] = array('num_nom', 'nom_sci', 'nom_sci corrigé');
1795
			$info['message']['entete'] = array('num_nom', 'nom_sci', 'nom_sci corrigé');
1787
			$info['message']['lignes'] = $noms_erreur;
1796
			$info['message']['lignes'] = $noms_erreur;
1788
		} else {
1797
		} else {
1789
			$info['resultat'] = true;
1798
			$info['resultat'] = true;
1790
		}
1799
		}
1791
		$noms_erreur = null;
1800
		$noms_erreur = null;
1792
		
1801
		
1793
		$this->traiterResultatTest($info);
1802
		$this->traiterResultatTest($info);
1794
	}
1803
	}
1795
	
1804
	
1796
	private function testerNomSupraGeneriqueEspaces() {
1805
	private function testerNomSupraGeneriqueEspaces() {
1797
		$info = array('nom' => 'nom_supra_generique -> espaces en trop',
1806
		$info = array('nom' => 'nom_supra_generique -> espaces en trop',
1798
			'description' => "Le champ nom_supra_generique ne doit pas contenir d'espace avant ou après le nom.",
1807
			'description' => "Le champ nom_supra_generique ne doit pas contenir d'espace avant ou après le nom.",
1799
			'resultat' => false);
1808
			'resultat' => false);
1800
		
1809
		
1801
		// Réalisation du test
1810
		// Réalisation du test
1802
		$noms_erreur = array();
1811
		$noms_erreur = array();
1803
		foreach ($this->noms as &$nom) {
1812
		foreach ($this->noms as &$nom) {
1804
			if ($nom['nom_supra_generique'] != '') {
1813
			if ($nom['nom_supra_generique'] != '') {
1805
				if (preg_match('/(?:^\s+(?!:\s+)|(?!:\s+)\s+$)/', $nom['nom_supra_generique'])) {
1814
				if (preg_match('/(?:^\s+(?!:\s+)|(?!:\s+)\s+$)/', $nom['nom_supra_generique'])) {
1806
					$nom_supra_generique_traite = $this->repererEspace($nom['nom_supra_generique']);
1815
					$nom_supra_generique_traite = $this->repererEspace($nom['nom_supra_generique']);
1807
					$noms_erreur[] = array($nom['num_nom'], $nom_supra_generique_traite);
1816
					$noms_erreur[] = array($nom['num_nom'], $nom_supra_generique_traite);
1808
				}
1817
				}
1809
			}
1818
			}
1810
		}
1819
		}
1811
		
1820
		
1812
		// Analyse des résultats
1821
		// Analyse des résultats
1813
		if (count($noms_erreur) > 0) {
1822
		if (count($noms_erreur) > 0) {
1814
			$info['message']['entete'] = array('num_nom', 'nom_supra_generique erroné');
1823
			$info['message']['entete'] = array('num_nom', 'nom_supra_generique erroné');
1815
			$info['message']['lignes'] = $noms_erreur;
1824
			$info['message']['lignes'] = $noms_erreur;
1816
		} else {
1825
		} else {
1817
			$info['resultat'] = true;
1826
			$info['resultat'] = true;
1818
		}
1827
		}
1819
		$noms_erreur = null;
1828
		$noms_erreur = null;
1820
		
1829
		
1821
		$this->traiterResultatTest($info);
1830
		$this->traiterResultatTest($info);
1822
	}
1831
	}
1823
	
1832
	
1824
	private function testerNomSupraGeneriqueSyntaxe() {
1833
	private function testerNomSupraGeneriqueSyntaxe() {
1825
		$info = array('nom' => 'nom_supra_generique -> syntaxe',
1834
		$info = array('nom' => 'nom_supra_generique -> syntaxe',
1826
			'description' => "Le champ nom_supra_generique contient un mot composé de lettres minuscules, avec ou ".
1835
			'description' => "Le champ nom_supra_generique contient un mot composé de lettres minuscules, avec ou ".
1827
				"sans tréma (¨), et de tirets (-). \n".
1836
				"sans tréma (¨), et de tirets (-). \n".
1828
				"La première lettre (avec ou sans tréma) du mot doit être en majuscule.",
1837
				"La première lettre (avec ou sans tréma) du mot doit être en majuscule.",
1829
			'resultat' => false);
1838
			'resultat' => false);
1830
		
1839
		
1831
		// Réalisation du test
1840
		// Réalisation du test
1832
		$noms_erreur = array();
1841
		$noms_erreur = array();
1833
		foreach ($this->noms as &$nom) {
1842
		foreach ($this->noms as &$nom) {
1834
			if ($nom['nom_supra_generique'] != '') {
1843
			if ($nom['nom_supra_generique'] != '') {
1835
				if (!preg_match('/^[A-ZÄËḦÏÖÜẄẌŸ][-a-zäëḧïöẗüẅẍÿ]+$/', $nom['nom_supra_generique'])) {
1844
				if (!preg_match('/^[A-ZÄËḦÏÖÜẄẌŸ][-a-zäëḧïöẗüẅẍÿ]+$/', $nom['nom_supra_generique'])) {
1836
					$nom_supra_generique_traite = $this->repererEspace($nom['nom_supra_generique']);
1845
					$nom_supra_generique_traite = $this->repererEspace($nom['nom_supra_generique']);
1837
					$noms_erreur[] = array($nom['num_nom'], $nom_supra_generique_traite);
1846
					$noms_erreur[] = array($nom['num_nom'], $nom_supra_generique_traite);
1838
				}
1847
				}
1839
			}
1848
			}
1840
		}
1849
		}
1841
		
1850
		
1842
		// Analyse des résultats
1851
		// Analyse des résultats
1843
		if (count($noms_erreur) > 0) {
1852
		if (count($noms_erreur) > 0) {
1844
			$info['message']['entete'] = array('num_nom', 'nom_supra_generique erroné');
1853
			$info['message']['entete'] = array('num_nom', 'nom_supra_generique erroné');
1845
			$info['message']['lignes'] = $noms_erreur;
1854
			$info['message']['lignes'] = $noms_erreur;
1846
		} else {
1855
		} else {
1847
			$info['resultat'] = true;
1856
			$info['resultat'] = true;
1848
		}
1857
		}
1849
		$noms_erreur = null;
1858
		$noms_erreur = null;
1850
		
1859
		
1851
		$this->traiterResultatTest($info);
1860
		$this->traiterResultatTest($info);
1852
	}
1861
	}
1853
	
1862
	
1854
	private function testerNomSupraGeneriqueRang() {
1863
	private function testerNomSupraGeneriqueRang() {
1855
		$info = array('nom' => "nom_supra_generique -> rang < {$this->manuel['rang_genre']}",
1864
		$info = array('nom' => "nom_supra_generique -> rang < {$this->manuel['rang_genre']}",
1856
			'description' => "Si le champ nom_supra_generique n'est pas vide alors le rang du nom doit être inférieur à {$this->manuel['rang_genre']}.",
1865
			'description' => "Si le champ nom_supra_generique n'est pas vide alors le rang du nom doit être inférieur à {$this->manuel['rang_genre']}.",
1857
			'resultat' => false);
1866
			'resultat' => false);
1858
		
1867
		
1859
		// Réalisation du test
1868
		// Réalisation du test
1860
		$noms_erreur = array();
1869
		$noms_erreur = array();
1861
		foreach ($this->noms as &$nom) {
1870
		foreach ($this->noms as &$nom) {
1862
			if ($nom['nom_supra_generique'] != '') {
1871
			if ($nom['nom_supra_generique'] != '') {
1863
				if ($nom['rang'] >= $this->manuel['rang_genre']) {
1872
				if ($nom['rang'] >= $this->manuel['rang_genre']) {
1864
					$noms_erreur[] = array($nom['num_nom'], $nom['nom_sci'], $nom['rang']);
1873
					$noms_erreur[] = array($nom['num_nom'], $nom['nom_sci'], $nom['rang']);
1865
				}
1874
				}
1866
			}
1875
			}
1867
		}
1876
		}
1868
		
1877
		
1869
		// Analyse des résultats
1878
		// Analyse des résultats
1870
		if (count($noms_erreur) > 0) {
1879
		if (count($noms_erreur) > 0) {
1871
			$info['message']['entete'] = array('num_nom', 'nom_sci', 'rang erroné');
1880
			$info['message']['entete'] = array('num_nom', 'nom_sci', 'rang erroné');
1872
			$info['message']['lignes'] = $noms_erreur;
1881
			$info['message']['lignes'] = $noms_erreur;
1873
		} else {
1882
		} else {
1874
			$info['resultat'] = true;
1883
			$info['resultat'] = true;
1875
		}
1884
		}
1876
		$noms_erreur = null;
1885
		$noms_erreur = null;
1877
		
1886
		
1878
		$this->traiterResultatTest($info);
1887
		$this->traiterResultatTest($info);
1879
	}
1888
	}
1880
	
1889
	
1881
	private function testerGenreEspaces() {
1890
	private function testerGenreEspaces() {
1882
		$info = array('nom' => 'genre -> espaces en trop',
1891
		$info = array('nom' => 'genre -> espaces en trop',
1883
			'description' => "Le champ genre ne doit pas contenir d'espace avant ou après le nom.\n".
1892
			'description' => "Le champ genre ne doit pas contenir d'espace avant ou après le nom.\n".
1884
				"Si des espaces sont compris dans la valeur du champ, il ne doit pas en avoir plusieurs consécutifs.",
1893
				"Si des espaces sont compris dans la valeur du champ, il ne doit pas en avoir plusieurs consécutifs.",
1885
			'resultat' => false);
1894
			'resultat' => false);
1886
		
1895
		
1887
		// Réalisation du test
1896
		// Réalisation du test
1888
		$noms_erreur = array();
1897
		$noms_erreur = array();
1889
		foreach ($this->noms as &$nom) {
1898
		foreach ($this->noms as &$nom) {
1890
			if ($nom['genre'] != '') {
1899
			if ($nom['genre'] != '') {
1891
				if (preg_match('/(?:^\s+(?!:\s+)|(?!:\s+)\s{2,}(?!:\s+)|(?!:\s+)\s+$)/', $nom['genre'])) {
1900
				if (preg_match('/(?:^\s+(?!:\s+)|(?!:\s+)\s{2,}(?!:\s+)|(?!:\s+)\s+$)/', $nom['genre'])) {
1892
					$nom_traite = $this->repererEspace($nom['genre']);
1901
					$nom_traite = $this->repererEspace($nom['genre']);
1893
					$noms_erreur[] = array($nom['num_nom'], $nom_traite);
1902
					$noms_erreur[] = array($nom['num_nom'], $nom_traite);
1894
				}
1903
				}
1895
			}
1904
			}
1896
		}
1905
		}
1897
		
1906
		
1898
		// Analyse des résultats
1907
		// Analyse des résultats
1899
		if (count($noms_erreur) > 0) {
1908
		if (count($noms_erreur) > 0) {
1900
			$info['message']['entete'] = array('num_nom', 'genre erroné');
1909
			$info['message']['entete'] = array('num_nom', 'genre erroné');
1901
			$info['message']['lignes'] = $noms_erreur;
1910
			$info['message']['lignes'] = $noms_erreur;
1902
		} else {
1911
		} else {
1903
			$info['resultat'] = true;
1912
			$info['resultat'] = true;
1904
		}
1913
		}
1905
		$noms_erreur = null;
1914
		$noms_erreur = null;
1906
		
1915
		
1907
		$this->traiterResultatTest($info);
1916
		$this->traiterResultatTest($info);
1908
	}
1917
	}
1909
	
1918
	
1910
	private function testerGenreSyntaxe() {
1919
	private function testerGenreSyntaxe() {
1911
		$info = array('nom' => 'genre -> syntaxe',
1920
		$info = array('nom' => 'genre -> syntaxe',
1912
			'description' => "Le champ genre peut contenir :\n".
1921
			'description' => "Le champ genre peut contenir :\n".
1913
			 	" - un mot unique composé de lettres minuscules, avec ou sans tréma (¨), et de tirets (-). \n".
1922
			 	" - un mot unique composé de lettres minuscules, avec ou sans tréma (¨), et de tirets (-). \n".
1914
				"   Il commence par une lettre majuscule (avec ou sans tréma) et peut être précédé par \n".
1923
				"   Il commence par une lettre majuscule (avec ou sans tréma) et peut être précédé par \n".
1915
				"   le signe + ou la lettre x suivi d'un espace.\n".
1924
				"   le signe + ou la lettre x suivi d'un espace.\n".
1916
				" - une formule d'hybridité composée d'une série de noms de genre (au moins 2) séparés\n".
1925
				" - une formule d'hybridité composée d'une série de noms de genre (au moins 2) séparés\n".
1917
				"   entre eux par la lettre x entourée de caractères espaces.",
1926
				"   entre eux par la lettre x entourée de caractères espaces.",
1918
			'resultat' => false);
1927
			'resultat' => false);
1919
		
1928
		
1920
		// Réalisation du test
1929
		// Réalisation du test
1921
		$noms_erreur = array();
1930
		$noms_erreur = array();
1922
		foreach ($this->noms as &$nom) {
1931
		foreach ($this->noms as &$nom) {
1923
			if ($nom['genre'] != '') {
1932
			if ($nom['genre'] != '') {
1924
				$mots = explode(' ', $nom['genre']);
1933
				$mots = explode(' ', $nom['genre']);
1925
				foreach ($mots as $mot) {
1934
				foreach ($mots as $mot) {
1926
					if (!(preg_match('/^[+x]$/', $mot) || $this->verifierEpitheteGenre($mot))) {
1935
					if (!(preg_match('/^[+x]$/', $mot) || $this->verifierEpitheteGenre($mot))) {
1927
						$nom_traite = $this->repererEspace($nom['genre']);
1936
						$nom_traite = $this->repererEspace($nom['genre']);
1928
						$noms_erreur[] = array($nom['num_nom'], $nom_traite);
1937
						$noms_erreur[] = array($nom['num_nom'], $nom_traite);
1929
					}
1938
					}
1930
				}
1939
				}
1931
			}
1940
			}
1932
		}
1941
		}
1933
		
1942
		
1934
		// Analyse des résultats
1943
		// Analyse des résultats
1935
		if (count($noms_erreur) > 0) {
1944
		if (count($noms_erreur) > 0) {
1936
			$info['message']['entete'] = array('num_nom', 'genre erroné');
1945
			$info['message']['entete'] = array('num_nom', 'genre erroné');
1937
			$info['message']['lignes'] = $noms_erreur;
1946
			$info['message']['lignes'] = $noms_erreur;
1938
		} else {
1947
		} else {
1939
			$info['resultat'] = true;
1948
			$info['resultat'] = true;
1940
		}
1949
		}
1941
		$noms_erreur = null;
1950
		$noms_erreur = null;
1942
		
1951
		
1943
		$this->traiterResultatTest($info);
1952
		$this->traiterResultatTest($info);
1944
	}
1953
	}
1945
	
1954
	
1946
	private function testerGenreRang() {
1955
	private function testerGenreRang() {
1947
		$info = array('nom' => "genre -> rang >= {$this->manuel['rang_genre']}",
1956
		$info = array('nom' => "genre -> rang >= {$this->manuel['rang_genre']}",
1948
			'description' => "Si le champ genre n'est pas vide alors le rang du nom doit être supérieur ou égal à {$this->manuel['rang_genre']}.",
1957
			'description' => "Si le champ genre n'est pas vide alors le rang du nom doit être supérieur ou égal à {$this->manuel['rang_genre']}.",
1949
			'resultat' => false);
1958
			'resultat' => false);
1950
		
1959
		
1951
		// Réalisation du test
1960
		// Réalisation du test
1952
		$noms_erreur = array();
1961
		$noms_erreur = array();
1953
		foreach ($this->noms as &$nom) {
1962
		foreach ($this->noms as &$nom) {
1954
			if ($nom['genre'] != '') {
1963
			if ($nom['genre'] != '') {
1955
				if ($nom['rang'] < $this->manuel['rang_genre']) {
1964
				if ($nom['rang'] < $this->manuel['rang_genre']) {
1956
					$noms_erreur[] = array($nom['num_nom'], $nom['nom_sci'], $nom['rang']);
1965
					$noms_erreur[] = array($nom['num_nom'], $nom['nom_sci'], $nom['rang']);
1957
				}
1966
				}
1958
			}
1967
			}
1959
		}
1968
		}
1960
		
1969
		
1961
		// Analyse des résultats
1970
		// Analyse des résultats
1962
		if (count($noms_erreur) > 0) {
1971
		if (count($noms_erreur) > 0) {
1963
			$info['message']['entete'] = array('num_nom', 'nom_sci', 'rang erroné');
1972
			$info['message']['entete'] = array('num_nom', 'nom_sci', 'rang erroné');
1964
			$info['message']['lignes'] = $noms_erreur;
1973
			$info['message']['lignes'] = $noms_erreur;
1965
		} else {
1974
		} else {
1966
			$info['resultat'] = true;
1975
			$info['resultat'] = true;
1967
		}
1976
		}
1968
		$noms_erreur = null;
1977
		$noms_erreur = null;
1969
		
1978
		
1970
		$this->traiterResultatTest($info);
1979
		$this->traiterResultatTest($info);
1971
	}
1980
	}
1972
		
1981
		
1973
	private function testerEpitheteInfraGeneriqueSyntaxe() {
1982
	private function testerEpitheteInfraGeneriqueSyntaxe() {
1974
		$info = array('nom' => 'epithete_infra_generique -> syntaxe',
1983
		$info = array('nom' => 'epithete_infra_generique -> syntaxe',
1975
			'description' => "Le champ epithete_infra_generique est composé de lettres minuscules, avec ou sans tréma (¨), et de tirets (-). \n".
1984
			'description' => "Le champ epithete_infra_generique est composé de lettres minuscules, avec ou sans tréma (¨), et de tirets (-). \n".
1976
				"La première lettre (avec ou sans tréma) doit être en majuscule.",
1985
				"La première lettre (avec ou sans tréma) doit être en majuscule.",
1977
			'resultat' => false);
1986
			'resultat' => false);
1978
		
1987
		
1979
		// Réalisation du test
1988
		// Réalisation du test
1980
		$noms_erreur = array();
1989
		$noms_erreur = array();
1981
		foreach ($this->noms as &$nom) {
1990
		foreach ($this->noms as &$nom) {
1982
			if ($nom['epithete_infra_generique'] != '') {
1991
			if ($nom['epithete_infra_generique'] != '') {
1983
				if (!preg_match('/^[A-ZÄËḦÏÖÜẄẌŸ][-a-zäëḧïöẗüẅẍÿ]+/', $nom['epithete_infra_generique'])) {
1992
				if (!preg_match('/^[A-ZÄËḦÏÖÜẄẌŸ][-a-zäëḧïöẗüẅẍÿ]+/', $nom['epithete_infra_generique'])) {
1984
					$epithete_traite = $this->repererEspace($nom['epithete_infra_generique']);
1993
					$epithete_traite = $this->repererEspace($nom['epithete_infra_generique']);
1985
					$noms_erreur[] = array($nom['num_nom'], $epithete_traite);
1994
					$noms_erreur[] = array($nom['num_nom'], $epithete_traite);
1986
				}
1995
				}
1987
			}
1996
			}
1988
		}
1997
		}
1989
		
1998
		
1990
		// Analyse des résultats
1999
		// Analyse des résultats
1991
		if (count($noms_erreur) > 0) {
2000
		if (count($noms_erreur) > 0) {
1992
			$info['message']['entete'] = array('num_nom', 'epithete_infra_generique erroné');
2001
			$info['message']['entete'] = array('num_nom', 'epithete_infra_generique erroné');
1993
			$info['message']['lignes'] = $noms_erreur;
2002
			$info['message']['lignes'] = $noms_erreur;
1994
		} else {
2003
		} else {
1995
			$info['resultat'] = true;
2004
			$info['resultat'] = true;
1996
		}
2005
		}
1997
		$noms_erreur = null;
2006
		$noms_erreur = null;
1998
		
2007
		
1999
		$this->traiterResultatTest($info);
2008
		$this->traiterResultatTest($info);
2000
	}
2009
	}
2001
	
2010
	
2002
	private function testerEpitheteInfraGeneriqueRang() {
2011
	private function testerEpitheteInfraGeneriqueRang() {
2003
		$info = array('nom' => "epithete_infra_generique -> {$this->manuel['rang_genre']} < rang < {$this->manuel['rang_sp']}",
2012
		$info = array('nom' => "epithete_infra_generique -> {$this->manuel['rang_genre']} < rang < {$this->manuel['rang_sp']}",
2004
			'description' => "Si le champ epithete_infra_generique n'est pas vide alors le rang du nom doit être compris ".
2013
			'description' => "Si le champ epithete_infra_generique n'est pas vide alors le rang du nom doit être compris ".
2005
				"entre {$this->manuel['rang_genre']} et {$this->manuel['rang_sp']}.",
2014
				"entre {$this->manuel['rang_genre']} et {$this->manuel['rang_sp']}.",
2006
			'resultat' => false);
2015
			'resultat' => false);
2007
		
2016
		
2008
		// Réalisation du test
2017
		// Réalisation du test
2009
		$noms_erreur = array();
2018
		$noms_erreur = array();
2010
		foreach ($this->noms as &$nom) {
2019
		foreach ($this->noms as &$nom) {
2011
			if ($nom['epithete_infra_generique'] != '') {
2020
			if ($nom['epithete_infra_generique'] != '') {
2012
				if ($nom['rang'] <= $this->manuel['rang_genre'] || $nom['rang'] >= $this->manuel['rang_sp']) {
2021
				if ($nom['rang'] <= $this->manuel['rang_genre'] || $nom['rang'] >= $this->manuel['rang_sp']) {
2013
					$noms_erreur[] = array($nom['num_nom'], $nom['nom_sci'], $nom['rang']);
2022
					$noms_erreur[] = array($nom['num_nom'], $nom['nom_sci'], $nom['rang']);
2014
				}
2023
				}
2015
			}
2024
			}
2016
		}
2025
		}
2017
		
2026
		
2018
		// Analyse des résultats
2027
		// Analyse des résultats
2019
		if (count($noms_erreur) > 0) {
2028
		if (count($noms_erreur) > 0) {
2020
			$info['message']['entete'] = array('num_nom', 'nom_sci', 'rang erroné');
2029
			$info['message']['entete'] = array('num_nom', 'nom_sci', 'rang erroné');
2021
			$info['message']['lignes'] = $noms_erreur;
2030
			$info['message']['lignes'] = $noms_erreur;
2022
		} else {
2031
		} else {
2023
			$info['resultat'] = true;
2032
			$info['resultat'] = true;
2024
		}
2033
		}
2025
		$noms_erreur = null;
2034
		$noms_erreur = null;
2026
		
2035
		
2027
		$this->traiterResultatTest($info);
2036
		$this->traiterResultatTest($info);
2028
	}
2037
	}
2029
	
2038
	
2030
	private function testerEpitheteInfraGeneriqueEspaces() {
2039
	private function testerEpitheteInfraGeneriqueEspaces() {
2031
		$info = array('nom' => 'epithete_infra_generique -> espaces en trop',
2040
		$info = array('nom' => 'epithete_infra_generique -> espaces en trop',
2032
			'description' => "Le champ epithete_infra_generique ne doit pas contenir d'espace avant ou après sa valeur.",
2041
			'description' => "Le champ epithete_infra_generique ne doit pas contenir d'espace avant ou après sa valeur.",
2033
			'resultat' => false);
2042
			'resultat' => false);
2034
		
2043
		
2035
		// Réalisation du test
2044
		// Réalisation du test
2036
		$noms_erreur = array();
2045
		$noms_erreur = array();
2037
		foreach ($this->noms as &$nom) {
2046
		foreach ($this->noms as &$nom) {
2038
			if ($nom['epithete_infra_generique'] != '') {
2047
			if ($nom['epithete_infra_generique'] != '') {
2039
				if (preg_match('/(?:^\s+(?!:\s+)|(?!:\s+)\s{2,}(?!:\s+)|(?!:\s+)\s+$)/', $nom['epithete_infra_generique'])) {
2048
				if (preg_match('/(?:^\s+(?!:\s+)|(?!:\s+)\s{2,}(?!:\s+)|(?!:\s+)\s+$)/', $nom['epithete_infra_generique'])) {
2040
					$epithete_traite = $this->repererEspace($nom['epithete_infra_generique']);
2049
					$epithete_traite = $this->repererEspace($nom['epithete_infra_generique']);
2041
					$noms_erreur[] = array($nom['num_nom'], $epithete_traite);
2050
					$noms_erreur[] = array($nom['num_nom'], $epithete_traite);
2042
				}
2051
				}
2043
			}
2052
			}
2044
		}
2053
		}
2045
		
2054
		
2046
		// Analyse des résultats
2055
		// Analyse des résultats
2047
		if (count($noms_erreur) > 0) {
2056
		if (count($noms_erreur) > 0) {
2048
			$info['message']['entete'] = array('num_nom', 'epithete_infra_generique erroné');
2057
			$info['message']['entete'] = array('num_nom', 'epithete_infra_generique erroné');
2049
			$info['message']['lignes'] = $noms_erreur;
2058
			$info['message']['lignes'] = $noms_erreur;
2050
		} else {
2059
		} else {
2051
			$info['resultat'] = true;
2060
			$info['resultat'] = true;
2052
		}
2061
		}
2053
		$noms_erreur = null;
2062
		$noms_erreur = null;
2054
		
2063
		
2055
		$this->traiterResultatTest($info);
2064
		$this->traiterResultatTest($info);
2056
	}
2065
	}
2057
	
2066
	
2058
	private function testerEpitheteSpEspaces() {
2067
	private function testerEpitheteSpEspaces() {
2059
		$info = array('nom' => 'epithete_sp -> espaces en trop',
2068
		$info = array('nom' => 'epithete_sp -> espaces en trop',
2060
			'description' => "Le champ epithete_sp ne doit pas contenir d'espace avant ou après le nom.\n".
2069
			'description' => "Le champ epithete_sp ne doit pas contenir d'espace avant ou après le nom.\n".
2061
				"Si des espaces sont compris dans la valeur du champ, il ne doit pas en avoir plusieurs consécutifs.",
2070
				"Si des espaces sont compris dans la valeur du champ, il ne doit pas en avoir plusieurs consécutifs.",
2062
			'resultat' => false);
2071
			'resultat' => false);
2063
		
2072
		
2064
		// Réalisation du test
2073
		// Réalisation du test
2065
		$noms_erreur = array();
2074
		$noms_erreur = array();
2066
		foreach ($this->noms as &$nom) {
2075
		foreach ($this->noms as &$nom) {
2067
			if ($nom['epithete_sp'] != '') {
2076
			if ($nom['epithete_sp'] != '') {
2068
				if (preg_match('/(?:^\s+(?!:\s+)|(?!:\s+)\s{2,}(?!:\s+)|(?!:\s+)\s+$)/', $nom['epithete_sp'])) {
2077
				if (preg_match('/(?:^\s+(?!:\s+)|(?!:\s+)\s{2,}(?!:\s+)|(?!:\s+)\s+$)/', $nom['epithete_sp'])) {
2069
					$epithete_traite = $this->repererEspace($nom['epithete_sp']);
2078
					$epithete_traite = $this->repererEspace($nom['epithete_sp']);
2070
					$noms_erreur[] = array($nom['num_nom'], $epithete_traite);
2079
					$noms_erreur[] = array($nom['num_nom'], $epithete_traite);
2071
				}
2080
				}
2072
			}
2081
			}
2073
		}
2082
		}
2074
		
2083
		
2075
		// Analyse des résultats
2084
		// Analyse des résultats
2076
		if (count($noms_erreur) > 0) {
2085
		if (count($noms_erreur) > 0) {
2077
			$info['message']['entete'] = array('num_nom', 'epithete_sp erroné');
2086
			$info['message']['entete'] = array('num_nom', 'epithete_sp erroné');
2078
			$info['message']['lignes'] = $noms_erreur;
2087
			$info['message']['lignes'] = $noms_erreur;
2079
		} else {
2088
		} else {
2080
			$info['resultat'] = true;
2089
			$info['resultat'] = true;
2081
		}
2090
		}
2082
		$noms_erreur = null;
2091
		$noms_erreur = null;
2083
		
2092
		
2084
		$this->traiterResultatTest($info);
2093
		$this->traiterResultatTest($info);
2085
	}
2094
	}
2086
	
2095
	
2087
	private function testerEpitheteSpSyntaxe() {
2096
	private function testerEpitheteSpSyntaxe() {
2088
		$info = array('nom' => 'epithete_sp -> syntaxe',
2097
		$info = array('nom' => 'epithete_sp -> syntaxe',
2089
			'description' => "Le champ epithete_sp peut contenir :\n".
2098
			'description' => "Le champ epithete_sp peut contenir :\n".
2090
			 	" - un mot unique composé de lettres minuscules [a-z] incluant les caractères [ëï-]. \n".
2099
			 	" - un mot unique composé de lettres minuscules [a-z] incluant les caractères [ëï-]. \n".
2091
				"   Il commence par une lettre minuscule [a-zëï].\n". 
2100
				"   Il commence par une lettre minuscule [a-zëï].\n". 
2092
				"   Il peut être précédé par le signe + ou la lettre x suivi d'un espace.\n".
2101
				"   Il peut être précédé par le signe + ou la lettre x suivi d'un espace.\n".
2093
				" - un mot contenant sp. suivi d'un ou plusieurs caractères numériques (1-9) \n".
2102
				" - un mot contenant sp. suivi d'un ou plusieurs caractères numériques (1-9) \n".
2094
				"   ou d'un seul caractère majuscule (A-Z) \n".
2103
				"   ou d'un seul caractère majuscule (A-Z) \n".
2095
				" - une formule d'hybridité composée d'une série de noms d'espèce (au moins 2) \n".
2104
				" - une formule d'hybridité composée d'une série de noms d'espèce (au moins 2) \n".
2096
				"   séparés entre eux par la lettre x entourée de caractères espaces.",
2105
				"   séparés entre eux par la lettre x entourée de caractères espaces.",
2097
			'resultat' => false);
2106
			'resultat' => false);
2098
		
2107
		
2099
		// Réalisation du test
2108
		// Réalisation du test
2100
		$noms_erreur = array();
2109
		$noms_erreur = array();
2101
		foreach ($this->noms as &$nom) {
2110
		foreach ($this->noms as &$nom) {
2102
			if ($nom['epithete_sp'] != '') {
2111
			if ($nom['epithete_sp'] != '') {
2103
				$mots = explode(' ', $nom['epithete_sp']);
2112
				$mots = explode(' ', $nom['epithete_sp']);
2104
				foreach ($mots as $mot) {
2113
				foreach ($mots as $mot) {
2105
					if (!(preg_match('/^[+x]$/', $mot) || $this->verifierEpitheteSp($mot))) {
2114
					if (!(preg_match('/^[+x]$/', $mot) || $this->verifierEpitheteSp($mot))) {
2106
						$epithete_traite = $this->repererEspace($nom['epithete_sp']);
2115
						$epithete_traite = $this->repererEspace($nom['epithete_sp']);
2107
						$noms_erreur[] = array($nom['num_nom'], $epithete_traite);
2116
						$noms_erreur[] = array($nom['num_nom'], $epithete_traite);
2108
					}
2117
					}
2109
				}
2118
				}
2110
			}
2119
			}
2111
		}
2120
		}
2112
		
2121
		
2113
		// Analyse des résultats
2122
		// Analyse des résultats
2114
		if (count($noms_erreur) > 0) {
2123
		if (count($noms_erreur) > 0) {
2115
			$info['message']['entete'] = array('num_nom', 'epithete_sp erroné');
2124
			$info['message']['entete'] = array('num_nom', 'epithete_sp erroné');
2116
			$info['message']['lignes'] = $noms_erreur;
2125
			$info['message']['lignes'] = $noms_erreur;
2117
		} else {
2126
		} else {
2118
			$info['resultat'] = true;
2127
			$info['resultat'] = true;
2119
		}
2128
		}
2120
		$noms_erreur = null;
2129
		$noms_erreur = null;
2121
		
2130
		
2122
		$this->traiterResultatTest($info);
2131
		$this->traiterResultatTest($info);
2123
	}
2132
	}
2124
	
2133
	
2125
	private function testerEpitheteSpRang() {
2134
	private function testerEpitheteSpRang() {
2126
		$info = array('nom' => "epithete_sp -> rang >= {$this->manuel['rang_sp']}",
2135
		$info = array('nom' => "epithete_sp -> rang >= {$this->manuel['rang_sp']}",
2127
			'description' => "Si le champ epithete_sp n'est pas vide alors le rang du nom doit être supérieur ou égal à {$this->manuel['rang_sp']}.",
2136
			'description' => "Si le champ epithete_sp n'est pas vide alors le rang du nom doit être supérieur ou égal à {$this->manuel['rang_sp']}.",
2128
			'resultat' => false);
2137
			'resultat' => false);
2129
		
2138
		
2130
		// Réalisation du test
2139
		// Réalisation du test
2131
		$noms_erreur = array();
2140
		$noms_erreur = array();
2132
		foreach ($this->noms as &$nom) {
2141
		foreach ($this->noms as &$nom) {
2133
			if ($nom['epithete_sp'] != '') {
2142
			if ($nom['epithete_sp'] != '') {
2134
				if ($nom['rang'] < $this->manuel['rang_sp']) {
2143
				if ($nom['rang'] < $this->manuel['rang_sp']) {
2135
					$noms_erreur[] = array($nom['num_nom'], $nom['nom_sci'], $nom['rang']);
2144
					$noms_erreur[] = array($nom['num_nom'], $nom['nom_sci'], $nom['rang']);
2136
				}
2145
				}
2137
			}
2146
			}
2138
		}
2147
		}
2139
		
2148
		
2140
		// Analyse des résultats
2149
		// Analyse des résultats
2141
		if (count($noms_erreur) > 0) {
2150
		if (count($noms_erreur) > 0) {
2142
			$info['message']['entete'] = array('num_nom', 'nom_sci', 'rang erroné');
2151
			$info['message']['entete'] = array('num_nom', 'nom_sci', 'rang erroné');
2143
			$info['message']['lignes'] = $noms_erreur;
2152
			$info['message']['lignes'] = $noms_erreur;
2144
		} else {
2153
		} else {
2145
			$info['resultat'] = true;
2154
			$info['resultat'] = true;
2146
		}
2155
		}
2147
		$noms_erreur = null;
2156
		$noms_erreur = null;
2148
		
2157
		
2149
		$this->traiterResultatTest($info);
2158
		$this->traiterResultatTest($info);
2150
	}
2159
	}
2151
	
2160
	
2152
	
2161
	
2153
	private function testerExclureTaxRefSyntaxe() {
2162
	private function testerExclureTaxRefSyntaxe() {
2154
		$info = array('nom' => 'exclure_taxref -> syntaxe',
2163
		$info = array('nom' => 'exclure_taxref -> syntaxe',
2155
			'description' => "Le champ exclure_taxref contient soit :\n".
2164
			'description' => "Le champ exclure_taxref contient soit :\n".
2156
			" - une valeur vide.\n".
2165
			" - une valeur vide.\n".
2157
			" - une valeur null.\n".
2166
			" - une valeur null.\n".
2158
			" - le chiffre 0.\n".
2167
			" - le chiffre 0.\n".
2159
			" - le chiffre 1",
2168
			" - le chiffre 1",
2160
			'resultat' => false);
2169
			'resultat' => false);
2161
		
2170
		
2162
		// Réalisation du test
2171
		// Réalisation du test
2163
		$noms_erreur = array();
2172
		$noms_erreur = array();
2164
		foreach ($this->noms as &$nom) {
2173
		foreach ($this->noms as &$nom) {
2165
			if ($nom['exclure_taxref'] != '' && $nom['exclure_taxref'] != null) {
2174
			if ($nom['exclure_taxref'] != '' && $nom['exclure_taxref'] != null) {
2166
				if (!$this->verifierBooleen($nom['exclure_taxref'])) {
2175
				if (!$this->verifierBooleen($nom['exclure_taxref'])) {
2167
					$noms_erreur[] = array($nom['num_nom'], $nom['exclure_taxref']);
2176
					$noms_erreur[] = array($nom['num_nom'], $nom['exclure_taxref']);
2168
				}
2177
				}
2169
			}
2178
			}
2170
		}
2179
		}
2171
		
2180
		
2172
		// Analyse des résultats
2181
		// Analyse des résultats
2173
		if (count($noms_erreur) > 0) {
2182
		if (count($noms_erreur) > 0) {
2174
			$info['message']['entete'] = array('num_nom', 'exclure_taxref erroné');
2183
			$info['message']['entete'] = array('num_nom', 'exclure_taxref erroné');
2175
			$info['message']['lignes'] = $noms_erreur;
2184
			$info['message']['lignes'] = $noms_erreur;
2176
		} else {
2185
		} else {
2177
			$info['resultat'] = true;
2186
			$info['resultat'] = true;
2178
		}
2187
		}
2179
		$noms_erreur = null;
2188
		$noms_erreur = null;
2180
		
2189
		
2181
		$this->traiterResultatTest($info);
2190
		$this->traiterResultatTest($info);
2182
	}
2191
	}
2183
	//+--------------------------------------------------------------------------------------------------------------+//
2192
	//+--------------------------------------------------------------------------------------------------------------+//
2184
	// MÉTHODES COMMUNES aux TESTS
2193
	// MÉTHODES COMMUNES aux TESTS
2185
	
2194
	
2186
	private function verifierPresence(&$valeur) {
2195
	private function verifierPresence(&$valeur) {
2187
		$codes = $this->manuel['codes_presence'];
2196
		$codes = $this->manuel['codes_presence'];
2188
		$ok = $this->verifierStatuts($valeur, $codes);
2197
		$ok = $this->verifierStatuts($valeur, $codes);
2189
		return $ok;
2198
		return $ok;
2190
	}
2199
	}
2191
	
2200
	
2192
	private function verifierStatutOrigine(&$valeur) {
2201
	private function verifierStatutOrigine(&$valeur) {
2193
		$codes = $this->manuel['codes_statuts_origine'];
2202
		$codes = $this->manuel['codes_statuts_origine'];
2194
		$ok = $this->verifierStatuts($valeur, $codes);
2203
		$ok = $this->verifierStatuts($valeur, $codes);
2195
		return $ok;
2204
		return $ok;
2196
	}
2205
	}
2197
	
2206
	
2198
	private function verifierStatutIntroduction(&$valeur) {
2207
	private function verifierStatutIntroduction(&$valeur) {
2199
		$codes = $this->manuel['codes_statuts_introduction'];
2208
		$codes = $this->manuel['codes_statuts_introduction'];
2200
		$ok = $this->verifierStatuts($valeur, $codes);
2209
		$ok = $this->verifierStatuts($valeur, $codes);
2201
		return $ok;
2210
		return $ok;
2202
	}
2211
	}
2203
	
2212
	
2204
	private function verifierStatutCulture(&$valeur) {
2213
	private function verifierStatutCulture(&$valeur) {
2205
		$codes = $this->manuel['codes_statuts_culture'];
2214
		$codes = $this->manuel['codes_statuts_culture'];
2206
		$ok = $this->verifierStatuts($valeur, $codes);
2215
		$ok = $this->verifierStatuts($valeur, $codes);
2207
		return $ok;
2216
		return $ok;
2208
	}
2217
	}
2209
	
2218
	
2210
	private function verifierStatuts(&$valeur, &$codes) {
2219
	private function verifierStatuts(&$valeur, &$codes) {
2211
		$ok = true;
2220
		$ok = true;
2212
		if (!preg_match("/^(?:|-|[$codes](?:-[A-Z])?)$/", $valeur)) {
2221
		if (!preg_match("/^(?:|-|[$codes](?:-[A-Z])?)$/", $valeur)) {
2213
			$ok = false;
2222
			$ok = false;
2214
		}
2223
		}
2215
		return $ok;
2224
		return $ok;
2216
	}
2225
	}
2217
	
2226
	
2218
	private function verifierBooleen(&$valeur) {
2227
	private function verifierBooleen(&$valeur) {
2219
		$ok = true;
2228
		$ok = true;
2220
		if (!preg_match('/^1$/', $valeur)) {
2229
		if (!preg_match('/^1$/', $valeur)) {
2221
			$ok = false;
2230
			$ok = false;
2222
		}
2231
		}
2223
		return $ok;
2232
		return $ok;
2224
	}
2233
	}
2225
	
2234
	
2226
	private function verifierNombre(&$valeur) {
2235
	private function verifierNombre(&$valeur) {
2227
		$ok = true;
2236
		$ok = true;
2228
		if (!preg_match('/^[0-9]+$/', $valeur)) {
2237
		if (!preg_match('/^[0-9]+$/', $valeur)) {
2229
			$ok = false;
2238
			$ok = false;
2230
		}
2239
		}
2231
		return $ok;
2240
		return $ok;
2232
	}
2241
	}
2233
	
2242
	
2234
	private function verifierNombreSuite(&$valeur) {
2243
	private function verifierNombreSuite(&$valeur) {
2235
		$ok = true;
2244
		$ok = true;
2236
		if (!preg_match('/^(?:[0-9]+,)*[0-9]+$/', $valeur)) {
2245
		if (!preg_match('/^(?:[0-9]+,)*[0-9]+$/', $valeur)) {
2237
			$ok = false;
2246
			$ok = false;
2238
		}
2247
		}
2239
		return $ok;
2248
		return $ok;
2240
	}
2249
	}
2241
	
2250
	
2242
	private function verifierTypeEpithete(&$type) {
2251
	private function verifierTypeEpithete(&$type) {
2243
		$ok = false;
2252
		$ok = false;
2244
		$rejetes = $this->manuel['type_epithete_rejetes'];
2253
		$rejetes = $this->manuel['type_epithete_rejetes'];
2245
		if (preg_replace("/^(?:$rejetes)$/", '', $type) == '') {
2254
		if (preg_replace("/^(?:$rejetes)$/", '', $type) == '') {
2246
			$ok = false;
2255
			$ok = false;
2247
		} else if (preg_match('/^[a-z][-a-z]*[.]?$/', $type)) {
2256
		} else if (preg_match('/^[a-z][-a-z]*[.]?$/', $type)) {
2248
			$ok = true;
2257
			$ok = true;
2249
		}
2258
		}
2250
		return $ok;
2259
		return $ok;
2251
	}
2260
	}
2252
	
2261
	
2253
	private function verifierBiblioOrigine(&$intitule) {
2262
	private function verifierBiblioOrigine(&$intitule) {
2254
		$ok = true;
2263
		$ok = true;
2255
		if (preg_match('/(?:^\s+|\s{2,}|\s+$)/', $intitule)) {
2264
		if (preg_match('/(?:^\s+|\s{2,}|\s+$)/', $intitule)) {
2256
			$ok = false;// Contient des espaces en trop
2265
			$ok = false;// Contient des espaces en trop
2257
		} else if (!preg_match('/^(?:in [^;]+[;]|)[^,]+?(?:[,][^:]+|)(?:[:].+|)$/', $intitule)) {
2266
		} else if (!preg_match('/^(?:in [^;]+[;]|)[^,]+?(?:[,][^:]+|)(?:[:].+|)$/', $intitule)) {
2258
			$ok = false;
2267
			$ok = false;
2259
		} else if (preg_match('/(?:(?:^|[,:])\s*(?:[:,]|$))/', $intitule)) {
2268
		} else if (preg_match('/(?:(?:^|[,:])\s*(?:[:,]|$))/', $intitule)) {
2260
			$ok = false;// Contient une mauvaise suite de caractères
2269
			$ok = false;// Contient une mauvaise suite de caractères
2261
		}
2270
		}
2262
		return $ok;
2271
		return $ok;
2263
	}
2272
	}
2264
	
2273
	
2265
	private function verifierAnnee(&$annee) {
2274
	private function verifierAnnee(&$annee) {
2266
		$ok = true;
2275
		$ok = true;
2267
		if (!preg_match('/^[0-9]{4}$/', $annee)) {
2276
		if (!preg_match('/^[0-9]{4}$/', $annee)) {
2268
			$ok = false;
2277
			$ok = false;
2269
		} else if ($annee < 1753) {
2278
		} else if ($annee < 1753) {
2270
			$ok = false;
2279
			$ok = false;
2271
		}
2280
		}
2272
		return $ok;
2281
		return $ok;
2273
	}
2282
	}
2274
	
2283
	
2275
	private function verifierAuteur(&$intitule) {
2284
	private function verifierAuteur(&$intitule) {
2276
		$ok = true;
2285
		$ok = true;
2277
		$acceptes = $this->manuel['auteur_acceptes'];
2286
		$acceptes = $this->manuel['auteur_acceptes'];
2278
		if (!preg_match("/^(?:$acceptes)$/", $intitule)) {
2287
		if (!preg_match("/^(?:$acceptes)$/", $intitule)) {
2279
			if (preg_match('/(?:^\s+|\s{2,}|\s+$)/', $intitule)) {
2288
			if (preg_match('/(?:^\s+|\s{2,}|\s+$)/', $intitule)) {
2280
				$ok = false;// Contient des espaces en trop
2289
				$ok = false;// Contient des espaces en trop
2281
			} else {
2290
			} else {
2282
				$mots_rejetes = $this->manuel['auteur_mots_rejetes'];
2291
				$mots_rejetes = $this->manuel['auteur_mots_rejetes'];
2283
				$mots = explode(' ', $intitule);
2292
				$mots = explode(' ', $intitule);
2284
				foreach ($mots as $position => $mot) {
2293
				foreach ($mots as $position => $mot) {
2285
					if (preg_match("/^(?:$mots_rejetes)$/i", $mot)) {
2294
					if (preg_match("/^(?:$mots_rejetes)$/i", $mot)) {
2286
						$ok = false;// Mot rejeté
2295
						$ok = false;// Mot rejeté
2287
					} else if (preg_match("/^(?:(?:\p{L}|[.'\(\)-])+|[&])$/u", $mot)) {
2296
					} else if (preg_match("/^(?:(?:\p{L}|[.'\(\)-])+|[&])$/u", $mot)) {
2288
						continue;// Mot de l'intitulé auteur
2297
						continue;// Mot de l'intitulé auteur
2289
					} else {
2298
					} else {
2290
						$ok = false;
2299
						$ok = false;
2291
					}
2300
					}
2292
				}
2301
				}
2293
			}
2302
			}
2294
		}
2303
		}
2295
		return $ok;
2304
		return $ok;
2296
	}
2305
	}
2297
	
2306
	
2298
	private function verifierNomCommercial(&$epithete) {
2307
	private function verifierNomCommercial(&$epithete) {
2299
		$ok = false;
2308
		$ok = false;
2300
		if (preg_match("/^[[:upper:][:punct:][:digit:][:space:]]+$/", $epithete)) {
2309
		if (preg_match("/^[[:upper:][:punct:][:digit:][:space:]]+$/", $epithete)) {
2301
			$ok = true;
2310
			$ok = true;
2302
		}
2311
		}
2303
		return $ok;
2312
		return $ok;
2304
	}
2313
	}
2305
	
2314
	
2306
	private function verifierEpitheteCultivar(&$epithete) {
2315
	private function verifierEpitheteCultivar(&$epithete) {
2307
		$ok = true;
2316
		$ok = true;
2308
		$acceptes = $this->manuel['cultivar_acceptes'];
2317
		$acceptes = $this->manuel['cultivar_acceptes'];
2309
		if (!preg_match("/^(?:$acceptes)$/", $epithete)) {
2318
		if (!preg_match("/^(?:$acceptes)$/", $epithete)) {
2310
			if (preg_match('/(?:^\s+|\s{2,}|\s+$)/', $epithete)) {
2319
			if (preg_match('/(?:^\s+|\s{2,}|\s+$)/', $epithete)) {
2311
				$ok = false;// Contient des espaces en trop
2320
				$ok = false;// Contient des espaces en trop
2312
			} else {
2321
			} else {
2313
				$mots_rejetes = $this->manuel['cultivar_mots_rejetes'];
2322
				$mots_rejetes = $this->manuel['cultivar_mots_rejetes'];
2314
				$mots_mineurs = $this->manuel['mots_mineurs'];
2323
				$mots_mineurs = $this->manuel['mots_mineurs'];
2315
				$mots = explode(' ', $epithete);
2324
				$mots = explode(' ', $epithete);
2316
				foreach ($mots as $position => $mot) {
2325
				foreach ($mots as $position => $mot) {
2317
					if (preg_match("/^(?:$mots_rejetes)$/i", $mot)) {
2326
					if (preg_match("/^(?:$mots_rejetes)$/i", $mot)) {
2318
						$ok = false;// Mot rejeté
2327
						$ok = false;// Mot rejeté
2319
					} else if ($position > 0 && preg_match("/^(?:$mots_mineurs)$/", $mot)) {
2328
					} else if ($position > 0 && preg_match("/^(?:$mots_mineurs)$/", $mot)) {
2320
						continue;// Mot mineur en minuscule qui n'est pas en 1ère position
2329
						continue;// Mot mineur en minuscule qui n'est pas en 1ère position
2321
					} else {
2330
					} else {
2322
						$mots_tiret = explode('-', $mot);
2331
						$mots_tiret = explode('-', $mot);
2323
						foreach ($mots_tiret as $position_tiret => $mot_tiret) {
2332
						foreach ($mots_tiret as $position_tiret => $mot_tiret) {
2324
							if ($position_tiret > 0 && preg_match("/^(?:$mots_mineurs)$/", $mot_tiret)) {
2333
							if ($position_tiret > 0 && preg_match("/^(?:$mots_mineurs)$/", $mot_tiret)) {
2325
								continue;// Mot-tiret mineur en minuscule qui n'est pas en 1ère position
2334
								continue;// Mot-tiret mineur en minuscule qui n'est pas en 1ère position
2326
							} else if (preg_match('/^[[:upper:]][[:lower:]]+$/', $mot_tiret)) {
2335
							} else if (preg_match('/^[[:upper:]][[:lower:]]+$/', $mot_tiret)) {
2327
								continue;//Mot (ou 'mot-tiret') avec lettre initiale majuscule
2336
								continue;//Mot (ou 'mot-tiret') avec lettre initiale majuscule
2328
							} else if ($position_tiret == count($mots_tiret) && preg_match('/^[:upper:][:lower:]+[:punct:]?$/', $mot_tiret)) {
2337
							} else if ($position_tiret == count($mots_tiret) && preg_match('/^[:upper:][:lower:]+[:punct:]?$/', $mot_tiret)) {
2329
								continue;//Dernier mot (ou 'mot-tiret') avec lettre initiale majuscule, suivi d'un éventuel signe de ponctuation
2338
								continue;//Dernier mot (ou 'mot-tiret') avec lettre initiale majuscule, suivi d'un éventuel signe de ponctuation
2330
							} else {
2339
							} else {
2331
								$ok = false;
2340
								$ok = false;
2332
							}
2341
							}
2333
						}
2342
						}
2334
					}
2343
					}
2335
				}
2344
				}
2336
			}
2345
			}
2337
		}
2346
		}
2338
		return $ok;
2347
		return $ok;
2339
	}
2348
	}
2340
	
2349
	
2341
	private function verifierEpitheteGroupeCultivar(&$epithete) {
2350
	private function verifierEpitheteGroupeCultivar(&$epithete) {
2342
		$ok = true;
2351
		$ok = true;
2343
		$acceptes = $this->manuel['cultivar_gp_acceptes'];
2352
		$acceptes = $this->manuel['cultivar_gp_acceptes'];
2344
		if (!preg_match("/^(?:$acceptes)$/", $epithete)) {
2353
		if (!preg_match("/^(?:$acceptes)$/", $epithete)) {
2345
			if (preg_match('/(?:^\s+|\s{2,}|\s+$)/', $epithete)) {
2354
			if (preg_match('/(?:^\s+|\s{2,}|\s+$)/', $epithete)) {
2346
				$ok = false;// Contient des espaces en trop
2355
				$ok = false;// Contient des espaces en trop
2347
			} else {
2356
			} else {
2348
				$mots_acceptes = $this->manuel['cultivar_gp_mots_acceptes'];
2357
				$mots_acceptes = $this->manuel['cultivar_gp_mots_acceptes'];
2349
				$mots_rejetes = $this->manuel['cultivar_gp_mots_rejetes'];
2358
				$mots_rejetes = $this->manuel['cultivar_gp_mots_rejetes'];
2350
				$mots_mineurs = $this->manuel['mots_mineurs'];
2359
				$mots_mineurs = $this->manuel['mots_mineurs'];
2351
				$mots = explode(' ', $epithete);
2360
				$mots = explode(' ', $epithete);
2352
				foreach ($mots as $position => $mot) {
2361
				foreach ($mots as $position => $mot) {
2353
					if (preg_match("/^(?:$mots_acceptes)$/i", $mot)) {
2362
					if (preg_match("/^(?:$mots_acceptes)$/i", $mot)) {
2354
						continue;// Mot accepté
2363
						continue;// Mot accepté
2355
					} else if (preg_match("/^(?:$mots_rejetes)$/i", $mot)) {
2364
					} else if (preg_match("/^(?:$mots_rejetes)$/i", $mot)) {
2356
						$ok = false;// Mot rejeté
2365
						$ok = false;// Mot rejeté
2357
					} else if ($position > 0 && preg_match("/^(?:$mots_mineurs)$/", $mot)) {
2366
					} else if ($position > 0 && preg_match("/^(?:$mots_mineurs)$/", $mot)) {
2358
						continue;// Mot mineur en minuscule qui n'est pas en 1ère position
2367
						continue;// Mot mineur en minuscule qui n'est pas en 1ère position
2359
					} else {
2368
					} else {
2360
						$mots_tiret = explode('-', $mot);
2369
						$mots_tiret = explode('-', $mot);
2361
						foreach ($mots_tiret as $position_tiret => $mot_tiret) {
2370
						foreach ($mots_tiret as $position_tiret => $mot_tiret) {
2362
							if ($position_tiret > 0 && preg_match("/^(?:$mots_mineurs)$/", $mot_tiret)) {
2371
							if ($position_tiret > 0 && preg_match("/^(?:$mots_mineurs)$/", $mot_tiret)) {
2363
								continue;// Mot-tiret mineur en minuscule qui n'est pas en 1ère position dans le mot
2372
								continue;// Mot-tiret mineur en minuscule qui n'est pas en 1ère position dans le mot
2364
							} else if (preg_match('/^[[:upper:]][[:lower:]]+$/', $mot_tiret)) {
2373
							} else if (preg_match('/^[[:upper:]][[:lower:]]+$/', $mot_tiret)) {
2365
								continue;// Mot (ou 'mot-tiret') avec lettre initiale majuscule
2374
								continue;// Mot (ou 'mot-tiret') avec lettre initiale majuscule
2366
							} else if ($position_tiret == count($mots_tiret) && preg_match('/^[:upper:][:lower:]+[:punct:]?$/', $mot_tiret)) {
2375
							} else if ($position_tiret == count($mots_tiret) && preg_match('/^[:upper:][:lower:]+[:punct:]?$/', $mot_tiret)) {
2367
								continue;// Dernier mot (ou 'mot-tiret') avec lettre initiale majuscule, suivi d'un éventuel signe de ponctuation
2376
								continue;// Dernier mot (ou 'mot-tiret') avec lettre initiale majuscule, suivi d'un éventuel signe de ponctuation
2368
							} else {
2377
							} else {
2369
								$ok = false;
2378
								$ok = false;
2370
							}
2379
							}
2371
						}
2380
						}
2372
					}
2381
					}
2373
				}
2382
				}
2374
			}
2383
			}
2375
		}
2384
		}
2376
		return $ok;
2385
		return $ok;
2377
	}
2386
	}
2378
	
2387
	
2379
	private function verifierEpitheteSp(&$epithete) {
2388
	private function verifierEpitheteSp(&$epithete) {
2380
		$ok = false;
2389
		$ok = false;
2381
		if (preg_match('/^[a-zëï][-a-zëï]+$/', $epithete)) {
2390
		if (preg_match('/^[a-zëï][-a-zëï]+$/', $epithete)) {
2382
			$ok = true;
2391
			$ok = true;
2383
		} else if (preg_match('/^sp\.(?:[A-Z]|[1-9][0-9]*)$/', $epithete)) {
2392
		} else if (preg_match('/^sp\.(?:[A-Z]|[1-9][0-9]*)$/', $epithete)) {
2384
			$ok = true;
2393
			$ok = true;
2385
		}
2394
		}
2386
		return $ok;
2395
		return $ok;
2387
	}
2396
	}
2388
	
2397
	
2389
	private function verifierEpitheteGenre(&$epithete) {
2398
	private function verifierEpitheteGenre(&$epithete) {
2390
		$ok = false;
2399
		$ok = false;
2391
		if (preg_match('/^[A-ZËÏ](?:[-a-zëï]+|[a-zëï]+-[A-ZËÏ][a-zëï]+)$/', $epithete)) {
2400
		if (preg_match('/^[A-ZËÏ](?:[-a-zëï]+|[a-zëï]+-[A-ZËÏ][a-zëï]+)$/', $epithete)) {
2392
			$ok = true;
2401
			$ok = true;
2393
		}
2402
		}
2394
		return $ok;
2403
		return $ok;
2395
	}
2404
	}
2396
	
2405
	
2397
	private function formaterStyleNomGenre(&$genre) {
2406
	private function formaterStyleNomGenre(&$genre) {
2398
		$genre_fmt = '';
2407
		$genre_fmt = '';
2399
		if (preg_match('/^\s*([x+])\s+(.+)$/i', $genre, $match)) {
2408
		if (preg_match('/^\s*([x+])\s+(.+)$/i', $genre, $match)) {
2400
			$genre_fmt = strtolower($match[1]).' '.ucfirst(strtolower($match[2]));
2409
			$genre_fmt = strtolower($match[1]).' '.ucfirst(strtolower($match[2]));
2401
		} else {
2410
		} else {
2402
			$genre_fmt = ucfirst(strtolower($genre));
2411
			$genre_fmt = ucfirst(strtolower($genre));
2403
		}
2412
		}
2404
		return $genre_fmt;
2413
		return $genre_fmt;
2405
	}
2414
	}
2406
	
2415
	
2407
	private function repererEspace($nom_sci) {
2416
	private function repererEspace($nom_sci) {
2408
		$nom_sci = str_replace(' ', '<span class="espace">&nbsp;</span>', $nom_sci);
2417
		$nom_sci = str_replace(' ', '<span class="espace">&nbsp;</span>', $nom_sci);
2409
		return $nom_sci;
2418
		return $nom_sci;
2410
	}
2419
	}
2411
	
2420
	
2412
	private function construireSuffixeNomPltCultivee(&$nom) {
2421
	private function construireSuffixeNomPltCultivee(&$nom) {
2413
		$suffixe = array();
2422
		$suffixe = array();
2414
		$suffixe[] = $this->construireNomCultivarGroupe($nom);
2423
		$suffixe[] = $this->construireNomCultivarGroupe($nom);
2415
		$suffixe[] = $this->construireNomCommercial($nom);
2424
		$suffixe[] = $this->construireNomCommercial($nom);
2416
		$suffixe[] = $this->construireNomCultivar($nom);
2425
		$suffixe[] = $this->construireNomCultivar($nom);
2417
		$suffixe = array_filter($suffixe);
2426
		$suffixe = array_filter($suffixe);
2418
		return implode(' ', $suffixe);
2427
		return implode(' ', $suffixe);
2419
	}
2428
	}
2420
	
2429
	
2421
	private function construireNomCultivarGroupe(&$nom) {
2430
	private function construireNomCultivarGroupe(&$nom) {
2422
		$nom_groupe_cultivar = '';
2431
		$nom_groupe_cultivar = '';
2423
		if ($nom['cultivar_groupe'] != '') {
2432
		if ($nom['cultivar_groupe'] != '') {
2424
			if (preg_match('/ gx$/', $nom['cultivar_groupe'])) {
2433
			if (preg_match('/ gx$/', $nom['cultivar_groupe'])) {
2425
				$nom_groupe_cultivar =  '('.$nom['cultivar_groupe'].')';
2434
				$nom_groupe_cultivar =  '('.$nom['cultivar_groupe'].')';
2426
			} else {
2435
			} else {
2427
				$nom_groupe_cultivar =  '('.$nom['cultivar_groupe'].' Gp)';
2436
				$nom_groupe_cultivar =  '('.$nom['cultivar_groupe'].' Gp)';
2428
			}
2437
			}
2429
		}
2438
		}
2430
		return $nom_groupe_cultivar;
2439
		return $nom_groupe_cultivar;
2431
	}
2440
	}
2432
	
2441
	
2433
	private function construireNomCommercial(&$nom) {
2442
	private function construireNomCommercial(&$nom) {
2434
		$nom_commercial = '';
2443
		$nom_commercial = '';
2435
		if ($nom['nom_commercial'] != '') {
2444
		if ($nom['nom_commercial'] != '') {
2436
			$nom_commercial =  strtoupper($nom['nom_commercial']);
2445
			$nom_commercial =  strtoupper($nom['nom_commercial']);
2437
		}
2446
		}
2438
		return $nom_commercial;
2447
		return $nom_commercial;
2439
	}
2448
	}
2440
	
2449
	
2441
	private function construireNomCultivar(&$nom) {
2450
	private function construireNomCultivar(&$nom) {
2442
		$nom_cultivar = '';
2451
		$nom_cultivar = '';
2443
		if ($nom['cultivar'] != '') {
2452
		if ($nom['cultivar'] != '') {
2444
			$nom_cultivar =  "'".$nom['cultivar']."'";
2453
			$nom_cultivar =  "'".$nom['cultivar']."'";
2445
		}
2454
		}
2446
		return $nom_cultivar;
2455
		return $nom_cultivar;
2447
	}
2456
	}
2448
	
2457
	
2449
	private function classerNomsParNomComplet() {
2458
	private function classerNomsParNomComplet() {
2450
		$noms_classes = array();
2459
		$noms_classes = array();
2451
		foreach ($this->noms as &$nom) {
2460
		foreach ($this->noms as &$nom) {
2452
			if (!isset($noms_classes[$nom['nom_sci']])) {
2461
			if (!isset($noms_classes[$nom['nom_sci']])) {
2453
				$noms_classes[$nom['nom_sci']] = 1;
2462
				$noms_classes[$nom['nom_sci']] = 1;
2454
			} else {
2463
			} else {
2455
				$noms_classes[$nom['nom_sci']]++;
2464
				$noms_classes[$nom['nom_sci']]++;
2456
			}
2465
			}
2457
		}
2466
		}
2458
		return $noms_classes;
2467
		return $noms_classes;
2459
	}
2468
	}
2460
 
2469
 
2461
}
2470
}
2462
?>
2471
?>