Subversion Repositories Applications.referentiel

Rev

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

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