Subversion Repositories Applications.referentiel

Rev

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

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