Subversion Repositories Applications.referentiel

Rev

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

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