Subversion Repositories Applications.referentiel

Rev

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

Rev 177 Rev 183
1
<?php
1
<?php
2
// Encodage : UTF-8
2
// Encodage : UTF-8
3
// +-------------------------------------------------------------------------------------------------------------------+
3
// +-------------------------------------------------------------------------------------------------------------------+
4
/**
4
/**
5
* Tests de référentiels de nomenclature et taxonomie
5
* Tests de référentiels de nomenclature et taxonomie
6
*
6
*
7
* Description : classe permettant de tester les référentiels selon le manuel technique
7
* Description : classe permettant de tester les référentiels selon le manuel technique
8
* Utilisation : php script.php tests -p bdnff -a tout
8
* Utilisation : php script.php tests -p bdnff -a tout
9
*
9
*
10
//Auteur original :
10
//Auteur original :
11
* @author       Jean-Pascal MILCENT <jpm@tela-botanica.org>
11
* @author       Jean-Pascal MILCENT <jpm@tela-botanica.org>
12
* @copyright	Tela-Botanica 1999-2010
12
* @copyright	Tela-Botanica 1999-2010
13
* @link			http://www.tela-botanica.org/wikini/RTaxMethodo/wakka.php?wiki=MaNuel
13
* @link			http://www.tela-botanica.org/wikini/RTaxMethodo/wakka.php?wiki=MaNuel
14
* @licence		GPL v3 & CeCILL v2
14
* @licence		GPL v3 & CeCILL v2
15
* @version		$Id$
15
* @version		$Id$
16
*/
16
*/
17
// +-------------------------------------------------------------------------------------------------------------------+
17
// +-------------------------------------------------------------------------------------------------------------------+
18
// TODO : supprimer l'utilisation du paramêtres 'p' et chercher les infos depuis la bdd
18
// TODO : supprimer l'utilisation du paramêtres 'p' et chercher les infos depuis la bdd
19
class Tests extends ScriptCommande {
19
class Tests extends ScriptCommande {
20
	
20
	
21
	const SCRIPT_NOM = 'tests';
21
	const SCRIPT_NOM = 'tests';
22
	
22
	
23
	private $projet = null;
23
	private $projet = null;
24
	private $traitement = null;
24
	private $traitement = null;
25
	
25
	
26
	private $manuel = null;
26
	private $manuel = null;
27
	private $tests = null;
27
	private $tests = null;
28
	private $colonnes = null;
28
	private $colonnes = null;
29
	private $analyses = null;
29
	private $analyses = null;
30
	private $noms = null;
30
	private $noms = null;
31
	
31
	
32
	private $resultatDao = null;
32
	private $resultatDao = null;
33
	private $traitementDao = null;
33
	private $traitementDao = null;
34
	private $tableStructureDao = null;
34
	private $tableStructureDao = null;
35
	private $referentielDao = null;
35
	private $referentielDao = null;
36
	
36
	
37
	public function executer() {
37
	public function executer() {
38
		$this->manuel = parse_ini_file(Config::get('chemin_appli').DS.'..'.DS.'configurations'.DS.'referentiel_v4.1.ini');
38
		$this->manuel = parse_ini_file(Config::get('chemin_appli').DS.'..'.DS.'configurations'.DS.'referentiel_v4.1.ini');
39
		$this->definirConstantes();
39
		$this->definirConstantes();
40
		$this->tests = parse_ini_file($this->getModuleChemin().DS.'configurations'.DS.'tests.ini', true);
40
		$this->tests = parse_ini_file($this->getModuleChemin().DS.'configurations'.DS.'tests.ini', true);
41
		
41
		
42
		$this->resultatDao = new ResultatDao();
42
		$this->resultatDao = new ResultatDao();
43
		$this->traitementDao = new TraitementDao();
43
		$this->traitementDao = new TraitementDao();
44
		Debug::printr('Dans le script test');
44
		Debug::printr('Dans le script test');
45
		// Récupération du dernier traitement demandé
45
		// Récupération du dernier traitement demandé
46
		$this->traitement = $this->traitementDao->getDernierTraitement('tout', self::SCRIPT_NOM);
46
		$this->traitement = $this->traitementDao->getDernierTraitement('tout', self::SCRIPT_NOM);
47
		if (isset($this->traitement)) {
47
		if (isset($this->traitement)) {
48
			$this->projet = $this->traitement['referentiel_code']; // Récupération du nom de projet
48
			$this->projet = $this->traitement['referentiel_code']; // Récupération du nom de projet
49
			Debug::printr($this->traitement);
49
			Debug::printr($this->traitement);
50
			// Écriture de la date de début du traitement
50
			// Écriture de la date de début du traitement
51
			Debug::printr('Debute:'.$this->traitementDao->debuterTraitement($this->traitement['id_traitement']));
51
			Debug::printr('Debute:'.$this->traitementDao->debuterTraitement($this->traitement['id_traitement']));
52
			
52
			
53
			// Nettoyage des traitements obsolètes
53
			// Nettoyage des traitements obsolètes
54
			$traitements_obsoletes = $this->traitementDao->getTraitementsObsoletes($this->projet, self::SCRIPT_NOM);
54
			$traitements_obsoletes = $this->traitementDao->getTraitementsObsoletes($this->projet, self::SCRIPT_NOM);
55
			if (isset($traitements_obsoletes)) {
55
			if (isset($traitements_obsoletes)) {
56
				Debug::printr('Supp. obsoletes:'.$this->traitementDao->supprimer($traitements_obsoletes));
56
				Debug::printr('Supp. obsoletes:'.$this->traitementDao->supprimer($traitements_obsoletes));
57
			}
57
			}
58
			
58
			
59
			$this->tableStructureDao = new TableStructureDao();
59
			$this->tableStructureDao = new TableStructureDao();
60
			$this->referentielDao = new ReferentielDao();
60
			$this->referentielDao = new ReferentielDao();
61
			
61
			
62
			// Lancement du test demandé
62
			// Lancement du test demandé
63
			$cmd = $this->getParam('a');
63
			$cmd = $this->getParam('a');
64
	    	switch ($cmd) {
64
	    	switch ($cmd) {
65
				case 'tout' :
65
				case 'tout' :
66
					Debug::printr('Départ lancement test:');
66
					Debug::printr('Départ lancement test:');
67
					$this->recupererDonnees();
67
					$this->recupererDonnees();
68
					$this->lancerTestsAuto();
68
					$this->lancerTestsAuto();
69
					break;
69
					break;
70
				case 'test11' :
70
				case 'test11' :
71
					$this->recupererDonnees();
71
					$this->recupererDonnees();
72
					Debug::printr('Départ lancement test 11 :');
72
					Debug::printr('Départ lancement test 11 :');
73
					$this->testerClassificationRang();
73
					$this->testerClassificationRang();
74
					break;
74
					break;
75
				default :
75
				default :
76
					$this->traiterErreur('Erreur : la commande "%s" n\'existe pas!', array($cmd));
76
					$this->traiterErreur('Erreur : la commande "%s" n\'existe pas!', array($cmd));
77
			}
77
			}
78
			// Écriture de la date de fin du traitement
78
			// Écriture de la date de fin du traitement
79
			Debug::printr('Termine:'.$this->traitementDao->terminerTraitement($this->traitement['id_traitement']));
79
			Debug::printr('Termine:'.$this->traitementDao->terminerTraitement($this->traitement['id_traitement']));
80
		} else {
80
		} else {
81
			Debug::printr("Aucun dernier traitement trouvé pour le script '".self::SCRIPT_NOM."' !");
81
			Debug::printr("Aucun dernier traitement trouvé pour le script '".self::SCRIPT_NOM."' !");
82
		}
82
		}
83
    }
83
    }
84
    
84
    
85
    /**
85
    /**
86
     * Cette méthode définie des constantes qui peuvent ensuite être utilisée dans les fichier ini.
86
     * Cette méthode définie des constantes qui peuvent ensuite être utilisée dans les fichier ini.
87
     * Surtout utile pour le fichier tests.ini
87
     * Surtout utile pour le fichier tests.ini
88
     */
88
     */
89
    private function definirConstantes() {
89
    private function definirConstantes() {
90
    	define('RANG_GENRE', $this->manuel['rang_genre']);
90
    	define('RANG_GENRE', $this->manuel['rang_genre']);
91
    	define('RANG_SP', $this->manuel['rang_sp']);
91
    	define('RANG_SP', $this->manuel['rang_sp']);
92
    }
92
    }
93
    
93
    
94
    public function recupererDonnees() {
94
    public function recupererDonnees() {
95
		// Récupération des données à tester
95
		// Récupération des données à tester
96
		$this->colonnes = $this->tableStructureDao->getColonnes($this->projet);
96
		$this->colonnes = $this->tableStructureDao->getColonnes($this->projet);
97
		$this->analyses = $this->tableStructureDao->getAnalyse($this->projet);
97
		$this->analyses = $this->tableStructureDao->getAnalyse($this->projet);
98
		$this->noms = $this->referentielDao->getTout($this->projet);
98
		$this->noms = $this->referentielDao->getTout($this->projet);
99
		Debug::printr('Nbre noms :'.count($this->noms));
99
		Debug::printr('Nbre noms :'.count($this->noms));
100
    }
100
    }
101
    
101
    
102
    public function lancerTestsAuto() {
102
    public function lancerTestsAuto() {
103
		$resultats = array();
103
		$resultats = array();
104
 
104
 
105
		// Lancement des tests unitaires
105
		// Lancement des tests unitaires
106
		Debug::printr('Lancement des tests unitaires');
106
		Debug::printr('Lancement des tests unitaires');
-
 
107
		$tests_numeros = array_keys($this->tests);
-
 
108
		Debug::printr($tests_numeros);
107
    	foreach (array_keys($this->tests) as $numero) {
109
    	foreach ($tests_numeros as $numero) {
108
			$info = $this->getInfosTest($numero);
110
			$info = $this->getInfosTest($numero);
109
    		
111
    		
110
    		if ($numero < 5) {
112
    		if ($numero < 5) {
111
    			// Tests spéciaux vérifiant la structure de la table
113
    			// Tests spéciaux vérifiant la structure de la table
112
    			$resultats[] = $this->lancerTestUnitaire($info);
114
    			$resultats[] = $this->lancerTestUnitaire($info);
113
    		} else if ($numero >= 5 && $this->verifierResultats($resultats)) {		
115
    		} else if ($numero >= 5 && $this->verifierResultats($resultats)) {		
114
				// Si la structure est bonne nous lançons les autres tests
116
				// Si la structure est bonne nous lançons les autres tests
115
				$this->lancerTestUnitaire($info);
117
				$this->lancerTestUnitaire($info);
116
    		}
118
    		}
117
		}
119
		}
118
    }
120
    }
-
 
121
	
-
 
122
    private function getInfosTest($numero) {
-
 
123
		$info = $this->tests[$numero];
-
 
124
		$info['methode'] = 'tester'.implode('', explode(' ', ucwords($info['abr'])));
-
 
125
		$info['numero'] = $numero;
-
 
126
		$info['nom'] = '#'.$numero.' - '.$info['nom'];
-
 
127
		$info['resultat'] = false;
-
 
128
		return $info;
-
 
129
	}
119
    
130
    
120
    public function lancerTestUnitaire($info) {
131
    public function lancerTestUnitaire($info) {
121
		Debug::printr($info['numero'].'::'.$info['methode']);
132
		Debug::printr($info['numero'].'::'.$info['methode']);
122
    	$methodeDeTest = $info['methode'];
133
    	$methodeDeTest = $info['methode'];
123
    	$erreurs = $this->$methodeDeTest();
134
    	$erreurs = $this->$methodeDeTest();
124
    	
135
    	
125
    	// Analyse des résultats
136
    	// Analyse des résultats
126
    	if (isset($erreurs['special'])) {
137
    	if (isset($erreurs['special'])) {
127
    		$info = $erreurs;
138
    		$info = $erreurs;
128
    	} else {
139
    	} else {
129
    		if (count($erreurs) > 0) {
140
    		if (count($erreurs) > 0) {
130
				$info['message']['entete'] = explode(',', $info['entete']);
141
				$info['message']['entete'] = explode(',', $info['entete']);
-
 
142
				if (isset($info['title'])) {
-
 
143
					$info['message']['title'] = explode(';', $info['title']);
-
 
144
				}
131
				$info['message']['lignes'] = $erreurs;
145
				$info['message']['lignes'] = $erreurs;
132
				unset($erreurs);
146
				unset($erreurs);
133
			} else {
147
			} else {
134
				$info['resultat'] = true;
148
				$info['resultat'] = true;
135
			}
149
			}
136
    	}
150
    	}
137
    	
151
    	
138
		$this->traiterResultatTest($info);
152
		$this->traiterResultatTest($info);
139
		
153
		
140
		if ($info['numero'] < 5) {
154
		if ($info['numero'] < 5) {
141
			return ($info['resultat'] ? '1' : '0');
155
			return ($info['resultat'] ? '1' : '0');
142
		}
156
		}
143
    }
157
    }
144
	
158
	
145
	private function verifierResultats($resultats) {
159
	private function verifierResultats($resultats) {
146
		$ok = true;
160
		$ok = true;
147
		foreach ($resultats as $resultat) {
161
		foreach ($resultats as $resultat) {
148
			if ($resultat == '0') {
162
			if ($resultat == '0') {
149
				$ok = false;
163
				$ok = false;
150
				break;
164
				break;
151
			}
165
			}
152
		}
166
		}
153
		return $ok;
167
		return $ok;
154
	}
168
	}
155
	
169
	
156
	private function traiterResultatTest($info) {
170
	private function traiterResultatTest($info) {
157
		if (isset($info['message'])) {
171
		if (isset($info['message'])) {
158
			if (is_array($info['message'])) {
172
			if (is_array($info['message'])) {
-
 
173
				$erreurs_nbre = count($info['message']['lignes']);
-
 
174
				$erreurs_max = 1000;
-
 
175
				if ($erreurs_nbre > $erreurs_max) {
-
 
176
					$info['message']['lignes'] = array_slice($info['message']['lignes'], 0, $erreurs_max);
-
 
177
					$info['erreur'] = "$erreurs_nbre erreurs ont été détectées seules les $erreurs_max premières sont affichées";
-
 
178
				}
159
				$info['message'] = $this->getVue('tests/squelettes/message_table', $info);
179
				$info['message'] = $this->getVue('tests/squelettes/message_table', $info);
160
			} else {
180
			} else {
161
				$info['message'] = $this->getVue('tests/squelettes/message_p', $info);
181
				$info['message'] = $this->getVue('tests/squelettes/message_p', $info);
162
			}
182
			}
163
		}
183
		}
164
		$this->resultatDao->ajouter($this->traitement['id_traitement'], $info);
184
		Debug::printr($this->resultatDao->ajouter($this->traitement['id_traitement'], $info));
165
		$info = null;
185
		$info = null;
166
	}
186
	}
167
	
187
	
168
	//+--------------------------------------------------------------------------------------------------------------+//
188
	//+--------------------------------------------------------------------------------------------------------------+//
169
	// TESTS
189
	// TESTS
170
	
190
	
171
	/**
191
	/**
172
	 * Test #01
192
	 * Test #01
173
	 */
193
	 */
174
	private function testerNombreDeChamps() {
194
	private function testerNombreDeChamps() {
175
		$info = $this->getInfosTest(1);
195
		$info = $this->getInfosTest(1);
176
		$info['special'] = true;
196
		$info['special'] = true;
177
		
197
		
178
		$nbre_colonnes = count($this->colonnes);
198
		$nbre_colonnes = count($this->colonnes);
179
		$info['message'] = $nbre_colonnes;
199
		$info['message'] = $nbre_colonnes;
180
		if ($nbre_colonnes >= 35) {
200
		if ($nbre_colonnes >= 35) {
181
			$info['resultat'] = true;
201
			$info['resultat'] = true;
182
		}
202
		}
183
		
203
		
184
		return $info;
204
		return $info;
185
	}
205
	}
186
	
206
	
187
	/**
207
	/**
188
	 * Test #02
208
	 * Test #02
189
	 */
209
	 */
190
	private function testerNomDesChamps() {
210
	private function testerNomDesChamps() {
191
		$info = $this->getInfosTest(2);
211
		$info = $this->getInfosTest(2);
192
		$info['special'] = true;
212
		$info['special'] = true;
193
		
213
		
194
		$champs_attendus = explode(',', $this->manuel['champs']);
214
		$champs_attendus = explode(',', $this->manuel['champs']);
195
		$champs_presents = array();
215
		$champs_presents = array();
196
		foreach ($this->colonnes as $colonne) {
216
		foreach ($this->colonnes as $colonne) {
197
			$champs_presents[$colonne['Field']] = $colonne;
217
			$champs_presents[$colonne['Field']] = $colonne;
198
		}
218
		}
199
		
219
		
200
		$ok = true;
220
		$ok = true;
201
		$champs_manquant = array(); 
221
		$champs_manquant = array(); 
202
		foreach ($champs_attendus as $champ_attendu) {
222
		foreach ($champs_attendus as $champ_attendu) {
203
			if (!isset($champs_presents[$champ_attendu])) {
223
			if (!isset($champs_presents[$champ_attendu])) {
204
				$champs_manquant[] = $champ_attendu; 
224
				$champs_manquant[] = $champ_attendu; 
205
				$ok = false;
225
				$ok = false;
206
			}
226
			}
207
		}
227
		}
208
		
228
		
209
		$info['resultat'] = $ok;
229
		$info['resultat'] = $ok;
210
		if (!$ok) {
230
		if (!$ok) {
211
			$info['message'] = sprintf($info['message'], implode(', ', $champs_manquant));
231
			$info['message'] = sprintf($info['message'], implode(', ', $champs_manquant));
212
		}
232
		}
213
		
233
		
214
		return $info;
234
		return $info;
215
	}
235
	}
216
	
236
	
217
	/**
237
	/**
218
	 * Test #03
238
	 * Test #03
219
	 */
239
	 */
220
	private function testerTypeDesChamps() {
240
	private function testerTypeDesChamps() {
221
		$champs_attendus = explode(',', $this->manuel['champs_type']);
241
		$champs_attendus = explode(',', $this->manuel['champs_type']);
222
		$champs_presents = array();
242
		$champs_presents = array();
223
		foreach ($this->colonnes as $colonne) {
243
		foreach ($this->colonnes as $colonne) {
224
			$champs_presents[$colonne['Field']] = $colonne['Type'];
244
			$champs_presents[$colonne['Field']] = $colonne['Type'];
225
		}
245
		}
226
		
246
		
227
		// Recercherche des erreurs
247
		// Recercherche des erreurs
228
		$champs_erreur = array(); 
248
		$champs_erreur = array(); 
229
		foreach ($champs_attendus as $champ_attendu) {
249
		foreach ($champs_attendus as $champ_attendu) {
230
			list($champ_attendu_nom, $champ_attendu_type_taille) = explode('=', trim($champ_attendu));
250
			list($champ_attendu_nom, $champ_attendu_type_taille) = explode('=', trim($champ_attendu));
231
			list($champ_attendu_type, $champ_attendu_taille) = explode('|', trim($champ_attendu_type_taille));
251
			list($champ_attendu_type, $champ_attendu_taille) = explode('|', trim($champ_attendu_type_taille));
232
			
252
			
233
			if (isset($champs_presents[$champ_attendu_nom])) {
253
			if (isset($champs_presents[$champ_attendu_nom])) {
234
				$champs_present_type = $champs_presents[$champ_attendu_nom];
254
				$champs_present_type = $champs_presents[$champ_attendu_nom];
235
				
255
				
236
				if (($champ_attendu_type == 'VARCHAR' && strstr($champs_present_type, 'varchar') === false)
256
				if (($champ_attendu_type == 'VARCHAR' && strstr($champs_present_type, 'varchar') === false)
237
					|| ($champ_attendu_type == 'TEXT' && strstr($champs_present_type, 'text') === false)
257
					|| ($champ_attendu_type == 'TEXT' && strstr($champs_present_type, 'text') === false)
238
					|| ($champ_attendu_type == 'INT' && strstr($champs_present_type, 'int') === false) 
258
					|| ($champ_attendu_type == 'INT' && strstr($champs_present_type, 'int') === false) 
239
					|| ($champ_attendu_type == 'BOOL' && preg_match('/(?:bool|boolean|tinyint\(1\))/i', $champs_present_type) === false)) {
259
					|| ($champ_attendu_type == 'BOOL' && preg_match('/(?:bool|boolean|tinyint\(1\))/i', $champs_present_type) === false)) {
240
					$champs_erreur[] = array($champ_attendu, $champ_attendu_type, $champs_present_type);
260
					$champs_erreur[] = array($champ_attendu, $champ_attendu_type, $champs_present_type);
241
				}
261
				}
242
			}
262
			}
243
		}
263
		}
244
		return $champs_erreur;
264
		return $champs_erreur;
245
	}
265
	}
246
	
266
	
247
	/**
267
	/**
248
	 * Test #04
268
	 * Test #04
249
	 */
269
	 */
250
	private function testerNumNomClePrimaire() {
270
	private function testerNumNomClePrimaire() {
251
		$info = $this->getInfosTest(4);
271
		$info = $this->getInfosTest(4);
252
		$info['special'] = true;
272
		$info['special'] = true;
253
		
273
		
254
		foreach ($this->colonnes as $colonne) {
274
		foreach ($this->colonnes as $colonne) {
255
			if ($colonne['Field'] == 'num_nom' && $colonne['Key'] == 'PRI') {
275
			if ($colonne['Field'] == 'num_nom' && $colonne['Key'] == 'PRI') {
256
				$info['resultat'] = true;
276
				$info['resultat'] = true;
257
			}
277
			}
258
		}
278
		}
259
		return $info;
279
		return $info;
260
	}
280
	}
261
	
281
	
262
	
282
	
263
	/**
283
	/**
264
	 * Test #05
284
	 * Test #05
265
	 */
285
	 */
266
	private function testerTailleDesChamps() {
286
	private function testerTailleDesChamps() {
267
		$tailles_champs_maxi = array();
287
		$tailles_champs_maxi = array();
268
		foreach ($this->colonnes as $colonne) {
288
		foreach ($this->colonnes as $colonne) {
269
			if (preg_match('/^varchar\(([0-9]+)\)$/', $colonne['Type'], $match)) {
289
			if (preg_match('/^varchar\(([0-9]+)\)$/', $colonne['Type'], $match)) {
270
				$tailles_champs_maxi[$colonne['Field']] = $match[1];
290
				$tailles_champs_maxi[$colonne['Field']] = $match[1];
271
			}
291
			}
272
		}
292
		}
273
		
293
		
274
		$tailles_trouvees = array();
294
		$tailles_trouvees = array();
275
		foreach ($this->analyses as $analyse) {
295
		foreach ($this->analyses as $analyse) {
276
			if (preg_match('/\.([^.]+)$/', $analyse['Field_name'], $match)) {
296
			if (preg_match('/\.([^.]+)$/', $analyse['Field_name'], $match)) {
277
				$tailles_trouvees[$match[1]] = $analyse['Max_length'];
297
				$tailles_trouvees[$match[1]] = $analyse['Max_length'];
278
			}
298
			}
279
		}
299
		}
280
		
300
		
281
		$champs_erreur = array();
301
		$champs_erreur = array();
282
		$champs_attendus = explode(',', $this->manuel['champs']);
302
		$champs_attendus = explode(',', $this->manuel['champs']);
283
		foreach ($champs_attendus as $champ_attendu) {
303
		foreach ($champs_attendus as $champ_attendu) {
284
			if (isset($tailles_champs_maxi[$champ_attendu]) && isset($tailles_trouvees[$champ_attendu])) {
304
			if (isset($tailles_champs_maxi[$champ_attendu]) && isset($tailles_trouvees[$champ_attendu])) {
285
				if ($tailles_champs_maxi[$champ_attendu] == $tailles_trouvees[$champ_attendu]) {
305
				if ($tailles_champs_maxi[$champ_attendu] == $tailles_trouvees[$champ_attendu]) {
286
					$champs_erreur[] = array($champ_attendu, $tailles_champs_maxi[$champ_attendu], $tailles_trouvees[$champ_attendu]);
306
					$champs_erreur[] = array($champ_attendu, $tailles_champs_maxi[$champ_attendu], $tailles_trouvees[$champ_attendu]);
287
				}
307
				}
288
			}
308
			}
289
		}
309
		}
290
		return $champs_erreur;
310
		return $champs_erreur;
291
	}
311
	}
292
		
312
		
293
	/**
313
	/**
294
	 * Test #06
314
	 * Test #06
295
	 */
315
	 */
296
	private function testerNumNomSuperieurAZero() {
316
	private function testerNumNomSuperieurAZero() {
297
		$noms_erreur = array();
317
		$noms_erreur = array();
298
		foreach ($this->noms as &$nom) {
318
		foreach ($this->noms as &$nom) {
299
			if ($nom['num_nom'] <= 0) {
319
			if ($nom['num_nom'] <= 0) {
300
				$noms_erreur[] = array($nom['num_nom']);
320
				$noms_erreur[] = array($nom['num_nom']);
301
			}
321
			}
302
		}
322
		}
303
		return $noms_erreur;
323
		return $noms_erreur;
304
	}
324
	}
305
	
325
	
306
	/**
326
	/**
307
	 * Test #07
327
	 * Test #07
308
	 */
328
	 */
309
	private function testerNumNomRetenuSuperieurAZero() {
329
	private function testerNumNomRetenuSuperieurAZero() {
310
		$noms_erreur = array();
330
		$noms_erreur = array();
311
		foreach ($this->noms as &$nom) {
331
		foreach ($this->noms as &$nom) {
312
			if ($nom['num_nom_retenu'] != '' && $nom['num_nom_retenu'] <= 0) {
332
			if ($nom['num_nom_retenu'] != '' && $nom['num_nom_retenu'] <= 0) {
313
				$noms_erreur[] = array($nom['num_nom'], $nom['num_nom_retenu']);
333
				$noms_erreur[] = array($nom['num_nom'], $nom['num_nom_retenu']);
314
			}
334
			}
315
		}
335
		}
316
		return $noms_erreur;
336
		return $noms_erreur;
317
	}
337
	}
318
	
338
	
319
	/**
339
	/**
320
	 * Test #08
340
	 * Test #08
321
	 */
341
	 */
322
	private function testerNumTaxSupEgalZeroUnique() {
342
	private function testerNumTaxSupEgalZeroUnique() {
323
		$noms_erreur = array();
343
		$noms_erreur = array();
324
		foreach ($this->noms as &$nom) {
344
		foreach ($this->noms as &$nom) {
325
			if (preg_match('/^0$/', $nom['num_tax_sup'])) {
345
			if (preg_match('/^0$/', $nom['num_tax_sup'])) {
326
				$noms_erreur[] = array($nom['num_nom'], $nom['num_tax_sup']);
346
				$noms_erreur[] = array($nom['num_nom'], $nom['num_tax_sup']);
327
			}
347
			}
328
		}
348
		}
329
		// Ce test est spécial car le nombre de noms en erreurs doit être supérieur à 1 et non à 0 pour être KO.
349
		// Ce test est spécial car le nombre de noms en erreurs doit être supérieur à 1 et non à 0 pour être KO.
330
		if (count($noms_erreur) == 1) {
350
		if (count($noms_erreur) == 1) {
331
			$noms_erreur = array();
351
			$noms_erreur = array();
332
		}
352
		}
333
		return $noms_erreur;
353
		return $noms_erreur;
334
	}
354
	}
335
	
355
	
336
	/**
356
	/**
337
	 * Test #09
357
	 * Test #09
338
	 */
358
	 */
339
	private function testerTaxSupPourTaxon() {
359
	private function testerTaxSupPourTaxon() {
340
		$noms_erreur = array();
360
		$noms_erreur = array();
341
		foreach ($this->noms as &$nom) {
361
		foreach ($this->noms as &$nom) {
342
			if ($nom['num_nom_retenu'] != $nom['num_nom'] && $nom['num_tax_sup'] != '') {
362
			if ($nom['num_nom_retenu'] != $nom['num_nom'] && $nom['num_tax_sup'] != '') {
343
				$noms_erreur[] = array($nom['num_nom'], $nom['num_tax_sup']); 
363
				$noms_erreur[] = array($nom['num_nom'], $nom['num_tax_sup'], $nom['exclure_taxref']); 
344
			}
364
			}
345
		}
365
		}
346
		return $noms_erreur;
366
		return $noms_erreur;
347
	}
367
	}
348
	
368
	
349
	/**
369
	/**
350
	 * Test #10
370
	 * Test #10
351
	 */
371
	 */
352
	private function testerExitenceTaxonSuperieur() {
372
	private function testerExitenceTaxonSuperieur() {
353
		$noms_erreur = array();
373
		$noms_erreur = array();
354
		foreach ($this->noms as &$nom) {
374
		foreach ($this->noms as &$nom) {
355
			if ($nom['num_nom_retenu'] == $nom['num_nom']) {
375
			if ($nom['num_nom_retenu'] == $nom['num_nom']) {
356
				if ($nom['num_tax_sup'] != 0 && !isset($this->noms[$nom['num_tax_sup']])) {
376
				if ($nom['num_tax_sup'] != 0 && !isset($this->noms[$nom['num_tax_sup']])) {
357
					$noms_erreur[] = array($nom['num_nom'], $nom['num_tax_sup']);
377
					$noms_erreur[] = array($nom['num_nom'], $nom['num_tax_sup'], $nom['exclure_taxref']);
358
				} 
378
				} 
359
			}
379
			}
360
		}
380
		}
361
		return $noms_erreur;
381
		return $noms_erreur;
362
	}
382
	}
363
	
383
	
364
	/**
384
	/**
365
	 * Test #11
385
	 * Test #11
366
	 */
386
	 */
367
	private function testerClassificationRang() {
387
	private function testerClassificationRang() {
368
		$noms_erreur = array();
388
		$noms_erreur = array();
369
		foreach ($this->noms as &$nom) {
389
		foreach ($this->noms as &$nom) {
370
			if ($nom['num_nom_retenu'] == $nom['num_nom']) {
390
			if ($nom['num_nom_retenu'] == $nom['num_nom']) {
371
				if (isset($this->noms[$nom['num_tax_sup']])) {
391
				if (isset($this->noms[$nom['num_tax_sup']])) {
372
					$nom_sup = $this->noms[$nom['num_tax_sup']];
392
					$nom_sup = $this->noms[$nom['num_tax_sup']];
373
					if ($nom_sup['rang'] >= $nom['rang']) {
393
					if ($nom_sup['rang'] >= $nom['rang']) {
374
						// Prise en compte de l'exception des clades
394
						// Prise en compte de l'exception des clades
375
						if (! ($nom_sup['rang'] == 70 && $nom['rang'] == 70)) {
395
						if (! ($nom_sup['rang'] == 70 && $nom['rang'] == 70)) {
376
							$noms_erreur[] = array($nom['num_nom'], $nom['rang'], $nom_sup['num_nom'], $nom_sup['rang']);
396
							$noms_erreur[] = array($nom['num_nom'], $nom['rang'], $nom_sup['num_nom'], $nom_sup['rang'], $nom['exclure_taxref']);
377
						}
397
						}
378
					}
398
					}
379
				}
399
				}
380
			}
400
			}
381
		}
401
		}
382
		return $noms_erreur;
402
		return $noms_erreur;
383
	}
403
	}
384
	
404
	
385
	/**
405
	/**
386
	 * Test #12
406
	 * Test #12
387
	 */
407
	 */
388
	private function testerClassification() {
408
	private function testerClassification() {
389
		$noms_erreur = array();
409
		$noms_erreur = array();
390
		$this->noms_ok = array();
410
		$this->noms_ok = array();
391
		foreach ($this->noms as &$nom) {
411
		foreach ($this->noms as &$nom) {
392
			if ($nom['num_nom_retenu'] == $nom['num_nom']) {
412
			if ($nom['num_nom_retenu'] == $nom['num_nom']) {
393
				if (isset($this->noms_ok[$nom['num_tax_sup']])) {
413
				if (isset($this->noms_ok[$nom['num_tax_sup']])) {
394
					$this->noms_ok[$nom['num_nom']] = true;
414
					$this->noms_ok[$nom['num_nom']] = true;
395
				} else {
415
				} else {
396
					$this->detection_boucle_infini = array();
416
					$this->detection_boucle_infini = array();
397
					$classif_ok = $this->remonterClassif($nom);
417
					$classif_ok = $this->remonterClassif($nom);
398
					unset($this->detection_boucle_infini); 
418
					unset($this->detection_boucle_infini); 
399
					
419
					
400
					if ($classif_ok === true) {
420
					if ($classif_ok === true) {
401
						$this->noms_ok[$nom['num_nom']] = $classif_ok;
421
						$this->noms_ok[$nom['num_nom']] = $classif_ok;
402
					} else {
422
					} else {
403
						$noms_erreur[] = array($nom['num_nom'], $classif_ok);
423
						$noms_erreur[] = array($nom['num_nom'], $classif_ok, $nom['exclure_taxref']);
404
					}
424
					}
405
				}
425
				}
406
			}
426
			}
407
		}
427
		}
408
		unset($this->noms_ok);
428
		unset($this->noms_ok);
409
		return $noms_erreur;
429
		return $noms_erreur;
410
	}
430
	}
411
	
431
	
412
	private function remonterClassif(&$nom) {
432
	private function remonterClassif(&$nom) {
413
		$this->detection_boucle_infini[$nom['num_nom']] = true;
433
		$this->detection_boucle_infini[$nom['num_nom']] = true;
414
		if (preg_match('/^[0-9]*$/', $nom['num_tax_sup'])) {
434
		if (preg_match('/^[0-9]*$/', $nom['num_tax_sup'])) {
415
			if (isset($this->noms_ok[$nom['num_tax_sup']])) {
435
			if (isset($this->noms_ok[$nom['num_tax_sup']])) {
416
				$this->noms_ok[$nom['num_nom']] = true;
436
				$this->noms_ok[$nom['num_nom']] = true;
417
				return true;
437
				return true;
418
			} else if (!isset($this->noms[$nom['num_tax_sup']]) && $nom['num_tax_sup'] == '0') {
438
			} else if (!isset($this->noms[$nom['num_tax_sup']]) && $nom['num_tax_sup'] == '0') {
419
				$this->noms_ok[$nom['num_nom']] = true;
439
				$this->noms_ok[$nom['num_nom']] = true;
420
				return true;
440
				return true;
421
			} else if (!isset($this->noms[$nom['num_tax_sup']]) && $nom['num_tax_sup'] != '0') {
441
			} else if (!isset($this->noms[$nom['num_tax_sup']]) && $nom['num_tax_sup'] != '0') {
422
				return 'Hiérarchie avec le taxon #'.$nom['num_nom'].' ayant un taxon superieur #'.$nom['num_tax_sup'].' inexistant';
442
				return 'Hiérarchie avec le taxon #'.$nom['num_nom'].' ayant un taxon superieur #'.$nom['num_tax_sup'].' inexistant';
423
			} else if (isset($this->detection_boucle_infini[$nom['num_tax_sup']])) {
443
			} else if (isset($this->detection_boucle_infini[$nom['num_tax_sup']])) {
424
				return 'Boucle infinie pour le taxon #'.$nom['num_tax_sup'];
444
				return 'Boucle infinie pour le taxon #'.$nom['num_tax_sup'];
425
			} else {
445
			} else {
426
				$retour = $this->remonterClassif($this->noms[$nom['num_tax_sup']]);
446
				$retour = $this->remonterClassif($this->noms[$nom['num_tax_sup']]);
427
				if ($retour === true) {
447
				if ($retour === true) {
428
					$this->noms_ok[$nom['num_tax_sup']] = true;
448
					$this->noms_ok[$nom['num_tax_sup']] = true;
429
				}
449
				}
430
				return $retour;
450
				return $retour;
431
			}
451
			}
432
		} else {
452
		} else {
433
			return 'Valeur num_tax_sup incorrecte : '.$nom['num_tax_sup'];
453
			return 'Valeur num_tax_sup incorrecte : '.$nom['num_tax_sup'];
434
		}
454
		}
435
	}
455
	}
436
	
456
	
437
	/**
457
	/**
438
	 * Test #13
458
	 * Test #13
439
	 */
459
	 */
440
	private function testerRang() {
460
	private function testerRang() {
441
		$rangs = array_flip(explode(',', $this->manuel['rangs']));
461
		$rangs = array_flip(explode(',', $this->manuel['rangs']));
442
		
462
		
443
		// Réalisation du test
463
		// Réalisation du test
444
		$noms_erreur = array();
464
		$noms_erreur = array();
445
		foreach ($this->noms as &$nom) {
465
		foreach ($this->noms as &$nom) {
446
			if (!isset($rangs[$nom['rang']])) {
466
			if (!isset($rangs[$nom['rang']])) {
447
				$noms_erreur[] = array($nom['num_nom'], $nom['rang']);
467
				$noms_erreur[] = array($nom['num_nom'], $nom['rang'], $nom['exclure_taxref']);
448
			}
468
			}
449
		}
469
		}
450
		return $noms_erreur;
470
		return $noms_erreur;
451
	}
471
	}
452
	
472
	
453
	/**
473
	/**
454
	 * Test #14
474
	 * Test #14
455
	 */
475
	 */
456
	private function testerNomCompletSupraGenerique() {
476
	private function testerNomCompletSupraGenerique() {
457
		$noms_erreur = array();
477
		$noms_erreur = array();
458
		foreach ($this->noms as &$nom) {
478
		foreach ($this->noms as &$nom) {
459
			if ($nom['rang'] < $this->manuel['rang_genre']) {
479
			if ($nom['rang'] < $this->manuel['rang_genre']) {
460
				$suffixe_plte_cultivee = $this->construireSuffixeNomPltCultivee($nom);
480
				$suffixe_plte_cultivee = $this->construireSuffixeNomPltCultivee($nom);
461
				$nom_sci_ideal = $this->formaterStyleNomGenre($nom['nom_supra_generique']);
481
				$nom_sci_ideal = $this->formaterStyleNomGenre($nom['nom_supra_generique']);
462
				$nom_sci_ideal .= ($suffixe_plte_cultivee != '' ? ' '.$suffixe_plte_cultivee : '');
482
				$nom_sci_ideal .= ($suffixe_plte_cultivee != '' ? ' '.$suffixe_plte_cultivee : '');
463
				if ($nom['nom_sci'] != $nom_sci_ideal) {
483
				if ($nom['nom_sci'] != $nom_sci_ideal) {
464
					$nom_sci_traite = $this->repererEspace($nom['nom_sci']);
484
					$nom_sci_traite = $this->repererEspace($nom['nom_sci']);
465
					$noms_erreur[] = array($nom['num_nom'], $nom_sci_traite, $nom_sci_ideal);
485
					$noms_erreur[] = array($nom['num_nom'], $nom_sci_traite, $nom_sci_ideal, $nom['exclure_taxref']);
466
				}
486
				}
467
			}
487
			}
468
		}
488
		}
469
		return $noms_erreur;
489
		return $noms_erreur;
470
	}
490
	}
471
	
491
	
472
	/**
492
	/**
473
	 * Test #15
493
	 * Test #15
474
	 */
494
	 */
475
	private function testerNomCompletGenre() {
495
	private function testerNomCompletGenre() {
476
		$noms_erreur = array();
496
		$noms_erreur = array();
477
		foreach ($this->noms as &$nom) {
497
		foreach ($this->noms as &$nom) {
478
			if ($nom['rang'] == $this->manuel['rang_genre']) {
498
			if ($nom['rang'] == $this->manuel['rang_genre']) {
479
				$suffixe_plte_cultivee = $this->construireSuffixeNomPltCultivee($nom);
499
				$suffixe_plte_cultivee = $this->construireSuffixeNomPltCultivee($nom);
480
				$nom_sci_ideal = $this->formaterStyleNomGenre($nom['genre']);
500
				$nom_sci_ideal = $this->formaterStyleNomGenre($nom['genre']);
481
				$nom_sci_ideal .= ($suffixe_plte_cultivee != '' ? ' '.$suffixe_plte_cultivee : '');
501
				$nom_sci_ideal .= ($suffixe_plte_cultivee != '' ? ' '.$suffixe_plte_cultivee : '');
482
				if ($nom['nom_sci'] != $nom_sci_ideal) {
502
				if ($nom['nom_sci'] != $nom_sci_ideal) {
483
					$nom_sci_traite = $this->repererEspace($nom['nom_sci']);
503
					$nom_sci_traite = $this->repererEspace($nom['nom_sci']);
484
					$noms_erreur[] = array($nom['num_nom'], $nom_sci_traite, $nom_sci_ideal);
504
					$noms_erreur[] = array($nom['num_nom'], $nom_sci_traite, $nom_sci_ideal, $nom['exclure_taxref']);
485
				}
505
				}
486
			}
506
			}
487
		}
507
		}
488
		return $noms_erreur;
508
		return $noms_erreur;
489
	}
509
	}
490
	
510
	
491
	/**
511
	/**
492
	 * Test #16
512
	 * Test #16
493
	 */
513
	 */
494
	private function testerNomCompletInfraGenre() {
514
	private function testerNomCompletInfraGenre() {
495
		$noms_erreur = array();
515
		$noms_erreur = array();
496
		foreach ($this->noms as &$nom) {
516
		foreach ($this->noms as &$nom) {
497
			if ($nom['rang'] > $this->manuel['rang_genre'] && $nom['rang'] < $this->manuel['rang_sp']) {
517
			if ($nom['rang'] > $this->manuel['rang_genre'] && $nom['rang'] < $this->manuel['rang_sp']) {
498
				$suffixe_plte_cultivee = $this->construireSuffixeNomPltCultivee($nom);
518
				$suffixe_plte_cultivee = $this->construireSuffixeNomPltCultivee($nom);
499
				$nom_sci_ideal = '';
519
				$nom_sci_ideal = '';
500
				if ($nom['type_epithete'] == 'agg.') {
520
				if ($nom['type_epithete'] == 'agg.') {
501
					$nom_sci_ideal = $this->formaterStyleNomGenre($nom['genre']);
521
					$nom_sci_ideal = $this->formaterStyleNomGenre($nom['genre']);
502
					$nom_sci_ideal .= ' '.$this->formaterStyleNomGenre($nom['epithete_infra_generique']);
522
					$nom_sci_ideal .= ' '.$this->formaterStyleNomGenre($nom['epithete_infra_generique']);
503
					$nom_sci_ideal .= ' '.$nom['type_epithete'];
523
					$nom_sci_ideal .= ' '.$nom['type_epithete'];
504
				} else {
524
				} else {
505
					$nom_sci_ideal = $this->formaterStyleNomGenre($nom['genre']);
525
					$nom_sci_ideal = $this->formaterStyleNomGenre($nom['genre']);
506
					$nom_sci_ideal .= ' '.$nom['type_epithete'];
526
					$nom_sci_ideal .= ' '.$nom['type_epithete'];
507
					$nom_sci_ideal .= ' '.$this->formaterStyleNomGenre($nom['epithete_infra_generique']);
527
					$nom_sci_ideal .= ' '.$this->formaterStyleNomGenre($nom['epithete_infra_generique']);
508
				}
528
				}
509
				$nom_sci_ideal .= ($suffixe_plte_cultivee != '' ? ' '.$suffixe_plte_cultivee : '');
529
				$nom_sci_ideal .= ($suffixe_plte_cultivee != '' ? ' '.$suffixe_plte_cultivee : '');
510
				if ($nom['nom_sci'] != $nom_sci_ideal) {
530
				if ($nom['nom_sci'] != $nom_sci_ideal) {
511
					$nom_sci_traite = $this->repererEspace($nom['nom_sci']);
531
					$nom_sci_traite = $this->repererEspace($nom['nom_sci']);
512
					$noms_erreur[] = array($nom['num_nom'], $nom_sci_traite, $nom_sci_ideal);
532
					$noms_erreur[] = array($nom['num_nom'], $nom_sci_traite, $nom_sci_ideal, $nom['exclure_taxref']);
513
				}
533
				}
514
			}
534
			}
515
		}
535
		}
516
		return $noms_erreur;
536
		return $noms_erreur;
517
	}
537
	}
518
	
538
	
519
	/**
539
	/**
520
	 * Test #17
540
	 * Test #17
521
	 */
541
	 */
522
	private function testerNomCompletEspece() {
542
	private function testerNomCompletEspece() {
523
		$noms_erreur = array();
543
		$noms_erreur = array();
524
		foreach ($this->noms as &$nom) {
544
		foreach ($this->noms as &$nom) {
525
			if ($nom['rang'] == $this->manuel['rang_sp']) {
545
			if ($nom['rang'] == $this->manuel['rang_sp']) {
526
				$suffixe_plte_cultivee = $this->construireSuffixeNomPltCultivee($nom);
546
				$suffixe_plte_cultivee = $this->construireSuffixeNomPltCultivee($nom);
527
				$nom_sci_ideal = $this->formaterStyleNomGenre($nom['genre']);
547
				$nom_sci_ideal = $this->formaterStyleNomGenre($nom['genre']);
528
				$nom_sci_ideal .= ' '.strtolower($nom['epithete_sp']);
548
				$nom_sci_ideal .= ' '.strtolower($nom['epithete_sp']);
529
				$nom_sci_ideal .= ($suffixe_plte_cultivee != '' ? ' '.$suffixe_plte_cultivee : '');
549
				$nom_sci_ideal .= ($suffixe_plte_cultivee != '' ? ' '.$suffixe_plte_cultivee : '');
530
				if ($nom['nom_sci'] != $nom_sci_ideal) {
550
				if ($nom['nom_sci'] != $nom_sci_ideal) {
531
					$nom_sci_traite = $this->repererEspace($nom['nom_sci']);
551
					$nom_sci_traite = $this->repererEspace($nom['nom_sci']);
532
					$noms_erreur[] = array($nom['num_nom'], $nom_sci_traite, $nom_sci_ideal);
552
					$noms_erreur[] = array($nom['num_nom'], $nom_sci_traite, $nom_sci_ideal, $nom['exclure_taxref']);
533
				}
553
				}
534
			}
554
			}
535
		}
555
		}
536
		return $noms_erreur;
556
		return $noms_erreur;
537
	}
557
	}
538
	
558
	
539
	/**
559
	/**
540
	 * Test #18
560
	 * Test #18
541
	 */
561
	 */
542
	private function testerNomCompletInfraSpecifique() {
562
	private function testerNomCompletInfraSpecifique() {
543
		$noms_erreur = array();
563
		$noms_erreur = array();
544
		foreach ($this->noms as &$nom) {
564
		foreach ($this->noms as &$nom) {
545
			if ($nom['rang'] > $this->manuel['rang_sp']) {
565
			if ($nom['rang'] > $this->manuel['rang_sp']) {
546
				$suffixe_plte_cultivee = $this->construireSuffixeNomPltCultivee($nom);
566
				$suffixe_plte_cultivee = $this->construireSuffixeNomPltCultivee($nom);
547
				$nom_sci_ideal = $this->formaterStyleNomGenre($nom['genre']);
567
				$nom_sci_ideal = $this->formaterStyleNomGenre($nom['genre']);
548
				$nom_sci_ideal .= ' '.strtolower($nom['epithete_sp']);
568
				$nom_sci_ideal .= ' '.strtolower($nom['epithete_sp']);
549
				$nom_sci_ideal .= ' '.strtolower($nom['type_epithete']);
569
				$nom_sci_ideal .= ' '.strtolower($nom['type_epithete']);
550
				$nom_sci_ideal .= ' '.strtolower($nom['epithete_infra_sp']);
570
				$nom_sci_ideal .= ' '.strtolower($nom['epithete_infra_sp']);
551
				$nom_sci_ideal .= ($suffixe_plte_cultivee != '' ? ' '.$suffixe_plte_cultivee : '');
571
				$nom_sci_ideal .= ($suffixe_plte_cultivee != '' ? ' '.$suffixe_plte_cultivee : '');
552
				if ($nom['nom_sci'] != $nom_sci_ideal) {
572
				if ($nom['nom_sci'] != $nom_sci_ideal) {
553
					$nom_sci_traite = $this->repererEspace($nom['nom_sci']);
573
					$nom_sci_traite = $this->repererEspace($nom['nom_sci']);
554
					$noms_erreur[] = array($nom['num_nom'], $nom_sci_traite, $nom_sci_ideal);
574
					$noms_erreur[] = array($nom['num_nom'], $nom_sci_traite, $nom_sci_ideal, $nom['exclure_taxref']);
555
				}
575
				}
556
			}
576
			}
557
		}
577
		}
558
		return $noms_erreur;
578
		return $noms_erreur;
559
	}
579
	}
560
	
580
	
561
	/**
581
	/**
562
	 * Test #19
582
	 * Test #19
563
	 */
583
	 */
564
	private function testerNomSupraGeneriqueEspaces() {
584
	private function testerNomSupraGeneriqueEspaces() {
565
		$noms_erreur = array();
585
		$noms_erreur = array();
566
		foreach ($this->noms as &$nom) {
586
		foreach ($this->noms as &$nom) {
567
			if ($nom['nom_supra_generique'] != '') {
587
			if ($nom['nom_supra_generique'] != '') {
568
				if (preg_match('/(?:^\s+(?!:\s+)|(?!:\s+)\s+$)/', $nom['nom_supra_generique'])) {
588
				if (preg_match('/(?:^\s+(?!:\s+)|(?!:\s+)\s+$)/', $nom['nom_supra_generique'])) {
569
					$nom_supra_generique_traite = $this->repererEspace($nom['nom_supra_generique']);
589
					$nom_supra_generique_traite = $this->repererEspace($nom['nom_supra_generique']);
570
					$noms_erreur[] = array($nom['num_nom'], $nom_supra_generique_traite);
590
					$noms_erreur[] = array($nom['num_nom'], $nom_supra_generique_traite, $nom['exclure_taxref']);
571
				}
591
				}
572
			}
592
			}
573
		}
593
		}
574
		return $noms_erreur;
594
		return $noms_erreur;
575
	}
595
	}
576
	
596
	
577
	/**
597
	/**
578
	 * Test #20
598
	 * Test #20
579
	 */
599
	 */
580
	private function testerNomSupraGeneriqueSyntaxe() {
600
	private function testerNomSupraGeneriqueSyntaxe() {
581
		$noms_erreur = array();
601
		$noms_erreur = array();
582
		foreach ($this->noms as &$nom) {
602
		foreach ($this->noms as &$nom) {
583
			if ($nom['nom_supra_generique'] != '') {
603
			if ($nom['nom_supra_generique'] != '') {
584
				if (!preg_match('/^[A-ZÄËḦÏÖÜẄẌŸ][-a-zäëḧïöẗüẅẍÿ]+$/', $nom['nom_supra_generique'])) {
604
				if (!preg_match('/^[A-ZÄËḦÏÖÜẄẌŸ][-a-zäëḧïöẗüẅẍÿ]+$/', $nom['nom_supra_generique'])) {
585
					$nom_supra_generique_traite = $this->repererEspace($nom['nom_supra_generique']);
605
					$nom_supra_generique_traite = $this->repererEspace($nom['nom_supra_generique']);
586
					$noms_erreur[] = array($nom['num_nom'], $nom_supra_generique_traite);
606
					$noms_erreur[] = array($nom['num_nom'], $nom_supra_generique_traite, $nom['exclure_taxref']);
587
				}
607
				}
588
			}
608
			}
589
		}
609
		}
590
		return $noms_erreur;
610
		return $noms_erreur;
591
	}
611
	}
592
	
612
	
593
	/**
613
	/**
594
	 * Test #21
614
	 * Test #21
595
	 */
615
	 */
596
	private function testerNomSupraGeneriqueRang() {
616
	private function testerNomSupraGeneriqueRang() {
597
		$noms_erreur = array();
617
		$noms_erreur = array();
598
		foreach ($this->noms as &$nom) {
618
		foreach ($this->noms as &$nom) {
599
			if ($nom['nom_supra_generique'] != '') {
619
			if ($nom['nom_supra_generique'] != '') {
600
				if ($nom['rang'] >= $this->manuel['rang_genre']) {
620
				if ($nom['rang'] >= $this->manuel['rang_genre']) {
601
					$noms_erreur[] = array($nom['num_nom'], $nom['nom_sci'], $nom['rang']);
621
					$noms_erreur[] = array($nom['num_nom'], $nom['nom_sci'], $nom['rang'], $nom['exclure_taxref']);
602
				}
622
				}
603
			}
623
			}
604
		}
624
		}
605
		return $noms_erreur;
625
		return $noms_erreur;
606
	}
626
	}
607
	
627
	
608
	/**
628
	/**
609
	 * Test #22
629
	 * Test #22
610
	 */
630
	 */
611
	private function testerGenreEspaces() {
631
	private function testerGenreEspaces() {
612
		$noms_erreur = array();
632
		$noms_erreur = array();
613
		foreach ($this->noms as &$nom) {
633
		foreach ($this->noms as &$nom) {
614
			if ($nom['genre'] != '') {
634
			if ($nom['genre'] != '') {
615
				if (preg_match('/(?:^\s+(?!:\s+)|(?!:\s+)\s{2,}(?!:\s+)|(?!:\s+)\s+$)/', $nom['genre'])) {
635
				if (preg_match('/(?:^\s+(?!:\s+)|(?!:\s+)\s{2,}(?!:\s+)|(?!:\s+)\s+$)/', $nom['genre'])) {
616
					$nom_traite = $this->repererEspace($nom['genre']);
636
					$nom_traite = $this->repererEspace($nom['genre']);
617
					$noms_erreur[] = array($nom['num_nom'], $nom_traite);
637
					$noms_erreur[] = array($nom['num_nom'], $nom_traite, $nom['exclure_taxref']);
618
				}
638
				}
619
			}
639
			}
620
		}
640
		}
621
		return $noms_erreur;
641
		return $noms_erreur;
622
	}
642
	}
623
	
643
	
624
	/**
644
	/**
625
	 * Test #23
645
	 * Test #23
626
	 */
646
	 */
627
	private function testerGenreSyntaxe() {
647
	private function testerGenreSyntaxe() {
628
		$noms_erreur = array();
648
		$noms_erreur = array();
629
		foreach ($this->noms as &$nom) {
649
		foreach ($this->noms as &$nom) {
630
			if ($nom['genre'] != '') {
650
			if ($nom['genre'] != '') {
631
				$mots = explode(' ', $nom['genre']);
651
				$mots = explode(' ', $nom['genre']);
632
				foreach ($mots as $mot) {
652
				foreach ($mots as $mot) {
633
					if (!(preg_match('/^[+x]$/', $mot) || $this->verifierEpitheteGenre($mot))) {
653
					if (!(preg_match('/^[+x]$/', $mot) || $this->verifierEpitheteGenre($mot))) {
634
						$nom_traite = $this->repererEspace($nom['genre']);
654
						$nom_traite = $this->repererEspace($nom['genre']);
635
						$noms_erreur[] = array($nom['num_nom'], $nom_traite);
655
						$noms_erreur[] = array($nom['num_nom'], $nom_traite, $nom['exclure_taxref']);
636
					}
656
					}
637
				}
657
				}
638
			}
658
			}
639
		}
659
		}
640
		return $noms_erreur;
660
		return $noms_erreur;
641
	}
661
	}
642
	
662
	
643
	/**
663
	/**
644
	 * Test #24
664
	 * Test #24
645
	 */
665
	 */
646
	private function testerGenreRang() {
666
	private function testerGenreRang() {
647
		$noms_erreur = array();
667
		$noms_erreur = array();
648
		foreach ($this->noms as &$nom) {
668
		foreach ($this->noms as &$nom) {
649
			if ($nom['genre'] != '') {
669
			if ($nom['genre'] != '') {
650
				if ($nom['rang'] < $this->manuel['rang_genre']) {
670
				if ($nom['rang'] < $this->manuel['rang_genre']) {
651
					$noms_erreur[] = array($nom['num_nom'], $nom['nom_sci'], $nom['rang']);
671
					$noms_erreur[] = array($nom['num_nom'], $nom['nom_sci'], $nom['rang'], $nom['exclure_taxref']);
652
				}
672
				}
653
			}
673
			}
654
		}
674
		}
655
		return $noms_erreur;
675
		return $noms_erreur;
656
	}
676
	}
657
		
677
		
658
	/**
678
	/**
659
	 * Test #25
679
	 * Test #25
660
	 */
680
	 */
661
	private function testerEpitheteInfraGeneriqueSyntaxe() {
681
	private function testerEpitheteInfraGeneriqueSyntaxe() {
662
		$noms_erreur = array();
682
		$noms_erreur = array();
663
		foreach ($this->noms as &$nom) {
683
		foreach ($this->noms as &$nom) {
664
			if ($nom['epithete_infra_generique'] != '') {
684
			if ($nom['epithete_infra_generique'] != '') {
665
				if (!preg_match('/^[A-ZÄËḦÏÖÜẄẌŸ][-a-zäëḧïöẗüẅẍÿ]+/', $nom['epithete_infra_generique'])) {
685
				if (!preg_match('/^[A-ZÄËḦÏÖÜẄẌŸ][-a-zäëḧïöẗüẅẍÿ]+/', $nom['epithete_infra_generique'])) {
666
					$epithete_traite = $this->repererEspace($nom['epithete_infra_generique']);
686
					$epithete_traite = $this->repererEspace($nom['epithete_infra_generique']);
667
					$noms_erreur[] = array($nom['num_nom'], $epithete_traite);
687
					$noms_erreur[] = array($nom['num_nom'], $epithete_traite, $nom['exclure_taxref']);
668
				}
688
				}
669
			}
689
			}
670
		}
690
		}
671
		return $noms_erreur;
691
		return $noms_erreur;
672
	}
692
	}
673
	
693
	
674
	/**
694
	/**
675
	 * Test #26
695
	 * Test #26
676
	 */
696
	 */
677
	private function testerEpitheteInfraGeneriqueRang() {
697
	private function testerEpitheteInfraGeneriqueRang() {
678
		$noms_erreur = array();
698
		$noms_erreur = array();
679
		foreach ($this->noms as &$nom) {
699
		foreach ($this->noms as &$nom) {
680
			if ($nom['epithete_infra_generique'] != '') {
700
			if ($nom['epithete_infra_generique'] != '') {
681
				if ($nom['rang'] <= $this->manuel['rang_genre'] || $nom['rang'] >= $this->manuel['rang_sp']) {
701
				if ($nom['rang'] <= $this->manuel['rang_genre'] || $nom['rang'] >= $this->manuel['rang_sp']) {
682
					$noms_erreur[] = array($nom['num_nom'], $nom['nom_sci'], $nom['rang']);
702
					$noms_erreur[] = array($nom['num_nom'], $nom['nom_sci'], $nom['rang'], $nom['exclure_taxref']);
683
				}
703
				}
684
			}
704
			}
685
		}
705
		}
686
		return $noms_erreur;
706
		return $noms_erreur;
687
	}
707
	}
688
	
708
	
689
	/**
709
	/**
690
	 * Test #27
710
	 * Test #27
691
	 */
711
	 */
692
	private function testerEpitheteInfraGeneriqueEspaces() {
712
	private function testerEpitheteInfraGeneriqueEspaces() {
693
		$noms_erreur = array();
713
		$noms_erreur = array();
694
		foreach ($this->noms as &$nom) {
714
		foreach ($this->noms as &$nom) {
695
			if ($nom['epithete_infra_generique'] != '') {
715
			if ($nom['epithete_infra_generique'] != '') {
696
				if (preg_match('/(?:^\s+(?!:\s+)|(?!:\s+)\s{2,}(?!:\s+)|(?!:\s+)\s+$)/', $nom['epithete_infra_generique'])) {
716
				if (preg_match('/(?:^\s+(?!:\s+)|(?!:\s+)\s{2,}(?!:\s+)|(?!:\s+)\s+$)/', $nom['epithete_infra_generique'])) {
697
					$epithete_traite = $this->repererEspace($nom['epithete_infra_generique']);
717
					$epithete_traite = $this->repererEspace($nom['epithete_infra_generique']);
698
					$noms_erreur[] = array($nom['num_nom'], $epithete_traite);
718
					$noms_erreur[] = array($nom['num_nom'], $epithete_traite, $nom['exclure_taxref']);
699
				}
719
				}
700
			}
720
			}
701
		}
721
		}
702
		return $noms_erreur;
722
		return $noms_erreur;
703
	}
723
	}
704
	
724
	
705
	/**
725
	/**
706
	 * Test #28
726
	 * Test #28
707
	 */
727
	 */
708
	private function testerEpitheteSpEspaces() {
728
	private function testerEpitheteSpEspaces() {
709
		$noms_erreur = array();
729
		$noms_erreur = array();
710
		foreach ($this->noms as &$nom) {
730
		foreach ($this->noms as &$nom) {
711
			if ($nom['epithete_sp'] != '') {
731
			if ($nom['epithete_sp'] != '') {
712
				if (preg_match('/(?:^\s+(?!:\s+)|(?!:\s+)\s{2,}(?!:\s+)|(?!:\s+)\s+$)/', $nom['epithete_sp'])) {
732
				if (preg_match('/(?:^\s+(?!:\s+)|(?!:\s+)\s{2,}(?!:\s+)|(?!:\s+)\s+$)/', $nom['epithete_sp'])) {
713
					$epithete_traite = $this->repererEspace($nom['epithete_sp']);
733
					$epithete_traite = $this->repererEspace($nom['epithete_sp']);
714
					$noms_erreur[] = array($nom['num_nom'], $epithete_traite);
734
					$noms_erreur[] = array($nom['num_nom'], $epithete_traite, $nom['exclure_taxref']);
715
				}
735
				}
716
			}
736
			}
717
		}
737
		}
718
		return $noms_erreur;
738
		return $noms_erreur;
719
	}
739
	}
720
	
740
	
721
	/**
741
	/**
722
	 * Test #29
742
	 * Test #29
723
	 */
743
	 */
724
	private function testerEpitheteSpSyntaxe() {
744
	private function testerEpitheteSpSyntaxe() {
725
		$noms_erreur = array();
745
		$noms_erreur = array();
726
		foreach ($this->noms as &$nom) {
746
		foreach ($this->noms as &$nom) {
727
			if ($nom['epithete_sp'] != '') {
747
			if ($nom['epithete_sp'] != '') {
728
				$mots = explode(' ', $nom['epithete_sp']);
748
				$mots = explode(' ', $nom['epithete_sp']);
729
				foreach ($mots as $mot) {
749
				foreach ($mots as $mot) {
730
					if (!(preg_match('/^[+x]$/', $mot) || $this->verifierEpitheteSp($mot))) {
750
					if (!(preg_match('/^[+x]$/', $mot) || $this->verifierEpitheteSp($mot))) {
731
						$epithete_traite = $this->repererEspace($nom['epithete_sp']);
751
						$epithete_traite = $this->repererEspace($nom['epithete_sp']);
732
						$noms_erreur[] = array($nom['num_nom'], $epithete_traite);
752
						$noms_erreur[] = array($nom['num_nom'], $epithete_traite, $nom['exclure_taxref']);
733
					}
753
					}
734
				}
754
				}
735
			}
755
			}
736
		}
756
		}
737
		return $noms_erreur;
757
		return $noms_erreur;
738
	}
758
	}
739
	
759
	
740
	/**
760
	/**
741
	 * Test #30
761
	 * Test #30
742
	 */
762
	 */
743
	private function testerEpitheteSpRang() {
763
	private function testerEpitheteSpRang() {
744
		$noms_erreur = array();
764
		$noms_erreur = array();
745
		foreach ($this->noms as &$nom) {
765
		foreach ($this->noms as &$nom) {
746
			if ($nom['epithete_sp'] != '') {
766
			if ($nom['epithete_sp'] != '') {
747
				if ($nom['rang'] < $this->manuel['rang_sp']) {
767
				if ($nom['rang'] < $this->manuel['rang_sp']) {
748
					$noms_erreur[] = array($nom['num_nom'], $nom['nom_sci'], $nom['rang']);
768
					$noms_erreur[] = array($nom['num_nom'], $nom['nom_sci'], $nom['rang'], $nom['exclure_taxref']);
749
				}
769
				}
750
			}
770
			}
751
		}
771
		}
752
		return $noms_erreur;
772
		return $noms_erreur;
753
	}
773
	}
754
	
774
	
755
	/**
775
	/**
756
	 * Test #31
776
	 * Test #31
757
	 */
777
	 */
758
	private function testerTypeEpitheteEspaces() {
778
	private function testerTypeEpitheteEspaces() {
759
		$noms_erreur = array();
779
		$noms_erreur = array();
760
		foreach ($this->noms as &$nom) {
780
		foreach ($this->noms as &$nom) {
761
			if ($nom['type_epithete'] != '') {
781
			if ($nom['type_epithete'] != '') {
762
				if (preg_match('/\s+/', $nom['type_epithete'])) {
782
				if (preg_match('/\s+/', $nom['type_epithete'])) {
763
					$valeur_traitee = $this->repererEspace($nom['epithete_sp']);
783
					$valeur_traitee = $this->repererEspace($nom['epithete_sp']);
764
					$noms_erreur[] = array($nom['num_nom'], $valeur_traitee);
784
					$noms_erreur[] = array($nom['num_nom'], $valeur_traitee, $nom['exclure_taxref']);
765
				}
785
				}
766
			}
786
			}
767
		}
787
		}
768
		return $noms_erreur;
788
		return $noms_erreur;
769
	}
789
	}
770
	
790
	
771
	/**
791
	/**
772
	 * Test #32
792
	 * Test #32
773
	 */
793
	 */
774
	private function testerTypeEpitheteSyntaxe() {
794
	private function testerTypeEpitheteSyntaxe() {
775
		$noms_erreur = array();
795
		$noms_erreur = array();
776
		foreach ($this->noms as &$nom) {
796
		foreach ($this->noms as &$nom) {
777
			if ($nom['type_epithete'] != '') {
797
			if ($nom['type_epithete'] != '') {
778
				if (!$this->verifierTypeEpithete($nom['type_epithete'])) {
798
				if (!$this->verifierTypeEpithete($nom['type_epithete'])) {
779
					$noms_erreur[] = array($nom['num_nom'],  $nom['type_epithete']);
799
					$noms_erreur[] = array($nom['num_nom'],  $nom['type_epithete'], $nom['exclure_taxref']);
780
				}
800
				}
781
			}
801
			}
782
		}
802
		}
783
		return $noms_erreur;
803
		return $noms_erreur;
784
	}
804
	}
785
	
805
	
786
	/**
806
	/**
787
	 * Test #33
807
	 * Test #33
788
	 */
808
	 */
789
	private function testerTypeEpitheteHybridite() {
809
	private function testerTypeEpitheteHybridite() {
790
		$noms_erreur = array();
810
		$noms_erreur = array();
791
		foreach ($this->noms as &$nom) {
811
		foreach ($this->noms as &$nom) {
792
			if ($nom['type_epithete'] != '') {
812
			if ($nom['type_epithete'] != '') {
793
				if (preg_match('/^(?:n-|notho-)/', $nom['type_epithete'])) {
813
				if (preg_match('/^(?:n-|notho-)/', $nom['type_epithete'])) {
794
					$noms_erreur[] = array($nom['num_nom'], $nom['type_epithete']);
814
					$noms_erreur[] = array($nom['num_nom'], $nom['type_epithete'], $nom['exclure_taxref']);
795
				}
815
				}
796
			}
816
			}
797
		}
817
		}
798
		return $noms_erreur;
818
		return $noms_erreur;
799
	}
819
	}
800
	
820
	
801
	/**
821
	/**
802
	 * Test #34
822
	 * Test #34
803
	 */
823
	 */
804
	private function testerEpitheteInfraSpEspaces() {
824
	private function testerEpitheteInfraSpEspaces() {
805
		$noms_erreur = array();
825
		$noms_erreur = array();
806
		foreach ($this->noms as &$nom) {
826
		foreach ($this->noms as &$nom) {
807
			if ($nom['epithete_infra_sp'] != '') {
827
			if ($nom['epithete_infra_sp'] != '') {
808
				if (preg_match('/(?:^\s+(?!:\s+)|(?!:\s+)\s{2,}(?!:\s+)|(?!:\s+)\s+$)/', $nom['epithete_infra_sp'])) {
828
				if (preg_match('/(?:^\s+(?!:\s+)|(?!:\s+)\s{2,}(?!:\s+)|(?!:\s+)\s+$)/', $nom['epithete_infra_sp'])) {
809
					$epithete_traite = $this->repererEspace($nom['epithete_infra_sp']);
829
					$epithete_traite = $this->repererEspace($nom['epithete_infra_sp']);
810
					$noms_erreur[] = array($nom['num_nom'], $epithete_traite);
830
					$noms_erreur[] = array($nom['num_nom'], $epithete_traite, $nom['exclure_taxref']);
811
				}
831
				}
812
			}
832
			}
813
		}
833
		}
814
		return $noms_erreur;
834
		return $noms_erreur;
815
	}
835
	}
816
	
836
	
817
	/**
837
	/**
818
	 * Test #35
838
	 * Test #35
819
	 */
839
	 */
820
	private function testerEpitheteInfraSpSyntaxe() {
840
	private function testerEpitheteInfraSpSyntaxe() {
821
		$noms_erreur = array();
841
		$noms_erreur = array();
822
		foreach ($this->noms as &$nom) {
842
		foreach ($this->noms as &$nom) {
823
			if ($nom['epithete_infra_sp'] != '') {
843
			if ($nom['epithete_infra_sp'] != '') {
824
				$mots = explode(' ', $nom['epithete_infra_sp']);
844
				$mots = explode(' ', $nom['epithete_infra_sp']);
825
				foreach ($mots as $mot) {
845
				foreach ($mots as $mot) {
826
					if (!(preg_match('/^[+x]$/', $mot) || $this->verifierTypeEpithete($mot)|| $this->verifierEpitheteSp($mot))) {
846
					if (!(preg_match('/^[+x]$/', $mot) || $this->verifierTypeEpithete($mot)|| $this->verifierEpitheteSp($mot))) {
827
						$epithete_traite = $this->repererEspace($nom['epithete_infra_sp']);
847
						$epithete_traite = $this->repererEspace($nom['epithete_infra_sp']);
828
						$noms_erreur[] = array($nom['num_nom'], $epithete_traite);
848
						$noms_erreur[] = array($nom['num_nom'], $epithete_traite, $nom['exclure_taxref']);
829
					}
849
					}
830
				}
850
				}
831
			}
851
			}
832
		}
852
		}
833
		return $noms_erreur;
853
		return $noms_erreur;
834
	}
854
	}
835
	
855
	
836
	/**
856
	/**
837
	 * Test #36
857
	 * Test #36
838
	 */
858
	 */
839
	private function testerEpitheteInfraSpRang() {
859
	private function testerEpitheteInfraSpRang() {
840
		$noms_erreur = array();
860
		$noms_erreur = array();
841
		foreach ($this->noms as &$nom) {
861
		foreach ($this->noms as &$nom) {
842
			if ($nom['epithete_infra_sp'] != '') {
862
			if ($nom['epithete_infra_sp'] != '') {
843
				if ($nom['rang'] < $this->manuel['rang_sp']) {
863
				if ($nom['rang'] < $this->manuel['rang_sp']) {
844
					$noms_erreur[] = array($nom['num_nom'], $nom['nom_sci'], $nom['rang']);
864
					$noms_erreur[] = array($nom['num_nom'], $nom['nom_sci'], $nom['rang'], $nom['exclure_taxref']);
845
				}
865
				}
846
			}
866
			}
847
		}
867
		}
848
		return $noms_erreur;
868
		return $noms_erreur;
849
	}
869
	}
850
	
870
	
851
	/**
871
	/**
852
	 * Test #37
872
	 * Test #37
853
	 */
873
	 */
854
	private function testerGroupeCultivarSyntaxe() {
874
	private function testerGroupeCultivarSyntaxe() {
855
		$noms_erreur = array();
875
		$noms_erreur = array();
856
		foreach ($this->noms as &$nom) {
876
		foreach ($this->noms as &$nom) {
857
			if ($nom['cultivar_groupe'] != '') {
877
			if ($nom['cultivar_groupe'] != '') {
858
				if (!$this->verifierEpitheteGroupeCultivar($nom['cultivar_groupe'])) {
878
				if (!$this->verifierEpitheteGroupeCultivar($nom['cultivar_groupe'])) {
859
					$epithete_traite = $this->repererEspace($nom['cultivar_groupe']);
879
					$epithete_traite = $this->repererEspace($nom['cultivar_groupe']);
860
					$noms_erreur[] = array($nom['num_nom'], $epithete_traite);
880
					$noms_erreur[] = array($nom['num_nom'], $epithete_traite, $nom['exclure_taxref']);
861
				}
881
				}
862
			}
882
			}
863
		}
883
		}
864
		return $noms_erreur;
884
		return $noms_erreur;
865
	}
885
	}
866
	
886
	
867
	/**
887
	/**
868
	 * Test #38
888
	 * Test #38
869
	 */
889
	 */
870
	private function testerGroupeCultivarRang() {
890
	private function testerGroupeCultivarRang() {
871
		$noms_erreur = array();
891
		$noms_erreur = array();
872
		foreach ($this->noms as &$nom) {
892
		foreach ($this->noms as &$nom) {
873
			if ($nom['cultivar_groupe'] != '') {
893
			if ($nom['cultivar_groupe'] != '') {
874
				if ($nom['rang'] < $this->manuel['rang_genre']) {
894
				if ($nom['rang'] < $this->manuel['rang_genre']) {
875
					$noms_erreur[] = array($nom['num_nom'], $nom['nom_sci'], $nom['rang']);
895
					$noms_erreur[] = array($nom['num_nom'], $nom['nom_sci'], $nom['rang'], $nom['exclure_taxref']);
876
				}
896
				}
877
			}
897
			}
878
		}
898
		}
879
		return $noms_erreur;
899
		return $noms_erreur;
880
	}
900
	}
881
	
901
	
882
	/**
902
	/**
883
	 * Test #39
903
	 * Test #39
884
	 */
904
	 */
885
	private function testerCultivarSyntaxe() {
905
	private function testerCultivarSyntaxe() {
886
		$noms_erreur = array();
906
		$noms_erreur = array();
887
		foreach ($this->noms as &$nom) {
907
		foreach ($this->noms as &$nom) {
888
			if ($nom['cultivar'] != '') {
908
			if ($nom['cultivar'] != '') {
889
				if (!$this->verifierEpitheteCultivar($nom['cultivar'])) {
909
				if (!$this->verifierEpitheteCultivar($nom['cultivar'])) {
890
					$epithete_traite = $this->repererEspace($nom['cultivar']);
910
					$epithete_traite = $this->repererEspace($nom['cultivar']);
891
					$noms_erreur[] = array($nom['num_nom'], $epithete_traite);
911
					$noms_erreur[] = array($nom['num_nom'], $epithete_traite, $nom['exclure_taxref']);
892
				}
912
				}
893
			}
913
			}
894
		}
914
		}
895
		return $noms_erreur;
915
		return $noms_erreur;
896
	}
916
	}
897
	
917
	
898
	/**
918
	/**
899
	 * Test #40
919
	 * Test #40
900
	 */
920
	 */
901
	private function testerCultivarRang() {
921
	private function testerCultivarRang() {
902
		$noms_erreur = array();
922
		$noms_erreur = array();
903
		foreach ($this->noms as &$nom) {
923
		foreach ($this->noms as &$nom) {
904
			if ($nom['cultivar'] != '') {
924
			if ($nom['cultivar'] != '') {
905
				if ($nom['rang'] < $this->manuel['rang_genre']) {
925
				if ($nom['rang'] < $this->manuel['rang_genre']) {
906
					$noms_erreur[] = array($nom['num_nom'], $nom['nom_sci'], $nom['rang']);
926
					$noms_erreur[] = array($nom['num_nom'], $nom['nom_sci'], $nom['rang'], $nom['exclure_taxref']);
907
				}
927
				}
908
			}
928
			}
909
		}
929
		}
910
		return $noms_erreur;
930
		return $noms_erreur;
911
	}
931
	}
912
	
932
	
913
	/**
933
	/**
914
	 * Test #41
934
	 * Test #41
915
	 */
935
	 */
916
	private function testerNomCommercialSyntaxe() {
936
	private function testerNomCommercialSyntaxe() {
917
		$noms_erreur = array();
937
		$noms_erreur = array();
918
		foreach ($this->noms as &$nom) {
938
		foreach ($this->noms as &$nom) {
919
			if ($nom['nom_commercial'] != '') {
939
			if ($nom['nom_commercial'] != '') {
920
				if (!$this->verifierNomCommercial($nom['nom_commercial'])) {
940
				if (!$this->verifierNomCommercial($nom['nom_commercial'])) {
921
					$epithete_traite = $this->repererEspace($nom['nom_commercial']);
941
					$epithete_traite = $this->repererEspace($nom['nom_commercial']);
922
					$noms_erreur[] = array($nom['num_nom'], $epithete_traite);
942
					$noms_erreur[] = array($nom['num_nom'], $epithete_traite, $nom['exclure_taxref']);
923
				}
943
				}
924
			}
944
			}
925
		}
945
		}
926
		return $noms_erreur;
946
		return $noms_erreur;
927
	}
947
	}
928
	
948
	
929
	/**
949
	/**
930
	 * Test #42
950
	 * Test #42
931
	 */
951
	 */
932
	private function testerNomCommercialPresenceCultivar() {
952
	private function testerNomCommercialPresenceCultivar() {
933
		$noms_erreur = array();
953
		$noms_erreur = array();
934
		foreach ($this->noms as &$nom) {
954
		foreach ($this->noms as &$nom) {
935
			if ((isset($nom['nom_commercial']) && $nom['nom_commercial'] != '') && ($nom['cultivar'] == '' && $nom['cultivar_groupe'] == '')) {
955
			if ((isset($nom['nom_commercial']) && $nom['nom_commercial'] != '') && ($nom['cultivar'] == '' && $nom['cultivar_groupe'] == '')) {
936
				$noms_erreur[] = array($nom['num_nom'], $nom['nom_sci']);
956
				$noms_erreur[] = array($nom['num_nom'], $nom['nom_sci'], $nom['exclure_taxref']);
937
			}
957
			}
938
		}
958
		}
939
		return $noms_erreur;
959
		return $noms_erreur;
940
	}
960
	}
941
	
961
	
942
	/**
962
	/**
943
	 * Test #43
963
	 * Test #43
944
	 */
964
	 */
945
	private function testerAuteurSyntaxe() {
965
	private function testerAuteurSyntaxe() {
946
		$noms_erreur = array();
966
		$noms_erreur = array();
947
		foreach ($this->noms as &$nom) {
967
		foreach ($this->noms as &$nom) {
948
			if ($nom['auteur'] != '') {
968
			if ($nom['auteur'] != '') {
949
				if (!$this->verifierAuteur($nom['auteur'])) {
969
				if (!$this->verifierAuteur($nom['auteur'])) {
950
					$intitule_traite = $this->repererEspace($nom['auteur']);
970
					$intitule_traite = $this->repererEspace($nom['auteur']);
951
					$noms_erreur[] = array($nom['num_nom'], $intitule_traite);
971
					$noms_erreur[] = array($nom['num_nom'], $intitule_traite, $nom['exclure_taxref']);
952
				}
972
				}
953
			}
973
			}
954
		}
974
		}
955
		return $noms_erreur;
975
		return $noms_erreur;
956
	}
976
	}
957
	
977
	
958
	/**
978
	/**
959
	 * Test #44
979
	 * Test #44
960
	 */
980
	 */
961
	private function testerAnneeSyntaxe() {
981
	private function testerAnneeSyntaxe() {
962
		$noms_erreur = array();
982
		$noms_erreur = array();
963
		foreach ($this->noms as &$nom) {
983
		foreach ($this->noms as &$nom) {
964
			if ($nom['annee'] != '') {
984
			if ($nom['annee'] != '') {
965
				if (!$this->verifierAnnee($nom['annee'])) {
985
				if (!$this->verifierAnnee($nom['annee'])) {
966
					$noms_erreur[] = array($nom['num_nom'], $nom['annee']);
986
					$noms_erreur[] = array($nom['num_nom'], $nom['annee'], $nom['exclure_taxref']);
967
				}
987
				}
968
			}
988
			}
969
		}
989
		}
970
		return $noms_erreur;
990
		return $noms_erreur;
971
	}
991
	}
972
	
992
	
973
	/**
993
	/**
974
	 * Test #45
994
	 * Test #45
975
	 */
995
	 */
976
	private function testerBiblioOrigineSyntaxe() {
996
	private function testerBiblioOrigineSyntaxe() {
977
		$noms_erreur = array();
997
		$noms_erreur = array();
978
		foreach ($this->noms as &$nom) {
998
		foreach ($this->noms as &$nom) {
979
			if ($nom['biblio_origine'] != '') {
999
			if ($nom['biblio_origine'] != '') {
980
				if (!$this->verifierBiblioOrigine($nom['biblio_origine'])) {
1000
				if (!$this->verifierBiblioOrigine($nom['biblio_origine'])) {
981
					$biblio_traite = $this->repererEspace($nom['biblio_origine']);
1001
					$biblio_traite = $this->repererEspace($nom['biblio_origine']);
982
					$noms_erreur[] = array($nom['num_nom'], $biblio_traite);
1002
					$noms_erreur[] = array($nom['num_nom'], $biblio_traite, $nom['exclure_taxref']);
983
				}
1003
				}
984
			}
1004
			}
985
		}
1005
		}
986
		return $noms_erreur;
1006
		return $noms_erreur;
987
	}
1007
	}
988
	
1008
	
989
	/**
1009
	/**
990
	 * Test #46
1010
	 * Test #46
991
	 */
1011
	 */
992
	private function testerHomonymieSyntaxe() {
1012
	private function testerHomonymieSyntaxe() {
993
		$noms_erreur = array();
1013
		$noms_erreur = array();
994
		foreach ($this->noms as &$nom) {
1014
		foreach ($this->noms as &$nom) {
995
			if ($nom['homonyme'] != '') {
1015
			if ($nom['homonyme'] != '') {
996
				if (!$this->verifierBooleen($nom['homonyme'])) {
1016
				if (!$this->verifierBooleen($nom['homonyme'])) {
997
					$noms_erreur[] = array($nom['num_nom'], $nom['homonyme']);
1017
					$noms_erreur[] = array($nom['num_nom'], $nom['homonyme'], $nom['exclure_taxref']);
998
				}
1018
				}
999
			}
1019
			}
1000
		}
1020
		}
1001
		return $noms_erreur;
1021
		return $noms_erreur;
1002
	}
1022
	}
1003
	
1023
	
1004
	/**
1024
	/**
1005
	 * Test #47
1025
	 * Test #47
1006
	 */
1026
	 */
1007
	private function testerHomonymieExistence() {
1027
	private function testerHomonymieExistence() {
1008
		$noms_homonymie = $this->classerNomsParNomComplet();
1028
		$noms_homonymie = $this->classerNomsParNomComplet();
1009
		
1029
		
1010
		$noms_erreur = array();
1030
		$noms_erreur = array();
1011
		foreach ($this->noms as &$nom) {
1031
		foreach ($this->noms as &$nom) {
1012
			if ($nom['homonyme'] != '0' && $nom['homonyme'] != '') {
1032
			if ($nom['homonyme'] != '0' && $nom['homonyme'] != '') {
1013
				if ($noms_homonymie[$nom['nom_sci']] <= 1) {
1033
				if ($noms_homonymie[$nom['nom_sci']] <= 1) {
1014
					$noms_erreur[] = array($nom['num_nom'], $nom['nom_sci']);
1034
					$noms_erreur[] = array($nom['num_nom'], $nom['nom_sci'], $nom['exclure_taxref']);
1015
				}
1035
				}
1016
			}
1036
			}
1017
		}
1037
		}
1018
		$noms_homonymie = null;
1038
		$noms_homonymie = null;
1019
		return $noms_erreur;
1039
		return $noms_erreur;
1020
	}
1040
	}
1021
	
1041
	
1022
	/**
1042
	/**
1023
	 * Test #48
1043
	 * Test #48
1024
	 */
1044
	 */
1025
	private function testerBasionymeSyntaxe() {
1045
	private function testerBasionymeSyntaxe() {
1026
		$noms_erreur = array();
1046
		$noms_erreur = array();
1027
		foreach ($this->noms as &$nom) {
1047
		foreach ($this->noms as &$nom) {
1028
			if ($nom['basionyme'] != '') {
1048
			if ($nom['basionyme'] != '') {
1029
				if (!$this->verifierNombre($nom['basionyme'])) {
1049
				if (!$this->verifierNombre($nom['basionyme'])) {
1030
					$noms_erreur[] = array($nom['num_nom'], $nom['basionyme']);
1050
					$noms_erreur[] = array($nom['num_nom'], $nom['basionyme'], $nom['exclure_taxref']);
1031
				}
1051
				}
1032
			}
1052
			}
1033
		}
1053
		}
1034
		return $noms_erreur;
1054
		return $noms_erreur;
1035
	}
1055
	}
1036
 
1056
 
1037
	/**
1057
	/**
1038
	 * Test #49
1058
	 * Test #49
1039
	 */
1059
	 */
1040
	private function testerBasionymeExistence() {
1060
	private function testerBasionymeExistence() {
1041
		$noms_erreur = array();
1061
		$noms_erreur = array();
1042
		foreach ($this->noms as &$nom) {
1062
		foreach ($this->noms as &$nom) {
1043
			if ($nom['basionyme'] != '') {
1063
			if ($nom['basionyme'] != '') {
1044
				if (!isset($this->noms[$nom['basionyme']])) {
1064
				if (!isset($this->noms[$nom['basionyme']])) {
1045
					$noms_erreur[] = array($nom['num_nom'], $nom['basionyme']);
1065
					$noms_erreur[] = array($nom['num_nom'], $nom['basionyme'], $nom['exclure_taxref']);
1046
				}
1066
				}
1047
			}
1067
			}
1048
		}
1068
		}
1049
		return $noms_erreur;
1069
		return $noms_erreur;
1050
	}
1070
	}
1051
	
1071
	
1052
	/**
1072
	/**
1053
	 * Test #50
1073
	 * Test #50
1054
	 */
1074
	 */
1055
	private function testerSynonymeProparteSyntaxe() {
1075
	private function testerSynonymeProparteSyntaxe() {
1056
		$noms_erreur = array();
1076
		$noms_erreur = array();
1057
		foreach ($this->noms as &$nom) {
1077
		foreach ($this->noms as &$nom) {
1058
			if ($nom['synonyme_proparte'] != '') {
1078
			if ($nom['synonyme_proparte'] != '') {
1059
				if (!$this->verifierNombreSuite($nom['synonyme_proparte'])) {
1079
				if (!$this->verifierNombreSuite($nom['synonyme_proparte'])) {
1060
					$noms_erreur[] = array($nom['num_nom'], $nom['synonyme_proparte']);
1080
					$noms_erreur[] = array($nom['num_nom'], $nom['synonyme_proparte'], $nom['exclure_taxref']);
1061
				}
1081
				}
1062
			}
1082
			}
1063
		}
1083
		}
1064
		return $noms_erreur;
1084
		return $noms_erreur;
1065
	}
1085
	}
1066
	
1086
	
1067
	/**
1087
	/**
1068
	 * Test #51
1088
	 * Test #51
1069
	 */
1089
	 */
1070
	private function testerSynonymeProparteExistence() {
1090
	private function testerSynonymeProparteExistence() {
1071
		$noms_erreur = array();
1091
		$noms_erreur = array();
1072
		foreach ($this->noms as &$nom) {
1092
		foreach ($this->noms as &$nom) {
1073
			if ($nom['synonyme_proparte'] != '') {
1093
			if ($nom['synonyme_proparte'] != '') {
1074
				$num_nom_a_verifier = explode(',', $nom['synonyme_proparte']);
1094
				$num_nom_a_verifier = explode(',', $nom['synonyme_proparte']);
1075
				$num_nom_en_erreur = array();
1095
				$num_nom_en_erreur = array();
1076
				foreach ($num_nom_a_verifier as $num_nom) {
1096
				foreach ($num_nom_a_verifier as $num_nom) {
1077
					if (!isset($this->noms[$num_nom])) {
1097
					if (!isset($this->noms[$num_nom])) {
1078
						$num_nom_en_erreur[] = $num_nom;
1098
						$num_nom_en_erreur[] = $num_nom;
1079
					}
1099
					}
1080
				}
1100
				}
1081
				if (count($nbre_en_erreur) > 0) {
1101
				if (count($nbre_en_erreur) > 0) {
1082
					$noms_erreur[] = array($nom['num_nom'], implode(',', $num_nom_en_erreur));
1102
					$noms_erreur[] = array($nom['num_nom'], implode(',', $num_nom_en_erreur), $nom['exclure_taxref']);
1083
				}
1103
				}
1084
			}
1104
			}
1085
		}
1105
		}
1086
		return $noms_erreur;
1106
		return $noms_erreur;
1087
	}
1107
	}
1088
	
1108
	
1089
	/**
1109
	/**
1090
	 * Test #52
1110
	 * Test #52
1091
	 */
1111
	 */
1092
	private function testerSynonymeDouteuxSyntaxe() {
1112
	private function testerSynonymeDouteuxSyntaxe() {
1093
		$noms_erreur = array();
1113
		$noms_erreur = array();
1094
		foreach ($this->noms as &$nom) {
1114
		foreach ($this->noms as &$nom) {
1095
			if ($nom['synonyme_douteux'] != '') {
1115
			if ($nom['synonyme_douteux'] != '') {
1096
				if (!$this->verifierBooleen($nom['synonyme_douteux'])) {
1116
				if (!$this->verifierBooleen($nom['synonyme_douteux'])) {
1097
					$noms_erreur[] = array($nom['num_nom'], $nom['synonyme_douteux']);
1117
					$noms_erreur[] = array($nom['num_nom'], $nom['synonyme_douteux'], $nom['exclure_taxref']);
1098
				}
1118
				}
1099
			}
1119
			}
1100
		}
1120
		}
1101
		return $noms_erreur;		
1121
		return $noms_erreur;		
1102
	}
1122
	}
1103
	
1123
	
1104
	/**
1124
	/**
1105
	 * Test #53
1125
	 * Test #53
1106
	 */
1126
	 */
1107
	private function testerSynonymeDouteuxNumNomRetenu() {
1127
	private function testerSynonymeDouteuxNumNomRetenu() {
1108
		$noms_erreur = array();
1128
		$noms_erreur = array();
1109
		foreach ($this->noms as &$nom) {
1129
		foreach ($this->noms as &$nom) {
1110
			if ($nom['synonyme_douteux'] == 1 && $nom['num_nom_retenu'] != ' ') {
1130
			if ($nom['synonyme_douteux'] == 1 && $nom['num_nom_retenu'] != ' ') {
1111
				$noms_erreur[] = array($nom['num_nom'], $nom['synonyme_douteux'], $nom['num_nom_retenu']);
1131
				$noms_erreur[] = array($nom['num_nom'], $nom['synonyme_douteux'], $nom['num_nom_retenu'], $nom['exclure_taxref']);
1112
			}
1132
			}
1113
		}
1133
		}
1114
		return $noms_erreur;
1134
		return $noms_erreur;
1115
	}
1135
	}
1116
	
1136
	
1117
	/**
1137
	/**
1118
	 * Test #54
1138
	 * Test #54
1119
	 */
1139
	 */
1120
	private function testerSynonymeMalAppliqueSyntaxe() {
1140
	private function testerSynonymeMalAppliqueSyntaxe() {
1121
		$noms_erreur = array();
1141
		$noms_erreur = array();
1122
		foreach ($this->noms as &$nom) {
1142
		foreach ($this->noms as &$nom) {
1123
			if ($nom['synonyme_mal_applique'] != '') {
1143
			if ($nom['synonyme_mal_applique'] != '') {
1124
				if (!$this->verifierBooleen($nom['synonyme_mal_applique'])) {
1144
				if (!$this->verifierBooleen($nom['synonyme_mal_applique'])) {
1125
					$noms_erreur[] = array($nom['num_nom'], $nom['synonyme_mal_applique']);
1145
					$noms_erreur[] = array($nom['num_nom'], $nom['synonyme_mal_applique'], $nom['exclure_taxref']);
1126
				}
1146
				}
1127
			}
1147
			}
1128
		}
1148
		}
1129
		return $noms_erreur;
1149
		return $noms_erreur;
1130
	}
1150
	}
1131
	
1151
	
1132
	/**
1152
	/**
1133
	 * Test #55
1153
	 * Test #55
1134
	 */
1154
	 */
1135
	private function testerSynonymeOrthographiqueSyntaxe() {
1155
	private function testerSynonymeOrthographiqueSyntaxe() {
1136
		$noms_erreur = array();
1156
		$noms_erreur = array();
1137
		foreach ($this->noms as $nom) {
1157
		foreach ($this->noms as $nom) {
1138
			if ($nom['synonyme_orthographique'] != '') {
1158
			if ($nom['synonyme_orthographique'] != '') {
1139
				if (!$this->verifierNombre($nom['synonyme_orthographique'])) {
1159
				if (!$this->verifierNombre($nom['synonyme_orthographique'])) {
1140
					$noms_erreur[] = array($nom['num_nom'], $nom['synonyme_orthographique']);
1160
					$noms_erreur[] = array($nom['num_nom'], $nom['synonyme_orthographique'], $nom['exclure_taxref']);
1141
				}
1161
				}
1142
			}
1162
			}
1143
		}
1163
		}
1144
		return $noms_erreur;
1164
		return $noms_erreur;
1145
	}
1165
	}
1146
	
1166
	
1147
	/**
1167
	/**
1148
	 * Test #56
1168
	 * Test #56
1149
	 */
1169
	 */
1150
	private function testerSynonymeOrthographiqueExistence() {
1170
	private function testerSynonymeOrthographiqueExistence() {
1151
		$noms_erreur = array();
1171
		$noms_erreur = array();
1152
		foreach ($this->noms as &$nom) {
1172
		foreach ($this->noms as &$nom) {
1153
			if ($nom['synonyme_orthographique'] != '') {
1173
			if ($nom['synonyme_orthographique'] != '') {
1154
				if (!isset($this->noms[$nom['synonyme_orthographique']])) {
1174
				if (!isset($this->noms[$nom['synonyme_orthographique']])) {
1155
					$noms_erreur[] = array($nom['num_nom'], $nom['synonyme_orthographique']);
1175
					$noms_erreur[] = array($nom['num_nom'], $nom['synonyme_orthographique'], $nom['exclure_taxref']);
1156
				}
1176
				}
1157
			}
1177
			}
1158
		}
1178
		}
1159
		return $noms_erreur;
1179
		return $noms_erreur;
1160
	}
1180
	}
1161
	
1181
	
1162
	/**
1182
	/**
1163
	 * Test #57
1183
	 * Test #57
1164
	 */
1184
	 */
1165
	private function testerHybrideParent01Syntaxe() {
1185
	private function testerHybrideParent01Syntaxe() {
1166
		$noms_erreur = array();
1186
		$noms_erreur = array();
1167
		foreach ($this->noms as &$nom) {
1187
		foreach ($this->noms as &$nom) {
1168
			if ($nom['hybride_parent_01'] != '') {
1188
			if ($nom['hybride_parent_01'] != '') {
1169
				if (!$this->verifierNombre($nom['hybride_parent_01'])) {
1189
				if (!$this->verifierNombre($nom['hybride_parent_01'])) {
1170
					$noms_erreur[] = array($nom['num_nom'], $this->repererEspace($nom['hybride_parent_01']));
1190
					$noms_erreur[] = array($nom['num_nom'], $this->repererEspace($nom['hybride_parent_01']), $nom['exclure_taxref']);
1171
				}
1191
				}
1172
			}
1192
			}
1173
		}
1193
		}
1174
		return $noms_erreur;
1194
		return $noms_erreur;
1175
	}
1195
	}
1176
	
1196
	
1177
	/**
1197
	/**
1178
	 * Test #58
1198
	 * Test #58
1179
	 */
1199
	 */
1180
	private function testerHybrideParent01Existence() {
1200
	private function testerHybrideParent01Existence() {
1181
		$noms_erreur = array();
1201
		$noms_erreur = array();
1182
		foreach ($this->noms as &$nom) {
1202
		foreach ($this->noms as &$nom) {
1183
			if ($nom['hybride_parent_01'] != '' && $nom['hybride_parent_01'] != '0') {
1203
			if ($nom['hybride_parent_01'] != '' && $nom['hybride_parent_01'] != '0') {
1184
				if (!isset($this->noms[$nom['hybride_parent_01']])) {
1204
				if (!isset($this->noms[$nom['hybride_parent_01']])) {
1185
					$noms_erreur[] = array($nom['num_nom'], $this->repererEspace($nom['hybride_parent_01']));
1205
					$noms_erreur[] = array($nom['num_nom'], $this->repererEspace($nom['hybride_parent_01']), $nom['exclure_taxref']);
1186
				}
1206
				}
1187
			}
1207
			}
1188
		}
1208
		}
1189
		return $noms_erreur;
1209
		return $noms_erreur;
1190
	}
1210
	}
1191
	
1211
	
1192
	/**
1212
	/**
1193
	 * Test #59
1213
	 * Test #59
1194
	 */
1214
	 */
1195
	private function testerHybrideParent02Syntaxe() {
1215
	private function testerHybrideParent02Syntaxe() {
1196
		$noms_erreur = array();
1216
		$noms_erreur = array();
1197
		foreach ($this->noms as &$nom) {
1217
		foreach ($this->noms as &$nom) {
1198
			if ($nom['hybride_parent_02'] != '') {
1218
			if ($nom['hybride_parent_02'] != '') {
1199
				if (!$this->verifierNombre($nom['hybride_parent_02'])) {
1219
				if (!$this->verifierNombre($nom['hybride_parent_02'])) {
1200
					$noms_erreur[] = array($nom['num_nom'], $this->repererEspace($nom['hybride_parent_02']));
1220
					$noms_erreur[] = array($nom['num_nom'], $this->repererEspace($nom['hybride_parent_02']), $nom['exclure_taxref']);
1201
				}
1221
				}
1202
			}
1222
			}
1203
		}
1223
		}
1204
		return $noms_erreur;
1224
		return $noms_erreur;
1205
	}
1225
	}
1206
	
1226
	
1207
	/**
1227
	/**
1208
	 * Test #60
1228
	 * Test #60
1209
	 */
1229
	 */
1210
	private function testerHybrideParent02Existence() {
1230
	private function testerHybrideParent02Existence() {
1211
		$noms_erreur = array();
1231
		$noms_erreur = array();
1212
		foreach ($this->noms as &$nom) {
1232
		foreach ($this->noms as &$nom) {
1213
			if ($nom['hybride_parent_02'] != '') {
1233
			if ($nom['hybride_parent_02'] != '') {
1214
				if (!isset($this->noms[$nom['hybride_parent_02']]) && $nom['hybride_parent_02'] != '0') {
1234
				if (!isset($this->noms[$nom['hybride_parent_02']]) && $nom['hybride_parent_02'] != '0') {
1215
					$noms_erreur[] = array($nom['num_nom'], $this->repererEspace($nom['hybride_parent_02']));
1235
					$noms_erreur[] = array($nom['num_nom'], $this->repererEspace($nom['hybride_parent_02']), $nom['exclure_taxref']);
1216
				}
1236
				}
1217
			}
1237
			}
1218
		}
1238
		}
1219
		return $noms_erreur;
1239
		return $noms_erreur;
1220
	}
1240
	}
1221
	
1241
	
1222
	/**
1242
	/**
1223
	 * Test #61
1243
	 * Test #61
1224
	 */
1244
	 */
1225
	private function testerPresenceSyntaxe() {
1245
	private function testerPresenceSyntaxe() {
1226
		$noms_erreur = array();
1246
		$noms_erreur = array();
1227
		foreach ($this->noms as &$nom) {
1247
		foreach ($this->noms as &$nom) {
1228
			if ($nom['presence'] != '') {
1248
			if ($nom['presence'] != '') {
1229
				if (!$this->verifierPresence($nom['presence'])) {
1249
				if (!$this->verifierPresence($nom['presence'])) {
1230
					$noms_erreur[] = array($nom['num_nom'], $nom['presence']);
1250
					$noms_erreur[] = array($nom['num_nom'], $nom['presence'], $nom['exclure_taxref']);
1231
				}
1251
				}
1232
			}
1252
			}
1233
		}
1253
		}
1234
		return $noms_erreur;
1254
		return $noms_erreur;
1235
	}
1255
	}
1236
	
1256
	
1237
	/**
1257
	/**
1238
	 * Test #62
1258
	 * Test #62
1239
	 */
1259
	 */
1240
	private function testerStatutOrigineSyntaxe() {
1260
	private function testerStatutOrigineSyntaxe() {
1241
		$noms_erreur = array();
1261
		$noms_erreur = array();
1242
		foreach ($this->noms as &$nom) {
1262
		foreach ($this->noms as &$nom) {
1243
			if ($nom['statut_origine'] != '') {
1263
			if ($nom['statut_origine'] != '') {
1244
				if (!$this->verifierStatutOrigine($nom['statut_origine'])) {
1264
				if (!$this->verifierStatutOrigine($nom['statut_origine'])) {
1245
					$noms_erreur[] = array($nom['num_nom'], $nom['statut_origine']);
1265
					$noms_erreur[] = array($nom['num_nom'], $nom['statut_origine'], $nom['exclure_taxref']);
1246
				}
1266
				}
1247
			}
1267
			}
1248
		}
1268
		}
1249
		return $noms_erreur;
1269
		return $noms_erreur;
1250
	}
1270
	}
1251
	
1271
	
1252
	/**
1272
	/**
1253
	 * Test #63
1273
	 * Test #63
1254
	 */
1274
	 */
1255
	private function testerStatutIntroductionSyntaxe() {
1275
	private function testerStatutIntroductionSyntaxe() {
1256
		$noms_erreur = array();
1276
		$noms_erreur = array();
1257
		foreach ($this->noms as &$nom) {
1277
		foreach ($this->noms as &$nom) {
1258
			if ($nom['statut_introduction'] != '') {
1278
			if ($nom['statut_introduction'] != '') {
1259
				if (!$this->verifierStatutIntroduction($nom['statut_introduction'])) {
1279
				if (!$this->verifierStatutIntroduction($nom['statut_introduction'])) {
1260
					$noms_erreur[] = array($nom['num_nom'], $nom['statut_introduction']);
1280
					$noms_erreur[] = array($nom['num_nom'], $nom['statut_introduction'], $nom['exclure_taxref']);
1261
				}
1281
				}
1262
			}
1282
			}
1263
		}
1283
		}
1264
		return $noms_erreur;
1284
		return $noms_erreur;
1265
	}
1285
	}
1266
	
1286
	
1267
	/**
1287
	/**
1268
	 * Test #64
1288
	 * Test #64
1269
	 */
1289
	 */
1270
	private function testerStatutCultureSyntaxe() {
1290
	private function testerStatutCultureSyntaxe() {
1271
		$noms_erreur = array();
1291
		$noms_erreur = array();
1272
		foreach ($this->noms as &$nom) {
1292
		foreach ($this->noms as &$nom) {
1273
			if ($nom['statut_culture'] != '') {
1293
			if ($nom['statut_culture'] != '') {
1274
				if (!$this->verifierStatutCulture($nom['statut_culture'])) {
1294
				if (!$this->verifierStatutCulture($nom['statut_culture'])) {
1275
					$noms_erreur[] = array($nom['num_nom'], $nom['statut_culture']);
1295
					$noms_erreur[] = array($nom['num_nom'], $nom['statut_culture'], $nom['exclure_taxref']);
1276
				}
1296
				}
1277
			}
1297
			}
1278
		}
1298
		}
1279
		return $noms_erreur;
1299
		return $noms_erreur;
1280
	}
1300
	}
1281
	
1301
	
1282
	/**
1302
	/**
1283
	 * Test #65
1303
	 * Test #65
1284
	 */
1304
	 */
1285
	private function testerExclureTaxRefSyntaxe() {
1305
	private function testerExclureTaxRefSyntaxe() {
1286
		$noms_erreur = array();
1306
		$noms_erreur = array();
1287
		foreach ($this->noms as &$nom) {
1307
		foreach ($this->noms as &$nom) {
1288
			if ($nom['exclure_taxref'] != '' && $nom['exclure_taxref'] != null) {
1308
			if ($nom['exclure_taxref'] != '' && $nom['exclure_taxref'] != null) {
1289
				if (!$this->verifierBooleen($nom['exclure_taxref'])) {
1309
				if (!preg_match('/^(?:0|1|9)$/', $nom['exclure_taxref'])) {
1290
					$noms_erreur[] = array($nom['num_nom'], $nom['exclure_taxref']);
1310
					$noms_erreur[] = array($nom['num_nom'], $nom['exclure_taxref']);
1291
				}
1311
				}
1292
			}
1312
			}
1293
		}
1313
		}
1294
		return $noms_erreur;
1314
		return $noms_erreur;
1295
	}
1315
	}
1296
 
1316
 
1297
	
1317
	
1298
 
1318
 
1299
	//+--------------------------------------------------------------------------------------------------------------+//
1319
	//+--------------------------------------------------------------------------------------------------------------+//
1300
	// MÉTHODES COMMUNES aux TESTS
1320
	// MÉTHODES COMMUNES aux TESTS
1301
	
1321
	
1302
	private function verifierPresence(&$valeur) {
1322
	private function verifierPresence(&$valeur) {
1303
		$codes = $this->manuel['codes_presence'];
1323
		$codes = $this->manuel['codes_presence'];
1304
		$ok = $this->verifierStatuts($valeur, $codes);
1324
		$ok = $this->verifierStatuts($valeur, $codes);
1305
		return $ok;
1325
		return $ok;
1306
	}
1326
	}
1307
	
1327
	
1308
	private function verifierStatutOrigine(&$valeur) {
1328
	private function verifierStatutOrigine(&$valeur) {
1309
		$codes = $this->manuel['codes_statuts_origine'];
1329
		$codes = $this->manuel['codes_statuts_origine'];
1310
		$ok = $this->verifierStatuts($valeur, $codes);
1330
		$ok = $this->verifierStatuts($valeur, $codes);
1311
		return $ok;
1331
		return $ok;
1312
	}
1332
	}
1313
	
1333
	
1314
	private function verifierStatutIntroduction(&$valeur) {
1334
	private function verifierStatutIntroduction(&$valeur) {
1315
		$codes = $this->manuel['codes_statuts_introduction'];
1335
		$codes = $this->manuel['codes_statuts_introduction'];
1316
		$ok = $this->verifierStatuts($valeur, $codes);
1336
		$ok = $this->verifierStatuts($valeur, $codes);
1317
		return $ok;
1337
		return $ok;
1318
	}
1338
	}
1319
	
1339
	
1320
	private function verifierStatutCulture(&$valeur) {
1340
	private function verifierStatutCulture(&$valeur) {
1321
		$codes = $this->manuel['codes_statuts_culture'];
1341
		$codes = $this->manuel['codes_statuts_culture'];
1322
		$ok = $this->verifierStatuts($valeur, $codes);
1342
		$ok = $this->verifierStatuts($valeur, $codes);
1323
		return $ok;
1343
		return $ok;
1324
	}
1344
	}
1325
	
1345
	
1326
	private function verifierStatuts(&$valeur, &$codes) {
1346
	private function verifierStatuts(&$valeur, &$codes) {
1327
		$ok = true;
1347
		$ok = true;
1328
		if (!preg_match("/^(?:|-|[$codes](?:-[A-Z])?)$/", $valeur)) {
1348
		if (!preg_match("/^(?:|-|[$codes](?:-[A-Z])?)$/", $valeur)) {
1329
			$ok = false;
1349
			$ok = false;
1330
		}
1350
		}
1331
		return $ok;
1351
		return $ok;
1332
	}
1352
	}
1333
	
1353
	
1334
	private function verifierBooleen(&$valeur) {
1354
	private function verifierBooleen(&$valeur) {
1335
		$ok = true;
1355
		$ok = true;
1336
		if (!preg_match('/^1$/', $valeur)) {
1356
		if (!preg_match('/^1$/', $valeur)) {
1337
			$ok = false;
1357
			$ok = false;
1338
		}
1358
		}
1339
		return $ok;
1359
		return $ok;
1340
	}
1360
	}
1341
	
1361
	
1342
	private function verifierNombre(&$valeur) {
1362
	private function verifierNombre(&$valeur) {
1343
		$ok = true;
1363
		$ok = true;
1344
		if (!preg_match('/^[0-9]+$/', $valeur)) {
1364
		if (!preg_match('/^[0-9]+$/', $valeur)) {
1345
			$ok = false;
1365
			$ok = false;
1346
		}
1366
		}
1347
		return $ok;
1367
		return $ok;
1348
	}
1368
	}
1349
	
1369
	
1350
	private function verifierNombreSuite(&$valeur) {
1370
	private function verifierNombreSuite(&$valeur) {
1351
		$ok = true;
1371
		$ok = true;
1352
		if (!preg_match('/^(?:[0-9]+,)*[0-9]+$/', $valeur)) {
1372
		if (!preg_match('/^(?:[0-9]+,)*[0-9]+$/', $valeur)) {
1353
			$ok = false;
1373
			$ok = false;
1354
		}
1374
		}
1355
		return $ok;
1375
		return $ok;
1356
	}
1376
	}
1357
	
1377
	
1358
	private function verifierTypeEpithete(&$type) {
1378
	private function verifierTypeEpithete(&$type) {
1359
		$ok = false;
1379
		$ok = false;
1360
		$rejetes = $this->manuel['type_epithete_rejetes'];
1380
		$rejetes = $this->manuel['type_epithete_rejetes'];
1361
		if (preg_replace("/^(?:$rejetes)$/", '', $type) == '') {
1381
		if (preg_replace("/^(?:$rejetes)$/", '', $type) == '') {
1362
			$ok = false;
1382
			$ok = false;
1363
		} else if (preg_match('/^[a-z][-a-z]*[.]?$/', $type)) {
1383
		} else if (preg_match('/^[a-z][-a-z]*[.]?$/', $type)) {
1364
			$ok = true;
1384
			$ok = true;
1365
		}
1385
		}
1366
		return $ok;
1386
		return $ok;
1367
	}
1387
	}
1368
	
1388
	
1369
	private function verifierBiblioOrigine(&$intitule) {
1389
	private function verifierBiblioOrigine(&$intitule) {
1370
		$ok = true;
1390
		$ok = true;
1371
		if (preg_match('/(?:^\s+|\s{2,}|\s+$)/', $intitule)) {
1391
		if (preg_match('/(?:^\s+|\s{2,}|\s+$)/', $intitule)) {
1372
			$ok = false;// Contient des espaces en trop
1392
			$ok = false;// Contient des espaces en trop
1373
		} else if (!preg_match('/^(?:in [^;]+[;]|)[^,]+?(?:[,][^:]+|)(?:[:].+|)$/', $intitule)) {
1393
		} else if (!preg_match('/^(?:in [^;]+[;]|)[^,]+?(?:[,][^:]+|)(?:[:].+|)$/', $intitule)) {
1374
			$ok = false;
1394
			$ok = false;
1375
		} else if (preg_match('/(?:(?:^|[,:])\s*(?:[:,]|$))/', $intitule)) {
1395
		} else if (preg_match('/(?:(?:^|[,:])\s*(?:[:,]|$))/', $intitule)) {
1376
			$ok = false;// Contient une mauvaise suite de caractères
1396
			$ok = false;// Contient une mauvaise suite de caractères
1377
		}
1397
		}
1378
		return $ok;
1398
		return $ok;
1379
	}
1399
	}
1380
	
1400
	
1381
	private function verifierAnnee(&$annee) {
1401
	private function verifierAnnee(&$annee) {
1382
		$ok = true;
1402
		$ok = true;
1383
		if (!preg_match('/^[0-9]{4}$/', $annee)) {
1403
		if (!preg_match('/^[0-9]{4}$/', $annee)) {
1384
			$ok = false;
1404
			$ok = false;
1385
		} else if ($annee < 1753) {
1405
		} else if ($annee < 1753) {
1386
			$ok = false;
1406
			$ok = false;
1387
		}
1407
		}
1388
		return $ok;
1408
		return $ok;
1389
	}
1409
	}
1390
	
1410
	
1391
	private function verifierAuteur(&$intitule) {
1411
	private function verifierAuteur(&$intitule) {
1392
		$ok = true;
1412
		$ok = true;
1393
		$acceptes = $this->manuel['auteur_acceptes'];
1413
		$acceptes = $this->manuel['auteur_acceptes'];
1394
		if (!preg_match("/^(?:$acceptes)$/", $intitule)) {
1414
		if (!preg_match("/^(?:$acceptes)$/", $intitule)) {
1395
			if (preg_match('/(?:^\s+|\s{2,}|\s+$)/', $intitule)) {
1415
			if (preg_match('/(?:^\s+|\s{2,}|\s+$)/', $intitule)) {
1396
				$ok = false;// Contient des espaces en trop
1416
				$ok = false;// Contient des espaces en trop
1397
			} else {
1417
			} else {
1398
				$mots_rejetes = $this->manuel['auteur_mots_rejetes'];
1418
				$mots_rejetes = $this->manuel['auteur_mots_rejetes'];
1399
				$mots = explode(' ', $intitule);
1419
				$mots = explode(' ', $intitule);
1400
				foreach ($mots as $position => $mot) {
1420
				foreach ($mots as $position => $mot) {
1401
					if (preg_match("/^(?:$mots_rejetes)$/i", $mot)) {
1421
					if (preg_match("/^(?:$mots_rejetes)$/i", $mot)) {
1402
						$ok = false;// Mot rejeté
1422
						$ok = false;// Mot rejeté
1403
					} else if (preg_match("/^(?:(?:\p{L}|[.'\(\)-])+|[&])$/u", $mot)) {
1423
					} else if (preg_match("/^(?:(?:\p{L}|[.'\(\)-])+|[&])$/u", $mot)) {
1404
						continue;// Mot de l'intitulé auteur
1424
						continue;// Mot de l'intitulé auteur
1405
					} else {
1425
					} else {
1406
						$ok = false;
1426
						$ok = false;
1407
					}
1427
					}
1408
				}
1428
				}
1409
			}
1429
			}
1410
		}
1430
		}
1411
		return $ok;
1431
		return $ok;
1412
	}
1432
	}
1413
	
1433
	
1414
	private function verifierNomCommercial(&$epithete) {
1434
	private function verifierNomCommercial(&$epithete) {
1415
		$ok = false;
1435
		$ok = false;
1416
		if (preg_match("/^[[:upper:][:punct:][:digit:][:space:]]+$/", $epithete)) {
1436
		if (preg_match("/^[[:upper:][:punct:][:digit:][:space:]]+$/", $epithete)) {
1417
			$ok = true;
1437
			$ok = true;
1418
		}
1438
		}
1419
		return $ok;
1439
		return $ok;
1420
	}
1440
	}
1421
	
1441
	
1422
	private function verifierEpitheteCultivar(&$epithete) {
1442
	private function verifierEpitheteCultivar(&$epithete) {
1423
		$ok = true;
1443
		$ok = true;
1424
		$acceptes = $this->manuel['cultivar_acceptes'];
1444
		$acceptes = $this->manuel['cultivar_acceptes'];
1425
		if (!preg_match("/^(?:$acceptes)$/", $epithete)) {
1445
		if (!preg_match("/^(?:$acceptes)$/", $epithete)) {
1426
			if (preg_match('/(?:^\s+|\s{2,}|\s+$)/', $epithete)) {
1446
			if (preg_match('/(?:^\s+|\s{2,}|\s+$)/', $epithete)) {
1427
				$ok = false;// Contient des espaces en trop
1447
				$ok = false;// Contient des espaces en trop
1428
			} else {
1448
			} else {
1429
				$mots_rejetes = $this->manuel['cultivar_mots_rejetes'];
1449
				$mots_rejetes = $this->manuel['cultivar_mots_rejetes'];
1430
				$mots_mineurs = $this->manuel['mots_mineurs'];
1450
				$mots_mineurs = $this->manuel['mots_mineurs'];
1431
				$mots = explode(' ', $epithete);
1451
				$mots = explode(' ', $epithete);
1432
				foreach ($mots as $position => $mot) {
1452
				foreach ($mots as $position => $mot) {
1433
					if (preg_match("/^(?:$mots_rejetes)$/i", $mot)) {
1453
					if (preg_match("/^(?:$mots_rejetes)$/i", $mot)) {
1434
						$ok = false;// Mot rejeté
1454
						$ok = false;// Mot rejeté
1435
					} else if ($position > 0 && preg_match("/^(?:$mots_mineurs)$/", $mot)) {
1455
					} else if ($position > 0 && preg_match("/^(?:$mots_mineurs)$/", $mot)) {
1436
						continue;// Mot mineur en minuscule qui n'est pas en 1ère position
1456
						continue;// Mot mineur en minuscule qui n'est pas en 1ère position
1437
					} else {
1457
					} else {
1438
						$mots_tiret = explode('-', $mot);
1458
						$mots_tiret = explode('-', $mot);
1439
						foreach ($mots_tiret as $position_tiret => $mot_tiret) {
1459
						foreach ($mots_tiret as $position_tiret => $mot_tiret) {
1440
							if ($position_tiret > 0 && preg_match("/^(?:$mots_mineurs)$/", $mot_tiret)) {
1460
							if ($position_tiret > 0 && preg_match("/^(?:$mots_mineurs)$/", $mot_tiret)) {
1441
								continue;// Mot-tiret mineur en minuscule qui n'est pas en 1ère position
1461
								continue;// Mot-tiret mineur en minuscule qui n'est pas en 1ère position
1442
							} else if (preg_match('/^[[:upper:]][[:lower:]]+$/', $mot_tiret)) {
1462
							} else if (preg_match('/^[[:upper:]][[:lower:]]+$/', $mot_tiret)) {
1443
								continue;//Mot (ou 'mot-tiret') avec lettre initiale majuscule
1463
								continue;//Mot (ou 'mot-tiret') avec lettre initiale majuscule
1444
							} else if ($position_tiret == count($mots_tiret) && preg_match('/^[:upper:][:lower:]+[:punct:]?$/', $mot_tiret)) {
1464
							} else if ($position_tiret == count($mots_tiret) && preg_match('/^[:upper:][:lower:]+[:punct:]?$/', $mot_tiret)) {
1445
								continue;//Dernier mot (ou 'mot-tiret') avec lettre initiale majuscule, suivi d'un éventuel signe de ponctuation
1465
								continue;//Dernier mot (ou 'mot-tiret') avec lettre initiale majuscule, suivi d'un éventuel signe de ponctuation
1446
							} else {
1466
							} else {
1447
								$ok = false;
1467
								$ok = false;
1448
							}
1468
							}
1449
						}
1469
						}
1450
					}
1470
					}
1451
				}
1471
				}
1452
			}
1472
			}
1453
		}
1473
		}
1454
		return $ok;
1474
		return $ok;
1455
	}
1475
	}
1456
	
1476
	
1457
	private function verifierEpitheteGroupeCultivar(&$epithete) {
1477
	private function verifierEpitheteGroupeCultivar(&$epithete) {
1458
		$ok = true;
1478
		$ok = true;
1459
		$acceptes = $this->manuel['cultivar_gp_acceptes'];
1479
		$acceptes = $this->manuel['cultivar_gp_acceptes'];
1460
		if (!preg_match("/^(?:$acceptes)$/", $epithete)) {
1480
		if (!preg_match("/^(?:$acceptes)$/", $epithete)) {
1461
			if (preg_match('/(?:^\s+|\s{2,}|\s+$)/', $epithete)) {
1481
			if (preg_match('/(?:^\s+|\s{2,}|\s+$)/', $epithete)) {
1462
				$ok = false;// Contient des espaces en trop
1482
				$ok = false;// Contient des espaces en trop
1463
			} else {
1483
			} else {
1464
				$mots_acceptes = $this->manuel['cultivar_gp_mots_acceptes'];
1484
				$mots_acceptes = $this->manuel['cultivar_gp_mots_acceptes'];
1465
				$mots_rejetes = $this->manuel['cultivar_gp_mots_rejetes'];
1485
				$mots_rejetes = $this->manuel['cultivar_gp_mots_rejetes'];
1466
				$mots_mineurs = $this->manuel['mots_mineurs'];
1486
				$mots_mineurs = $this->manuel['mots_mineurs'];
1467
				$mots = explode(' ', $epithete);
1487
				$mots = explode(' ', $epithete);
1468
				foreach ($mots as $position => $mot) {
1488
				foreach ($mots as $position => $mot) {
1469
					if (preg_match("/^(?:$mots_acceptes)$/i", $mot)) {
1489
					if (preg_match("/^(?:$mots_acceptes)$/i", $mot)) {
1470
						continue;// Mot accepté
1490
						continue;// Mot accepté
1471
					} else if (preg_match("/^(?:$mots_rejetes)$/i", $mot)) {
1491
					} else if (preg_match("/^(?:$mots_rejetes)$/i", $mot)) {
1472
						$ok = false;// Mot rejeté
1492
						$ok = false;// Mot rejeté
1473
					} else if ($position > 0 && preg_match("/^(?:$mots_mineurs)$/", $mot)) {
1493
					} else if ($position > 0 && preg_match("/^(?:$mots_mineurs)$/", $mot)) {
1474
						continue;// Mot mineur en minuscule qui n'est pas en 1ère position
1494
						continue;// Mot mineur en minuscule qui n'est pas en 1ère position
1475
					} else {
1495
					} else {
1476
						$mots_tiret = explode('-', $mot);
1496
						$mots_tiret = explode('-', $mot);
1477
						foreach ($mots_tiret as $position_tiret => $mot_tiret) {
1497
						foreach ($mots_tiret as $position_tiret => $mot_tiret) {
1478
							if ($position_tiret > 0 && preg_match("/^(?:$mots_mineurs)$/", $mot_tiret)) {
1498
							if ($position_tiret > 0 && preg_match("/^(?:$mots_mineurs)$/", $mot_tiret)) {
1479
								continue;// Mot-tiret mineur en minuscule qui n'est pas en 1ère position dans le mot
1499
								continue;// Mot-tiret mineur en minuscule qui n'est pas en 1ère position dans le mot
1480
							} else if (preg_match('/^[[:upper:]][[:lower:]]+$/', $mot_tiret)) {
1500
							} else if (preg_match('/^[[:upper:]][[:lower:]]+$/', $mot_tiret)) {
1481
								continue;// Mot (ou 'mot-tiret') avec lettre initiale majuscule
1501
								continue;// Mot (ou 'mot-tiret') avec lettre initiale majuscule
1482
							} else if ($position_tiret == count($mots_tiret) && preg_match('/^[:upper:][:lower:]+[:punct:]?$/', $mot_tiret)) {
1502
							} else if ($position_tiret == count($mots_tiret) && preg_match('/^[:upper:][:lower:]+[:punct:]?$/', $mot_tiret)) {
1483
								continue;// Dernier mot (ou 'mot-tiret') avec lettre initiale majuscule, suivi d'un éventuel signe de ponctuation
1503
								continue;// Dernier mot (ou 'mot-tiret') avec lettre initiale majuscule, suivi d'un éventuel signe de ponctuation
1484
							} else {
1504
							} else {
1485
								$ok = false;
1505
								$ok = false;
1486
							}
1506
							}
1487
						}
1507
						}
1488
					}
1508
					}
1489
				}
1509
				}
1490
			}
1510
			}
1491
		}
1511
		}
1492
		return $ok;
1512
		return $ok;
1493
	}
1513
	}
1494
	
1514
	
1495
	private function verifierEpitheteSp(&$epithete) {
1515
	private function verifierEpitheteSp(&$epithete) {
1496
		$ok = false;
1516
		$ok = false;
1497
		if (preg_match('/^[a-zëï][-a-zëï]+$/', $epithete)) {
1517
		if (preg_match('/^[a-zäëḧïöẗüẅẍÿ][-a-zäëḧïöẗüẅẍÿ]+$/', $epithete)) {
1498
			$ok = true;
1518
			$ok = true;
1499
		} else if (preg_match('/^sp\.(?:[A-Z]|[1-9][0-9]*)$/', $epithete)) {
1519
		} else if (preg_match('/^sp\.(?:[A-Z]|[1-9][0-9]*)$/', $epithete)) {
1500
			$ok = true;
1520
			$ok = true;
1501
		}
1521
		}
1502
		return $ok;
1522
		return $ok;
1503
	}
1523
	}
1504
	
1524
	
1505
	private function verifierEpitheteGenre(&$epithete) {
1525
	private function verifierEpitheteGenre(&$epithete) {
1506
		$ok = false;
1526
		$ok = false;
1507
		if (preg_match('/^[A-ZËÏ](?:[-a-zëï]+|[a-zëï]+-[A-ZËÏ][a-zëï]+)$/', $epithete)) {
1527
		if (preg_match('/^[A-ZÄËḦÏÖÜẄẌŸ](?:[-a-zäëḧïöẗüẅẍÿ]+|[a-zäëḧïöẗüẅẍÿ]+-[A-ZÄËḦÏÖÜẄẌŸ][a-zäëḧïöẗüẅẍÿ]+)$/', $epithete)) {
1508
			$ok = true;
1528
			$ok = true;
1509
		}
1529
		}
1510
		return $ok;
1530
		return $ok;
1511
	}
1531
	}
1512
	
1532
	
1513
	private function formaterStyleNomGenre(&$genre) {
1533
	private function formaterStyleNomGenre(&$genre) {
1514
		$genre_fmt = '';
1534
		$genre_fmt = '';
1515
		if (preg_match('/^\s*([x+])\s+(.+)$/i', $genre, $match)) {
1535
		if (preg_match('/^\s*([x+])\s+(.+)$/i', $genre, $match)) {
1516
			$genre_fmt = strtolower($match[1]).' '.ucfirst(strtolower($match[2]));
1536
			$genre_fmt = strtolower($match[1]).' '.ucfirst(strtolower($match[2]));
1517
		} else {
1537
		} else {
1518
			$genre_fmt = ucfirst(strtolower($genre));
1538
			$genre_fmt = ucfirst(strtolower($genre));
1519
		}
1539
		}
1520
		return $genre_fmt;
1540
		return $genre_fmt;
1521
	}
1541
	}
1522
	
1542
	
1523
	private function repererEspace($nom_sci) {
1543
	private function repererEspace($nom_sci) {
1524
		$nom_sci = str_replace(' ', '<span class="espace">&nbsp;</span>', $nom_sci);
1544
		$nom_sci = str_replace(' ', '<span class="espace">&nbsp;</span>', $nom_sci);
1525
		return $nom_sci;
1545
		return $nom_sci;
1526
	}
1546
	}
1527
	
1547
	
1528
	private function construireSuffixeNomPltCultivee(&$nom) {
1548
	private function construireSuffixeNomPltCultivee(&$nom) {
1529
		$suffixe = array();
1549
		$suffixe = array();
1530
		$suffixe[] = $this->construireNomCultivarGroupe($nom);
1550
		$suffixe[] = $this->construireNomCultivarGroupe($nom);
1531
		$suffixe[] = $this->construireNomCommercial($nom);
1551
		$suffixe[] = $this->construireNomCommercial($nom);
1532
		$suffixe[] = $this->construireNomCultivar($nom);
1552
		$suffixe[] = $this->construireNomCultivar($nom);
1533
		$suffixe = array_filter($suffixe);
1553
		$suffixe = array_filter($suffixe);
1534
		return implode(' ', $suffixe);
1554
		return implode(' ', $suffixe);
1535
	}
1555
	}
1536
	
1556
	
1537
	private function construireNomCultivarGroupe(&$nom) {
1557
	private function construireNomCultivarGroupe(&$nom) {
1538
		$nom_groupe_cultivar = '';
1558
		$nom_groupe_cultivar = '';
1539
		if ($nom['cultivar_groupe'] != '') {
1559
		if ($nom['cultivar_groupe'] != '') {
1540
			if (preg_match('/ gx$/', $nom['cultivar_groupe'])) {
1560
			if (preg_match('/ gx$/', $nom['cultivar_groupe'])) {
1541
				$nom_groupe_cultivar =  '('.$nom['cultivar_groupe'].')';
1561
				$nom_groupe_cultivar =  '('.$nom['cultivar_groupe'].')';
1542
			} else {
1562
			} else {
1543
				$nom_groupe_cultivar =  '('.$nom['cultivar_groupe'].' Gp)';
1563
				$nom_groupe_cultivar =  '('.$nom['cultivar_groupe'].' Gp)';
1544
			}
1564
			}
1545
		}
1565
		}
1546
		return $nom_groupe_cultivar;
1566
		return $nom_groupe_cultivar;
1547
	}
1567
	}
1548
	
1568
	
1549
	private function construireNomCommercial(&$nom) {
1569
	private function construireNomCommercial(&$nom) {
1550
		$nom_commercial = '';
1570
		$nom_commercial = '';
1551
		if ($nom['nom_commercial'] != '') {
1571
		if ($nom['nom_commercial'] != '') {
1552
			$nom_commercial =  strtoupper($nom['nom_commercial']);
1572
			$nom_commercial =  strtoupper($nom['nom_commercial']);
1553
		}
1573
		}
1554
		return $nom_commercial;
1574
		return $nom_commercial;
1555
	}
1575
	}
1556
	
1576
	
1557
	private function construireNomCultivar(&$nom) {
1577
	private function construireNomCultivar(&$nom) {
1558
		$nom_cultivar = '';
1578
		$nom_cultivar = '';
1559
		if ($nom['cultivar'] != '') {
1579
		if ($nom['cultivar'] != '') {
1560
			$nom_cultivar =  "'".$nom['cultivar']."'";
1580
			$nom_cultivar =  "'".$nom['cultivar']."'";
1561
		}
1581
		}
1562
		return $nom_cultivar;
1582
		return $nom_cultivar;
1563
	}
1583
	}
1564
	
1584
	
1565
	private function classerNomsParNomComplet() {
1585
	private function classerNomsParNomComplet() {
1566
		$noms_classes = array();
1586
		$noms_classes = array();
1567
		foreach ($this->noms as &$nom) {
1587
		foreach ($this->noms as &$nom) {
1568
			if (!isset($noms_classes[$nom['nom_sci']])) {
1588
			if (!isset($noms_classes[$nom['nom_sci']])) {
1569
				$noms_classes[$nom['nom_sci']] = 1;
1589
				$noms_classes[$nom['nom_sci']] = 1;
1570
			} else {
1590
			} else {
1571
				$noms_classes[$nom['nom_sci']]++;
1591
				$noms_classes[$nom['nom_sci']]++;
1572
			}
1592
			}
1573
		}
1593
		}
1574
		return $noms_classes;
1594
		return $noms_classes;
1575
	}
1595
	}
1576
 
-
 
1577
	private function getInfosTest($numero) {
-
 
1578
		$info = $this->tests[$numero];
-
 
1579
		$info['methode'] = 'tester'.implode('', explode(' ', ucwords($info['abr'])));
-
 
1580
		$info['numero'] = $numero; 
-
 
1581
		$info['resultat'] = false;
-
 
1582
		return $info;
-
 
1583
	}
-
 
1584
}
1596
}
1585
?>
1597
?>