Subversion Repositories Applications.referentiel

Rev

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

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