Subversion Repositories Applications.referentiel

Rev

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

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