Subversion Repositories Applications.referentiel

Rev

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

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