Subversion Repositories Applications.referentiel

Rev

Rev 6 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 6 Rev 12
Line 50... Line 50...
50
		$analyses = $this->tableStructureDao->getAnalyse($this->projet);
50
		$analyses = $this->tableStructureDao->getAnalyse($this->projet);
51
		$noms = $this->referentielDao->getTout($this->projet);
51
		$noms = $this->referentielDao->getTout($this->projet);
52
		$noms = $this->classerNoms($noms);
52
		$noms = $this->classerNoms($noms);
Line 53... Line 53...
53
		
53
		
-
 
54
		// Lancement des tests unitaires
54
		// Lancement des tests unitaires
55
		/*
55
		$donnees['tests'][] = $this->testerNombreDeChamps($colonnes);
56
		$donnees['tests'][] = $this->testerNombreDeChamps($colonnes);
56
		$donnees['tests'][] = $this->testerNomDesChamps($colonnes);
57
		$donnees['tests'][] = $this->testerNomDesChamps($colonnes);
57
		$donnees['tests'][] = $this->testerTypeDesChamps($colonnes);
58
		$donnees['tests'][] = $this->testerTypeDesChamps($colonnes);
58
		$donnees['tests'][] = $this->testerTailleDesChamps($colonnes, $analyses);
59
		$donnees['tests'][] = $this->testerTailleDesChamps($colonnes, $analyses);
-
 
60
		$donnees['tests'][] = $this->testerNumNomClePrimaire($colonnes);
59
		$donnees['tests'][] = $this->testerNumNomClePrimaire($colonnes);
61
		
-
 
62
		$donnees['tests'][] = $this->testerNumNomSuperieurAZero($noms);
60
		$donnees['tests'][] = $this->testerNumNomSuperieurAZero($noms);
63
		
61
		$donnees['tests'][] = $this->testerNumNomRetenuSuperieurAZero($noms);
64
		$donnees['tests'][] = $this->testerNumNomRetenuSuperieurAZero($noms);
62
		$donnees['tests'][] = $this->testerNumTaxSupEgalZeroUnique($noms);
65
		$donnees['tests'][] = $this->testerNumTaxSupEgalZeroUnique($noms);
63
		$donnees['tests'][] = $this->testerTaxSupPourTaxon($noms);
66
		$donnees['tests'][] = $this->testerTaxSupPourTaxon($noms);
64
		$donnees['tests'][] = $this->testerExitenceTaxonSuperieur($noms);
67
		$donnees['tests'][] = $this->testerExitenceTaxonSuperieur($noms);
65
		$donnees['tests'][] = $this->testerClassificationRang($noms);		
68
		$donnees['tests'][] = $this->testerClassificationRang($noms);		
-
 
69
		$donnees['tests'][] = $this->testerClassification($noms);
66
		$donnees['tests'][] = $this->testerClassification($noms);
70
		
-
 
71
		$donnees['tests'][] = $this->testerRang($noms);
67
		$donnees['tests'][] = $this->testerRang($noms);
72
		
68
		$donnees['tests'][] = $this->testerNomCompletSupraGenerique($noms);
73
		$donnees['tests'][] = $this->testerNomCompletSupraGenerique($noms);
69
		$donnees['tests'][] = $this->testerNomCompletGenre($noms);
74
		$donnees['tests'][] = $this->testerNomCompletGenre($noms);
70
		$donnees['tests'][] = $this->testerNomCompletInfraGenre($noms);
75
		$donnees['tests'][] = $this->testerNomCompletInfraGenre($noms);
71
		$donnees['tests'][] = $this->testerNomCompletEspece($noms);
76
		$donnees['tests'][] = $this->testerNomCompletEspece($noms);
72
		$donnees['tests'][] = $this->testerNomCompletInfraSpecifique($noms);
-
 
-
 
77
		$donnees['tests'][] = $this->testerNomCompletInfraSpecifique($noms);
73
		$donnees['tests'][] = $this->testerNomSupraGeneriqueMotUnique($noms);
78
 
-
 
79
		$donnees['tests'][] = $this->testerNomSupraGeneriqueEspaces($noms);
-
 
80
		$donnees['tests'][] = $this->testerNomSupraGeneriqueSyntaxe($noms);
-
 
81
		$donnees['tests'][] = $this->testerNomSupraGeneriqueRang($noms);
-
 
82
		
-
 
83
		$donnees['tests'][] = $this->testerGenreEspaces($noms);
-
 
84
		$donnees['tests'][] = $this->testerGenreSyntaxe($noms);
-
 
85
		$donnees['tests'][] = $this->testerGenreRang($noms);
-
 
86
		
-
 
87
		$donnees['tests'][] = $this->testerEpitheteInfraGeneriqueEspaces($noms);
-
 
88
		$donnees['tests'][] = $this->testerEpitheteInfraGeneriqueSyntaxe($noms);
-
 
89
		$donnees['tests'][] = $this->testerEpitheteInfraGeneriqueRang($noms);
-
 
90
		
-
 
91
		$donnees['tests'][] = $this->testerEpitheteSpEspaces($noms);
-
 
92
		$donnees['tests'][] = $this->testerEpitheteSpSyntaxe($noms);
-
 
93
		$donnees['tests'][] = $this->testerEpitheteSpRang($noms);
-
 
94
		
-
 
95
		$donnees['tests'][] = $this->testerTypeEpitheteEspaces($noms);
-
 
96
		$donnees['tests'][] = $this->testerTypeEpitheteSyntaxe($noms);
-
 
97
		$donnees['tests'][] = $this->testerTypeEpitheteHybridite($noms);
-
 
98
		
-
 
99
		$donnees['tests'][] = $this->testerEpitheteInfraSpEspaces($noms);
-
 
100
		$donnees['tests'][] = $this->testerEpitheteInfraSpSyntaxe($noms);
-
 
101
		$donnees['tests'][] = $this->testerEpitheteInfraSpRang($noms);
-
 
102
		*/
Line 74... Line 103...
74
		$donnees['tests'][] = $this->testerNomSupraGeneriqueEspaces($noms);
103
		$donnees['tests'][] = $this->testerGroupeCultivarSyntaxe($noms);
75
		
104
		
76
		//Debug::printr($this->manuel);
105
		//Debug::printr($this->manuel);
Line -... Line 106...
-
 
106
		$this->setSortie(self::RENDU_CORPS, $this->getVue('test', $donnees)); 
-
 
107
	}
-
 
108
	
77
		$this->setSortie(self::RENDU_CORPS, $this->getVue('test', $donnees)); 
109
	//+--------------------------------------------------------------------------------------------------------------+//
-
 
110
	// TESTS
-
 
111
	 
-
 
112
	private function testerGroupeCultivarSyntaxe($noms) {
-
 
113
		$info = array('titre' => 'groupe_cultivar -> syntaxe',
-
 
114
			'description' => "Le champ groupe_cultivar doit contenir un nom de groupe de cultivar conforme aux règles ".
-
 
115
				"du code des plantes cultivées qui se compose de caractères alphanumériques (A-Z,a-z et 0-9) incluant ".
-
 
116
				"signes diacritiques et marques de ponctuations.\n".
-
 
117
				"Il ne doit pas contenir le mot Groupe, l'abbréviation «gp» ou des parenthèses.\n".
-
 
118
				"Il peut contir à la fin l'abréviation «gx» pour distinguer les groupes des grex.",
78
	}
119
			'resultat' => false);
79
	
120
		
-
 
121
		// Réalisation du test
-
 
122
		$noms_erreur = array();
-
 
123
		foreach ($noms as $nom) {
-
 
124
			if ($nom['groupe_cultivar'] != '') {
-
 
125
				$mots = explode(' ', $nom['groupe_cultivar']);
80
	private function classerNoms($noms) {
126
				foreach ($mots as $mot) {
-
 
127
					if (!(preg_match('/^[+x]$/', $mot) || $this->verifierTypeEpithete($mot)|| $this->verifierEpithteSp($mot))) {
-
 
128
						$epithete_traite = $this->repererEspace($nom['epithete_infra_sp']);
-
 
129
						$noms_erreur[] = array($nom['num_nom'], $epithete_traite);
81
		$noms_classes = array();
130
					}
-
 
131
				}
-
 
132
			}
-
 
133
		}
-
 
134
		
-
 
135
		// Analyse des résultats
-
 
136
		if (count($noms_erreur) > 0) {
-
 
137
			$info['message']['entete'] = array('num_nom', 'epithete_infra_sp erroné');
-
 
138
			$info['message']['lignes'] = $noms_erreur;
-
 
139
		} else {
-
 
140
			$info['resultat'] = true;
-
 
141
		}
-
 
142
		
-
 
143
		return $info;
-
 
144
	}
-
 
145
	
-
 
146
	private function testerEpitheteInfraSpEspaces($noms) {
-
 
147
		$info = array('titre' => 'epithete_infra_sp -> espaces en trop',
-
 
148
			'description' => "Le champ epithete_infra_sp ne doit pas contenir d'espace avant ou aprés le nom.\n".
-
 
149
				"Si des espaces sont compris dans la valeur du champ, il ne doit pas y avoir plusieurs espaces consécutifs.",
-
 
150
			'resultat' => false);
-
 
151
		
-
 
152
		// Réalisation du test
-
 
153
		$noms_erreur = array();
-
 
154
		foreach ($noms as $nom) {
-
 
155
			if ($nom['epithete_infra_sp'] != '') {
-
 
156
				if (preg_match('/(?:^\s+(?!:\s+)|(?!:\s+)\s{2,}(?!:\s+)|(?!:\s+)\s+$)/', $nom['epithete_infra_sp'])) {
-
 
157
					$epithete_traite = $this->repererEspace($nom['epithete_infra_sp']);
-
 
158
					$noms_erreur[] = array($nom['num_nom'], $epithete_traite);
-
 
159
				}
-
 
160
			}
-
 
161
		}
-
 
162
		
-
 
163
		// Analyse des résultats
-
 
164
		if (count($noms_erreur) > 0) {
-
 
165
			$info['message']['entete'] = array('num_nom', 'epithete_infra_sp erroné');
-
 
166
			$info['message']['lignes'] = $noms_erreur;
-
 
167
		} else {
-
 
168
			$info['resultat'] = true;
-
 
169
		}
-
 
170
		
-
 
171
		return $info;
-
 
172
	}
-
 
173
	
-
 
174
	private function testerEpitheteInfraSpSyntaxe($noms) {
-
 
175
		$info = array('titre' => 'epithete_infra_sp -> syntaxe',
-
 
176
			'description' => "Le champ epithete_infra_sp peut contenir :\n".
-
 
177
			 	" - un mot unique composé de lettres minuscules avec ou sans tréma (¨) et de tirets (-). \n".
-
 
178
				"	Il commence par une lettre minuscule (avec ou sans tréma).\n". 
-
 
179
				"	Il peut être précédé par le signe + ou la lettre x suivi d'un espace.\n".
-
 
180
				" - une formule d'hybridité composée d'une série de noms d'espèce ou d'infra espèce (au moins 2) séparés entre eux \n".
-
 
181
				"	par la lettre x entourée de caractères espaces.",
-
 
182
			'resultat' => false);
-
 
183
		
-
 
184
		// Réalisation du test
-
 
185
		$noms_erreur = array();
-
 
186
		foreach ($noms as $nom) {
-
 
187
			if ($nom['epithete_infra_sp'] != '') {
-
 
188
				$mots = explode(' ', $nom['epithete_infra_sp']);
-
 
189
				foreach ($mots as $mot) {
-
 
190
					if (!(preg_match('/^[+x]$/', $mot) || $this->verifierTypeEpithete($mot)|| $this->verifierEpithteSp($mot))) {
-
 
191
						$epithete_traite = $this->repererEspace($nom['epithete_infra_sp']);
-
 
192
						$noms_erreur[] = array($nom['num_nom'], $epithete_traite);
-
 
193
					}
-
 
194
				}
-
 
195
			}
-
 
196
		}
-
 
197
		
-
 
198
		// Analyse des résultats
-
 
199
		if (count($noms_erreur) > 0) {
-
 
200
			$info['message']['entete'] = array('num_nom', 'epithete_infra_sp erroné');
-
 
201
			$info['message']['lignes'] = $noms_erreur;
-
 
202
		} else {
-
 
203
			$info['resultat'] = true;
-
 
204
		}
-
 
205
		
-
 
206
		return $info;
-
 
207
	}
-
 
208
	
-
 
209
	private function testerEpitheteInfraSpRang($noms) {
-
 
210
		$info = array('titre' => "epithete_infra_sp -> rang > {$this->manuel['rang_sp']}",
-
 
211
			'description' => "Si le champ epithete_infra_sp n'est pas vide alors le rang du nom doit être supérieur à {$this->manuel['rang_sp']}.",
-
 
212
			'resultat' => false);
-
 
213
		
-
 
214
		// Réalisation du test
-
 
215
		$noms_erreur = array();
-
 
216
		foreach ($noms as $nom) {
-
 
217
			if ($nom['epithete_infra_sp'] != '') {
-
 
218
				if ($nom['rang'] < $this->manuel['rang_sp']) {
-
 
219
					$noms_erreur[] = array($nom['num_nom'], $nom['nom_complet'], $nom['rang']);
-
 
220
				}
-
 
221
			}
-
 
222
		}
-
 
223
		
-
 
224
		// Analyse des résultats
-
 
225
		if (count($noms_erreur) > 0) {
-
 
226
			$info['message']['entete'] = array('num_nom', 'nom_complet', 'rang erroné');
-
 
227
			$info['message']['lignes'] = $noms_erreur;
-
 
228
		} else {
-
 
229
			$info['resultat'] = true;
-
 
230
		}
-
 
231
		
-
 
232
		return $info;
-
 
233
	}
-
 
234
	
-
 
235
	private function testerTypeEpitheteEspaces($noms) {
-
 
236
		$info = array('titre' => 'type_epithete -> espaces en trop',
-
 
237
			'description' => "Le champ type_epithete ne doit pas contenir d'espace.",
-
 
238
			'resultat' => false);
-
 
239
		
-
 
240
		// Réalisation du test
-
 
241
		$noms_erreur = array();
-
 
242
		foreach ($noms as $nom) {
-
 
243
			if ($nom['type_epithete'] != '') {
-
 
244
				if (preg_match('/\s+/', $nom['type_epithete'])) {
-
 
245
					$valeur_traitee = $this->repererEspace($nom['epithete_sp']);
-
 
246
					$noms_erreur[] = array($nom['num_nom'], $valeur_traitee);
-
 
247
				}
-
 
248
			}
-
 
249
		}
-
 
250
		
-
 
251
		// Analyse des résultats
-
 
252
		if (count($noms_erreur) > 0) {
-
 
253
			$info['message']['entete'] = array('num_nom', 'type_epithete erroné');
-
 
254
			$info['message']['lignes'] = $noms_erreur;
-
 
255
		} else {
-
 
256
			$info['resultat'] = true;
-
 
257
		}
-
 
258
		
-
 
259
		return $info;
-
 
260
	}
-
 
261
	
-
 
262
	private function testerTypeEpitheteSyntaxe($noms) {
-
 
263
		$info = array('titre' => 'type_epithete -> syntaxe',
-
 
264
			'description' => "Le champ type_epithete doit contenir un mot unique composé de lettres minuscules sans ".
-
 
265
				" accents et de tirets (-). Il commence par une lettre minuscule sans accent.",
-
 
266
			'resultat' => false);
-
 
267
		
-
 
268
		// Réalisation du test
-
 
269
		$noms_erreur = array();
-
 
270
		foreach ($noms as $nom) {
-
 
271
			if ($nom['type_epithete'] != '') {
-
 
272
				if (!preg_match('/^[a-z][-a-z]*[.]?$/', $nom['type_epithete'])) {
-
 
273
					$noms_erreur[] = array($nom['num_nom'],  $nom['type_epithete']);
-
 
274
				}
-
 
275
			}
-
 
276
		}
-
 
277
		
-
 
278
		// Analyse des résultats
-
 
279
		if (count($noms_erreur) > 0) {
-
 
280
			$info['message']['entete'] = array('num_nom', 'type_epithete erroné');
-
 
281
			$info['message']['lignes'] = $noms_erreur;
-
 
282
		} else {
82
		foreach ($noms as $nom) {
283
			$info['resultat'] = true;
-
 
284
		}
-
 
285
		
-
 
286
		return $info;
-
 
287
	}
-
 
288
	
-
 
289
	private function testerTypeEpitheteHybridite($noms) {
-
 
290
		$info = array('titre' => 'type_epithete -> hybridité',
-
 
291
			'description' => "Le champ type_epithete ne doit pas contenir de préfixe indiquant l'hybridité comme : \n".
-
 
292
				" - «n-» \n".
-
 
293
				" - «notho-» \n",
-
 
294
			'resultat' => false);
-
 
295
		
-
 
296
		// Réalisation du test
-
 
297
		$noms_erreur = array();
-
 
298
		foreach ($noms as $nom) {
-
 
299
			if ($nom['type_epithete'] != '') {
-
 
300
				if (preg_match('/^(?:n-|notho-)/', $nom['type_epithete'])) {
-
 
301
					$noms_erreur[] = array($nom['num_nom'], $nom['type_epithete']);
-
 
302
				}
-
 
303
			}
-
 
304
		}
-
 
305
		
-
 
306
		// Analyse des résultats
-
 
307
		if (count($noms_erreur) > 0) {
-
 
308
			$info['message']['entete'] = array('num_nom', 'type_epithete erroné');
-
 
309
			$info['message']['lignes'] = $noms_erreur;
-
 
310
		} else {
-
 
311
			$info['resultat'] = true;
83
			$noms_classes[$nom['num_nom']] = $nom;
312
		}
Line 84... Line 313...
84
		}
313
		
85
		return $noms_classes;
314
		return $info;
86
	}
315
	}
Line 592... Line 821...
592
		}
821
		}
Line 593... Line 822...
593
		
822
		
594
		return $info;
823
		return $info;
Line 595... Line 824...
595
	}
824
	}
596
	
825
	
597
	private function testerNomSupraGeneriqueMotUnique($noms) {
826
	private function testerNomSupraGeneriqueEspaces($noms) {
598
		$info = array('titre' => 'nom_supra_generique -> plusieurs mots',
827
		$info = array('titre' => 'nom_supra_generique -> espaces en trop',
Line 599... Line 828...
599
			'description' => "Le champ nom_supra_generique doit contenir un seul mot.",
828
			'description' => "Le champ nom_supra_generique ne doit pas contenir d'espace avant ou aprés le nom.",
600
			'resultat' => false);
829
			'resultat' => false);
601
		
830
		
602
		// Réalisation du test
831
		// Réalisation du test
603
		$noms_erreur = array();
832
		$noms_erreur = array();
604
		foreach ($noms as $nom) {
-
 
605
			if ($nom['nom_supra_generique'] != '') {
833
		foreach ($noms as $nom) {
606
				$mots = explode(' ', trim($nom['nom_supra_generique']));
834
			if ($nom['nom_supra_generique'] != '') {
607
				if (count($mots) > 1) {
835
				if (preg_match('/(?:^\s+(?!:\s+)|(?!:\s+)\s+$)/', $nom['nom_supra_generique'])) {
608
					$nom_supra_generique_traite = $this->repererEspace($nom['nom_supra_generique']);
836
					$nom_supra_generique_traite = $this->repererEspace($nom['nom_supra_generique']);
609
					$noms_erreur[] = array($nom['num_nom'], $nom_supra_generique_traite);
837
					$noms_erreur[] = array($nom['num_nom'], $nom_supra_generique_traite);
Line 620... Line 848...
620
		}
848
		}
Line 621... Line 849...
621
		
849
		
622
		return $info;
850
		return $info;
Line 623... Line 851...
623
	}
851
	}
624
	
852
	
625
	private function testerNomSupraGeneriqueEspaces($noms) {
853
	private function testerNomSupraGeneriqueSyntaxe($noms) {
-
 
854
		$info = array('titre' => 'nom_supra_generique -> syntaxe',
626
		$info = array('titre' => 'nom_supra_generique -> espaces en trop',
855
			'description' => "Le champ nom_supra_generique contient un mot composé de lettres minuscules avec ou sans tréma (¨) et de tirets (-). \n".
Line 627... Line 856...
627
			'description' => "Le champ nom_supra_generique ne doit pas contenir d'espace avant ou aprés le nom.",
856
				"La première lettre (avec ou sans tréma) du mot doit être en majuscule.",
628
			'resultat' => false);
857
			'resultat' => false);
629
		
858
		
630
		// Réalisation du test
859
		// Réalisation du test
631
		$noms_erreur = array();
860
		$noms_erreur = array();
632
		foreach ($noms as $nom) {
861
		foreach ($noms as $nom) {
633
			if ($nom['nom_supra_generique'] != '') {
862
			if ($nom['nom_supra_generique'] != '') {
634
				if (preg_match('/(?:^\s+(?!:\s+)|(?!:\s+)\s+$)/', $nom['nom_supra_generique'])) {
863
				if (!preg_match('/^[A-ZÄËḦÏÖÜẄẌŸ][-a-zäëḧïöẗüẅẍÿ]+$/', $nom['nom_supra_generique'])) {
635
					$nom_supra_generique_traite = $this->repererEspace($nom['nom_supra_generique']);
864
					$nom_supra_generique_traite = $this->repererEspace($nom['nom_supra_generique']);
636
					$noms_erreur[] = array($nom['num_nom'], $nom_supra_generique_traite);
865
					$noms_erreur[] = array($nom['num_nom'], $nom_supra_generique_traite);
Line 647... Line 876...
647
		}
876
		}
Line 648... Line 877...
648
		
877
		
649
		return $info;
878
		return $info;
Line -... Line 879...
-
 
879
	}
-
 
880
	
-
 
881
	private function testerNomSupraGeneriqueRang($noms) {
-
 
882
		$info = array('titre' => "nom_supra_generique -> rang < {$this->manuel['rang_genre']}",
-
 
883
			'description' => "Si le champ nom_supra_generique n'est pas vide alors le rang du nom doit être inférieur à {$this->manuel['rang_genre']}.",
-
 
884
			'resultat' => false);
-
 
885
		
-
 
886
		// Réalisation du test
-
 
887
		$noms_erreur = array();
-
 
888
		foreach ($noms as $nom) {
-
 
889
			if ($nom['nom_supra_generique'] != '') {
-
 
890
				if ($nom['rang'] >= $this->manuel['rang_genre']) {
-
 
891
					$noms_erreur[] = array($nom['num_nom'], $nom['nom_complet'], $nom['rang']);
-
 
892
				}
-
 
893
			}
-
 
894
		}
-
 
895
		
-
 
896
		// Analyse des résultats
-
 
897
		if (count($noms_erreur) > 0) {
-
 
898
			$info['message']['entete'] = array('num_nom', 'nom_complet', 'rang erroné');
-
 
899
			$info['message']['lignes'] = $noms_erreur;
-
 
900
		} else {
-
 
901
			$info['resultat'] = true;
-
 
902
		}
-
 
903
		
-
 
904
		return $info;
-
 
905
	}
-
 
906
	
-
 
907
	private function testerGenreEspaces($noms) {
-
 
908
		$info = array('titre' => 'genre -> espaces en trop',
-
 
909
			'description' => "Le champ genre ne doit pas contenir d'espace avant ou aprés le nom.\n".
-
 
910
				"Si des espaces sont compris dans la valeur du champ, il ne doit pas y avoir plusieurs espaces consécutifs.",
-
 
911
			'resultat' => false);
-
 
912
		
-
 
913
		// Réalisation du test
-
 
914
		$noms_erreur = array();
-
 
915
		foreach ($noms as $nom) {
-
 
916
			if ($nom['genre'] != '') {
-
 
917
				if (preg_match('/(?:^\s+(?!:\s+)|(?!:\s+)\s{2,}(?!:\s+)|(?!:\s+)\s+$)/', $nom['genre'])) {
-
 
918
					$nom_traite = $this->repererEspace($nom['genre']);
-
 
919
					$noms_erreur[] = array($nom['num_nom'], $nom_traite);
-
 
920
				}
-
 
921
			}
-
 
922
		}
-
 
923
		
-
 
924
		// Analyse des résultats
-
 
925
		if (count($noms_erreur) > 0) {
-
 
926
			$info['message']['entete'] = array('num_nom', 'genre erroné');
-
 
927
			$info['message']['lignes'] = $noms_erreur;
-
 
928
		} else {
-
 
929
			$info['resultat'] = true;
-
 
930
		}
-
 
931
		
-
 
932
		return $info;
-
 
933
	}
-
 
934
	
-
 
935
	private function testerGenreSyntaxe($noms) {
-
 
936
		$info = array('titre' => 'genre -> syntaxe',
-
 
937
			'description' => "Le champ genre peut contenir :\n".
-
 
938
			 	" - un mot unique composé de lettres minuscules avec ou sans tréma (¨) et de tirets (-). \n".
-
 
939
				"	Il commence par une lettre majuscule (avec ou sans tréma).". 
-
 
940
				"	Il peut être précédé par le signe + ou la lettre x suivi d'un espace.\n".
-
 
941
				" - une formule d'hybridité composée d'une série de noms de genre (au moins 2) séparés entre eux \n".
-
 
942
				"	par la lettre x entourée de caractères espaces.",
-
 
943
			'resultat' => false);
-
 
944
		
-
 
945
		// Réalisation du test
-
 
946
		$noms_erreur = array();
-
 
947
		foreach ($noms as $nom) {
-
 
948
			if ($nom['genre'] != '') {
-
 
949
				$mots = explode(' ', $nom['genre']);
-
 
950
				foreach ($mots as $mot) {
-
 
951
					if (!(preg_match('/^[+x]$/', $mot) || preg_match('/^[A-ZÄËḦÏÖÜẄẌŸ][-a-zäëḧïöẗüẅẍÿ]+/', $mot))) {
-
 
952
						$nom_traite = $this->repererEspace($nom['genre']);
-
 
953
						$noms_erreur[] = array($nom['num_nom'], $nom_traite);
-
 
954
					}
-
 
955
				}
-
 
956
			}
-
 
957
		}
-
 
958
		
-
 
959
		// Analyse des résultats
-
 
960
		if (count($noms_erreur) > 0) {
-
 
961
			$info['message']['entete'] = array('num_nom', 'genre erroné');
-
 
962
			$info['message']['lignes'] = $noms_erreur;
-
 
963
		} else {
-
 
964
			$info['resultat'] = true;
-
 
965
		}
-
 
966
		
-
 
967
		return $info;
-
 
968
	}
-
 
969
	
-
 
970
	private function testerGenreRang($noms) {
-
 
971
		$info = array('titre' => "genre -> rang >= {$this->manuel['rang_genre']}",
-
 
972
			'description' => "Si le champ genre n'est pas vide alors le rang du nom doit être supérieur ou égal à {$this->manuel['rang_genre']}.",
-
 
973
			'resultat' => false);
-
 
974
		
-
 
975
		// Réalisation du test
-
 
976
		$noms_erreur = array();
-
 
977
		foreach ($noms as $nom) {
-
 
978
			if ($nom['genre'] != '') {
-
 
979
				if ($nom['rang'] < $this->manuel['rang_genre']) {
-
 
980
					$noms_erreur[] = array($nom['num_nom'], $nom['nom_complet'], $nom['rang']);
-
 
981
				}
-
 
982
			}
-
 
983
		}
-
 
984
		
-
 
985
		// Analyse des résultats
-
 
986
		if (count($noms_erreur) > 0) {
-
 
987
			$info['message']['entete'] = array('num_nom', 'nom_complet', 'rang erroné');
-
 
988
			$info['message']['lignes'] = $noms_erreur;
-
 
989
		} else {
-
 
990
			$info['resultat'] = true;
-
 
991
		}
-
 
992
		
-
 
993
		return $info;
-
 
994
	}
-
 
995
		
-
 
996
	private function testerEpitheteInfraGeneriqueSyntaxe($noms) {
-
 
997
		$info = array('titre' => 'epithete_infra_generique -> syntaxe',
-
 
998
			'description' => "Le champ epithete_infra_generique est composé de lettres minuscules avec ou sans tréma (¨) et de tirets (-). \n".
-
 
999
				"La première lettre (avec ou sans tréma) doit être en majuscule.",
-
 
1000
			'resultat' => false);
-
 
1001
		
-
 
1002
		// Réalisation du test
-
 
1003
		$noms_erreur = array();
-
 
1004
		foreach ($noms as $nom) {
-
 
1005
			if ($nom['epithete_infra_generique'] != '') {
-
 
1006
				if (!preg_match('/^[A-ZÄËḦÏÖÜẄẌŸ][-a-zäëḧïöẗüẅẍÿ]+/', $nom['epithete_infra_generique'])) {
-
 
1007
					$epithete_traite = $this->repererEspace($nom['epithete_infra_generique']);
-
 
1008
					$noms_erreur[] = array($nom['num_nom'], $epithete_traite);
-
 
1009
				}
-
 
1010
			}
-
 
1011
		}
-
 
1012
		
-
 
1013
		// Analyse des résultats
-
 
1014
		if (count($noms_erreur) > 0) {
-
 
1015
			$info['message']['entete'] = array('num_nom', 'epithete_infra_generique erroné');
-
 
1016
			$info['message']['lignes'] = $noms_erreur;
-
 
1017
		} else {
-
 
1018
			$info['resultat'] = true;
-
 
1019
		}
-
 
1020
		
-
 
1021
		return $info;
-
 
1022
	}
-
 
1023
	
-
 
1024
	private function testerEpitheteInfraGeneriqueRang($noms) {
-
 
1025
		$info = array('titre' => "epithete_infra_generique -> {$this->manuel['rang_genre']} < rang < {$this->manuel['rang_sp']}",
-
 
1026
			'description' => "Si le champ epithete_infra_generique n'est pas vide alors le rang du nom doit être compris \n".
-
 
1027
				"entre {$this->manuel['rang_genre']} et {$this->manuel['rang_sp']}.",
-
 
1028
			'resultat' => false);
-
 
1029
		
-
 
1030
		// Réalisation du test
-
 
1031
		$noms_erreur = array();
-
 
1032
		foreach ($noms as $nom) {
-
 
1033
			if ($nom['epithete_infra_generique'] != '') {
-
 
1034
				if ($nom['rang'] <= $this->manuel['rang_genre'] || $nom['rang'] >= $this->manuel['rang_sp']) {
-
 
1035
					$noms_erreur[] = array($nom['num_nom'], $nom['nom_complet'], $nom['rang']);
-
 
1036
				}
-
 
1037
			}
-
 
1038
		}
-
 
1039
		
-
 
1040
		// Analyse des résultats
-
 
1041
		if (count($noms_erreur) > 0) {
-
 
1042
			$info['message']['entete'] = array('num_nom', 'nom_complet', 'rang erroné');
-
 
1043
			$info['message']['lignes'] = $noms_erreur;
-
 
1044
		} else {
-
 
1045
			$info['resultat'] = true;
-
 
1046
		}
-
 
1047
		
-
 
1048
		return $info;
-
 
1049
	}
-
 
1050
	
-
 
1051
	private function testerEpitheteInfraGeneriqueEspaces($noms) {
-
 
1052
		$info = array('titre' => 'epithete_infra_generique -> espaces en trop',
-
 
1053
			'description' => "Le champ epithete_infra_generique ne doit pas contenir d'espace avant ou aprés sa valeur.",
-
 
1054
			'resultat' => false);
-
 
1055
		
-
 
1056
		// Réalisation du test
-
 
1057
		$noms_erreur = array();
-
 
1058
		foreach ($noms as $nom) {
-
 
1059
			if ($nom['epithete_infra_generique'] != '') {
-
 
1060
				if (preg_match('/(?:^\s+(?!:\s+)|(?!:\s+)\s{2,}(?!:\s+)|(?!:\s+)\s+$)/', $nom['epithete_infra_generique'])) {
-
 
1061
					$epithete_traite = $this->repererEspace($nom['epithete_infra_generique']);
-
 
1062
					$noms_erreur[] = array($nom['num_nom'], $epithete_traite);
-
 
1063
				}
-
 
1064
			}
-
 
1065
		}
-
 
1066
		
-
 
1067
		// Analyse des résultats
-
 
1068
		if (count($noms_erreur) > 0) {
-
 
1069
			$info['message']['entete'] = array('num_nom', 'epithete_infra_generique erroné');
-
 
1070
			$info['message']['lignes'] = $noms_erreur;
-
 
1071
		} else {
-
 
1072
			$info['resultat'] = true;
-
 
1073
		}
-
 
1074
		
-
 
1075
		return $info;
-
 
1076
	}
-
 
1077
	
-
 
1078
	private function testerEpitheteSpEspaces($noms) {
-
 
1079
		$info = array('titre' => 'epithete_sp -> espaces en trop',
-
 
1080
			'description' => "Le champ epithete_sp ne doit pas contenir d'espace avant ou aprés le nom.\n".
-
 
1081
				"Si des espaces sont compris dans la valeur du champ, il ne doit pas y avoir plusieurs espaces consécutifs.",
-
 
1082
			'resultat' => false);
-
 
1083
		
-
 
1084
		// Réalisation du test
-
 
1085
		$noms_erreur = array();
-
 
1086
		foreach ($noms as $nom) {
-
 
1087
			if ($nom['epithete_sp'] != '') {
-
 
1088
				if (preg_match('/(?:^\s+(?!:\s+)|(?!:\s+)\s{2,}(?!:\s+)|(?!:\s+)\s+$)/', $nom['epithete_sp'])) {
-
 
1089
					$epithete_traite = $this->repererEspace($nom['epithete_sp']);
-
 
1090
					$noms_erreur[] = array($nom['num_nom'], $epithete_traite);
-
 
1091
				}
-
 
1092
			}
-
 
1093
		}
-
 
1094
		
-
 
1095
		// Analyse des résultats
-
 
1096
		if (count($noms_erreur) > 0) {
-
 
1097
			$info['message']['entete'] = array('num_nom', 'epithete_sp erroné');
-
 
1098
			$info['message']['lignes'] = $noms_erreur;
-
 
1099
		} else {
-
 
1100
			$info['resultat'] = true;
-
 
1101
		}
-
 
1102
		
-
 
1103
		return $info;
-
 
1104
	}
-
 
1105
	
-
 
1106
	private function testerEpitheteSpSyntaxe($noms) {
-
 
1107
		$info = array('titre' => 'epithete_sp -> syntaxe',
-
 
1108
			'description' => "Le champ epithete_sp peut contenir :\n".
-
 
1109
			 	" - un mot unique composé de lettres minuscules avec ou sans tréma (¨) et de tirets (-). \n".
-
 
1110
				"	Il commence par une lettre minuscule (avec ou sans tréma).\n". 
-
 
1111
				"	Il peut être précédé par le signe + ou la lettre x suivi d'un espace.\n".
-
 
1112
				" - un mot contenant sp. suivi d'un ou plusieurs caractères numériques (1-9) ou d'un seul caractère majuscule (A-Z) \n".
-
 
1113
				" - une formule d'hybridité composée d'une série de noms d'espèce (au moins 2) séparés entre eux \n".
-
 
1114
				"	par la lettre x entourée de caractères espaces.",
-
 
1115
			'resultat' => false);
-
 
1116
		
-
 
1117
		// Réalisation du test
-
 
1118
		$noms_erreur = array();
-
 
1119
		foreach ($noms as $nom) {
-
 
1120
			if ($nom['epithete_sp'] != '') {
-
 
1121
				$mots = explode(' ', $nom['epithete_sp']);
-
 
1122
				foreach ($mots as $mot) {
-
 
1123
					if (!(preg_match('/^[+x]$/', $mot) || $this->verifierEpithteSp($mot))) {
-
 
1124
						$epithete_traite = $this->repererEspace($nom['epithete_sp']);
-
 
1125
						$noms_erreur[] = array($nom['num_nom'], $epithete_traite);
-
 
1126
					}
-
 
1127
				}
-
 
1128
			}
-
 
1129
		}
-
 
1130
		
-
 
1131
		// Analyse des résultats
-
 
1132
		if (count($noms_erreur) > 0) {
-
 
1133
			$info['message']['entete'] = array('num_nom', 'epithete_sp erroné');
-
 
1134
			$info['message']['lignes'] = $noms_erreur;
-
 
1135
		} else {
-
 
1136
			$info['resultat'] = true;
-
 
1137
		}
-
 
1138
		
-
 
1139
		return $info;
-
 
1140
	}
-
 
1141
	
-
 
1142
	private function testerEpitheteSpRang($noms) {
-
 
1143
		$info = array('titre' => "epithete_sp -> rang >= {$this->manuel['rang_sp']}",
-
 
1144
			'description' => "Si le champ epithete_sp n'est pas vide alors le rang du nom doit être supérieur ou égal à {$this->manuel['rang_sp']}.",
-
 
1145
			'resultat' => false);
-
 
1146
		
-
 
1147
		// Réalisation du test
-
 
1148
		$noms_erreur = array();
-
 
1149
		foreach ($noms as $nom) {
-
 
1150
			if ($nom['epithete_sp'] != '') {
-
 
1151
				if ($nom['rang'] < $this->manuel['rang_sp']) {
-
 
1152
					$noms_erreur[] = array($nom['num_nom'], $nom['nom_complet'], $nom['rang']);
-
 
1153
				}
-
 
1154
			}
-
 
1155
		}
-
 
1156
		
-
 
1157
		// Analyse des résultats
-
 
1158
		if (count($noms_erreur) > 0) {
-
 
1159
			$info['message']['entete'] = array('num_nom', 'nom_complet', 'rang erroné');
-
 
1160
			$info['message']['lignes'] = $noms_erreur;
-
 
1161
		} else {
-
 
1162
			$info['resultat'] = true;
-
 
1163
		}
-
 
1164
		
-
 
1165
		return $info;
-
 
1166
	}
-
 
1167
	
-
 
1168
	//+--------------------------------------------------------------------------------------------------------------+//
-
 
1169
	// MÉTHODES COMMUNES aux TESTS
-
 
1170
	
-
 
1171
	private function verifierTypeEpithete($type) {
-
 
1172
		$ok = true;
-
 
1173
		if (!preg_match('/^[a-z][-a-z]*[.]?$/', $type)) {
-
 
1174
			$ok = false;
-
 
1175
		}
-
 
1176
		return $ok;
-
 
1177
	}
-
 
1178
	
-
 
1179
	private function verifierEpithteSp($epithete) {
-
 
1180
		$ok = false;
-
 
1181
		if (preg_match('/^[a-zäëḧïöẗüẅẍÿ][-a-zäëḧïöẗüẅẍÿ]+$/', $epithete)) {
-
 
1182
			$ok = true;
-
 
1183
		} else if (preg_match('/^sp\.(?:[A-Z]|[1-9][0-9]*)$/', $epithete)) {
-
 
1184
			$ok = true;
-
 
1185
		}
-
 
1186
		return $ok;
650
	}
1187
	}
651
	
1188
	
652
	private function formaterStyleNomGenre($genre) {
1189
	private function formaterStyleNomGenre($genre) {
653
		$genre_fmt = '';
1190
		$genre_fmt = '';
654
		if (preg_match('/^\s*([x+])\s+(.+)$/i', $genre, $match)) {
1191
		if (preg_match('/^\s*([x+])\s+(.+)$/i', $genre, $match)) {
Line 699... Line 1236...
699
			$nom_cultivar =  "'".$nom['cultivar']."'";
1236
			$nom_cultivar =  "'".$nom['cultivar']."'";
700
		}
1237
		}
701
		return $nom_cultivar;
1238
		return $nom_cultivar;
702
	}
1239
	}
Line -... Line 1240...
-
 
1240
	
-
 
1241
	private function classerNoms($noms) {
-
 
1242
		$noms_classes = array();
-
 
1243
		foreach ($noms as $nom) {
-
 
1244
			$noms_classes[$nom['num_nom']] = $nom;
-
 
1245
		}
-
 
1246
		return $noms_classes;
703
	
1247
	}
704
}
1248
}
705
?>
1249
?>