Subversion Repositories Applications.referentiel

Rev

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

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