Subversion Repositories Applications.referentiel

Rev

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

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