Subversion Repositories Applications.referentiel

Rev

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

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