33,10 → 33,10 |
"FR" => "presence", |
"FR-FRA" => "presence_Ga", "FR-COR" => "presence_Co", "REU" => "presence", |
"GUA" => "presence_Guadeloupe", "SMSB" => array("presence_Saint_Martin", "presence_Saint_Barthelemy"), |
"MAR" => "presence_Martinique", |
"SM" => "presence_Saint_Martin", "SB" => "presence_Saint_Barthelemy", "MAR" => "presence_Martinique", |
"GF" => "presence", "MAY" => "presence_Mayotte", "TAAF" => "presence_Taaf", |
"SPM" => "presence_Guadeloupe", "PF" => "presence_Polynesie", "NC" => "presence_Nouvelle_Caledonie", |
"BIBLIO" => "biblio_origine", "BDNGM" => "num_nom" ); |
"BIBLIO" => "biblio_origine", "BDNGM" => "num_nom", "NUM_NOM" => "num_nom", "NOM_VERN" => "nom_francais"); |
|
private $sans_correspondance = array( |
"FG_VALIDITE", "habitat", "WF", "CLI", "EPA", |
94,6 → 94,7 |
Debug::printr("Fin de la création de la table."); |
$this->ajouterDonneesTaxRef($donnees); |
Debug::printr("Fin de l'insertion des données."); |
$this->decouperNomSciTaxRef(); |
$this->creerTableComparaison(); |
Debug::printr("Fin de la création de la table comparaison."); |
Debug::printr('Termine:'.$this->traitementDao->terminerTraitement($this->traitement['id_traitement'])); |
106,6 → 107,8 |
} |
} |
|
|
// +-------------------------------------------------------------------------------------------------------------------+ |
private function creerTableTaxref() { |
$requete = "DROP TABLE IF EXISTS {$this->referentiel}_taxref; ". |
"CREATE TABLE {$this->referentiel}_taxref AS SELECT * FROM {$this->referentiel};". |
112,11 → 115,13 |
"ALTER TABLE {$this->referentiel}_taxref ADD PRIMARY KEY (num_nom);"; |
$resultat = $this->executerRequeter($requete); |
} |
|
private function ajouterColonneCDNOM() { |
$requete = "ALTER TABLE {$this->referentiel}_taxref ADD ". |
"`num_taxref` INT( 15 ) NULL DEFAULT NULL COMMENT 'numéro correspondant dans la base taxref.';"; |
"`CD_NOM` INT( 15 ) NULL DEFAULT NULL COMMENT 'numéro correspondant dans la base taxref.';"; |
$resultat = $this->executerRequeter($requete); |
} |
|
private function ajouterDonneesTaxRef($liste_noms) { |
$i = 0; $j = 0; $requete = ""; |
foreach ($liste_noms as $nom) { $i++; |
131,6 → 136,7 |
} |
} |
} |
|
private function creerTableComparaison() { |
foreach ($this->noms_colonnes as $colonne) { |
if (isset($this->correspondance_colonnes[$colonne]) && $this->correspondance_colonnes[$colonne] != "") { |
148,18 → 154,21 |
} |
} |
} |
date_default_timezone_set('Europe/London'); |
$requete = "CREATE TABLE {$this->referentiel}_comparaison_".date("Y_m_d_H_i_s")." AS". |
" SELECT CONCAT(".implode(', ', $concat).") AS difference, ".implode(', ', $champs_tax). |
" FROM {$this->referentiel} b, {$this->referentiel}_taxref t". |
" WHERE b.num_nom = t.num_nom AND (b.nom_sci != t.nom_sci or b.auteur != t.auteur or b.annee != t.annee);"; |
echo $requete; |
//echo $requete; |
$resultat = $this->executerRequeter($requete); |
} |
|
// +-------------------------------------------------------------------------------------------------------------------+ |
private function traiterFichierTaxref($fichier) { |
$donnees = array(); |
if (($pointeur = fopen($fichier, "r")) !== FALSE) { |
$this->noms_colonnes = fgetcsv($pointeur, 1000, chr(9)); |
$num_nom = 0; |
while (($ligne = fgetcsv($pointeur, 1000, chr(9))) !== FALSE) { |
$nombreChamps = count($ligne); |
$taxref[$ligne[0]] = $ligne; |
166,13 → 175,12 |
for ($c=0; $c < $nombreChamps; $c++) { |
if (isset($this->correspondance_colonnes[$this->noms_colonnes[$c]])) { |
if (is_array($this->correspondance_colonnes[$this->noms_colonnes[$c]])) { |
if ($this->noms_colonnes[$c] == 'LB_AUTEUR') {//echo $ligne[$c]; |
$valeur = explode(',', $ligne[$c]); |
if (count($valeur) > 1) {//print_r($matches); |
$nom['auteur'] = 'auteur="'.$valeur[0].'"'; |
$nom['annee'] = 'annee="'.trim($valeur[1]).'"'; |
if ($this->noms_colonnes[$c] == 'LB_AUTEUR') { |
if (preg_match('/(.*), +([0-9]{4})/', utf8_encode($ligne[$c]), $matches) == 1) { |
$nom['auteur'] = 'auteur="'.$matches[1].'"'; |
$nom['annee'] = 'annee="'.trim($matches[2]).'"'; |
} else { |
$nom['auteur'] = 'auteur="'.$ligne[$c].'"'; |
$nom['auteur'] = 'auteur="'.utf8_encode($ligne[$c]).'"'; |
$nom['annee'] = 'annee=""'; |
} |
} else { |
184,15 → 192,21 |
$nom[$this->noms_colonnes[$c]] = $ligne[$c]; |
} else { |
if ($this->correspondance_colonnes[$this->noms_colonnes[$c]] == "rang") { |
$nom[$this->correspondance_colonnes[$this->noms_colonnes[$c]]] = |
$this->correspondance_colonnes[$this->noms_colonnes[$c]].'="'.$this->rangs_bdnt_taxref[$ligne[$c]].'"'; |
$rang = $this->rangs_bdnt_taxref[$ligne[$c]]; |
// à remettre si on décide de prendre les rangs taxref |
//$nom[$this->correspondance_colonnes[$this->noms_colonnes[$c]]] = |
//$this->correspondance_colonnes[$this->noms_colonnes[$c]].'="'.$this->rangs_bdnt_taxref[$ligne[$c]].'"'; |
} elseif ($this->correspondance_colonnes[$this->noms_colonnes[$c]] == "num_nom") { |
$num_nom = $ligne[$c]; |
$nom[$this->correspondance_colonnes[$this->noms_colonnes[$c]]] = |
$this->correspondance_colonnes[$this->noms_colonnes[$c]].'="'.$ligne[$c].'"'; |
} elseif ($this->correspondance_colonnes[$this->noms_colonnes[$c]] == "nom_sci") { |
$nom_sci = $ligne[$c]; |
$nom[$this->correspondance_colonnes[$this->noms_colonnes[$c]]] = |
$this->correspondance_colonnes[$this->noms_colonnes[$c]].'="'.trim($ligne[$c]).'"'; |
} else { |
$nom[$this->correspondance_colonnes[$this->noms_colonnes[$c]]] = |
$this->correspondance_colonnes[$this->noms_colonnes[$c]].'="'.$ligne[$c].'"';; |
$this->correspondance_colonnes[$this->noms_colonnes[$c]].'="'.trim($ligne[$c]).'"'; |
} |
} |
} |
215,7 → 229,8 |
$i++; |
} elseif ($infos['CD_SUP'] != '') { |
$donnees[$num_nom]['num_tax_sup'] = "num_tax_sup=''"; |
$sup[$infos['CD_NOM']] = $taxref[$infos['CD_NOM']]; |
//$sup[$infos['CD_NOM']] = $taxref[$infos['CD_NOM']]; |
$sup[$infos['CD_SUP']] = $infos['CD_SUP']; |
} |
unset($donnees[$num_nom]['CD_SUP']); |
if (isset($correspondance[$infos['CD_REF']])) { |
223,19 → 238,126 |
$j++; |
} elseif ($infos['CD_REF'] != '') {$k++; |
$donnees[$num_nom]['num_nom_retenu'] = "num_nom_retenu=''"; |
$ref[$infos['CD_NOM']] = $taxref[$infos['CD_NOM']]; |
//$ref[$infos['CD_NOM']] = $taxref[$infos['CD_NOM']]; |
$ref[$infos['CD_REF']] = $infos['CD_REF']; |
} else { |
Debug::printr($infos['CD_NOM']."n'a pas de valeur pour CD_REF"); |
} |
unset($donnees[$num_nom]['CD_REF']); |
$donnees[$num_nom]['CD_NOM'] = 'num_taxref='.$donnees[$num_nom]['CD_NOM']; |
} |
$donnees[$num_nom]['CD_NOM'] = 'CD_NOM='.$donnees[$num_nom]['CD_NOM']; |
}//echo "les taxons supérieurs manquants :".implode(" ,", $sup)." \nles retenus ".implode(" ,", $ref); |
//$this->ecrireFichierCsv($ref, './retenu_absent.csv'); |
//$this->ajouterTaxonAbsent($abs); |
//$this->ecrireFichierCsv($sup, './superieur_absent.csv'); |
echo "$j correspondance pour nom retenu $i correspondance pour nom sup $k non pas de correspondance retenu"; |
return $donnees; |
} |
|
// rechercher dans reftax les numéros absent dans la base |
// modifier les tableaux ref et sup pour modifier $donnees (ajout + modif) |
private function ajouterTaxonAbsent($abs) { |
$requete = "SELECT ".implode(",", $this->noms_colonnes)." FROM taxref_v5 where CD_NOM IN (".implode(",", $abs).")"; |
echo $requete; |
} |
|
private function creerCorrespondanceRangBdntTaxref() { |
$rangs = explode(',', $this->manuel['rangs_bdnt_taxref']); |
foreach ($rangs as $rang) { |
list($id_bdnt, $code_taxref) = explode(':', trim($rang)); |
$this->rangs_bdnt_taxref[$code_taxref] = $id_bdnt; |
} |
} |
|
// +-------------------------------------------------------------------------------------------------------------------+ |
private function decouperNomSciTaxRef() { |
$requete = "SELECT num_nom, nom_sci, rang, type_epithete FROM {$this->referentiel}_taxref WHERE CD_NOM != ''"; |
$resultats = $this->executerRequeter($requete); |
foreach ($resultats as $nom) { |
extract($nom); |
$nomen =array('nom_supra_generique' => 'nom_supra_generique=""', 'genre' => 'genre=""', |
'epithete_infra_generique' => 'epithete_infra_generique=""', 'epithete_sp' => 'epithete_sp=""', |
'type_epithete' => 'type_epithete=""', 'epithete_infra_sp' => 'epithete_infra_sp=""', |
'cultivar_groupe' => 'cultivar_groupe=""', 'cultivar' => 'cultivar=""', 'nom_commercial' => 'nom_commercial=""'); |
$parties_noms = explode(' ', $nom_sci); |
if ($rang < 220) { |
$nomen['nom_supra_generique'] = 'nom_supra_generique="'.$nom_sci.'"'; |
} elseif ($rang == 220) { |
$nomen['genre'] = 'genre="'.trim($nom_sci).'"'; |
} elseif ($rang < 290) { |
$nomen['genre'] = 'genre="'.$parties_noms[0].'"'; |
$nomen['epithete_infra_generique'] = 'epithete_infra_generique="'.$parties_noms[1].'"'; |
} else { |
$nomen = array_merge($nomen, $this->decouperEspece($parties_noms)); |
$hybride = $this->etreHybride($parties_noms); |
if (isset($parties_noms[2]) && ($hybride === false || $hybride > 2)) { |
$nomen = array_merge($nomen, $this->decouperSousEspece($parties_noms)); |
} |
} |
$update = "UPDATE {$this->referentiel}_taxref SET ".implode(' , ', $nomen)." WHERE num_nom = ".$num_nom; |
$resultat = $this->executerRequeter($update); |
} |
return $nomen; |
} |
|
private function decouperSousEspece($parties_noms) { |
if ($this->etreTypeSousEpithete($parties_noms[2]) == true) { |
$nomen['type_epithete'] = 'type_epithete="'.$parties_noms[2].'"'; |
$nomen['epithete_infra_sp'] = 'epithete_infra_sp="'.$parties_noms[3].'"'; |
} elseif (strpos($parties_noms[2], '(') === 0) { |
$nomen['cultivar_groupe'] = 'cultivar_groupe="'.trim($parties_noms[2], "(").'"'; |
} elseif (strpos($parties_noms[2], "'") === 0) { |
$nomen['cultivar'] = 'cultivar="'.trim($parties_noms[2], "'").'"'; |
} elseif (ctype_upper($parties_noms[2]) === true) { |
$nomen['nom_commercial'] = 'nom_commercial="'.$parties_noms[2].'"'; |
} else { |
$nomen['epithete_infra_sp'] = 'epithete_infra_sp="'.$parties_noms[2].'"'; |
} |
return $nomen; |
} |
|
private function etreTypeSousEpithete($chaine) { |
$type = false; |
$types_epithete = array('subsp.', 'infra-sp.', 'var.', 'subvar.', 'f.', 'subf.', 'f. sp.', 'race', 'proles'); |
if (in_array(utf8_encode($chaine), $types_epithete)) { |
$type = true; |
} |
return $type; |
} |
|
private function decouperEspece($parties_noms) { |
$nomen['genre'] = 'genre="'.$parties_noms[0].'"'; |
$nomen['epithete_sp'] = 'epithete_sp="'.$parties_noms[1].'"'; |
$hybride = $this->etreHybride($parties_noms); |
$chimere = array_search('+', $parties_noms); |
if ($hybride != false || $hybride===0) { |
$nomen = $this->decouperEspeceHybride($hybride, $parties_noms); |
} |
return $nomen; |
} |
|
private function etreHybride($parties_noms) { |
$hybride = array_search('x', $parties_noms); |
return $hybride; |
} |
|
private function decouperEspeceHybride($hybride, $parties_noms) { |
if ($hybride == 0) { |
$nomen['genre'] = 'genre="'.$parties_noms[0].' '.$parties_noms[1].'"'; |
$nomen['epithete_sp'] = 'epithete_sp="'.$parties_noms[2].'"'; |
} elseif ($hybride == 1 && count($parties_noms) == 4) { |
$nomen['genre'] = 'genre="'.$parties_noms[0].' '.$parties_noms[1].' '.$parties_noms[2].'"'; |
$nomen['epithete_sp'] = 'epithete_sp="'.$parties_noms[3].'"'; |
} elseif ($hybride == 1 && count($parties_noms) == 3) { |
$nomen['genre'] = 'genre="'.$parties_noms[0].'"'; |
$nomen['epithete_sp'] = 'epithete_sp="'.$parties_noms[1].' '.$parties_noms[2].'"'; |
} elseif ($hybride == 2) { |
$nomen['genre'] = 'genre="'.$parties_noms[0].'"'; |
$nomen['epithete_sp'] = 'epithete_sp="'.$parties_noms[1].' '.$parties_noms[2].' '.$parties_noms[3].'"'; |
} |
return $nomen; |
} |
|
// +-------------------------------------------------------------------------------------------------------------------+ |
private function ecrireFichierCsv(&$contenu, $fichier) { |
$retour = true; |
$fichier = fopen($fichier, "w"); |
251,13 → 373,6 |
return $retour; |
} |
|
private function creerCorrespondanceRangBdntTaxref() { |
$rangs = explode(',', $this->manuel['rangs_bdnt_taxref']); |
foreach ($rangs as $rang) { |
list($id_bdnt, $code_taxref) = explode(':', trim($rang)); |
$this->rangs_bdnt_taxref[$code_taxref] = $id_bdnt; |
} |
} |
|
private function connecterPDO() { |
Config::charger('./configurations/bdd.ini'); |
264,6 → 379,7 |
try { |
$dsn = Config::get('bdd_type').':dbname='.Config::get('bdd_nom').';host='. |
Config::get('bdd_hote'); |
//$dsn = "mysql:dbname=referentiels;host=localhost"; |
$this->bdd = new PDO($dsn, Config::get('bdd_utilisateur'), Config::get('bdd_mot_de_passe')); |
} catch (PDOException $e) { |
print_r($e); |
283,8 → 399,7 |
echo $requete; |
} |
} catch (PDOException $e) { |
//print_r($this->bdd->errorInfo()); |
echo sprintf($e->getFile(), $e->getLine(), $e->getMessage(), $e->getCode()); //echo $requete; |
echo sprintf($e->getFile(), $e->getLine(), $e->getMessage(), $e->getCode(), $requete); |
} |
return $infos; |
} |