Subversion Repositories Applications.referentiel

Rev

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

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