24,6 → 24,7 |
private $traitement = null; |
|
private $manuel = null; |
private $tests = null; |
private $colonnes = null; |
private $analyses = null; |
private $noms = null; |
35,6 → 36,7 |
|
public function executer() { |
$this->manuel = parse_ini_file(Config::get('chemin_appli').DS.'..'.DS.'configurations'.DS.'referentiel_v4.1.ini'); |
$this->tests = parse_ini_file($this->getModuleChemin().DS.'configurations'.DS.'tests.ini', true); |
|
$this->resultatDao = new ResultatDao(); |
$this->traitementDao = new TraitementDao(); |
214,286 → 216,256 |
//+--------------------------------------------------------------------------------------------------------------+// |
// TESTS |
|
private function testerStatutCultureSyntaxe() { |
$info = array('nom' => 'statut_culture -> syntaxe', |
'description' => "Le champ statut_culture peut contenir :\n". |
" - le symbole tiret «-» précédant une autre information non référencée...\n". |
" - une première lettre en majuscule indiquant le code standard attribué à ce taxon,\n". |
" - éventuellement suivie d'un tiret puis d'une deuxième lettre en majuscule indiquant ". |
"un code de présence spécifique au référentiel.", |
'resultat' => false); |
/** |
* Test #01 |
*/ |
private function testerNombreDeChamps($colonnes) { |
$info = $this->getInfosTest(1); |
|
// Réalisation du test |
$noms_erreur = array(); |
foreach ($this->noms as &$nom) { |
if ($nom['statut_culture'] != '') { |
if (!$this->verifierStatutCulture($nom['statut_culture'])) { |
$noms_erreur[] = array($nom['num_nom'], $nom['statut_culture']); |
} |
} |
} |
|
// Analyse des résultats |
if (count($noms_erreur) > 0) { |
$info['message']['entete'] = array('num_nom', 'statut_culture erroné'); |
$info['message']['lignes'] = $noms_erreur; |
} else { |
$nbre_colonnes = count($colonnes); |
$info['message'] = $nbre_colonnes; |
if ($nbre_colonnes >= 35) { |
$info['resultat'] = true; |
} |
$noms_erreur = null; |
|
$this->traiterResultatTest($info); |
return ($info['resultat'] ? '1' : '0'); |
} |
|
private function testerStatutIntroductionSyntaxe() { |
$info = array('nom' => 'statut_introduction -> syntaxe', |
'description' => "Le champ statut_introduction peut contenir :\n". |
" - le symbole tiret «-» précédant une autre information non référencée...\n". |
" - une première lettre en majuscule indiquant le code standard attribué à ce taxon,\n". |
" - éventuellement suivie d'un tiret puis d'une deuxième lettre en majuscule indiquant ". |
"un code de présence spécifique au référentiel.", |
'resultat' => false); |
/** |
* Test #02 |
*/ |
private function testerNomDesChamps($colonnes) { |
$info = $this->getInfosTest(2); |
|
// Réalisation du test |
$noms_erreur = array(); |
foreach ($this->noms as &$nom) { |
if ($nom['statut_introduction'] != '') { |
if (!$this->verifierStatutIntroduction($nom['statut_introduction'])) { |
$noms_erreur[] = array($nom['num_nom'], $nom['statut_introduction']); |
$champs_attendus = explode(',', $this->manuel['champs']); |
$champs_presents = array(); |
foreach ($colonnes as $colonne) { |
$champs_presents[$colonne['Field']] = $colonne; |
} |
|
$ok = true; |
$champs_manquant = array(); |
foreach ($champs_attendus as $champ_attendu) { |
if (!isset($champs_presents[$champ_attendu])) { |
$champs_manquant[] = $champ_attendu; |
$ok = false; |
} |
} |
|
// Analyse des résultats |
if (count($noms_erreur) > 0) { |
$info['message']['entete'] = array('num_nom', 'statut_introduction erroné'); |
$info['message']['lignes'] = $noms_erreur; |
} else { |
$info['resultat'] = true; |
$info['resultat'] = $ok; |
if (!$ok) { |
$info['message'] = sprintf($info['message'], implode(', ', $champs_manquant)); |
} |
$noms_erreur = null; |
|
$this->traiterResultatTest($info); |
return ($info['resultat'] ? '1' : '0'); |
} |
|
private function testerStatutOrigineSyntaxe() { |
$info = array('nom' => 'statut_origine -> syntaxe', |
'description' => "Le champ statut_origine peut contenir :\n". |
" - le symbole tiret «-» précédant une autre information non référencée...\n". |
" - une première lettre en majuscule indiquant le code standard attribué à ce taxon.\n". |
" - éventuellement suivie d'un tiret puis d'une deuxième lettre en majuscule indiquant ". |
"un code de présence spécifique au référentiel.", |
'resultat' => false); |
/** |
* Test #03 |
*/ |
private function testerTypeDesChamps($colonnes) { |
$info = $this->getInfosTest(3); |
|
// Réalisation du test |
$noms_erreur = array(); |
foreach ($this->noms as &$nom) { |
if ($nom['statut_origine'] != '') { |
if (!$this->verifierStatutOrigine($nom['statut_origine'])) { |
$noms_erreur[] = array($nom['num_nom'], $nom['statut_origine']); |
$champs_attendus = explode(',', $this->manuel['champs_type']); |
$champs_presents = array(); |
foreach ($colonnes as $colonne) { |
$champs_presents[$colonne['Field']] = $colonne['Type']; |
} |
|
// Recercherche des erreurs |
$champs_erreur = array(); |
foreach ($champs_attendus as $champ_attendu) { |
list($champ_attendu_nom, $champ_attendu_type_taille) = explode('=', trim($champ_attendu)); |
list($champ_attendu_type, $champ_attendu_taille) = explode('|', trim($champ_attendu_type_taille)); |
|
if (isset($champs_presents[$champ_attendu_nom])) { |
$champs_present_type = $champs_presents[$champ_attendu_nom]; |
|
if (($champ_attendu_type == 'VARCHAR' && strstr($champs_present_type, 'varchar') === false) |
|| ($champ_attendu_type == 'TEXT' && strstr($champs_present_type, 'text') === false) |
|| ($champ_attendu_type == 'INT' && strstr($champs_present_type, 'int') === false) |
|| ($champ_attendu_type == 'BOOL' && preg_match('/(?:bool|boolean|tinyint\(1\))/i', $champs_present_type) === false)) { |
$champs_erreur[] = $champ_attendu." vaut ".$champs_present_type; |
} |
} |
} |
|
// Analyse des résultats |
if (count($noms_erreur) > 0) { |
$info['message']['entete'] = array('num_nom', 'statut_origine erroné'); |
$info['message']['lignes'] = $noms_erreur; |
if (count($champs_erreur) > 0) { |
$info['message'] = sprintf($info['message'], implode(', ', $champs_erreur)); |
} else { |
$info['resultat'] = true; |
} |
$noms_erreur = null; |
|
$this->traiterResultatTest($info); |
return ($info['resultat'] ? '1' : '0'); |
} |
|
private function testerPresenceSyntaxe() { |
$info = array('nom' => 'presence -> syntaxe', |
'description' => "Le champ presence contient soit :\n". |
" - le symbole tiret «-» précédant une autre information non référencée...\n". |
" - une première lettre en majuscule indiquant le code standard attribué à ce taxon,\n". |
" - éventuellement suivie d'un tiret puis d'une deuxième lettre en majuscule indiquant ". |
"un code de présence spécifique au référentiel.", |
'resultat' => false); |
/** |
* Test #04 |
*/ |
private function testerNumNomClePrimaire($colonnes) { |
$info = $this->getInfosTest(4); |
|
// Réalisation du test |
$noms_erreur = array(); |
foreach ($this->noms as &$nom) { |
if ($nom['presence'] != '') { |
if (!$this->verifierPresence($nom['presence'])) { |
$noms_erreur[] = array($nom['num_nom'], $nom['presence']); |
foreach ($colonnes as $colonne) { |
if ($colonne['Field'] == 'num_nom' && $colonne['Key'] == 'PRI') { |
$info['resultat'] = true; |
} |
} |
|
$this->traiterResultatTest($info); |
return ($info['resultat'] ? '1' : '0'); |
} |
|
// Analyse des résultats |
if (count($noms_erreur) > 0) { |
$info['message']['entete'] = array('num_nom', 'presence erroné'); |
$info['message']['lignes'] = $noms_erreur; |
} else { |
$info['resultat'] = true; |
|
/** |
* Test #05 |
*/ |
private function testerTailleDesChamps($colonnes, $analyses) { |
$info = $this->getInfosTest(5); |
|
$tailles_champs_maxi = array(); |
foreach ($colonnes as $colonne) { |
if (preg_match('/^varchar\(([0-9]+)\)$/', $colonne['Type'], $match)) { |
$tailles_champs_maxi[$colonne['Field']] = $match[1]; |
} |
$noms_erreur = null; |
} |
|
$this->traiterResultatTest($info); |
$tailles_trouvees = array(); |
foreach ($analyses as $analyse) { |
if (preg_match('/\.([^.]+)$/', $analyse['Field_name'], $match)) { |
$tailles_trouvees[$match[1]] = $analyse['Max_length']; |
} |
} |
|
private function testerHybrideParent02Existence() { |
$info = array('nom' => 'hybride_parent_02 -> existence', |
'description' => "Si le champ hybride_parent_02 contient un nombre alors il doit correspondre à une valeur ". |
"du champ num_nom.", |
'resultat' => false); |
|
// Réalisation du test |
$noms_erreur = array(); |
foreach ($this->noms as &$nom) { |
if ($nom['hybride_parent_02'] != '') { |
if (!isset($this->noms[$nom['hybride_parent_02']]) && $nom['hybride_parent_02'] != '0') { |
$noms_erreur[] = array($nom['num_nom'], $this->repererEspace($nom['hybride_parent_02'])); |
$champs_erreur = array(); |
$champs_attendus = explode(',', $this->manuel['champs']); |
foreach ($champs_attendus as $champ_attendu) { |
if (isset($tailles_champs_maxi[$champ_attendu]) && isset($tailles_trouvees[$champ_attendu])) { |
if ($tailles_champs_maxi[$champ_attendu] == $tailles_trouvees[$champ_attendu]) { |
$champs_erreur[] = $champ_attendu; |
} |
} |
} |
|
// Analyse des résultats |
if (count($noms_erreur) > 0) { |
$info['message']['entete'] = array('num_nom', 'hybride_parent_02 introuvable'); |
$info['message']['lignes'] = $noms_erreur; |
if (count($champs_erreur) > 0) { |
$info['message'] = sprintf($info['message'], implode(', ', $champs_erreur)); |
} else { |
$info['resultat'] = true; |
} |
$noms_erreur = null; |
|
$this->traiterResultatTest($info); |
} |
|
private function testerHybrideParent02Syntaxe() { |
$info = array('nom' => 'hybride_parent_02 -> syntaxe', |
'description' => "Le champ hybride_parent_02 contient soit :\n". |
" - une valeur vide,\n". |
" - un nombre.", |
'resultat' => false); |
/** |
* Test #06 |
*/ |
private function testerNumNomSuperieurAZero() { |
$info = $this->getInfosTest(6); |
|
// Réalisation du test |
$noms_erreur = array(); |
foreach ($this->noms as &$nom) { |
if ($nom['hybride_parent_02'] != '') { |
if (!$this->verifierNombre($nom['hybride_parent_02'])) { |
$noms_erreur[] = array($nom['num_nom'], $this->repererEspace($nom['hybride_parent_02'])); |
if ($nom['num_nom'] <= 0) { |
$noms_erreur[] = $nom['num_nom']; |
} |
} |
} |
|
// Analyse des résultats |
if (count($noms_erreur) > 0) { |
$info['message']['entete'] = array('num_nom', 'hybride_parent_02 erroné'); |
$info['message']['lignes'] = $noms_erreur; |
$info['message'] = sprintf($info['message'], count($noms_erreur)); |
} else { |
$info['resultat'] = true; |
} |
$noms_erreur = null; |
|
$this->traiterResultatTest($info); |
} |
|
/** |
* Test #07 |
*/ |
private function testerNumNomRetenuSuperieurAZero() { |
$info = $this->getInfosTest(7); |
|
private function testerHybrideParent01Existence() { |
$info = array('nom' => 'hybride_parent_01 -> existence', |
'description' => "Si le champ hybride_parent_01 contient un nombre alors il doit correspondre à une valeur ". |
"du champ num_nom.", |
'resultat' => false); |
|
// Réalisation du test |
$noms_erreur = array(); |
foreach ($this->noms as &$nom) { |
if ($nom['hybride_parent_01'] != '' && $nom['hybride_parent_01'] != '0') { |
if (!isset($this->noms[$nom['hybride_parent_01']])) { |
$noms_erreur[] = array($nom['num_nom'], $this->repererEspace($nom['hybride_parent_01'])); |
if ($nom['num_nom_retenu'] != '' && $nom['num_nom_retenu'] <= 0) { |
$noms_erreur[] = $nom['num_nom']; |
} |
} |
} |
|
// Analyse des résultats |
if (count($noms_erreur) > 0) { |
$info['message']['entete'] = array('num_nom', 'hybride_parent_01 introuvable'); |
$info['message']['lignes'] = $noms_erreur; |
$info['message'] = sprintf($info['message'], count($noms_erreur), implode(', ', $noms_erreur)); |
} else { |
$info['resultat'] = true; |
} |
$noms_erreur = null; |
|
$this->traiterResultatTest($info); |
} |
|
private function testerHybrideParent01Syntaxe() { |
$info = array('nom' => 'hybride_parent_01 -> syntaxe', |
'description' => "Le champ hybride_parent_01 contient soit :\n". |
" - une valeur vide,\n". |
" - un nombre.", |
'resultat' => false); |
/** |
* Test #08 |
*/ |
private function testerNumTaxSupEgalZeroUnique() { |
$info = $this->getInfosTest(8); |
|
// Réalisation du test |
$noms_erreur = array(); |
foreach ($this->noms as &$nom) { |
if ($nom['hybride_parent_01'] != '') { |
if (!$this->verifierNombre($nom['hybride_parent_01'])) { |
$noms_erreur[] = array($nom['num_nom'], $this->repererEspace($nom['hybride_parent_01'])); |
if (preg_match('/^0$/', $nom['num_tax_sup'])) { |
$noms_erreur[] = $nom['num_nom']; |
} |
} |
} |
|
// Analyse des résultats |
if (count($noms_erreur) > 0) { |
$info['message']['entete'] = array('num_nom', 'hybride_parent_01 erroné'); |
$info['message']['lignes'] = $noms_erreur; |
if (count($noms_erreur) > 1) { |
$info['message'] = sprintf($info['message'], count($noms_erreur), implode(', ', $noms_erreur)); |
} else { |
$info['resultat'] = true; |
} |
$noms_erreur = null; |
|
$this->traiterResultatTest($info); |
} |
|
private function testerSynonymeOrthographiqueExistence() { |
$info = array('nom' => 'synonyme_orthographique -> existence', |
'description' => "Si le champ synonyme_orthographique contient un nombre alors il doit correspondre ". |
"à une valeur du champ num_nom.", |
'resultat' => false); |
/** |
* Test #09 |
*/ |
private function testerTaxSupPourTaxon() { |
$info = $this->getInfosTest(9); |
|
// Réalisation du test |
$noms_erreur = array(); |
foreach ($this->noms as &$nom) { |
if ($nom['synonyme_orthographique'] != '') { |
if (!isset($this->noms[$nom['synonyme_orthographique']])) { |
$noms_erreur[] = array($nom['num_nom'], $nom['synonyme_orthographique']); |
if ($nom['num_nom_retenu'] != $nom['num_nom'] && $nom['num_tax_sup'] != '') { |
$noms_erreur[] = $nom['num_nom']; |
} |
} |
} |
|
// Analyse des résultats |
if (count($noms_erreur) > 0) { |
$info['message']['entete'] = array('num_nom', 'synonyme_orthographique introuvable'); |
$info['message']['lignes'] = $noms_erreur; |
$info['message'] = sprintf($info['message'], count($noms_erreur), implode(', ', $noms_erreur)); |
} else { |
$info['resultat'] = true; |
} |
$noms_erreur = null; |
|
$this->traiterResultatTest($info); |
} |
|
private function testerSynonymeOrthographiqueSyntaxe() { |
$info = array('nom' => 'synonyme_orthographique -> syntaxe', |
'description' => "Le champ synonyme_orthographique contient soit :\n". |
" - une valeur vide,\n". |
" - un nombre.", |
'resultat' => false); |
/** |
* Test #10 |
*/ |
private function testerExitenceTaxonSuperieur() { |
$info = $this->getInfosTest(10); |
|
// Réalisation du test |
$noms_erreur = array(); |
foreach ($this->noms as $nom) { |
if ($nom['synonyme_orthographique'] != '') { |
if (!$this->verifierNombre($nom['synonyme_orthographique'])) { |
$noms_erreur[] = array($nom['num_nom'], $nom['synonyme_orthographique']); |
foreach ($this->noms as &$nom) { |
if ($nom['num_nom_retenu'] == $nom['num_nom']) { |
if ($nom['num_tax_sup'] != 0 && !isset($this->noms[$nom['num_tax_sup']])) { |
$noms_erreur[] = $nom['num_nom']; |
} |
} |
} |
500,149 → 472,152 |
|
// Analyse des résultats |
if (count($noms_erreur) > 0) { |
$info['message']['entete'] = array('num_nom', 'synonyme_orthographique erroné'); |
$info['message']['lignes'] = $noms_erreur; |
$info['message'] = sprintf($info['message'], count($noms_erreur), implode(', ', $noms_erreur)); |
} else { |
$info['resultat'] = true; |
} |
$noms_erreur = null; |
|
$this->traiterResultatTest($info); |
} |
|
private function testerSynonymeMalAppliqueSyntaxe() { |
$info = array('nom' => 'synonyme_mal_applique -> syntaxe', |
'description' => "Le champ synonyme_mal_applique contient soit :\n". |
" - une valeur vide,\n". |
" - le chiffre 1.", |
'resultat' => false); |
/** |
* Test #11 |
*/ |
private function testerClassificationRang() { |
$info = $this->getInfosTest(11); |
|
// Réalisation du test |
$noms_erreur = array(); |
foreach ($this->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']); |
if ($nom['num_nom_retenu'] == $nom['num_nom']) { |
if (isset($this->noms[$nom['num_tax_sup']])) { |
$nom_sup = $this->noms[$nom['num_tax_sup']]; |
if ($nom_sup['rang'] >= $nom['rang']) { |
// Prise en compte de l'exception des clades |
if (! ($nom_sup['rang'] == 70 && $nom['rang'] == 70)) { |
$noms_erreur[] = $nom['num_nom']; |
} |
} |
} |
} |
} |
|
// Analyse des résultats |
if (count($noms_erreur) > 0) { |
$info['message']['entete'] = array('num_nom', 'synonyme_mal_applique erroné'); |
$info['message']['lignes'] = $noms_erreur; |
$info['message'] = sprintf($info['message'], count($noms_erreur), implode(', ', $noms_erreur)); |
} else { |
$info['resultat'] = true; |
} |
$noms_erreur = null; |
|
$this->traiterResultatTest($info); |
} |
|
/** |
* Test #12 |
*/ |
private function testerClassification() { |
$info = $this->getInfosTest(12); |
|
private function testerSynonymeDouteuxSyntaxe() { |
$info = array('nom' => '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(); |
$this->noms_ok = array(); |
foreach ($this->noms as &$nom) { |
if ($nom['synonyme_douteux'] != '') { |
if (!$this->verifierBooleen($nom['synonyme_douteux'])) { |
$noms_erreur[] = array($nom['num_nom'], $nom['synonyme_douteux']); |
if ($nom['num_nom_retenu'] == $nom['num_nom']) { |
if (isset($this->noms_ok[$nom['num_tax_sup']])) { |
$this->noms_ok[$nom['num_nom']] = true; |
} else { |
$this->detection_boucle_infini = array(); |
$classif_ok = $this->remonterClassif($nom); |
unset($this->detection_boucle_infini); |
|
if ($classif_ok === false) { |
$noms_erreur[] = $nom['num_nom']; |
} else { |
$this->noms_ok[$nom['num_nom']] = $classif_ok; |
} |
} |
} |
} |
unset($this->noms_ok); |
|
// Analyse des résultats |
if (count($noms_erreur) > 0) { |
$info['message']['entete'] = array('num_nom', 'synonyme_douteux erroné'); |
$info['message']['lignes'] = $noms_erreur; |
$info['message'] = sprintf($info['message'], count($noms_erreur), implode(', ', $noms_erreur)); |
} else { |
$info['resultat'] = true; |
} |
$noms_erreur = null; |
|
$this->traiterResultatTest($info); |
} |
|
private function testerSynonymeDouteuxNumNomRetenu() { |
$info = array('nom' => 'synonyme_douteux -> présence num_nom_retenu', |
'description' => "Si le nom est un synonyme douteux, le champs num_nom_retenu doit être vide.", |
'resultat' => false); |
|
// Réalisation du test |
$noms_erreur = array(); |
foreach ($this->noms as &$nom) { |
if ($nom['synonyme_douteux'] == 1 && $nom['num_nom_retenu'] != ' ') { |
$noms_erreur[] = array($nom['num_nom'], $nom['synonyme_douteux'], $nom['num_nom_retenu']); |
private function remonterClassif(&$nom) { |
$this->detection_boucle_infini[$nom['num_nom']] = true; |
if (preg_match('/^[0-9]*$/', $nom['num_tax_sup'])) { |
if (isset($this->noms_ok[$nom['num_tax_sup']])) { |
$this->noms_ok[$nom['num_nom']] = true; |
return true; |
} else if (!isset($this->noms[$nom['num_tax_sup']]) && $nom['num_tax_sup'] == '0') { |
$this->noms_ok[$nom['num_nom']] = true; |
return true; |
} else if (!isset($this->noms[$nom['num_tax_sup']]) && $nom['num_tax_sup'] != '0') { |
return false; |
} else if (isset($this->detection_boucle_infini[$nom['num_tax_sup']])) { |
return false; |
} else { |
$retour = $this->remonterClassif($this->noms[$nom['num_tax_sup']]); |
if ($retour === true) { |
$this->noms_ok[$nom['num_tax_sup']] = true; |
} |
return $retour; |
} |
|
// Analyse des résultats |
if (count($noms_erreur) > 0) { |
$info['message']['entete'] = array('num_nom', 'synonyme_douteux', 'num_nom_retenu'); |
$info['message']['lignes'] = $noms_erreur; |
} else { |
$info['resultat'] = true; |
return false; |
} |
$noms_erreur = null; |
$this->traiterResultatTest($info); |
} |
|
/** |
* Test #13 |
*/ |
private function testerRang() { |
$info = $this->getInfosTest(13); |
|
private function testerSynonymeProparteExistence() { |
$info = array('nom' => '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); |
$rangs = array_flip(explode(',', $this->manuel['rangs'])); |
|
// Réalisation du test |
$noms_erreur = array(); |
foreach ($this->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($this->noms[$num_nom])) { |
$num_nom_en_erreur[] = $num_nom; |
if (!isset($rangs[$nom['rang']])) { |
$noms_erreur[] = $nom['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; |
$info['message'] = sprintf($info['message'], count($noms_erreur), implode(', ', $noms_erreur)); |
} else { |
$info['resultat'] = true; |
} |
$noms_erreur = null; |
|
$this->traiterResultatTest($info); |
} |
|
private function testerSynonymeProparteSyntaxe() { |
$info = array('nom' => 'synonyme_proparte -> syntaxe', |
'description' => "Le champ synonyme_proparte contient soit :\n". |
" - une valeur vide,\n". |
" - un nombre,\n". |
" - une suite de nombres séparés par des virgules.", |
'resultat' => false); |
/** |
* Test #14 |
*/ |
private function testerNomCompletSupraGenerique() { |
$info = $this->getInfosTest(14); |
$info['description'] = sprintf($info['description'], $this->manuel['rang_genre']); |
|
// Réalisation du test |
$noms_erreur = array(); |
foreach ($this->noms as &$nom) { |
if ($nom['synonyme_proparte'] != '') { |
if (!$this->verifierNombreSuite($nom['synonyme_proparte'])) { |
$noms_erreur[] = array($nom['num_nom'], $nom['synonyme_proparte']); |
if ($nom['rang'] < $this->manuel['rang_genre']) { |
$suffixe_plte_cultivee = $this->construireSuffixeNomPltCultivee($nom); |
$nom_sci_ideal = $this->formaterStyleNomGenre($nom['nom_supra_generique']); |
$nom_sci_ideal .= ($suffixe_plte_cultivee != '' ? ' '.$suffixe_plte_cultivee : ''); |
if ($nom['nom_sci'] != $nom_sci_ideal) { |
$nom_sci_traite = $this->repererEspace($nom['nom_sci']); |
$noms_erreur[] = array($nom['num_nom'], $nom_sci_traite, $nom_sci_ideal); |
} |
} |
} |
649,28 → 624,32 |
|
// Analyse des résultats |
if (count($noms_erreur) > 0) { |
$info['message']['entete'] = array('num_nom', 'synonyme_proparte erroné'); |
$info['message']['entete'] = array('num_nom', 'nom_sci', 'nom_sci corrigé'); |
$info['message']['lignes'] = $noms_erreur; |
} else { |
$info['resultat'] = true; |
} |
$noms_erreur = null; |
|
$this->traiterResultatTest($info); |
} |
|
private function testerBasionymeExistence() { |
$info = array('nom' => 'basionyme -> existence', |
'description' => "Si le champ basionyme contient un nombre alors il doit correspondre à une valeur du champ ". |
"num_nom.", |
'resultat' => false); |
/** |
* Test #15 |
*/ |
private function testerNomCompletGenre() { |
$info = $this->getInfosTest(15); |
$info['description'] = sprintf($info['description'], $this->manuel['rang_genre']); |
|
// Réalisation du test |
$noms_erreur = array(); |
foreach ($this->noms as &$nom) { |
if ($nom['basionyme'] != '') { |
if (!isset($this->noms[$nom['basionyme']])) { |
$noms_erreur[] = array($nom['num_nom'], $nom['basionyme']); |
if ($nom['rang'] == $this->manuel['rang_genre']) { |
$suffixe_plte_cultivee = $this->construireSuffixeNomPltCultivee($nom); |
$nom_sci_ideal = $this->formaterStyleNomGenre($nom['genre']); |
$nom_sci_ideal .= ($suffixe_plte_cultivee != '' ? ' '.$suffixe_plte_cultivee : ''); |
if ($nom['nom_sci'] != $nom_sci_ideal) { |
$nom_sci_traite = $this->repererEspace($nom['nom_sci']); |
$noms_erreur[] = array($nom['num_nom'], $nom_sci_traite, $nom_sci_ideal); |
} |
} |
} |
677,36 → 656,48 |
|
// Analyse des résultats |
if (count($noms_erreur) > 0) { |
$info['message']['entete'] = array('num_nom', 'basionyme introuvable'); |
$info['message']['entete'] = array('num_nom', 'nom_sci', 'nom_sci corrigé'); |
$info['message']['lignes'] = $noms_erreur; |
} else { |
$info['resultat'] = true; |
} |
$noms_erreur = null; |
|
$this->traiterResultatTest($info); |
} |
|
private function testerBasionymeSyntaxe() { |
$info = array('nom' => 'basionyme -> syntaxe', |
'description' => "Le champ basionyme contient :\n". |
" - une valeur vide,\n". |
" - un nombre.", |
'resultat' => false); |
/** |
* Test #16 |
*/ |
private function testerNomCompletInfraGenre() { |
$info = $this->getInfosTest(16); |
$info['description'] = sprintf($info['description'], $this->manuel['rang_genre'], $this->manuel['rang_sp']); |
|
// Réalisation du test |
$noms_erreur = array(); |
foreach ($this->noms as &$nom) { |
if ($nom['basionyme'] != '') { |
if (!$this->verifierNombre($nom['basionyme'])) { |
$noms_erreur[] = array($nom['num_nom'], $nom['basionyme']); |
if ($nom['rang'] > $this->manuel['rang_genre'] && $nom['rang'] < $this->manuel['rang_sp']) { |
$suffixe_plte_cultivee = $this->construireSuffixeNomPltCultivee($nom); |
$nom_sci_ideal = ''; |
if ($nom['type_epithete'] == 'agg.') { |
$nom_sci_ideal = $this->formaterStyleNomGenre($nom['genre']); |
$nom_sci_ideal .= ' '.$this->formaterStyleNomGenre($nom['epithete_infra_generique']); |
$nom_sci_ideal .= ' '.$nom['type_epithete']; |
} else { |
$nom_sci_ideal = $this->formaterStyleNomGenre($nom['genre']); |
$nom_sci_ideal .= ' '.$nom['type_epithete']; |
$nom_sci_ideal .= ' '.$this->formaterStyleNomGenre($nom['epithete_infra_generique']); |
} |
$nom_sci_ideal .= ($suffixe_plte_cultivee != '' ? ' '.$suffixe_plte_cultivee : ''); |
if ($nom['nom_sci'] != $nom_sci_ideal) { |
$nom_sci_traite = $this->repererEspace($nom['nom_sci']); |
$noms_erreur[] = array($nom['num_nom'], $nom_sci_traite, $nom_sci_ideal); |
} |
} |
} |
|
// Analyse des résultats |
if (count($noms_erreur) > 0) { |
$info['message']['entete'] = array('num_nom', 'basionyme erroné'); |
$info['message']['entete'] = array('num_nom', 'nom_sci', 'nom_sci corrigé'); |
$info['message']['lignes'] = $noms_erreur; |
} else { |
$info['resultat'] = true; |
716,28 → 707,31 |
$this->traiterResultatTest($info); |
} |
|
private function testerHomonymieExistence() { |
$info = array('nom' => 'homonyme -> existence', |
'description' => "Si le champ homonyme contient «1» alors plusieurs noms doivent posséder la même valeur ". |
"dans le champ nom_sci.", |
'resultat' => false); |
/** |
* Test #17 |
*/ |
private function testerNomCompletEspece() { |
$info = $this->getInfosTest(17); |
$info['description'] = sprintf($info['description'], $this->manuel['rang_sp']); |
|
$noms_homonymie = $this->classerNomsParNomComplet(); |
|
// Réalisation du test |
$noms_erreur = array(); |
foreach ($this->noms as &$nom) { |
if ($nom['homonyme'] != '0' && $nom['homonyme'] != '') { |
if ($noms_homonymie[$nom['nom_sci']] <= 1) { |
$noms_erreur[] = array($nom['num_nom'], $nom['nom_sci']); |
if ($nom['rang'] == $this->manuel['rang_sp']) { |
$suffixe_plte_cultivee = $this->construireSuffixeNomPltCultivee($nom); |
$nom_sci_ideal = $this->formaterStyleNomGenre($nom['genre']); |
$nom_sci_ideal .= ' '.strtolower($nom['epithete_sp']); |
$nom_sci_ideal .= ($suffixe_plte_cultivee != '' ? ' '.$suffixe_plte_cultivee : ''); |
if ($nom['nom_sci'] != $nom_sci_ideal) { |
$nom_sci_traite = $this->repererEspace($nom['nom_sci']); |
$noms_erreur[] = array($nom['num_nom'], $nom_sci_traite, $nom_sci_ideal); |
} |
} |
} |
$noms_homonymie = null; |
|
// Analyse des résultats |
if (count($noms_erreur) > 0) { |
$info['message']['entete'] = array('num_nom', 'homonyme introuvable'); |
$info['message']['entete'] = array('num_nom', 'nom_sci', 'nom_sci corrigé'); |
$info['message']['lignes'] = $noms_erreur; |
} else { |
$info['resultat'] = true; |
747,19 → 741,26 |
$this->traiterResultatTest($info); |
} |
|
private function testerHomonymieSyntaxe() { |
$info = array('nom' => 'homonyme -> syntaxe', |
'description' => "Le champ homonyme contient :\n". |
" - une valeur vide,\n". |
" - le chiffre 1.", |
'resultat' => false); |
/** |
* Test #18 |
*/ |
private function testerNomCompletInfraSpecifique() { |
$info = $this->getInfosTest(18); |
$info['description'] = sprintf($info['description'], $this->manuel['rang_sp']); |
|
// Réalisation du test |
$noms_erreur = array(); |
foreach ($this->noms as &$nom) { |
if ($nom['homonyme'] != '') { |
if (!$this->verifierBooleen($nom['homonyme'])) { |
$noms_erreur[] = array($nom['num_nom'], $nom['homonyme']); |
if ($nom['rang'] > $this->manuel['rang_sp']) { |
$suffixe_plte_cultivee = $this->construireSuffixeNomPltCultivee($nom); |
$nom_sci_ideal = $this->formaterStyleNomGenre($nom['genre']); |
$nom_sci_ideal .= ' '.strtolower($nom['epithete_sp']); |
$nom_sci_ideal .= ' '.strtolower($nom['type_epithete']); |
$nom_sci_ideal .= ' '.strtolower($nom['epithete_infra_sp']); |
$nom_sci_ideal .= ($suffixe_plte_cultivee != '' ? ' '.$suffixe_plte_cultivee : ''); |
if ($nom['nom_sci'] != $nom_sci_ideal) { |
$nom_sci_traite = $this->repererEspace($nom['nom_sci']); |
$noms_erreur[] = array($nom['num_nom'], $nom_sci_traite, $nom_sci_ideal); |
} |
} |
} |
766,7 → 767,7 |
|
// Analyse des résultats |
if (count($noms_erreur) > 0) { |
$info['message']['entete'] = array('num_nom', 'homonyme erroné'); |
$info['message']['entete'] = array('num_nom', 'nom_sci', 'nom_sci corrigé'); |
$info['message']['lignes'] = $noms_erreur; |
} else { |
$info['resultat'] = true; |
776,32 → 777,19 |
$this->traiterResultatTest($info); |
} |
|
private function testerBiblioOrigineSyntaxe() { |
$info = array('nom' => '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 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". |
" - 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". |
" - numéro(s) de la page contenant la publication du nom ou de l'ensemble de pages (première et dernière ". |
"pages de l'ensemble séparées par un tiret « - »). Quelques fois des numéros ou d'autres informations indiquant ". |
"la position du nom dans le document. Le tiret « - » doit toujours servir à séparer un ensemble.", |
'resultat' => false); |
/** |
* Test #19 |
*/ |
private function testerNomSupraGeneriqueEspaces() { |
$info = $this->getInfosTest(19); |
|
// Réalisation du test |
$noms_erreur = array(); |
foreach ($this->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); |
if ($nom['nom_supra_generique'] != '') { |
if (preg_match('/(?:^\s+(?!:\s+)|(?!:\s+)\s+$)/', $nom['nom_supra_generique'])) { |
$nom_supra_generique_traite = $this->repererEspace($nom['nom_supra_generique']); |
$noms_erreur[] = array($nom['num_nom'], $nom_supra_generique_traite); |
} |
} |
} |
808,7 → 796,7 |
|
// Analyse des résultats |
if (count($noms_erreur) > 0) { |
$info['message']['entete'] = array('num_nom', 'biblio_origine erroné'); |
$info['message']['entete'] = array('num_nom', 'nom_supra_generique erroné'); |
$info['message']['lignes'] = $noms_erreur; |
} else { |
$info['resultat'] = true; |
818,19 → 806,19 |
$this->traiterResultatTest($info); |
} |
|
private function testerAnneeSyntaxe() { |
$info = array('nom' => 'annee -> syntaxe', |
'description' => "Le champ annee doit :\n". |
" - contenir un nombre de 4 chiffres,\n". |
" - être supérieur ou égal à 1753.", |
'resultat' => false); |
/** |
* Test #20 |
*/ |
private function testerNomSupraGeneriqueSyntaxe() { |
$info = $this->getInfosTest(20); |
|
// Réalisation du test |
$noms_erreur = array(); |
foreach ($this->noms as &$nom) { |
if ($nom['annee'] != '') { |
if (!$this->verifierAnnee($nom['annee'])) { |
$noms_erreur[] = array($nom['num_nom'], $nom['annee']); |
if ($nom['nom_supra_generique'] != '') { |
if (!preg_match('/^[A-ZÄËḦÏÖÜẄẌŸ][-a-zäëḧïöẗüẅẍÿ]+$/', $nom['nom_supra_generique'])) { |
$nom_supra_generique_traite = $this->repererEspace($nom['nom_supra_generique']); |
$noms_erreur[] = array($nom['num_nom'], $nom_supra_generique_traite); |
} |
} |
} |
837,7 → 825,7 |
|
// Analyse des résultats |
if (count($noms_erreur) > 0) { |
$info['message']['entete'] = array('num_nom', 'annee erroné'); |
$info['message']['entete'] = array('num_nom', 'nom_supra_generique erroné'); |
$info['message']['lignes'] = $noms_erreur; |
} else { |
$info['resultat'] = true; |
847,28 → 835,20 |
$this->traiterResultatTest($info); |
} |
|
private function testerAuteurSyntaxe() { |
$info = array('nom' => 'auteur -> syntaxe', |
'description' => "Le champ auteur doit :\n". |
" - contenir l'intitulé complet des noms de l'auteur, ou des auteurs, ayant publié à l'origine la combinaison latine courante.\n". |
" - OU débuter par le mot « sensu » et contenir l'intitulé complet des noms de l'auteur, ou des auteurs, ". |
"ayant publié 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); |
/** |
* Test #21 |
*/ |
private function testerNomSupraGeneriqueRang() { |
$info = $this->getInfosTest(21); |
$info['nom'] = sprintf($info['nom'], $this->manuel['rang_genre']); |
$info['description'] = sprintf($info['description'], $this->manuel['rang_genre']); |
|
// Réalisation du test |
$noms_erreur = array(); |
foreach ($this->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); |
if ($nom['nom_supra_generique'] != '') { |
if ($nom['rang'] >= $this->manuel['rang_genre']) { |
$noms_erreur[] = array($nom['num_nom'], $nom['nom_sci'], $nom['rang']); |
} |
} |
} |
875,7 → 855,7 |
|
// Analyse des résultats |
if (count($noms_erreur) > 0) { |
$info['message']['entete'] = array('num_nom', 'auteur erroné'); |
$info['message']['entete'] = array('num_nom', 'nom_sci', 'rang erroné'); |
$info['message']['lignes'] = $noms_erreur; |
} else { |
$info['resultat'] = true; |
885,20 → 865,19 |
$this->traiterResultatTest($info); |
} |
|
private function testerNomCommercialSyntaxe() { |
$info = array('nom' => '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); |
/** |
* Test #22 |
*/ |
private function testerGenreEspaces() { |
$info = $this->getInfosTest(22); |
|
// Réalisation du test |
$noms_erreur = array(); |
foreach ($this->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); |
if ($nom['genre'] != '') { |
if (preg_match('/(?:^\s+(?!:\s+)|(?!:\s+)\s{2,}(?!:\s+)|(?!:\s+)\s+$)/', $nom['genre'])) { |
$nom_traite = $this->repererEspace($nom['genre']); |
$noms_erreur[] = array($nom['num_nom'], $nom_traite); |
} |
} |
} |
905,7 → 884,7 |
|
// Analyse des résultats |
if (count($noms_erreur) > 0) { |
$info['message']['entete'] = array('num_nom', 'cultivar erroné'); |
$info['message']['entete'] = array('num_nom', 'genre erroné'); |
$info['message']['lignes'] = $noms_erreur; |
} else { |
$info['resultat'] = true; |
915,23 → 894,29 |
$this->traiterResultatTest($info); |
} |
|
private function testerNomCommercialPresenceCultivar() { |
$info = array('nom' => 'nom_commercial -> groupe_cultivar OU cultivar non vide', |
'description' => "Si le champ nom_commercial contient un nom commercial alors le champ cultivar OU ". |
"cultivar_groupe ne doit pas être vide.", |
'resultat' => false); |
/** |
* Test #23 |
*/ |
private function testerGenreSyntaxe() { |
$info = $this->getInfosTest(23); |
|
// Réalisation du test |
$noms_erreur = array(); |
foreach ($this->noms as &$nom) { |
if ((isset($nom['nom_commercial']) && $nom['nom_commercial'] != '') && ($nom['cultivar'] == '' && $nom['cultivar_groupe'] == '')) { |
$noms_erreur[] = array($nom['num_nom'], $nom['nom_sci']); |
if ($nom['genre'] != '') { |
$mots = explode(' ', $nom['genre']); |
foreach ($mots as $mot) { |
if (!(preg_match('/^[+x]$/', $mot) || $this->verifierEpitheteGenre($mot))) { |
$nom_traite = $this->repererEspace($nom['genre']); |
$noms_erreur[] = array($nom['num_nom'], $nom_traite); |
} |
} |
} |
} |
|
// Analyse des résultats |
if (count($noms_erreur) > 0) { |
$info['message']['entete'] = array('num_nom', 'nom_commercial sans cultivar ou cultivar_groupe'); |
$info['message']['entete'] = array('num_nom', 'genre erroné'); |
$info['message']['lignes'] = $noms_erreur; |
} else { |
$info['resultat'] = true; |
941,27 → 926,20 |
$this->traiterResultatTest($info); |
} |
|
private function testerCultivarSyntaxe() { |
$info = array('nom' => 'cultivar -> syntaxe', |
'description' => "Le champ cultivar_groupe doit contenir :\n". |
" - un nom de cultivar conforme aux règles du Code Internationnal de Nomenclature \n". |
" des Plantes Cultivées (CINPC), c.-à-d. composer de caractères alphanumériques \n". |
" (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 \n". |
" cyrillique, arabe, chinois...\n". |
" - une lettre majuscule obligatoire pour le premier caractère du premier mot et pour \n". |
" 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); |
/** |
* Test #24 |
*/ |
private function testerGenreRang() { |
$info = $this->getInfosTest(24); |
$info['nom'] = sprintf($info['nom'], $this->manuel['rang_genre']); |
$info['description'] = sprintf($info['description'], $this->manuel['rang_genre']); |
|
// Réalisation du test |
$noms_erreur = array(); |
foreach ($this->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); |
if ($nom['genre'] != '') { |
if ($nom['rang'] < $this->manuel['rang_genre']) { |
$noms_erreur[] = array($nom['num_nom'], $nom['nom_sci'], $nom['rang']); |
} |
} |
} |
968,7 → 946,7 |
|
// Analyse des résultats |
if (count($noms_erreur) > 0) { |
$info['message']['entete'] = array('num_nom', 'cultivar erroné'); |
$info['message']['entete'] = array('num_nom', 'nom_sci', 'rang erroné'); |
$info['message']['lignes'] = $noms_erreur; |
} else { |
$info['resultat'] = true; |
978,18 → 956,19 |
$this->traiterResultatTest($info); |
} |
|
private function testerCultivarRang() { |
$info = array('nom' => "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); |
/** |
* Test #25 |
*/ |
private function testerEpitheteInfraGeneriqueSyntaxe() { |
$info = $this->getInfosTest(25); |
|
// Réalisation du test |
$noms_erreur = array(); |
foreach ($this->noms as &$nom) { |
if ($nom['cultivar'] != '') { |
if ($nom['rang'] < $this->manuel['rang_genre']) { |
$noms_erreur[] = array($nom['num_nom'], $nom['nom_sci'], $nom['rang']); |
if ($nom['epithete_infra_generique'] != '') { |
if (!preg_match('/^[A-ZÄËḦÏÖÜẄẌŸ][-a-zäëḧïöẗüẅẍÿ]+/', $nom['epithete_infra_generique'])) { |
$epithete_traite = $this->repererEspace($nom['epithete_infra_generique']); |
$noms_erreur[] = array($nom['num_nom'], $epithete_traite); |
} |
} |
} |
996,7 → 975,7 |
|
// Analyse des résultats |
if (count($noms_erreur) > 0) { |
$info['message']['entete'] = array('num_nom', 'nom_sci', 'rang erroné'); |
$info['message']['entete'] = array('num_nom', 'epithete_infra_generique erroné'); |
$info['message']['lignes'] = $noms_erreur; |
} else { |
$info['resultat'] = true; |
1006,22 → 985,20 |
$this->traiterResultatTest($info); |
} |
|
private function testerGroupeCultivarSyntaxe() { |
$info = array('nom' => 'cultivar_groupe -> syntaxe', |
'description' => "Le champ cultivar_groupe doit contenir un nom de groupe de cultivar conforme aux règles ". |
"du code des plantes cultivées, c.-à-d. composer 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". |
"Il peut se terminer par l'abréviation «gx» pour distinguer les groupes des grex.", |
'resultat' => false); |
/** |
* Test #26 |
*/ |
private function testerEpitheteInfraGeneriqueRang() { |
$info = $this->getInfosTest(26); |
$info['nom'] = sprintf($info['nom'], $this->manuel['rang_genre'], $this->manuel['rang_sp']); |
$info['description'] = sprintf($info['description'], $this->manuel['rang_genre'], $this->manuel['rang_sp']); |
|
// Réalisation du test |
$noms_erreur = array(); |
foreach ($this->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['epithete_infra_generique'] != '') { |
if ($nom['rang'] <= $this->manuel['rang_genre'] || $nom['rang'] >= $this->manuel['rang_sp']) { |
$noms_erreur[] = array($nom['num_nom'], $nom['nom_sci'], $nom['rang']); |
} |
} |
} |
1028,7 → 1005,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', 'nom_sci', 'rang erroné'); |
$info['message']['lignes'] = $noms_erreur; |
} else { |
$info['resultat'] = true; |
1038,18 → 1015,19 |
$this->traiterResultatTest($info); |
} |
|
private function testerGroupeCultivarRang() { |
$info = array('nom' => "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); |
/** |
* Test #27 |
*/ |
private function testerEpitheteInfraGeneriqueEspaces() { |
$info = $this->getInfosTest(27); |
|
// Réalisation du test |
$noms_erreur = array(); |
foreach ($this->noms as &$nom) { |
if ($nom['cultivar_groupe'] != '') { |
if ($nom['rang'] < $this->manuel['rang_genre']) { |
$noms_erreur[] = array($nom['num_nom'], $nom['nom_sci'], $nom['rang']); |
if ($nom['epithete_infra_generique'] != '') { |
if (preg_match('/(?:^\s+(?!:\s+)|(?!:\s+)\s{2,}(?!:\s+)|(?!:\s+)\s+$)/', $nom['epithete_infra_generique'])) { |
$epithete_traite = $this->repererEspace($nom['epithete_infra_generique']); |
$noms_erreur[] = array($nom['num_nom'], $epithete_traite); |
} |
} |
} |
1056,7 → 1034,7 |
|
// Analyse des résultats |
if (count($noms_erreur) > 0) { |
$info['message']['entete'] = array('num_nom', 'nom_sci', 'rang erroné'); |
$info['message']['entete'] = array('num_nom', 'epithete_infra_generique erroné'); |
$info['message']['lignes'] = $noms_erreur; |
} else { |
$info['resultat'] = true; |
1066,18 → 1044,18 |
$this->traiterResultatTest($info); |
} |
|
private function testerEpitheteInfraSpEspaces() { |
$info = array('nom' => '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". |
"Si des espaces sont compris dans la valeur du champ, il ne doit pas en avoir plusieurs consécutifs.", |
'resultat' => false); |
/** |
* Test #28 |
*/ |
private function testerEpitheteSpEspaces() { |
$info = $this->getInfosTest(28); |
|
// Réalisation du test |
$noms_erreur = array(); |
foreach ($this->noms as &$nom) { |
if ($nom['epithete_infra_sp'] != '') { |
if (preg_match('/(?:^\s+(?!:\s+)|(?!:\s+)\s{2,}(?!:\s+)|(?!:\s+)\s+$)/', $nom['epithete_infra_sp'])) { |
$epithete_traite = $this->repererEspace($nom['epithete_infra_sp']); |
if ($nom['epithete_sp'] != '') { |
if (preg_match('/(?:^\s+(?!:\s+)|(?!:\s+)\s{2,}(?!:\s+)|(?!:\s+)\s+$)/', $nom['epithete_sp'])) { |
$epithete_traite = $this->repererEspace($nom['epithete_sp']); |
$noms_erreur[] = array($nom['num_nom'], $epithete_traite); |
} |
} |
1085,7 → 1063,7 |
|
// Analyse des résultats |
if (count($noms_erreur) > 0) { |
$info['message']['entete'] = array('num_nom', 'epithete_infra_sp erroné'); |
$info['message']['entete'] = array('num_nom', 'epithete_sp erroné'); |
$info['message']['lignes'] = $noms_erreur; |
} else { |
$info['resultat'] = true; |
1095,24 → 1073,20 |
$this->traiterResultatTest($info); |
} |
|
private function testerEpitheteInfraSpSyntaxe() { |
$info = array('nom' => 'epithete_infra_sp -> syntaxe', |
'description' => "Le champ epithete_infra_sp peut contenir :\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". |
" - une formule d'hybridité composée d'une série de noms d'espèce ou d'infra espèce \n". |
" (au moins 2) séparés entre eux par la lettre x entourée de caractères espaces.", |
'resultat' => false); |
/** |
* Test #29 |
*/ |
private function testerEpitheteSpSyntaxe() { |
$info = $this->getInfosTest(29); |
|
// Réalisation du test |
$noms_erreur = array(); |
foreach ($this->noms as &$nom) { |
if ($nom['epithete_infra_sp'] != '') { |
$mots = explode(' ', $nom['epithete_infra_sp']); |
if ($nom['epithete_sp'] != '') { |
$mots = explode(' ', $nom['epithete_sp']); |
foreach ($mots as $mot) { |
if (!(preg_match('/^[+x]$/', $mot) || $this->verifierTypeEpithete($mot)|| $this->verifierEpitheteSp($mot))) { |
$epithete_traite = $this->repererEspace($nom['epithete_infra_sp']); |
if (!(preg_match('/^[+x]$/', $mot) || $this->verifierEpitheteSp($mot))) { |
$epithete_traite = $this->repererEspace($nom['epithete_sp']); |
$noms_erreur[] = array($nom['num_nom'], $epithete_traite); |
} |
} |
1121,7 → 1095,7 |
|
// Analyse des résultats |
if (count($noms_erreur) > 0) { |
$info['message']['entete'] = array('num_nom', 'epithete_infra_sp erroné'); |
$info['message']['entete'] = array('num_nom', 'epithete_sp erroné'); |
$info['message']['lignes'] = $noms_erreur; |
} else { |
$info['resultat'] = true; |
1131,15 → 1105,18 |
$this->traiterResultatTest($info); |
} |
|
private function testerEpitheteInfraSpRang() { |
$info = array('nom' => "epithete_infra_sp -> rang > {$this->manuel['rang_sp']}", |
'description' => "Si le champ epithete_infra_sp n'est pas vide alors le rang du nom doit être supérieur à {$this->manuel['rang_sp']}.", |
'resultat' => false); |
/** |
* Test #30 |
*/ |
private function testerEpitheteSpRang() { |
$info = $this->getInfosTest(30); |
$info['nom'] = sprintf($info['nom'], $this->manuel['rang_sp']); |
$info['description'] = sprintf($info['description'], $this->manuel['rang_sp']); |
|
// Réalisation du test |
$noms_erreur = array(); |
foreach ($this->noms as &$nom) { |
if ($nom['epithete_infra_sp'] != '') { |
if ($nom['epithete_sp'] != '') { |
if ($nom['rang'] < $this->manuel['rang_sp']) { |
$noms_erreur[] = array($nom['num_nom'], $nom['nom_sci'], $nom['rang']); |
} |
1158,10 → 1135,11 |
$this->traiterResultatTest($info); |
} |
|
/** |
* Test #31 |
*/ |
private function testerTypeEpitheteEspaces() { |
$info = array('nom' => 'type_epithete -> espaces en trop', |
'description' => "Le champ type_epithete ne doit pas contenir d'espace.", |
'resultat' => false); |
$info = $this->getInfosTest(31); |
|
// Réalisation du test |
$noms_erreur = array(); |
1185,11 → 1163,11 |
$this->traiterResultatTest($info); |
} |
|
/** |
* Test #32 |
*/ |
private function testerTypeEpitheteSyntaxe() { |
$info = array('nom' => 'type_epithete -> syntaxe', |
'description' => "Le champ type_epithete doit contenir un mot unique composé de lettres minuscules, sans ". |
" accents, et de tirets (-). Il commence par une lettre minuscule sans accent.", |
'resultat' => false); |
$info = $this->getInfosTest(32); |
|
// Réalisation du test |
$noms_erreur = array(); |
1212,12 → 1190,11 |
$this->traiterResultatTest($info); |
} |
|
/** |
* Test #33 |
*/ |
private function testerTypeEpitheteHybridite() { |
$info = array('nom' => 'type_epithete -> hybridité', |
'description' => "Le champ type_epithete ne doit pas contenir de préfixe indiquant l'hybridité comme : \n". |
" - «n-» \n". |
" - «notho-» \n", |
'resultat' => false); |
$info = $this->getInfosTest(33); |
|
// Réalisation du test |
$noms_erreur = array(); |
1240,257 → 1217,291 |
$this->traiterResultatTest($info); |
} |
|
private function testerNombreDeChamps($colonnes) { |
$info = array('nom' => 'Structure -> nombre de champs', |
'description' => 'Le nombre de champs présent dans la table doit être supérieur ou égal à 35.', |
'resultat' => false); |
/** |
* Test #34 |
*/ |
private function testerEpitheteInfraSpEspaces() { |
$info = $this->getInfosTest(34); |
|
$nbre_colonnes = count($colonnes); |
$info['message'] = $nbre_colonnes; |
if ($nbre_colonnes >= 35) { |
// Réalisation du test |
$noms_erreur = array(); |
foreach ($this->noms as &$nom) { |
if ($nom['epithete_infra_sp'] != '') { |
if (preg_match('/(?:^\s+(?!:\s+)|(?!:\s+)\s{2,}(?!:\s+)|(?!:\s+)\s+$)/', $nom['epithete_infra_sp'])) { |
$epithete_traite = $this->repererEspace($nom['epithete_infra_sp']); |
$noms_erreur[] = array($nom['num_nom'], $epithete_traite); |
} |
} |
} |
|
// Analyse des résultats |
if (count($noms_erreur) > 0) { |
$info['message']['entete'] = array('num_nom', 'epithete_infra_sp erroné'); |
$info['message']['lignes'] = $noms_erreur; |
} else { |
$info['resultat'] = true; |
} |
$noms_erreur = null; |
|
$this->traiterResultatTest($info); |
return ($info['resultat'] ? '1' : '0'); |
} |
|
private function testerNomDesChamps($colonnes) { |
$info = array('nom' => 'Structure -> noms des champs', |
'description' => 'Les noms des champs de la table contenant le référentiel doivent être conformes à ceux '. |
'définis par le manuel technique.', |
'resultat' => false); |
/** |
* Test #35 |
*/ |
private function testerEpitheteInfraSpSyntaxe() { |
$info = $this->getInfosTest(35); |
|
$champs_attendus = explode(',', $this->manuel['champs']); |
$champs_presents = array(); |
foreach ($colonnes as $colonne) { |
$champs_presents[$colonne['Field']] = $colonne; |
// Réalisation du test |
$noms_erreur = array(); |
foreach ($this->noms as &$nom) { |
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))) { |
$epithete_traite = $this->repererEspace($nom['epithete_infra_sp']); |
$noms_erreur[] = array($nom['num_nom'], $epithete_traite); |
} |
|
$ok = true; |
$champs_manquant = array(); |
foreach ($champs_attendus as $champ_attendu) { |
if (!isset($champs_presents[$champ_attendu])) { |
$champs_manquant[] = $champ_attendu; |
$ok = false; |
} |
} |
$info['resultat'] = $ok; |
if (!$ok) { |
$info['message'] = 'Champs manquants : '.implode(', ', $champs_manquant).'.'; |
} |
|
$this->traiterResultatTest($info); |
return ($info['resultat'] ? '1' : '0'); |
// Analyse des résultats |
if (count($noms_erreur) > 0) { |
$info['message']['entete'] = array('num_nom', 'epithete_infra_sp erroné'); |
$info['message']['lignes'] = $noms_erreur; |
} else { |
$info['resultat'] = true; |
} |
$noms_erreur = null; |
|
private function testerTypeDesChamps($colonnes) { |
$info = array('nom' => 'Structure -> types des champs', |
'description' => 'Les types des champs de la table contenant le référentiel doivent être conformes à ceux '. |
'définis par le manuel technique.', |
'resultat' => false); |
|
$champs_attendus = explode(',', $this->manuel['champs_type']); |
$champs_presents = array(); |
foreach ($colonnes as $colonne) { |
$champs_presents[$colonne['Field']] = $colonne['Type']; |
$this->traiterResultatTest($info); |
} |
|
// Recercherche des erreurs |
$champs_erreur = array(); |
foreach ($champs_attendus as $champ_attendu) { |
list($champ_attendu_nom, $champ_attendu_type_taille) = explode('=', trim($champ_attendu)); |
list($champ_attendu_type, $champ_attendu_taille) = explode('|', trim($champ_attendu_type_taille)); |
/** |
* Test #36 |
*/ |
private function testerEpitheteInfraSpRang() { |
$info = $this->getInfosTest(36); |
$info['nom'] = sprintf($info['nom'], $this->manuel['rang_sp']); |
$info['description'] = sprintf($info['description'], $this->manuel['rang_sp']); |
|
if (isset($champs_presents[$champ_attendu_nom])) { |
$champs_present_type = $champs_presents[$champ_attendu_nom]; |
|
if (($champ_attendu_type == 'VARCHAR' && strstr($champs_present_type, 'varchar') === false) |
|| ($champ_attendu_type == 'TEXT' && strstr($champs_present_type, 'text') === false) |
|| ($champ_attendu_type == 'INT' && strstr($champs_present_type, 'int') === false) |
|| ($champ_attendu_type == 'BOOL' && preg_match('/(?:bool|boolean|tinyint\(1\))/i', $champs_present_type) === false)) { |
$champs_erreur[] = $champ_attendu." vaut ".$champs_present_type; |
// Réalisation du test |
$noms_erreur = array(); |
foreach ($this->noms as &$nom) { |
if ($nom['epithete_infra_sp'] != '') { |
if ($nom['rang'] < $this->manuel['rang_sp']) { |
$noms_erreur[] = array($nom['num_nom'], $nom['nom_sci'], $nom['rang']); |
} |
} |
} |
|
// Analyse des résultats |
if (count($champs_erreur) > 0) { |
$info['message'] = "Champs n'ayant pas un type conforme : ".implode(', ', $champs_erreur).'.'; |
if (count($noms_erreur) > 0) { |
$info['message']['entete'] = array('num_nom', 'nom_sci', 'rang erroné'); |
$info['message']['lignes'] = $noms_erreur; |
} else { |
$info['resultat'] = true; |
} |
$noms_erreur = null; |
|
$this->traiterResultatTest($info); |
return ($info['resultat'] ? '1' : '0'); |
} |
|
private function testerTailleDesChamps($colonnes, $analyses) { |
$info = array('nom' => 'Structure -> champs tronqués', |
'description' => "Evalue le risque que des données de type texte aient pu être tronquées lors de leur insertion.\n". |
"Un résultat de type KO ne signifie pas forcément un problème à résoudre mais attire l'attention du coordinateur ". |
"sur un problème éventuel.", |
private function testerStatutCultureSyntaxe() { |
$info = array('nom' => 'statut_culture -> syntaxe', |
'description' => "Le champ statut_culture peut contenir :\n". |
" - le symbole tiret «-» précédant une autre information non référencée...\n". |
" - une première lettre en majuscule indiquant le code standard attribué à ce taxon,\n". |
" - éventuellement suivie d'un tiret puis d'une deuxième lettre en majuscule indiquant ". |
"un code de présence spécifique au référentiel.", |
'resultat' => false); |
|
$tailles_champs_maxi = array(); |
foreach ($colonnes as $colonne) { |
if (preg_match('/^varchar\(([0-9]+)\)$/', $colonne['Type'], $match)) { |
$tailles_champs_maxi[$colonne['Field']] = $match[1]; |
// Réalisation du test |
$noms_erreur = array(); |
foreach ($this->noms as &$nom) { |
if ($nom['statut_culture'] != '') { |
if (!$this->verifierStatutCulture($nom['statut_culture'])) { |
$noms_erreur[] = array($nom['num_nom'], $nom['statut_culture']); |
} |
} |
|
$tailles_trouvees = array(); |
foreach ($analyses as $analyse) { |
if (preg_match('/\.([^.]+)$/', $analyse['Field_name'], $match)) { |
$tailles_trouvees[$match[1]] = $analyse['Max_length']; |
} |
} |
|
$champs_erreur = array(); |
$champs_attendus = explode(',', $this->manuel['champs']); |
foreach ($champs_attendus as $champ_attendu) { |
if (isset($tailles_champs_maxi[$champ_attendu]) && isset($tailles_trouvees[$champ_attendu])) { |
if ($tailles_champs_maxi[$champ_attendu] == $tailles_trouvees[$champ_attendu]) { |
$champs_erreur[] = $champ_attendu; |
} |
} |
} |
|
// Analyse des résultats |
if (count($champs_erreur) > 0) { |
$info['message'] = "Champs possédant des enregistrements qui atteignent la taille maximum autorisée : ". |
implode(', ', $champs_erreur).'.'; |
if (count($noms_erreur) > 0) { |
$info['message']['entete'] = array('num_nom', 'statut_culture erroné'); |
$info['message']['lignes'] = $noms_erreur; |
} else { |
$info['resultat'] = true; |
} |
$noms_erreur = null; |
|
$this->traiterResultatTest($info); |
} |
|
private function testerNumNomClePrimaire($colonnes) { |
$info = array('nom' => 'Structure -> num_nom est clé primaire', |
'description' => "Vérifie que le champ num_nom est bien la clé primaire de la table.", |
private function testerStatutIntroductionSyntaxe() { |
$info = array('nom' => 'statut_introduction -> syntaxe', |
'description' => "Le champ statut_introduction peut contenir :\n". |
" - le symbole tiret «-» précédant une autre information non référencée...\n". |
" - une première lettre en majuscule indiquant le code standard attribué à ce taxon,\n". |
" - éventuellement suivie d'un tiret puis d'une deuxième lettre en majuscule indiquant ". |
"un code de présence spécifique au référentiel.", |
'resultat' => false); |
|
foreach ($colonnes as $colonne) { |
if ($colonne['Field'] == 'num_nom' && $colonne['Key'] == 'PRI') { |
$info['resultat'] = true; |
// Réalisation du test |
$noms_erreur = array(); |
foreach ($this->noms as &$nom) { |
if ($nom['statut_introduction'] != '') { |
if (!$this->verifierStatutIntroduction($nom['statut_introduction'])) { |
$noms_erreur[] = array($nom['num_nom'], $nom['statut_introduction']); |
} |
} |
} |
|
// Analyse des résultats |
if (count($noms_erreur) > 0) { |
$info['message']['entete'] = array('num_nom', 'statut_introduction erroné'); |
$info['message']['lignes'] = $noms_erreur; |
} else { |
$info['resultat'] = true; |
} |
$noms_erreur = null; |
|
$this->traiterResultatTest($info); |
return ($info['resultat'] ? '1' : '0'); |
} |
|
private function testerNumNomSuperieurAZero() { |
$info = array('nom' => 'num_nom -> supérieur à 0', |
'description' => "Le champ num_nom doit contenir des nombres entiers supérieurs à 0.", |
private function testerStatutOrigineSyntaxe() { |
$info = array('nom' => 'statut_origine -> syntaxe', |
'description' => "Le champ statut_origine peut contenir :\n". |
" - le symbole tiret «-» précédant une autre information non référencée...\n". |
" - une première lettre en majuscule indiquant le code standard attribué à ce taxon.\n". |
" - éventuellement suivie d'un tiret puis d'une deuxième lettre en majuscule indiquant ". |
"un code de présence spécifique au référentiel.", |
'resultat' => false); |
|
// Réalisation du test |
$noms_erreur = array(); |
foreach ($this->noms as &$nom) { |
if ($nom['num_nom'] <= 0) { |
$noms_erreur[] = $nom['num_nom']; |
if ($nom['statut_origine'] != '') { |
if (!$this->verifierStatutOrigine($nom['statut_origine'])) { |
$noms_erreur[] = array($nom['num_nom'], $nom['statut_origine']); |
} |
} |
} |
|
// Analyse des résultats |
if (count($noms_erreur) > 0) { |
$info['message'] = count($noms_erreur)." enregistrements contiennent dans le champ num_nom une valeur ". |
"inférieure ou égale à 0."; |
$info['message']['entete'] = array('num_nom', 'statut_origine erroné'); |
$info['message']['lignes'] = $noms_erreur; |
} else { |
$info['resultat'] = true; |
} |
$noms_erreur = null; |
|
$this->traiterResultatTest($info); |
} |
|
private function testerNumNomRetenuSuperieurAZero() { |
$info = array('nom' => 'num_nom_retenu -> supérieur à 0', |
'description' => "Le champ num_nom_retenu doit contenir des nombres entiers supérieurs à 0 ou être vide.", |
private function testerPresenceSyntaxe() { |
$info = array('nom' => 'presence -> syntaxe', |
'description' => "Le champ presence contient soit :\n". |
" - le symbole tiret «-» précédant une autre information non référencée...\n". |
" - une première lettre en majuscule indiquant le code standard attribué à ce taxon,\n". |
" - éventuellement suivie d'un tiret puis d'une deuxième lettre en majuscule indiquant ". |
"un code de présence spécifique au référentiel.", |
'resultat' => false); |
|
// Réalisation du test |
$noms_erreur = array(); |
foreach ($this->noms as &$nom) { |
if ($nom['num_nom_retenu'] != '' && $nom['num_nom_retenu'] <= 0) { |
$noms_erreur[] = $nom['num_nom']; |
if ($nom['presence'] != '') { |
if (!$this->verifierPresence($nom['presence'])) { |
$noms_erreur[] = array($nom['num_nom'], $nom['presence']); |
} |
} |
} |
|
// Analyse des résultats |
if (count($noms_erreur) > 0) { |
$info['message'] = count($noms_erreur)." enregistrements dont le champ num_nom_retenu est inférieur ou égal à 0 : ". |
implode(', ', $noms_erreur).'.'; |
$info['message']['entete'] = array('num_nom', 'presence erroné'); |
$info['message']['lignes'] = $noms_erreur; |
} else { |
$info['resultat'] = true; |
} |
$noms_erreur = null; |
|
$this->traiterResultatTest($info); |
} |
|
private function testerNumTaxSupEgalZeroUnique() { |
$info = array('nom' => 'num_tax_sup -> égal à 0 unique', |
'description' => "Un seul enregistrement doit posséder la valeur 0 dans le champ num_tax_sup. Il correspond ". |
"au premier taxon de la classification.", |
private function testerHybrideParent02Existence() { |
$info = array('nom' => 'hybride_parent_02 -> existence', |
'description' => "Si le champ hybride_parent_02 contient un nombre alors il doit correspondre à une valeur ". |
"du champ num_nom.", |
'resultat' => false); |
|
// Réalisation du test |
$noms_erreur = array(); |
foreach ($this->noms as &$nom) { |
if (preg_match('/^0$/', $nom['num_tax_sup'])) { |
$noms_erreur[] = $nom['num_nom']; |
if ($nom['hybride_parent_02'] != '') { |
if (!isset($this->noms[$nom['hybride_parent_02']]) && $nom['hybride_parent_02'] != '0') { |
$noms_erreur[] = array($nom['num_nom'], $this->repererEspace($nom['hybride_parent_02'])); |
} |
} |
} |
|
// Analyse des résultats |
if (count($noms_erreur) > 1) { |
$info['message'] = count($noms_erreur)." enregistrements ont une valeur de 0 dans le champ num_tax_sup : ". |
implode(', ', $noms_erreur).'.'; |
if (count($noms_erreur) > 0) { |
$info['message']['entete'] = array('num_nom', 'hybride_parent_02 introuvable'); |
$info['message']['lignes'] = $noms_erreur; |
} else { |
$info['resultat'] = true; |
} |
$noms_erreur = null; |
|
$this->traiterResultatTest($info); |
} |
|
private function testerTaxSupPourTaxon() { |
$info = array('nom' => 'Classification -> uniquement pour les taxons', |
'description' => "Seuls les enregistrements représentant un taxon doivent posséder une valeur dans le champ ". |
"num_tax_sup.\n Si num_nom_retenu est différent de num_nom (= nom synonyme) alors num_tax_sup doit être vide.", |
private function testerHybrideParent02Syntaxe() { |
$info = array('nom' => 'hybride_parent_02 -> syntaxe', |
'description' => "Le champ hybride_parent_02 contient soit :\n". |
" - une valeur vide,\n". |
" - un nombre.", |
'resultat' => false); |
|
// Réalisation du test |
$noms_erreur = array(); |
foreach ($this->noms as &$nom) { |
if ($nom['num_nom_retenu'] != $nom['num_nom'] && $nom['num_tax_sup'] != '') { |
$noms_erreur[] = $nom['num_nom']; |
if ($nom['hybride_parent_02'] != '') { |
if (!$this->verifierNombre($nom['hybride_parent_02'])) { |
$noms_erreur[] = array($nom['num_nom'], $this->repererEspace($nom['hybride_parent_02'])); |
} |
} |
} |
|
// Analyse des résultats |
if (count($noms_erreur) > 0) { |
$info['message'] = count($noms_erreur)." enregistrements ne sont pas des taxons et possèdent une ". |
"valeur dans num_tax_sup : ".implode(', ', $noms_erreur).'.'; |
$info['message']['entete'] = array('num_nom', 'hybride_parent_02 erroné'); |
$info['message']['lignes'] = $noms_erreur; |
} else { |
$info['resultat'] = true; |
} |
$noms_erreur = null; |
|
$this->traiterResultatTest($info); |
} |
|
private function testerExitenceTaxonSuperieur() { |
$info = array('nom' => 'Classification -> existence du taxon supérieur', |
'description' => "Chaque enregistrement représentant un taxon doit posséder un taxon supérieur sauf ". |
"la racine de la classification.", |
|
private function testerHybrideParent01Existence() { |
$info = array('nom' => 'hybride_parent_01 -> existence', |
'description' => "Si le champ hybride_parent_01 contient un nombre alors il doit correspondre à une valeur ". |
"du champ num_nom.", |
'resultat' => false); |
|
// Réalisation du test |
$noms_erreur = array(); |
foreach ($this->noms as &$nom) { |
if ($nom['num_nom_retenu'] == $nom['num_nom']) { |
if ($nom['num_tax_sup'] != 0 && !isset($this->noms[$nom['num_tax_sup']])) { |
$noms_erreur[] = $nom['num_nom']; |
if ($nom['hybride_parent_01'] != '' && $nom['hybride_parent_01'] != '0') { |
if (!isset($this->noms[$nom['hybride_parent_01']])) { |
$noms_erreur[] = array($nom['num_nom'], $this->repererEspace($nom['hybride_parent_01'])); |
} |
} |
} |
1497,153 → 1508,145 |
|
// Analyse des résultats |
if (count($noms_erreur) > 0) { |
$info['message'] = count($noms_erreur)." enregistrements dont le taxon supérieur n'existe pas : ". |
implode(', ', $noms_erreur).'.'; |
$info['message']['entete'] = array('num_nom', 'hybride_parent_01 introuvable'); |
$info['message']['lignes'] = $noms_erreur; |
} else { |
$info['resultat'] = true; |
} |
$noms_erreur = null; |
|
$this->traiterResultatTest($info); |
} |
|
private function testerClassificationRang() { |
$info = array('nom' => 'Classification -> taxon supérieur avec rang inférieur', |
'description' => "Pour chaque enregistrement représentant un taxon, le taxon supérieur doit avoir ". |
"un rang inférieur au taxon courant (à l'exception des noms ayant le rang de Clade).", |
private function testerHybrideParent01Syntaxe() { |
$info = array('nom' => 'hybride_parent_01 -> syntaxe', |
'description' => "Le champ hybride_parent_01 contient soit :\n". |
" - une valeur vide,\n". |
" - un nombre.", |
'resultat' => false); |
|
// Réalisation du test |
$noms_erreur = array(); |
foreach ($this->noms as &$nom) { |
if ($nom['num_nom_retenu'] == $nom['num_nom']) { |
if (isset($this->noms[$nom['num_tax_sup']])) { |
$nom_sup = $this->noms[$nom['num_tax_sup']]; |
if ($nom_sup['rang'] >= $nom['rang']) { |
// Prise en compte de l'exception des clades |
if (! ($nom_sup['rang'] == 70 && $nom['rang'] == 70)) { |
$noms_erreur[] = $nom['num_nom']; |
if ($nom['hybride_parent_01'] != '') { |
if (!$this->verifierNombre($nom['hybride_parent_01'])) { |
$noms_erreur[] = array($nom['num_nom'], $this->repererEspace($nom['hybride_parent_01'])); |
} |
} |
} |
} |
} |
|
// Analyse des résultats |
if (count($noms_erreur) > 0) { |
$info['message'] = count($noms_erreur)." enregistrements avec un problème : ".implode(', ', $noms_erreur).'.'; |
$info['message']['entete'] = array('num_nom', 'hybride_parent_01 erroné'); |
$info['message']['lignes'] = $noms_erreur; |
} else { |
$info['resultat'] = true; |
} |
$noms_erreur = null; |
|
$this->traiterResultatTest($info); |
} |
|
private function testerClassification() { |
$info = array('nom' => 'Classification -> racine liée à chaque noeud', |
'description' => "Pour chaque enregistrement, la classification doit pouvoir être remontée ". |
"jusqu'à un nom unique possédant une valeur num_tax_sup de 0.", |
private function testerSynonymeOrthographiqueExistence() { |
$info = array('nom' => 'synonyme_orthographique -> existence', |
'description' => "Si le champ synonyme_orthographique contient un nombre alors il doit correspondre ". |
"à une valeur du champ num_nom.", |
'resultat' => false); |
|
// Réalisation du test |
$noms_erreur = array(); |
$this->noms_ok = array(); |
foreach ($this->noms as &$nom) { |
if ($nom['num_nom_retenu'] == $nom['num_nom']) { |
if (isset($this->noms_ok[$nom['num_tax_sup']])) { |
$this->noms_ok[$nom['num_nom']] = true; |
} else { |
$this->detection_boucle_infini = array(); |
$classif_ok = $this->remonterClassif($nom); |
unset($this->detection_boucle_infini); |
|
if ($classif_ok === false) { |
$noms_erreur[] = $nom['num_nom']; |
} else { |
$this->noms_ok[$nom['num_nom']] = $classif_ok; |
if ($nom['synonyme_orthographique'] != '') { |
if (!isset($this->noms[$nom['synonyme_orthographique']])) { |
$noms_erreur[] = array($nom['num_nom'], $nom['synonyme_orthographique']); |
} |
} |
} |
} |
unset($this->noms_ok); |
|
// Analyse des résultats |
if (count($noms_erreur) > 0) { |
$info['message'] = count($noms_erreur)." taxons dont la classification n'est pas bonne : ". |
implode(', ', $noms_erreur).'.'; |
$info['message']['entete'] = array('num_nom', 'synonyme_orthographique introuvable'); |
$info['message']['lignes'] = $noms_erreur; |
} else { |
$info['resultat'] = true; |
} |
$noms_erreur = null; |
|
$this->traiterResultatTest($info); |
} |
|
private function remonterClassif(&$nom) { |
$this->detection_boucle_infini[$nom['num_nom']] = true; |
if (preg_match('/^[0-9]*$/', $nom['num_tax_sup'])) { |
if (isset($this->noms_ok[$nom['num_tax_sup']])) { |
$this->noms_ok[$nom['num_nom']] = true; |
return true; |
} else if (!isset($this->noms[$nom['num_tax_sup']]) && $nom['num_tax_sup'] == '0') { |
$this->noms_ok[$nom['num_nom']] = true; |
return true; |
} else if (!isset($this->noms[$nom['num_tax_sup']]) && $nom['num_tax_sup'] != '0') { |
return false; |
} else if (isset($this->detection_boucle_infini[$nom['num_tax_sup']])) { |
return false; |
} else { |
$retour = $this->remonterClassif($this->noms[$nom['num_tax_sup']]); |
if ($retour === true) { |
$this->noms_ok[$nom['num_tax_sup']] = true; |
private function testerSynonymeOrthographiqueSyntaxe() { |
$info = array('nom' => 'synonyme_orthographique -> syntaxe', |
'description' => "Le champ synonyme_orthographique contient soit :\n". |
" - une valeur vide,\n". |
" - un nombre.", |
'resultat' => false); |
|
// Réalisation du test |
$noms_erreur = array(); |
foreach ($this->noms as $nom) { |
if ($nom['synonyme_orthographique'] != '') { |
if (!$this->verifierNombre($nom['synonyme_orthographique'])) { |
$noms_erreur[] = array($nom['num_nom'], $nom['synonyme_orthographique']); |
} |
return $retour; |
} |
} |
|
// Analyse des résultats |
if (count($noms_erreur) > 0) { |
$info['message']['entete'] = array('num_nom', 'synonyme_orthographique erroné'); |
$info['message']['lignes'] = $noms_erreur; |
} else { |
return false; |
$info['resultat'] = true; |
} |
$noms_erreur = null; |
|
$this->traiterResultatTest($info); |
} |
|
private function testerRang() { |
$info = array('nom' => 'rang', |
'description' => "Le rang doit correspondre à une valeur numérique définie dans le manuel.", |
private function testerSynonymeMalAppliqueSyntaxe() { |
$info = array('nom' => 'synonyme_mal_applique -> syntaxe', |
'description' => "Le champ synonyme_mal_applique contient soit :\n". |
" - une valeur vide,\n". |
" - le chiffre 1.", |
'resultat' => false); |
|
$rangs = array_flip(explode(',', $this->manuel['rangs'])); |
|
// Réalisation du test |
$noms_erreur = array(); |
foreach ($this->noms as &$nom) { |
if (!isset($rangs[$nom['rang']])) { |
$noms_erreur[] = $nom['num_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'] = count($noms_erreur)." noms dont le rang n'est pas bon : ".implode(', ', $noms_erreur).'.'; |
$info['message']['entete'] = array('num_nom', 'synonyme_mal_applique erroné'); |
$info['message']['lignes'] = $noms_erreur; |
} else { |
$info['resultat'] = true; |
} |
$noms_erreur = null; |
|
$this->traiterResultatTest($info); |
} |
|
private function testerNomCompletSupraGenerique() { |
$info = array('nom' => 'nom_sci -> noms supra-génériques', |
'description' => "Si le rang est < à {$this->manuel['rang_genre']}, le nom_sci doit correspondre à la valeur ". |
"du champ nom_supra_generique. Les valeurs des champs cultivar_groupe, cultivar et ". |
"nom_commercial peuvent s'y ajouter.", |
|
private function testerSynonymeDouteuxSyntaxe() { |
$info = array('nom' => '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 ($this->noms as &$nom) { |
if ($nom['rang'] < $this->manuel['rang_genre']) { |
$suffixe_plte_cultivee = $this->construireSuffixeNomPltCultivee($nom); |
$nom_sci_ideal = $this->formaterStyleNomGenre($nom['nom_supra_generique']); |
$nom_sci_ideal .= ($suffixe_plte_cultivee != '' ? ' '.$suffixe_plte_cultivee : ''); |
if ($nom['nom_sci'] != $nom_sci_ideal) { |
$nom_sci_traite = $this->repererEspace($nom['nom_sci']); |
$noms_erreur[] = array($nom['num_nom'], $nom_sci_traite, $nom_sci_ideal); |
if ($nom['synonyme_douteux'] != '') { |
if (!$this->verifierBooleen($nom['synonyme_douteux'])) { |
$noms_erreur[] = array($nom['num_nom'], $nom['synonyme_douteux']); |
} |
} |
} |
1650,81 → 1653,67 |
|
// Analyse des résultats |
if (count($noms_erreur) > 0) { |
$info['message']['entete'] = array('num_nom', 'nom_sci', 'nom_sci corrigé'); |
$info['message']['entete'] = array('num_nom', 'synonyme_douteux erroné'); |
$info['message']['lignes'] = $noms_erreur; |
} else { |
$info['resultat'] = true; |
} |
$noms_erreur = null; |
|
$this->traiterResultatTest($info); |
} |
|
private function testerNomCompletGenre() { |
$info = array('nom' => 'nom_sci -> noms de genres', |
'description' => "Si le rang est = à {$this->manuel['rang_genre']}, le nom_sci doit correspondre à la valeur du champ genre. ". |
"Les valeurs des champs cultivar_groupe, cultivar et nom_commercial peuvent s'y ajouter.", |
private function testerSynonymeDouteuxNumNomRetenu() { |
$info = array('nom' => 'synonyme_douteux -> présence num_nom_retenu', |
'description' => "Si le nom est un synonyme douteux, le champs num_nom_retenu doit être vide.", |
'resultat' => false); |
|
// Réalisation du test |
$noms_erreur = array(); |
foreach ($this->noms as &$nom) { |
if ($nom['rang'] == $this->manuel['rang_genre']) { |
$suffixe_plte_cultivee = $this->construireSuffixeNomPltCultivee($nom); |
$nom_sci_ideal = $this->formaterStyleNomGenre($nom['genre']); |
$nom_sci_ideal .= ($suffixe_plte_cultivee != '' ? ' '.$suffixe_plte_cultivee : ''); |
if ($nom['nom_sci'] != $nom_sci_ideal) { |
$nom_sci_traite = $this->repererEspace($nom['nom_sci']); |
$noms_erreur[] = array($nom['num_nom'], $nom_sci_traite, $nom_sci_ideal); |
if ($nom['synonyme_douteux'] == 1 && $nom['num_nom_retenu'] != ' ') { |
$noms_erreur[] = array($nom['num_nom'], $nom['synonyme_douteux'], $nom['num_nom_retenu']); |
} |
} |
} |
|
// Analyse des résultats |
if (count($noms_erreur) > 0) { |
$info['message']['entete'] = array('num_nom', 'nom_sci', 'nom_sci corrigé'); |
$info['message']['entete'] = array('num_nom', 'synonyme_douteux', 'num_nom_retenu'); |
$info['message']['lignes'] = $noms_erreur; |
} else { |
$info['resultat'] = true; |
} |
|
$noms_erreur = null; |
$this->traiterResultatTest($info); |
} |
|
private function testerNomCompletInfraGenre() { |
$info = array('nom' => 'nom_sci -> noms infra-génériques', |
'description' => "Si le rang est > à {$this->manuel['rang_genre']} et < à {$this->manuel['rang_sp']},". |
" le nom_sci doit correspondre à une des formules suivantes : \n". |
" genre + ' ' + type_epithete + ' ' + epithete_infra_generique \n". |
" genre + ' ' + epithete_infra_generique + ' ' + type_epithete=agg. \n". |
"Les valeurs des champs cultivar_groupe, cultivar et nom_commercial peuvent s'y ajouter.", |
|
private function testerSynonymeProparteExistence() { |
$info = array('nom' => '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 ($this->noms as &$nom) { |
if ($nom['rang'] > $this->manuel['rang_genre'] && $nom['rang'] < $this->manuel['rang_sp']) { |
$suffixe_plte_cultivee = $this->construireSuffixeNomPltCultivee($nom); |
$nom_sci_ideal = ''; |
if ($nom['type_epithete'] == 'agg.') { |
$nom_sci_ideal = $this->formaterStyleNomGenre($nom['genre']); |
$nom_sci_ideal .= ' '.$this->formaterStyleNomGenre($nom['epithete_infra_generique']); |
$nom_sci_ideal .= ' '.$nom['type_epithete']; |
} else { |
$nom_sci_ideal = $this->formaterStyleNomGenre($nom['genre']); |
$nom_sci_ideal .= ' '.$nom['type_epithete']; |
$nom_sci_ideal .= ' '.$this->formaterStyleNomGenre($nom['epithete_infra_generique']); |
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($this->noms[$num_nom])) { |
$num_nom_en_erreur[] = $num_nom; |
} |
$nom_sci_ideal .= ($suffixe_plte_cultivee != '' ? ' '.$suffixe_plte_cultivee : ''); |
if ($nom['nom_sci'] != $nom_sci_ideal) { |
$nom_sci_traite = $this->repererEspace($nom['nom_sci']); |
$noms_erreur[] = array($nom['num_nom'], $nom_sci_traite, $nom_sci_ideal); |
} |
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', 'nom_sci', 'nom_sci corrigé'); |
$info['message']['entete'] = array('num_nom', 'synonyme_proparte introuvable'); |
$info['message']['lignes'] = $noms_erreur; |
} else { |
$info['resultat'] = true; |
1734,24 → 1723,20 |
$this->traiterResultatTest($info); |
} |
|
private function testerNomCompletEspece() { |
$info = array('nom' => "nom_sci -> noms d'espèce", |
'description' => "Si le rang est = à {$this->manuel['rang_sp']}, le nom_sci doit correspondre à la formule : \n". |
" genre + ' ' + epithete_sp \n". |
"Les valeurs des champs cultivar_groupe, cultivar et nom_commercial peuvent s'y ajouter.", |
private function testerSynonymeProparteSyntaxe() { |
$info = array('nom' => 'synonyme_proparte -> syntaxe', |
'description' => "Le champ synonyme_proparte contient soit :\n". |
" - une valeur vide,\n". |
" - un nombre,\n". |
" - une suite de nombres séparés par des virgules.", |
'resultat' => false); |
|
// Réalisation du test |
$noms_erreur = array(); |
foreach ($this->noms as &$nom) { |
if ($nom['rang'] == $this->manuel['rang_sp']) { |
$suffixe_plte_cultivee = $this->construireSuffixeNomPltCultivee($nom); |
$nom_sci_ideal = $this->formaterStyleNomGenre($nom['genre']); |
$nom_sci_ideal .= ' '.strtolower($nom['epithete_sp']); |
$nom_sci_ideal .= ($suffixe_plte_cultivee != '' ? ' '.$suffixe_plte_cultivee : ''); |
if ($nom['nom_sci'] != $nom_sci_ideal) { |
$nom_sci_traite = $this->repererEspace($nom['nom_sci']); |
$noms_erreur[] = array($nom['num_nom'], $nom_sci_traite, $nom_sci_ideal); |
if ($nom['synonyme_proparte'] != '') { |
if (!$this->verifierNombreSuite($nom['synonyme_proparte'])) { |
$noms_erreur[] = array($nom['num_nom'], $nom['synonyme_proparte']); |
} |
} |
} |
1758,7 → 1743,7 |
|
// Analyse des résultats |
if (count($noms_erreur) > 0) { |
$info['message']['entete'] = array('num_nom', 'nom_sci', 'nom_sci corrigé'); |
$info['message']['entete'] = array('num_nom', 'synonyme_proparte erroné'); |
$info['message']['lignes'] = $noms_erreur; |
} else { |
$info['resultat'] = true; |
1768,26 → 1753,18 |
$this->traiterResultatTest($info); |
} |
|
private function testerNomCompletInfraSpecifique() { |
$info = array('nom' => 'nom_sci -> noms infra-spécifiques', |
'description' => "Si le rang est > à {$this->manuel['rang_sp']}, le nom_sci doit correspondre à la formule : \n". |
" genre + ' ' + epithete_sp + ' ' + type_epithete + ' ' + epithete_infra_generique\n". |
"Les valeurs des champs cultivar_groupe, cultivar et nom_commercial peuvent s'y ajouter.", |
private function testerBasionymeExistence() { |
$info = array('nom' => '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 ($this->noms as &$nom) { |
if ($nom['rang'] > $this->manuel['rang_sp']) { |
$suffixe_plte_cultivee = $this->construireSuffixeNomPltCultivee($nom); |
$nom_sci_ideal = $this->formaterStyleNomGenre($nom['genre']); |
$nom_sci_ideal .= ' '.strtolower($nom['epithete_sp']); |
$nom_sci_ideal .= ' '.strtolower($nom['type_epithete']); |
$nom_sci_ideal .= ' '.strtolower($nom['epithete_infra_sp']); |
$nom_sci_ideal .= ($suffixe_plte_cultivee != '' ? ' '.$suffixe_plte_cultivee : ''); |
if ($nom['nom_sci'] != $nom_sci_ideal) { |
$nom_sci_traite = $this->repererEspace($nom['nom_sci']); |
$noms_erreur[] = array($nom['num_nom'], $nom_sci_traite, $nom_sci_ideal); |
if ($nom['basionyme'] != '') { |
if (!isset($this->noms[$nom['basionyme']])) { |
$noms_erreur[] = array($nom['num_nom'], $nom['basionyme']); |
} |
} |
} |
1794,7 → 1771,7 |
|
// Analyse des résultats |
if (count($noms_erreur) > 0) { |
$info['message']['entete'] = array('num_nom', 'nom_sci', 'nom_sci corrigé'); |
$info['message']['entete'] = array('num_nom', 'basionyme introuvable'); |
$info['message']['lignes'] = $noms_erreur; |
} else { |
$info['resultat'] = true; |
1804,18 → 1781,19 |
$this->traiterResultatTest($info); |
} |
|
private function testerNomSupraGeneriqueEspaces() { |
$info = array('nom' => 'nom_supra_generique -> espaces en trop', |
'description' => "Le champ nom_supra_generique ne doit pas contenir d'espace avant ou après le nom.", |
private function testerBasionymeSyntaxe() { |
$info = array('nom' => 'basionyme -> syntaxe', |
'description' => "Le champ basionyme contient :\n". |
" - une valeur vide,\n". |
" - un nombre.", |
'resultat' => false); |
|
// Réalisation du test |
$noms_erreur = array(); |
foreach ($this->noms as &$nom) { |
if ($nom['nom_supra_generique'] != '') { |
if (preg_match('/(?:^\s+(?!:\s+)|(?!:\s+)\s+$)/', $nom['nom_supra_generique'])) { |
$nom_supra_generique_traite = $this->repererEspace($nom['nom_supra_generique']); |
$noms_erreur[] = array($nom['num_nom'], $nom_supra_generique_traite); |
if ($nom['basionyme'] != '') { |
if (!$this->verifierNombre($nom['basionyme'])) { |
$noms_erreur[] = array($nom['num_nom'], $nom['basionyme']); |
} |
} |
} |
1822,7 → 1800,7 |
|
// Analyse des résultats |
if (count($noms_erreur) > 0) { |
$info['message']['entete'] = array('num_nom', 'nom_supra_generique erroné'); |
$info['message']['entete'] = array('num_nom', 'basionyme erroné'); |
$info['message']['lignes'] = $noms_erreur; |
} else { |
$info['resultat'] = true; |
1832,20 → 1810,25 |
$this->traiterResultatTest($info); |
} |
|
private function testerNomSupraGeneriqueSyntaxe() { |
$info = array('nom' => 'nom_supra_generique -> syntaxe', |
'description' => "Le champ nom_supra_generique contient un mot composé de lettres minuscules, avec ou ". |
"sans tréma (¨), et de tirets (-). \n". |
"La première lettre (avec ou sans tréma) du mot doit être en majuscule.", |
/** |
* Test #37 |
*/ |
private function testerGroupeCultivarSyntaxe() { |
$info = array('nom' => 'cultivar_groupe -> syntaxe', |
'description' => "Le champ cultivar_groupe doit contenir un nom de groupe de cultivar conforme aux règles ". |
"du code des plantes cultivées, c.-à-d. composer 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". |
"Il peut se terminer par l'abréviation «gx» pour distinguer les groupes des grex.", |
'resultat' => false); |
|
// Réalisation du test |
$noms_erreur = array(); |
foreach ($this->noms as &$nom) { |
if ($nom['nom_supra_generique'] != '') { |
if (!preg_match('/^[A-ZÄËḦÏÖÜẄẌŸ][-a-zäëḧïöẗüẅẍÿ]+$/', $nom['nom_supra_generique'])) { |
$nom_supra_generique_traite = $this->repererEspace($nom['nom_supra_generique']); |
$noms_erreur[] = array($nom['num_nom'], $nom_supra_generique_traite); |
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); |
} |
} |
} |
1852,7 → 1835,7 |
|
// Analyse des résultats |
if (count($noms_erreur) > 0) { |
$info['message']['entete'] = array('num_nom', 'nom_supra_generique erroné'); |
$info['message']['entete'] = array('num_nom', 'cultivar_groupe erroné'); |
$info['message']['lignes'] = $noms_erreur; |
} else { |
$info['resultat'] = true; |
1862,16 → 1845,20 |
$this->traiterResultatTest($info); |
} |
|
private function testerNomSupraGeneriqueRang() { |
$info = array('nom' => "nom_supra_generique -> rang < {$this->manuel['rang_genre']}", |
'description' => "Si le champ nom_supra_generique n'est pas vide alors le rang du nom doit être inférieur à {$this->manuel['rang_genre']}.", |
/** |
* Test #38 |
*/ |
private function testerGroupeCultivarRang() { |
$info = array('nom' => "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 ($this->noms as &$nom) { |
if ($nom['nom_supra_generique'] != '') { |
if ($nom['rang'] >= $this->manuel['rang_genre']) { |
if ($nom['cultivar_groupe'] != '') { |
if ($nom['rang'] < $this->manuel['rang_genre']) { |
$noms_erreur[] = array($nom['num_nom'], $nom['nom_sci'], $nom['rang']); |
} |
} |
1889,19 → 1876,30 |
$this->traiterResultatTest($info); |
} |
|
private function testerGenreEspaces() { |
$info = array('nom' => 'genre -> espaces en trop', |
'description' => "Le champ genre ne doit pas contenir d'espace avant ou après le nom.\n". |
"Si des espaces sont compris dans la valeur du champ, il ne doit pas en avoir plusieurs consécutifs.", |
/** |
* Test #39 |
*/ |
private function testerCultivarSyntaxe() { |
$info = array('nom' => 'cultivar -> syntaxe', |
'description' => "Le champ cultivar_groupe doit contenir :\n". |
" - un nom de cultivar conforme aux règles du Code Internationnal de Nomenclature \n". |
" des Plantes Cultivées (CINPC), c.-à-d. composer de caractères alphanumériques \n". |
" (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 \n". |
" cyrillique, arabe, chinois...\n". |
" - une lettre majuscule obligatoire pour le premier caractère du premier mot et pour \n". |
" 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 ($this->noms as &$nom) { |
if ($nom['genre'] != '') { |
if (preg_match('/(?:^\s+(?!:\s+)|(?!:\s+)\s{2,}(?!:\s+)|(?!:\s+)\s+$)/', $nom['genre'])) { |
$nom_traite = $this->repererEspace($nom['genre']); |
$noms_erreur[] = array($nom['num_nom'], $nom_traite); |
if ($nom['cultivar'] != '') { |
if (!$this->verifierEpitheteCultivar($nom['cultivar'])) { |
$epithete_traite = $this->repererEspace($nom['cultivar']); |
$noms_erreur[] = array($nom['num_nom'], $epithete_traite); |
} |
} |
} |
1908,7 → 1906,7 |
|
// Analyse des résultats |
if (count($noms_erreur) > 0) { |
$info['message']['entete'] = array('num_nom', 'genre erroné'); |
$info['message']['entete'] = array('num_nom', 'cultivar erroné'); |
$info['message']['lignes'] = $noms_erreur; |
} else { |
$info['resultat'] = true; |
1918,33 → 1916,28 |
$this->traiterResultatTest($info); |
} |
|
private function testerGenreSyntaxe() { |
$info = array('nom' => 'genre -> syntaxe', |
'description' => "Le champ genre peut contenir :\n". |
" - un mot unique composé de lettres minuscules, avec ou sans tréma (¨), et de tirets (-). \n". |
" Il commence par une lettre majuscule (avec ou sans tréma) et peut être précédé par \n". |
" le signe + ou la lettre x suivi d'un espace.\n". |
" - une formule d'hybridité composée d'une série de noms de genre (au moins 2) séparés\n". |
" entre eux par la lettre x entourée de caractères espaces.", |
/** |
* Test #40 |
*/ |
private function testerCultivarRang() { |
$info = array('nom' => "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 ($this->noms as &$nom) { |
if ($nom['genre'] != '') { |
$mots = explode(' ', $nom['genre']); |
foreach ($mots as $mot) { |
if (!(preg_match('/^[+x]$/', $mot) || $this->verifierEpitheteGenre($mot))) { |
$nom_traite = $this->repererEspace($nom['genre']); |
$noms_erreur[] = array($nom['num_nom'], $nom_traite); |
if ($nom['cultivar'] != '') { |
if ($nom['rang'] < $this->manuel['rang_genre']) { |
$noms_erreur[] = array($nom['num_nom'], $nom['nom_sci'], $nom['rang']); |
} |
} |
} |
} |
|
// Analyse des résultats |
if (count($noms_erreur) > 0) { |
$info['message']['entete'] = array('num_nom', 'genre erroné'); |
$info['message']['entete'] = array('num_nom', 'nom_sci', 'rang erroné'); |
$info['message']['lignes'] = $noms_erreur; |
} else { |
$info['resultat'] = true; |
1954,17 → 1947,23 |
$this->traiterResultatTest($info); |
} |
|
private function testerGenreRang() { |
$info = array('nom' => "genre -> rang >= {$this->manuel['rang_genre']}", |
'description' => "Si le champ genre n'est pas vide alors le rang du nom doit être supérieur ou égal à {$this->manuel['rang_genre']}.", |
/** |
* Test #41 |
*/ |
private function testerNomCommercialSyntaxe() { |
$info = array('nom' => '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 ($this->noms as &$nom) { |
if ($nom['genre'] != '') { |
if ($nom['rang'] < $this->manuel['rang_genre']) { |
$noms_erreur[] = array($nom['num_nom'], $nom['nom_sci'], $nom['rang']); |
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); |
} |
} |
} |
1971,7 → 1970,7 |
|
// Analyse des résultats |
if (count($noms_erreur) > 0) { |
$info['message']['entete'] = array('num_nom', 'nom_sci', 'rang erroné'); |
$info['message']['entete'] = array('num_nom', 'cultivar erroné'); |
$info['message']['lignes'] = $noms_erreur; |
} else { |
$info['resultat'] = true; |
1981,26 → 1980,26 |
$this->traiterResultatTest($info); |
} |
|
private function testerEpitheteInfraGeneriqueSyntaxe() { |
$info = array('nom' => 'epithete_infra_generique -> syntaxe', |
'description' => "Le champ epithete_infra_generique est composé de lettres minuscules, avec ou sans tréma (¨), et de tirets (-). \n". |
"La première lettre (avec ou sans tréma) doit être en majuscule.", |
/** |
* Test #42 |
*/ |
private function testerNomCommercialPresenceCultivar() { |
$info = array('nom' => 'nom_commercial -> groupe_cultivar OU cultivar non vide', |
'description' => "Si le champ nom_commercial contient 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 ($this->noms as &$nom) { |
if ($nom['epithete_infra_generique'] != '') { |
if (!preg_match('/^[A-ZÄËḦÏÖÜẄẌŸ][-a-zäëḧïöẗüẅẍÿ]+/', $nom['epithete_infra_generique'])) { |
$epithete_traite = $this->repererEspace($nom['epithete_infra_generique']); |
$noms_erreur[] = array($nom['num_nom'], $epithete_traite); |
if ((isset($nom['nom_commercial']) && $nom['nom_commercial'] != '') && ($nom['cultivar'] == '' && $nom['cultivar_groupe'] == '')) { |
$noms_erreur[] = array($nom['num_nom'], $nom['nom_sci']); |
} |
} |
} |
|
// Analyse des résultats |
if (count($noms_erreur) > 0) { |
$info['message']['entete'] = array('num_nom', 'epithete_infra_generique erroné'); |
$info['message']['entete'] = array('num_nom', 'nom_commercial sans cultivar ou cultivar_groupe'); |
$info['message']['lignes'] = $noms_erreur; |
} else { |
$info['resultat'] = true; |
2010,18 → 2009,31 |
$this->traiterResultatTest($info); |
} |
|
private function testerEpitheteInfraGeneriqueRang() { |
$info = array('nom' => "epithete_infra_generique -> {$this->manuel['rang_genre']} < rang < {$this->manuel['rang_sp']}", |
'description' => "Si le champ epithete_infra_generique n'est pas vide alors le rang du nom doit être compris ". |
"entre {$this->manuel['rang_genre']} et {$this->manuel['rang_sp']}.", |
/** |
* Test #43 |
*/ |
private function testerAuteurSyntaxe() { |
$info = array('nom' => 'auteur -> syntaxe', |
'description' => "Le champ auteur doit :\n". |
" - contenir l'intitulé complet des noms de l'auteur, ou des auteurs, ayant publié à l'origine la combinaison latine courante.\n". |
" - OU débuter par le mot « sensu » et contenir l'intitulé complet des noms de l'auteur, ou des auteurs, ". |
"ayant publié 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 ($this->noms as &$nom) { |
if ($nom['epithete_infra_generique'] != '') { |
if ($nom['rang'] <= $this->manuel['rang_genre'] || $nom['rang'] >= $this->manuel['rang_sp']) { |
$noms_erreur[] = array($nom['num_nom'], $nom['nom_sci'], $nom['rang']); |
if ($nom['auteur'] != '') { |
if (!$this->verifierAuteur($nom['auteur'])) { |
$intitule_traite = $this->repererEspace($nom['auteur']); |
$noms_erreur[] = array($nom['num_nom'], $intitule_traite); |
} |
} |
} |
2028,7 → 2040,7 |
|
// Analyse des résultats |
if (count($noms_erreur) > 0) { |
$info['message']['entete'] = array('num_nom', 'nom_sci', 'rang erroné'); |
$info['message']['entete'] = array('num_nom', 'auteur erroné'); |
$info['message']['lignes'] = $noms_erreur; |
} else { |
$info['resultat'] = true; |
2038,18 → 2050,22 |
$this->traiterResultatTest($info); |
} |
|
private function testerEpitheteInfraGeneriqueEspaces() { |
$info = array('nom' => 'epithete_infra_generique -> espaces en trop', |
'description' => "Le champ epithete_infra_generique ne doit pas contenir d'espace avant ou après sa valeur.", |
/** |
* Test #44 |
*/ |
private function testerAnneeSyntaxe() { |
$info = array('nom' => 'annee -> syntaxe', |
'description' => "Le champ annee doit :\n". |
" - contenir un nombre de 4 chiffres,\n". |
" - être supérieur ou égal à 1753.", |
'resultat' => false); |
|
// Réalisation du test |
$noms_erreur = array(); |
foreach ($this->noms as &$nom) { |
if ($nom['epithete_infra_generique'] != '') { |
if (preg_match('/(?:^\s+(?!:\s+)|(?!:\s+)\s{2,}(?!:\s+)|(?!:\s+)\s+$)/', $nom['epithete_infra_generique'])) { |
$epithete_traite = $this->repererEspace($nom['epithete_infra_generique']); |
$noms_erreur[] = array($nom['num_nom'], $epithete_traite); |
if ($nom['annee'] != '') { |
if (!$this->verifierAnnee($nom['annee'])) { |
$noms_erreur[] = array($nom['num_nom'], $nom['annee']); |
} |
} |
} |
2056,7 → 2072,7 |
|
// Analyse des résultats |
if (count($noms_erreur) > 0) { |
$info['message']['entete'] = array('num_nom', 'epithete_infra_generique erroné'); |
$info['message']['entete'] = array('num_nom', 'annee erroné'); |
$info['message']['lignes'] = $noms_erreur; |
} else { |
$info['resultat'] = true; |
2066,19 → 2082,35 |
$this->traiterResultatTest($info); |
} |
|
private function testerEpitheteSpEspaces() { |
$info = array('nom' => 'epithete_sp -> espaces en trop', |
'description' => "Le champ epithete_sp ne doit pas contenir d'espace avant ou après le nom.\n". |
"Si des espaces sont compris dans la valeur du champ, il ne doit pas en avoir plusieurs consécutifs.", |
/** |
* Test #45 |
*/ |
private function testerBiblioOrigineSyntaxe() { |
$info = array('nom' => '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 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". |
" - 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". |
" - numéro(s) de la page contenant la publication du nom ou de l'ensemble de pages (première et dernière ". |
"pages de l'ensemble séparées par un tiret « - »). Quelques fois des numéros ou d'autres informations indiquant ". |
"la position du nom dans le document. Le tiret « - » doit toujours servir à séparer un ensemble.", |
'resultat' => false); |
|
// Réalisation du test |
$noms_erreur = array(); |
foreach ($this->noms as &$nom) { |
if ($nom['epithete_sp'] != '') { |
if (preg_match('/(?:^\s+(?!:\s+)|(?!:\s+)\s{2,}(?!:\s+)|(?!:\s+)\s+$)/', $nom['epithete_sp'])) { |
$epithete_traite = $this->repererEspace($nom['epithete_sp']); |
$noms_erreur[] = array($nom['num_nom'], $epithete_traite); |
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); |
} |
} |
} |
2085,7 → 2117,7 |
|
// Analyse des résultats |
if (count($noms_erreur) > 0) { |
$info['message']['entete'] = array('num_nom', 'epithete_sp erroné'); |
$info['message']['entete'] = array('num_nom', 'biblio_origine erroné'); |
$info['message']['lignes'] = $noms_erreur; |
} else { |
$info['resultat'] = true; |
2095,35 → 2127,29 |
$this->traiterResultatTest($info); |
} |
|
private function testerEpitheteSpSyntaxe() { |
$info = array('nom' => '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". |
" 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) \n". |
" 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) \n". |
" séparés entre eux par la lettre x entourée de caractères espaces.", |
/** |
* Test #46 |
*/ |
private function testerHomonymieSyntaxe() { |
$info = array('nom' => 'homonyme -> syntaxe', |
'description' => "Le champ homonyme contient :\n". |
" - une valeur vide,\n". |
" - le chiffre 1.", |
'resultat' => false); |
|
// Réalisation du test |
$noms_erreur = array(); |
foreach ($this->noms as &$nom) { |
if ($nom['epithete_sp'] != '') { |
$mots = explode(' ', $nom['epithete_sp']); |
foreach ($mots as $mot) { |
if (!(preg_match('/^[+x]$/', $mot) || $this->verifierEpitheteSp($mot))) { |
$epithete_traite = $this->repererEspace($nom['epithete_sp']); |
$noms_erreur[] = array($nom['num_nom'], $epithete_traite); |
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', 'epithete_sp erroné'); |
$info['message']['entete'] = array('num_nom', 'homonyme erroné'); |
$info['message']['lignes'] = $noms_erreur; |
} else { |
$info['resultat'] = true; |
2133,24 → 2159,31 |
$this->traiterResultatTest($info); |
} |
|
private function testerEpitheteSpRang() { |
$info = array('nom' => "epithete_sp -> rang >= {$this->manuel['rang_sp']}", |
'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']}.", |
/** |
* Test #47 |
*/ |
private function testerHomonymieExistence() { |
$info = array('nom' => 'homonyme -> existence', |
'description' => "Si le champ homonyme contient «1» alors plusieurs noms doivent posséder la même valeur ". |
"dans le champ nom_sci.", |
'resultat' => false); |
|
$noms_homonymie = $this->classerNomsParNomComplet(); |
|
// Réalisation du test |
$noms_erreur = array(); |
foreach ($this->noms as &$nom) { |
if ($nom['epithete_sp'] != '') { |
if ($nom['rang'] < $this->manuel['rang_sp']) { |
$noms_erreur[] = array($nom['num_nom'], $nom['nom_sci'], $nom['rang']); |
if ($nom['homonyme'] != '0' && $nom['homonyme'] != '') { |
if ($noms_homonymie[$nom['nom_sci']] <= 1) { |
$noms_erreur[] = array($nom['num_nom'], $nom['nom_sci']); |
} |
} |
} |
$noms_homonymie = null; |
|
// Analyse des résultats |
if (count($noms_erreur) > 0) { |
$info['message']['entete'] = array('num_nom', 'nom_sci', 'rang erroné'); |
$info['message']['entete'] = array('num_nom', 'homonyme introuvable'); |
$info['message']['lignes'] = $noms_erreur; |
} else { |
$info['resultat'] = true; |
2160,8 → 2193,11 |
$this->traiterResultatTest($info); |
} |
|
|
/** |
* Test #65 |
*/ |
private function testerExclureTaxRefSyntaxe() { |
$info = $this->getInfosTest(65); |
$info = array('nom' => 'exclure_taxref -> syntaxe', |
'description' => "Le champ exclure_taxref contient soit :\n". |
" - une valeur vide.\n". |
2191,6 → 2227,9 |
|
$this->traiterResultatTest($info); |
} |
|
|
|
//+--------------------------------------------------------------------------------------------------------------+// |
// MÉTHODES COMMUNES aux TESTS |
|
2469,5 → 2508,11 |
return $noms_classes; |
} |
|
private function getInfosTest($numero) { |
$info = $this->tests[$numero]; |
$info['numero'] = $numero; |
$info['resultat'] = false; |
return $info; |
} |
} |
?> |