49,8 → 49,7 |
$colonnes = $this->tableStructureDao->getColonnes($this->projet); |
$analyses = $this->tableStructureDao->getAnalyse($this->projet); |
$noms = $this->referentielDao->getTout($this->projet); |
$noms = $this->classerNomsParNumNom($noms); |
$noms_homonymie = $this->classerNomsParNomComplet($noms); |
$noms = $this->classerNoms($noms); |
|
// Lancement des tests unitaires |
/* |
100,35 → 99,9 |
$donnees['tests'][] = $this->testerEpitheteInfraSpEspaces($noms); |
$donnees['tests'][] = $this->testerEpitheteInfraSpSyntaxe($noms); |
$donnees['tests'][] = $this->testerEpitheteInfraSpRang($noms); |
|
*/ |
$donnees['tests'][] = $this->testerGroupeCultivarSyntaxe($noms); |
$donnees['tests'][] = $this->testerGroupeCultivarRang($noms); |
|
$donnees['tests'][] = $this->testerCultivarSyntaxe($noms); |
$donnees['tests'][] = $this->testerCultivarRang($noms); |
|
$donnees['tests'][] = $this->testerNomCommercialSyntaxe($noms); |
$donnees['tests'][] = $this->testerNomCommercialPresenceCultivar($noms); |
|
$donnees['tests'][] = $this->testerAuteurSyntaxe($noms); |
|
$donnees['tests'][] = $this->testerAnneeSyntaxe($noms); |
|
$donnees['tests'][] = $this->testerBiblioOrigineSyntaxe($noms); |
|
$donnees['tests'][] = $this->testerHomonymieSyntaxe($noms); |
$donnees['tests'][] = $this->testerHomonymieExistence($noms, $noms_homonymie); |
|
$donnees['tests'][] = $this->testerBasionymeSyntaxe($noms); |
$donnees['tests'][] = $this->testerBasionymeExistence($noms); |
|
$donnees['tests'][] = $this->testerSynonymeProparteSyntaxe($noms); |
$donnees['tests'][] = $this->testerSynonymeProparteExistence($noms); |
*/ |
|
$donnees['tests'][] = $this->testerSynonymeDouteuxSyntaxe($noms); |
$donnees['tests'][] = $this->testerSynonymeMalAppliqueSyntaxe($noms); |
|
//Debug::printr($this->manuel); |
$this->setSortie(self::RENDU_CORPS, $this->getVue('test', $donnees)); |
} |
135,458 → 108,10 |
|
//+--------------------------------------------------------------------------------------------------------------+// |
// TESTS |
|
private function testerSynonymeMalAppliqueSyntaxe($noms) { |
$info = array('titre' => 'synonyme_mal_applique -> syntaxe', |
'description' => "Le champ synonyme_mal_applique contient soit :\n". |
" - une valeur vide.\n". |
" - le chiffre 1", |
'resultat' => false); |
|
// Réalisation du test |
$noms_erreur = array(); |
foreach ($noms as $nom) { |
if ($nom['synonyme_mal_applique'] != '') { |
if (!$this->verifierBooleen($nom['synonyme_mal_applique'])) { |
$noms_erreur[] = array($nom['num_nom'], $nom['synonyme_mal_applique']); |
} |
} |
} |
|
// Analyse des résultats |
if (count($noms_erreur) > 0) { |
$info['message']['entete'] = array('num_nom', 'synonyme_mal_applique erroné'); |
$info['message']['lignes'] = $noms_erreur; |
} else { |
$info['resultat'] = true; |
} |
|
return $info; |
} |
|
private function testerSynonymeDouteuxSyntaxe($noms) { |
$info = array('titre' => 'synonyme_douteux -> syntaxe', |
'description' => "Le champ synonyme_douteux contient soit :\n". |
" - une valeur vide.\n". |
" - le chiffre 1", |
'resultat' => false); |
|
// Réalisation du test |
$noms_erreur = array(); |
foreach ($noms as $nom) { |
if ($nom['synonyme_douteux'] != '') { |
if (!$this->verifierBooleen($nom['synonyme_douteux'])) { |
$noms_erreur[] = array($nom['num_nom'], $nom['synonyme_douteux']); |
} |
} |
} |
|
// Analyse des résultats |
if (count($noms_erreur) > 0) { |
$info['message']['entete'] = array('num_nom', 'synonyme_douteux erroné'); |
$info['message']['lignes'] = $noms_erreur; |
} else { |
$info['resultat'] = true; |
} |
|
return $info; |
} |
|
private function testerSynonymeProparteExistence($noms) { |
$info = array('titre' => 'synonyme_proparte -> existence', |
'description' => "Si le champ synonyme_proparte contient un ou plusieurs nombres alors chacun d'entre eux ". |
"doit correspondre à une valeur du champ num_nom.", |
'resultat' => false); |
|
// Réalisation du test |
$noms_erreur = array(); |
foreach ($noms as $nom) { |
if ($nom['synonyme_proparte'] != '') { |
$num_nom_a_verifier = explode(',', $nom['synonyme_proparte']); |
$num_nom_en_erreur = array(); |
foreach ($num_nom_a_verifier as $num_nom) { |
if (!isset($noms[$num_nom])) { |
$num_nom_en_erreur[] = $num_nom; |
} |
} |
if (count($nbre_en_erreur) > 0) { |
$noms_erreur[] = array($nom['num_nom'], implode(',', $num_nom_en_erreur)); |
} |
} |
} |
|
// Analyse des résultats |
if (count($noms_erreur) > 0) { |
$info['message']['entete'] = array('num_nom', 'synonyme_proparte introuvable'); |
$info['message']['lignes'] = $noms_erreur; |
} else { |
$info['resultat'] = true; |
} |
|
return $info; |
} |
|
private function testerSynonymeProparteSyntaxe($noms) { |
$info = array('titre' => 'synonyme_proparte -> syntaxe', |
'description' => "Le champ synonyme_proparte contient soit :\n". |
" - une valeur vide.\n". |
" - un nombre.\n". |
" - une suite de nombre séparés par des virgules.", |
'resultat' => false); |
|
// Réalisation du test |
$noms_erreur = array(); |
foreach ($noms as $nom) { |
if ($nom['synonyme_proparte'] != '') { |
if (!$this->verifierNombreSuite($nom['synonyme_proparte'])) { |
$noms_erreur[] = array($nom['num_nom'], $nom['synonyme_proparte']); |
} |
} |
} |
|
// Analyse des résultats |
if (count($noms_erreur) > 0) { |
$info['message']['entete'] = array('num_nom', 'synonyme_proparte erroné'); |
$info['message']['lignes'] = $noms_erreur; |
} else { |
$info['resultat'] = true; |
} |
|
return $info; |
} |
|
private function testerBasionymeExistence($noms) { |
$info = array('titre' => 'basionyme -> existence', |
'description' => "Si le champ basionyme contient un nombre alors il doit correspondre à une valeur du champ ". |
"num_nom.", |
'resultat' => false); |
|
// Réalisation du test |
$noms_erreur = array(); |
foreach ($noms as $nom) { |
if ($nom['basionyme'] != '') { |
if (!isset($noms[$nom['basionyme']])) { |
$noms_erreur[] = array($nom['num_nom'], $nom['basionyme']); |
} |
} |
} |
|
// Analyse des résultats |
if (count($noms_erreur) > 0) { |
$info['message']['entete'] = array('num_nom', 'basionyme introuvable'); |
$info['message']['lignes'] = $noms_erreur; |
} else { |
$info['resultat'] = true; |
} |
|
return $info; |
} |
|
private function testerBasionymeSyntaxe($noms) { |
$info = array('titre' => 'basionyme -> syntaxe', |
'description' => "Le champ basionyme contient :\n". |
" - un nombre ou une valeur vide.\n", |
'resultat' => false); |
|
// Réalisation du test |
$noms_erreur = array(); |
foreach ($noms as $nom) { |
if ($nom['basionyme'] != '') { |
if (!$this->verifierNombre($nom['basionyme'])) { |
$noms_erreur[] = array($nom['num_nom'], $nom['basionyme']); |
} |
} |
} |
|
// Analyse des résultats |
if (count($noms_erreur) > 0) { |
$info['message']['entete'] = array('num_nom', 'basionyme erroné'); |
$info['message']['lignes'] = $noms_erreur; |
} else { |
$info['resultat'] = true; |
} |
|
return $info; |
} |
|
private function testerHomonymieExistence($noms, $noms_homonymie) { |
$info = array('titre' => 'homonyme -> existence', |
'description' => "Si le champ homonyme contient «1» alors plusieurs noms doivent posséder la même valeur ". |
"dans le champ nom_complet.", |
'resultat' => false); |
|
// Réalisation du test |
$noms_erreur = array(); |
foreach ($noms as $nom) { |
if ($nom['homonyme'] != '0' && $nom['homonyme'] != '') { |
if ($noms_homonymie[$nom['nom_complet']] <= 1) { |
$noms_erreur[] = array($nom['num_nom'], $nom['nom_complet']); |
} |
} |
} |
|
// Analyse des résultats |
if (count($noms_erreur) > 0) { |
$info['message']['entete'] = array('num_nom', 'homonyme introuvable'); |
$info['message']['lignes'] = $noms_erreur; |
} else { |
$info['resultat'] = true; |
} |
|
return $info; |
} |
|
private function testerHomonymieSyntaxe($noms) { |
$info = array('titre' => 'homonyme -> syntaxe', |
'description' => "Le champ homonyme contient :\n". |
" - le chiffre 1 ou une valeur vide.\n", |
'resultat' => false); |
|
// Réalisation du test |
$noms_erreur = array(); |
foreach ($noms as $nom) { |
if ($nom['homonyme'] != '') { |
if (!$this->verifierBooleen($nom['homonyme'])) { |
$noms_erreur[] = array($nom['num_nom'], $nom['homonyme']); |
} |
} |
} |
|
// Analyse des résultats |
if (count($noms_erreur) > 0) { |
$info['message']['entete'] = array('num_nom', 'homonyme erroné'); |
$info['message']['lignes'] = $noms_erreur; |
} else { |
$info['resultat'] = true; |
} |
|
return $info; |
} |
|
private function testerBiblioOrigineSyntaxe($noms) { |
$info = array('titre' => 'biblio_origine -> syntaxe', |
'description' => "Le champ biblio_origine se compose de plusieurs parties séparées par des caractères ". |
"précis qui sont dans l'ordre de gauche à droite :\n". |
" - Éventuellement le mot « in » suivi d'un intitulé auteur (utilisé pour indiquer l'intitulé auteur de ". |
"l'ouvrage global dans lequel la publication est parue).\n". |
" - point-virgule « ; » (si l'info précédent a été renseignée)\n". |
" - Abréviation ou nom de l'ouvrage ou de la revue selon le standard en vigueur dans le code du nom. ". |
"Cette information ne doit pas contenir de caractère virgule « , ».\n". |
" - virgule « , »\n". |
" - Les informations permettant d'identifier plus précisément le document contenant le nom... ". |
"Par exemple, l'éditeur, le tome, le numéro d'édition, le volume... séparées par des virgules ou d'autres ". |
"caractères sauf deux points « : ».\n". |
" - deux points « : »\n". |
" - la page contenant la publication du nom ou un ensemble de page (première et dernière page de ". |
"l'ensemble séparées par un tiret « - »). Quelques fois des numéros ou d'autres informations indiquant ". |
"dans le document la position du nom. Le tiret « - » doit toujours servir à séparer un ensemble.", |
'resultat' => false); |
|
// Réalisation du test |
$noms_erreur = array(); |
foreach ($noms as $nom) { |
if ($nom['biblio_origine'] != '') { |
if (!$this->verifierBiblioOrigine($nom['biblio_origine'])) { |
$biblio_traite = $this->repererEspace($nom['biblio_origine']); |
$noms_erreur[] = array($nom['num_nom'], $biblio_traite); |
} |
} |
} |
|
// Analyse des résultats |
if (count($noms_erreur) > 0) { |
$info['message']['entete'] = array('num_nom', 'biblio_origine erroné'); |
$info['message']['lignes'] = $noms_erreur; |
} else { |
$info['resultat'] = true; |
} |
|
return $info; |
} |
|
private function testerAnneeSyntaxe($noms) { |
$info = array('titre' => 'annee -> syntaxe', |
'description' => "Le champ annee doit :\n". |
" - contenir un nombre de 4 chiffre\n". |
" - être supérieur ou égal à 1753 ", |
'resultat' => false); |
|
// Réalisation du test |
$noms_erreur = array(); |
foreach ($noms as $nom) { |
if ($nom['annee'] != '') { |
if (!$this->verifierAnnee($nom['annee'])) { |
$noms_erreur[] = array($nom['num_nom'], $nom['annee']); |
} |
} |
} |
|
// Analyse des résultats |
if (count($noms_erreur) > 0) { |
$info['message']['entete'] = array('num_nom', 'annee erroné'); |
$info['message']['lignes'] = $noms_erreur; |
} else { |
$info['resultat'] = true; |
} |
|
return $info; |
} |
|
private function testerAuteurSyntaxe($noms) { |
$info = array('titre' => 'auteur -> syntaxe', |
'description' => "Le champ auteur doit :\n". |
" - contenir l'intitulé complet des noms de l'auteur ou des auteurs ayant publiés à l'origine la combinaison latine courante.\n". |
" - ou débuter par le mot « sensu » et contient l'intitulé complet des noms de l'auteur ou des auteurs ayant publiés un nom dont la description ne correspond pas à celle de l'auteur ou des auteurs d'origine.\n". |
" - se composer de caractères alphabétiques (A-Z, a-z), incluant les signes diacritiques, le symbole point (.), les paires de parenthèses ( () ), les apostrophes, l'esperluette (&) et l'espace ( ).\n". |
" - contenir, si nécessaire, des abréviations de noms d'auteurs respectant les standards.\n". |
" - contenir une translittération des noms d'alphabet cyrillique, arabe, chinois... en alphabet latin.\n". |
" - inclure entre parenthèses l'intitulé des noms de l'auteur ou des auteurs ayant publié le basionyme.\n". |
" - toujours utiliser l'esperluette (&) à la place du mot « et » pour séparer les noms d'auteurs.\n". |
" - conformément à la recommandation 46C.2 du CINB, si une un citation comprend plus de deux auteurs, ". |
"elle devrait être limitée au nom du premier, suivi de « & al.».\n", |
'resultat' => false); |
|
// Réalisation du test |
$noms_erreur = array(); |
foreach ($noms as $nom) { |
if ($nom['auteur'] != '') { |
if (!$this->verifierAuteur($nom['auteur'])) { |
$intitule_traite = $this->repererEspace($nom['auteur']); |
$noms_erreur[] = array($nom['num_nom'], $intitule_traite); |
} |
} |
} |
|
// Analyse des résultats |
if (count($noms_erreur) > 0) { |
$info['message']['entete'] = array('num_nom', 'auteur erroné'); |
$info['message']['lignes'] = $noms_erreur; |
} else { |
$info['resultat'] = true; |
} |
|
return $info; |
} |
|
private function testerNomCommercialSyntaxe($noms) { |
$info = array('titre' => 'nom_commercial -> syntaxe', |
'description' => "Le champ nom_commercial doit contenir un nom commercial conforme aux règles du ". |
"Code Internationnal de Nomenclature des Plantes Cultivées (CINPC) ". |
"qui se compose de caractères majuscules (A-Z) incluant des signes diacritiques et des espaces.\n", |
'resultat' => false); |
|
// Réalisation du test |
$noms_erreur = array(); |
foreach ($noms as $nom) { |
if ($nom['nom_commercial'] != '') { |
if (!$this->verifierNomCommercial($nom['nom_commercial'])) { |
$epithete_traite = $this->repererEspace($nom['nom_commercial']); |
$noms_erreur[] = array($nom['num_nom'], $epithete_traite); |
} |
} |
} |
|
// Analyse des résultats |
if (count($noms_erreur) > 0) { |
$info['message']['entete'] = array('num_nom', 'cultivar erroné'); |
$info['message']['lignes'] = $noms_erreur; |
} else { |
$info['resultat'] = true; |
} |
|
return $info; |
} |
|
private function testerNomCommercialPresenceCultivar($noms) { |
$info = array('titre' => 'nom_commercial -> groupe_cultivar OU cultivar non vide', |
'description' => "Si le champ nom_commercial contier un nom commercial alors le champ cultivar OU ". |
"cultivar_groupe ne doit pas être vide.", |
'resultat' => false); |
|
// Réalisation du test |
$noms_erreur = array(); |
foreach ($noms as $nom) { |
if ($nom['nom_commercial'] != '' && ($nom['cultivar'] == '' && $nom['cultivar_groupe'] == '')) { |
$noms_erreur[] = array($nom['num_nom'], $nom['nom_complet']); |
} |
} |
|
// Analyse des résultats |
if (count($noms_erreur) > 0) { |
$info['message']['entete'] = array('num_nom', 'nom_commercial sans cultivar ou cultivar_groupe'); |
$info['message']['lignes'] = $noms_erreur; |
} else { |
$info['resultat'] = true; |
} |
|
return $info; |
} |
|
private function testerCultivarSyntaxe($noms) { |
$info = array('titre' => 'cultivar -> syntaxe', |
'description' => "Le champ cultivar_groupe doit contenir :\n". |
" - un nom de cultivar conforme aux règles du Code Internationnal de Nomenclature des Plantes ". |
"Cultivées (CINPC) qui se compose de caractères alphanumériques (A-Z,a-z et 0-9) incluant ". |
"signes diacritiques et marques de ponctuations.\n". |
" - un nom en alphabet latin ce qui implique une translittération des noms d'alphabet cyrillique, ". |
"arabe, chinois...\n". |
" - une lettre majuscule obligatoire pour le premier caractère du premier mot et pour les autres mots ". |
"importants mais pas pour les mots mineurs.\n". |
"Ne doit pas contenir :\n". |
" - cv., convar. ou de guillemets simples (').\n", |
'resultat' => false); |
|
// Réalisation du test |
$noms_erreur = array(); |
foreach ($noms as $nom) { |
if ($nom['cultivar'] != '') { |
if (!$this->verifierEpitheteCultivar($nom['cultivar'])) { |
$epithete_traite = $this->repererEspace($nom['cultivar']); |
$noms_erreur[] = array($nom['num_nom'], $epithete_traite); |
} |
} |
} |
|
// Analyse des résultats |
if (count($noms_erreur) > 0) { |
$info['message']['entete'] = array('num_nom', 'cultivar erroné'); |
$info['message']['lignes'] = $noms_erreur; |
} else { |
$info['resultat'] = true; |
} |
|
return $info; |
} |
|
private function testerCultivarRang($noms) { |
$info = array('titre' => "cultivar -> rang >= {$this->manuel['rang_genre']}", |
'description' => "Si le champ cultivar n'est pas vide alors le rang du nom doit être supérieur ou égal à {$this->manuel['rang_genre']}.", |
'resultat' => false); |
|
// Réalisation du test |
$noms_erreur = array(); |
foreach ($noms as $nom) { |
if ($nom['cultivar'] != '') { |
if ($nom['rang'] < $this->manuel['rang_genre']) { |
$noms_erreur[] = array($nom['num_nom'], $nom['nom_complet'], $nom['rang']); |
} |
} |
} |
|
// Analyse des résultats |
if (count($noms_erreur) > 0) { |
$info['message']['entete'] = array('num_nom', 'nom_complet', 'rang erroné'); |
$info['message']['lignes'] = $noms_erreur; |
} else { |
$info['resultat'] = true; |
} |
|
return $info; |
} |
|
|
private function testerGroupeCultivarSyntaxe($noms) { |
$info = array('titre' => 'cultivar_groupe -> syntaxe', |
'description' => "Le champ cultivar_groupe doit contenir un nom de groupe de cultivar conforme aux règles ". |
$info = array('titre' => 'groupe_cultivar -> syntaxe', |
'description' => "Le champ groupe_cultivar doit contenir un nom de groupe de cultivar conforme aux règles ". |
"du code des plantes cultivées qui se compose de caractères alphanumériques (A-Z,a-z et 0-9) incluant ". |
"signes diacritiques et marques de ponctuations.\n". |
"Il ne doit pas contenir le mot Groupe, l'abbréviation «gp» ou des parenthèses.\n". |
596,10 → 121,13 |
// Réalisation du test |
$noms_erreur = array(); |
foreach ($noms as $nom) { |
if ($nom['cultivar_groupe'] != '') { |
if (!$this->verifierEpitheteGroupeCultivar($nom['cultivar_groupe'])) { |
$epithete_traite = $this->repererEspace($nom['cultivar_groupe']); |
$noms_erreur[] = array($nom['num_nom'], $epithete_traite); |
if ($nom['groupe_cultivar'] != '') { |
$mots = explode(' ', $nom['groupe_cultivar']); |
foreach ($mots as $mot) { |
if (!(preg_match('/^[+x]$/', $mot) || $this->verifierTypeEpithete($mot)|| $this->verifierEpithteSp($mot))) { |
$epithete_traite = $this->repererEspace($nom['epithete_infra_sp']); |
$noms_erreur[] = array($nom['num_nom'], $epithete_traite); |
} |
} |
} |
} |
606,7 → 134,7 |
|
// Analyse des résultats |
if (count($noms_erreur) > 0) { |
$info['message']['entete'] = array('num_nom', 'cultivar_groupe erroné'); |
$info['message']['entete'] = array('num_nom', 'epithete_infra_sp erroné'); |
$info['message']['lignes'] = $noms_erreur; |
} else { |
$info['resultat'] = true; |
615,32 → 143,6 |
return $info; |
} |
|
private function testerGroupeCultivarRang($noms) { |
$info = array('titre' => "cultivar_groupe -> rang >= {$this->manuel['rang_genre']}", |
'description' => "Si le champ cultivar_groupe n'est pas vide alors le rang du nom doit être supérieur ou égal à {$this->manuel['rang_genre']}.", |
'resultat' => false); |
|
// Réalisation du test |
$noms_erreur = array(); |
foreach ($noms as $nom) { |
if ($nom['cultivar_groupe'] != '') { |
if ($nom['rang'] < $this->manuel['rang_genre']) { |
$noms_erreur[] = array($nom['num_nom'], $nom['nom_complet'], $nom['rang']); |
} |
} |
} |
|
// Analyse des résultats |
if (count($noms_erreur) > 0) { |
$info['message']['entete'] = array('num_nom', 'nom_complet', 'rang erroné'); |
$info['message']['lignes'] = $noms_erreur; |
} else { |
$info['resultat'] = true; |
} |
|
return $info; |
} |
|
private function testerEpitheteInfraSpEspaces($noms) { |
$info = array('titre' => 'epithete_infra_sp -> espaces en trop', |
'description' => "Le champ epithete_infra_sp ne doit pas contenir d'espace avant ou aprés le nom.\n". |
685,7 → 187,7 |
if ($nom['epithete_infra_sp'] != '') { |
$mots = explode(' ', $nom['epithete_infra_sp']); |
foreach ($mots as $mot) { |
if (!(preg_match('/^[+x]$/', $mot) || $this->verifierTypeEpithete($mot)|| $this->verifierEpitheteSp($mot))) { |
if (!(preg_match('/^[+x]$/', $mot) || $this->verifierTypeEpithete($mot)|| $this->verifierEpithteSp($mot))) { |
$epithete_traite = $this->repererEspace($nom['epithete_infra_sp']); |
$noms_erreur[] = array($nom['num_nom'], $epithete_traite); |
} |
767,7 → 269,7 |
$noms_erreur = array(); |
foreach ($noms as $nom) { |
if ($nom['type_epithete'] != '') { |
if (!$this->verifierTypeEpithete($nom['type_epithete'])) { |
if (!preg_match('/^[a-z][-a-z]*[.]?$/', $nom['type_epithete'])) { |
$noms_erreur[] = array($nom['num_nom'], $nom['type_epithete']); |
} |
} |
1446,7 → 948,7 |
if ($nom['genre'] != '') { |
$mots = explode(' ', $nom['genre']); |
foreach ($mots as $mot) { |
if (!(preg_match('/^[+x]$/', $mot) || $this->verifierEpitheteGenre($mot))) { |
if (!(preg_match('/^[+x]$/', $mot) || preg_match('/^[A-ZÄËḦÏÖÜẄẌŸ][-a-zäëḧïöẗüẅẍÿ]+/', $mot))) { |
$nom_traite = $this->repererEspace($nom['genre']); |
$noms_erreur[] = array($nom['num_nom'], $nom_traite); |
} |
1604,8 → 1106,8 |
private function testerEpitheteSpSyntaxe($noms) { |
$info = array('titre' => 'epithete_sp -> syntaxe', |
'description' => "Le champ epithete_sp peut contenir :\n". |
" - un mot unique composé de lettres minuscules [a-z] incluant les caractères [ëï-]. \n". |
" Il commence par une lettre minuscule [a-zëï].\n". |
" - un mot unique composé de lettres minuscules avec ou sans tréma (¨) et de tirets (-). \n". |
" Il commence par une lettre minuscule (avec ou sans tréma).\n". |
" Il peut être précédé par le signe + ou la lettre x suivi d'un espace.\n". |
" - 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". |
" - une formule d'hybridité composée d'une série de noms d'espèce (au moins 2) séparés entre eux \n". |
1618,7 → 1120,7 |
if ($nom['epithete_sp'] != '') { |
$mots = explode(' ', $nom['epithete_sp']); |
foreach ($mots as $mot) { |
if (!(preg_match('/^[+x]$/', $mot) || $this->verifierEpitheteSp($mot))) { |
if (!(preg_match('/^[+x]$/', $mot) || $this->verifierEpithteSp($mot))) { |
$epithete_traite = $this->repererEspace($nom['epithete_sp']); |
$noms_erreur[] = array($nom['num_nom'], $epithete_traite); |
} |
1666,171 → 1168,18 |
//+--------------------------------------------------------------------------------------------------------------+// |
// MÉTHODES COMMUNES aux TESTS |
|
private function verifierBooleen($valeur) { |
$ok = true; |
if (!preg_match('/^1$/', $valeur)) { |
$ok = false; |
} |
return $ok; |
} |
|
private function verifierNombre($valeur) { |
$ok = true; |
if (!preg_match('/^[0-9]+$/', $valeur)) { |
$ok = false; |
} |
return $ok; |
} |
|
private function verifierNombreSuite($valeur) { |
$ok = true; |
if (!preg_match('/^(?:[0-9]+,)*[0-9]+$/', $valeur)) { |
$ok = false; |
} |
return $ok; |
} |
|
private function verifierTypeEpithete($type) { |
$ok = false; |
$rejetes = $this->manuel['type_epithete_rejetes']; |
if (preg_replace("/^(?:$rejetes)$/", '', $type) == '') { |
$ok = false; |
} else if (preg_match('/^[a-z][-a-z]*[.]?$/', $type)) { |
$ok = true; |
} |
return $ok; |
} |
|
private function verifierBiblioOrigine($intitule) { |
$ok = true; |
if (preg_match('/(?:^\s+|\s{2,}|\s+$)/', $intitule)) { |
$ok = false;// Contient des espaces en trop |
} else if (!preg_match('/^(?:in [^;]+[;]|)[^,]+?(?:[,][^:]+|)(?:[:].+|)$/', $intitule)) { |
if (!preg_match('/^[a-z][-a-z]*[.]?$/', $type)) { |
$ok = false; |
} else if (preg_match('/(?:(?:^|[,:])\s*(?:[:,]|$))/', $intitule)) { |
$ok = false;// Contient une mauvaise suite de caractères |
} |
return $ok; |
} |
|
private function verifierAnnee($annee) { |
$ok = true; |
if (!preg_match('/^[0-9]{4}$/', $annee)) { |
$ok = false; |
} else if ($annee < 1753) { |
$ok = false; |
} |
return $ok; |
} |
|
private function verifierAuteur($intitule) { |
$ok = true; |
$acceptes = $this->manuel['auteur_acceptes']; |
if (!preg_match("/^(?:$acceptes)$/", $intitule)) { |
if (preg_match('/(?:^\s+|\s{2,}|\s+$)/', $intitule)) { |
$ok = false;// Contient des espaces en trop |
} else { |
$mots_rejetes = $this->manuel['auteur_mots_rejetes']; |
$mots = explode(' ', $intitule); |
foreach ($mots as $position => $mot) { |
if (preg_match("/^(?:$mots_rejetes)$/i", $mot)) { |
$ok = false;// Mot rejeté |
} else if (preg_match("/^(?:(?:\p{L}|[.'\(\)-])+|[&])$/u", $mot)) { |
continue;// Mot de l'intitulé auteur |
} else { |
$ok = false; |
} |
} |
} |
} |
return $ok; |
} |
|
private function verifierNomCommercial($epithete) { |
private function verifierEpithteSp($epithete) { |
$ok = false; |
if (preg_match("/^[[:upper:][:punct:][:digit:][:space:]]+$/", $epithete)) { |
if (preg_match('/^[a-zäëḧïöẗüẅẍÿ][-a-zäëḧïöẗüẅẍÿ]+$/', $epithete)) { |
$ok = true; |
} |
return $ok; |
} |
|
private function verifierEpitheteCultivar($epithete) { |
$ok = true; |
$acceptes = $this->manuel['cultivar_acceptes']; |
if (!preg_match("/^(?:$acceptes)$/", $epithete)) { |
if (preg_match('/(?:^\s+|\s{2,}|\s+$)/', $epithete)) { |
$ok = false;// Contient des espaces en trop |
} else { |
$mots_rejetes = $this->manuel['cultivar_mots_rejetes']; |
$mots_mineurs = $this->manuel['mots_mineurs']; |
$mots = explode(' ', $epithete); |
foreach ($mots as $position => $mot) { |
if (preg_match("/^(?:$mots_rejetes)$/i", $mot)) { |
$ok = false;// Mot rejeté |
} else if ($position > 0 && preg_match("/^(?:$mots_mineurs)$/", $mot)) { |
continue;// Mot mineur en minuscule qui n'est pas en 1ère position |
} else { |
$mots_tiret = explode('-', $mot); |
foreach ($mots_tiret as $position_tiret => $mot_tiret) { |
if ($position_tiret > 0 && preg_match("/^(?:$mots_mineurs)$/", $mot_tiret)) { |
continue;// Mot-tiret mineur en minuscule qui n'est pas en 1ère position |
} else if (preg_match('/^[[:upper:]][[:lower:]]+$/', $mot_tiret)) { |
continue;//Mot (ou 'mot-tiret') avec lettre initiale majuscule |
} else if ($position_tiret == count($mots_tiret) && preg_match('/^[:upper:][:lower:]+[:punct:]?$/', $mot_tiret)) { |
continue;//Dernier mot (ou 'mot-tiret') avec lettre initiale majuscule, suivi d'un éventuel signe de ponctuation |
} else { |
$ok = false; |
} |
} |
} |
} |
} |
} |
return $ok; |
} |
|
private function verifierEpitheteGroupeCultivar($epithete) { |
$ok = true; |
$acceptes = $this->manuel['cultivar_gp_acceptes']; |
if (!preg_match("/^(?:$acceptes)$/", $epithete)) { |
if (preg_match('/(?:^\s+|\s{2,}|\s+$)/', $epithete)) { |
$ok = false;// Contient des espaces en trop |
} else { |
$mots_acceptes = $this->manuel['cultivar_gp_mots_acceptes']; |
$mots_rejetes = $this->manuel['cultivar_gp_mots_rejetes']; |
$mots_mineurs = $this->manuel['mots_mineurs']; |
$mots = explode(' ', $epithete); |
foreach ($mots as $position => $mot) { |
if (preg_match("/^(?:$mots_acceptes)$/i", $mot)) { |
continue;// Mot accepté |
} else if (preg_match("/^(?:$mots_rejetes)$/i", $mot)) { |
$ok = false;// Mot rejeté |
} else if ($position > 0 && preg_match("/^(?:$mots_mineurs)$/", $mot)) { |
continue;// Mot mineur en minuscule qui n'est pas en 1ère position |
} else { |
$mots_tiret = explode('-', $mot); |
foreach ($mots_tiret as $position_tiret => $mot_tiret) { |
if ($position_tiret > 0 && preg_match("/^(?:$mots_mineurs)$/", $mot_tiret)) { |
continue;// Mot-tiret mineur en minuscule qui n'est pas en 1ère position dans le mot |
} else if (preg_match('/^[[:upper:]][[:lower:]]+$/', $mot_tiret)) { |
continue;// Mot (ou 'mot-tiret') avec lettre initiale majuscule |
} else if ($position_tiret == count($mots_tiret) && preg_match('/^[:upper:][:lower:]+[:punct:]?$/', $mot_tiret)) { |
continue;// Dernier mot (ou 'mot-tiret') avec lettre initiale majuscule, suivi d'un éventuel signe de ponctuation |
} else { |
$ok = false; |
} |
} |
} |
} |
} |
} |
return $ok; |
} |
|
private function verifierEpitheteSp($epithete) { |
$ok = false; |
if (preg_match('/^[a-zëï][-a-zëï]+$/', $epithete)) { |
$ok = true; |
} else if (preg_match('/^sp\.(?:[A-Z]|[1-9][0-9]*)$/', $epithete)) { |
$ok = true; |
} |
1837,14 → 1186,6 |
return $ok; |
} |
|
private function verifierEpitheteGenre($epithete) { |
$ok = false; |
if (preg_match('/^[A-ZËÏ](?:[-a-zëï]+|[a-zëï]+-[A-ZËÏ][a-zëï]+)$/', $epithete)) { |
$ok = true; |
} |
return $ok; |
} |
|
private function formaterStyleNomGenre($genre) { |
$genre_fmt = ''; |
if (preg_match('/^\s*([x+])\s+(.+)$/i', $genre, $match)) { |
1897,7 → 1238,7 |
return $nom_cultivar; |
} |
|
private function classerNomsParNumNom($noms) { |
private function classerNoms($noms) { |
$noms_classes = array(); |
foreach ($noms as $nom) { |
$noms_classes[$nom['num_nom']] = $nom; |
1904,17 → 1245,5 |
} |
return $noms_classes; |
} |
|
private function classerNomsParNomComplet($noms) { |
$noms_classes = array(); |
foreach ($noms as $nom) { |
if (!isset($noms_classes[$nom['nom_complet']])) { |
$noms_classes[$nom['nom_complet']] = 1; |
} else { |
$noms_classes[$nom['nom_complet']]++; |
} |
} |
return $noms_classes; |
} |
} |
?> |