Subversion Repositories Applications.referentiel

Rev

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

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