New file |
0,0 → 1,736 |
<?php |
|
// commande : /opt/lampp/bin/php cli.php description_sp -a tester -n /home/jennifer/Tela-botanica_projets/Coste/descriptions/html |
|
class DescriptionSp extends Script { |
|
protected $donnees = array(); |
protected $nb_espece = 0; |
protected $donnees_espece = array(); |
protected $fichier; |
protected $table_espece = array(); |
|
protected $parametres_autorises = array( |
'-n' => array(true, null, 'nom du dossier à analyser')); |
|
public function executer() { |
$this->bdd = new Bdd(); |
|
// Lancement de l'action demandée |
$cmd = $this->getParametre('a'); |
switch ($cmd) { |
case 'integrer' : |
$this->ouvrirDossier(); |
$this->chargerIndexGpFG(); |
$this->integrerSynonyme(); |
ksort($this->table_espece); |
$this->recupererDonneesBdnff(); |
$this->genererNumNom(); |
$this->insererNumNomDansTriples(); |
$this->creerTableCoste(); |
$this->insererTableProjetCoste(); |
break; |
default : |
$this->traiterErreur('Erreur : la commande "%s" n\'existe pas!', array($cmd)); |
} |
} |
|
//---------------------------------FONCTION DE RECUPERATION DES DONNEES SUR LES ESPECES--------------------------------- |
|
private function ouvrirDossier() { |
$this->supprimerPagesExistantes(); |
$this->reinitialiserAutoIncrement('coste_pages'); |
$this->reinitialiserAutoIncrement('coste_triples'); |
$nomDossier = $this->getParametre('n'); |
$tableaux = null; |
if (file_exists($nomDossier) === true) { |
if (is_dir($nomDossier)) { |
if ($dossierOuvert = opendir($nomDossier) ) { |
while ( ($nomFichier = readdir($dossierOuvert)) !== false) { |
if ( !is_dir($nomFichier) && preg_match('/e[0-9]{4}\.htm/', $nomFichier)) { |
$nomFichier = $nomDossier.'/'.$nomFichier; |
$this->traiterFichier($nomFichier); |
} |
} |
closedir($dossierOuvert); |
} else { |
$this->traiterErreur("Le dossier $nomDossier n'a pas pu être ouvert."); |
} |
} else { |
$tableaux[$nomDossier] = $this->ouvrirFichier($nomDossier); |
} |
} else { |
$this->traiterErreur("Le dossier $nomDossier est introuvable."); |
} |
$this->traiterInfo('Nombre d\'espèce : '.$this->nb_espece); |
//$this->creerFichier('donneesEspeces.tsv', $this->donnees_espece, '/home/jennifer/Tela-botanica_projets/Coste/descriptions/'); |
return $tableaux; |
} |
|
private function supprimerPagesExistantes() { |
//suppression des tuples déjà existants |
$requete = 'DELETE FROM coste_pages WHERE id > 35'; |
$this->bdd->requeter($requete); |
$requete = 'DELETE FROM coste_triples WHERE id > 1'; |
$this->bdd->requeter($requete); |
$requete = 'DELETE FROM coste_correspondance_bdnff '; |
$this->bdd->requeter($requete); |
$this->traiterInfo('Table coste_pages, coste_triple et coste_correspondance_bdnff ont été vidés :)'); |
} |
|
|
private function reinitialiserAutoIncrement($table) { |
$requete_max_id = 'SELECT max(id) from '.$table; |
$id_max = $this->bdd->recuperer($requete_max_id); |
$id_max = $id_max['max(id)']; |
$id_max = $id_max+1; |
$requete_pages = 'ALTER TABLE '.$table.' AUTO_INCREMENT = '.$id_max; |
$this->bdd->requeter($requete_pages); |
} |
|
|
private function traiterFichier($nomFichier) { |
$donnees = $this->ouvrirFichier($nomFichier); |
if ($donnees['ouvert'] == "oui") { |
$donneesTag = $this->creerNomPage($donnees['tag']); |
//on insère le triple titre dans coste_triples |
$this->donnees_espece[] = $donneesTag; |
$requetePage = 'INSERT INTO coste_pages (tag, time, body, latest) VALUES ("' |
.$donneesTag['nomPage'].'", NOW(), "'.$donnees['texte'].'", "Y");'; |
$requeteTriple = 'INSERT INTO coste_triples(resource, property, value) VALUES ' |
.'("'.$donneesTag['nomPage'].'", "titre", "'.$donneesTag['titre'].'"),'; |
//on insère les correspondances avec bdnff |
$donneesCorr = $this->creerCorrespondance($donnees['correspondance']); |
$requeteCorr = 'INSERT INTO coste_correspondance_bdnff VALUES ("' |
.$donneesTag['id'].'", "'.$donneesCorr['num_nom'].'", "' |
.$donneesCorr['num_tax'].'", "'.$donneesCorr['famille'].'", "'.$donneesCorr['nom_sci'].'");'; |
$requete = $requetePage." ".rtrim($requeteTriple, ',')."; ".$requeteCorr; |
$this->bdd->requeter($requete); |
|
$this->nb_espece++; |
$this->afficherAvancement("insertion espece"); |
} |
} |
|
private function ouvrirFichier($nomFichier) { |
$this->fichier = $nomFichier; |
$donnees = null; |
if (file_exists($nomFichier) === true && preg_match('/e[0-9]{4}.htm$/', $nomFichier)) { |
if ( $fichierOuvert = fopen($nomFichier, 'r') ) { |
$donnees['ouvert'] = "oui"; |
$i = 1; |
while ($ligne = fgets($fichierOuvert)) { |
if ($i == 24) { |
$donnees['tag'] = $this->traiterHtml($ligne); |
} elseif ($i == 45) { |
$donnees['texte'] = $this->traiterHtml($ligne, $au = true); |
$this->donnees['texte'] = $this->traiterHtml($ligne); |
} elseif ($i == 46 || $i == 47) { |
$donnees['texte'] .= $this->traiterHtml($ligne); |
} elseif ($i == 63 || preg_match('/Bdnff /ui', $ligne)) { |
$donnees['correspondance'] = $this->traiterHtml($ligne); |
} |
$i++; |
} |
fclose($fichierOuvert); |
} else { |
$this->traiterErreur("Le fichier $nomFichier n'a pas pu être ouvert."); |
} |
} else { |
$this->traiterErreur("Le fichier $nomFichier est introuvable."); |
} |
return $donnees; |
} |
|
|
private function traiterHtml($donnees, $au = null) { |
$donnees_traitees = strip_tags($donnees,'<B>,<I>'); |
$donnees_traitees = html_entity_decode($donnees_traitees, ENT_NOQUOTES, 'UTF-8'); |
$donnees_traitees = str_replace('<B>', '**', $donnees_traitees); |
$donnees_traitees = str_replace('</B>', '**', $donnees_traitees); |
$donnees_traitees = str_replace('<I>', '//', $donnees_traitees); |
$donnees_traitees = str_replace('</I>', '//', $donnees_traitees); |
$donnees_traitees = trim($donnees_traitees); |
if ($au) { |
$donnees_traitees = str_replace('­', '', $donnees_traitees); |
} |
return $donnees_traitees; |
} |
|
|
private function creerNomPage($tag) { |
$partiesTag = explode(' - ', $tag); |
preg_match('/(C.*)/', $tag, $titre); |
$donnees['titre'] = $titre[0]; |
|
list($num, $donnees['id']) = explode(' ', trim($partiesTag[0])); |
list($num, $donnees['num_nom_coste'] ) = explode(' ', trim($partiesTag[0])); |
$donnees['nom_sci'] = trim($partiesTag[1]); |
$partiesNomSci = explode(' ', $donnees['nom_sci']); |
|
list($numFamille, $donnees['famille']) = explode(', ', trim($partiesTag[2])); |
list($num, $tomePage) = explode(',', trim($partiesTag[3])); |
|
if (preg_match('/T(\d*)\.p(\d*)/', $tomePage, $match)){ |
$donnees['tome'] = $match[1]; |
$donnees['page'] = sprintf("%04d",$match[2]); |
} |
$donnees['nomPage'] = 'DscCoste1937T'.$donnees['tome'].'P'.$donnees['page'].implode(array_map('ucfirst',$partiesNomSci)); |
if ($donnees['nomPage'] == 'DscCoste1937TP') echo 'MERDE!!!!!!!!!!!! à la page '.$this->fichier; |
$partieNumTaxSupFamille = explode(',', $partiesTag[2]); |
$partieNumTaxSupGenre = explode(',', $partiesTag[3]); |
$donnees['num_tax_sup_genre'] = trim($partieNumTaxSupGenre[0]); |
//on recupère les auteurs, synonymes et nom_vernaculaires |
$this->recupererInfosComplementaires($donnees); |
return $donnees; |
} |
|
|
private function recupererInfosComplementaires(&$donnees) { |
$this->donnees['texte'] = str_replace('', '', $this->donnees['texte']); //on enlève un petit tiret présent entre la plupart des mots (non visible ici) |
preg_match('/^ {0,1}[*]{2}([^*]+)[*]{2} ([^–(\/]+\.?)?\s*(?:[(]([^)]+)[)])?[ –.]*(?:[\/]{2}([^\/]+)\s*–\s*[\/]{2})?/', $this->donnees['texte'], $match2); |
|
$annee = ''; |
if ($match2 == array()) echo "donnees du fichier : $this->fichier"; |
if (isset($match2[1]) && strrpos($match2[1], ' subsp. ') !== false) { |
$donnees['nom_sci'] = preg_replace(array('/ All./', '/ L./','/^\s*[0-9]{4}[ –.]*/'), '', $match2[1]); |
} |
$auteur = (isset($match2[2])) ? $match2[2] : ''; |
$synonyme = (isset($match2[3])) ? $match2[3] : ''; |
$nom_verna = (isset($match2[4])) ? $match2[4] : ''; |
if (preg_match('/^\s*[1-9]{4}\s*$/', $synonyme)) { |
$annee = $synonyme; |
$synonyme = ''; |
} elseif (preg_match('/.*?([0-9]{4})/', $auteur, $annee_match) && !preg_match('/ in /', $annee_match[1])) { |
$annee = $annee_match[1]; |
$auteur = preg_replace('/ [0-9]{4}/', '', $auteur); |
} |
$donnees['annee'] = $annee; |
$donnees['auteur'] = $auteur; |
$donnees['synonyme'] = $synonyme; |
$donnees['nom_vernaculaire'] = $nom_verna; |
$this->insererDansTableEspece($donnees); |
} |
|
|
private function insererDansTableEspece($donnees) { |
$this->table_espece[$donnees['num_nom_coste']] = array( |
'tag' => $donnees['nomPage'], |
'num_nom_retenu_coste' => $donnees['num_nom_coste'], |
'num_nom_coste' => $donnees['num_nom_coste'], |
'num_tax_sup_genre' => $donnees['num_tax_sup_genre'], |
'rang' => 290, |
'nom_sci' => $donnees['nom_sci'], |
'auteur' => $donnees['auteur'], |
'nom_vernaculaire' => $donnees['nom_vernaculaire'], |
'nom_coste' => $donnees['nom_sci'], |
'tome' => $donnees['tome'], |
'annee' => $donnees['annee'], |
'synonyme' => $donnees['synonyme']); |
} |
|
|
private function creerCorrespondance($correspondance) { |
$parties = explode('-', $correspondance); |
if (isset($parties[1])) { |
list($num, $donnees['num_nom']) = explode(' ', trim($parties[0])); |
$donnees['nom_sci'] = trim($parties[1]); |
$donnees['famille'] = trim($parties[2]); |
list($num, $num_tax) = explode('=', trim($parties[3])); |
$donnees['num_tax'] = ($num_tax == "") ? 'NULL' : $num_tax; |
} else { |
$donnees['num_nom'] = 'NULL'; |
$donnees['nom_sci'] = 'NULL'; |
$donnees['famille'] = 'NULL'; |
$donnees['num_tax'] = 'NULL'; |
} |
return $donnees; |
} |
|
//---------------------------------------FONCTION DE CREATION DE LA TABLE COSTE------------------------------------------ |
|
private function chargerIndexGpFG() { |
$requete = 'SELECT * FROM coste_index_general '; |
$resultat = $this->bdd->recupererTous($requete); |
foreach ($resultat as $nom) { |
$nom_coste = ($nom['nom_coste'] == '') ? $this->transliterer($nom['nom_sci']) : $this->transliterer($nom['nom_coste']); |
$nom_sci = $this->transliterer($nom['nom_sci']); |
$tome = $nom['tome']; |
$page = $nom['page']; |
$num_tax_sup_coste = $nom['num_tax_sup_coste']; |
$num_nom_coste = $nom['num_nom_coste']; |
$rang = $nom['rang']; |
$this->indexGpFG[$num_nom_coste] = array('nom_sci' => $nom_sci, |
'rang' => $rang, |
'nom_coste' => $nom_coste, |
'num_nom_coste' => $num_nom_coste, |
'num_tax_sup_coste' => $num_tax_sup_coste, |
'tome' => $tome, |
'page' => $page); |
} |
} |
|
|
private function transliterer($txt) { |
$txt = ucwords(strtolower(Chaine::supprimerAccents($txt))); |
return trim($txt); |
} |
|
|
private function integrerSynonyme() { |
foreach ($this->table_espece as $num_nom_coste => $donnees) { |
$et = false; //cas où on a "syno et syno L." |
$auteur = ''; |
$genre_syn = ''; |
if ($donnees['synonyme'] != '') { |
$donnees['synonyme'] = preg_replace(array('/^t\s{1}/','/^et\s{1}/', '/^avec /', '/, etc\.$/', '/\//', '//'), '', $donnees['synonyme']); |
if (strrpos($donnees['synonyme'], ';') === false |
&& preg_match('/^[A-Z][^ ]+ [^ ]+(?: ([^,;]+))?\s*[.]?(et|,)[ ]?[A-Z]{1}[^ on,]+ [^., ]+[ ]+(?:.*)?$/', $donnees['synonyme'], $ponctu)) { |
if ($ponctu[2] == 'et') { |
$synonymes = array_reverse(explode($ponctu[2], $donnees['synonyme'])); |
$et = true; |
} else { |
$synonymes = explode($ponctu[2], $donnees['synonyme']); |
} |
} else { |
$synonymes = explode(';', $donnees['synonyme']); |
} |
$num_syn = 0; //on numerote les synonyme avec comme num_nom_coste : num_nom_coste du retenu + ".1", ".2" , ... |
foreach ($synonymes as $nom_syn) { |
$annee = ''; |
$notes = $this->recupererLesNotesDesSynonymes($nom_syn); |
$this->recupererAnneeSynonyme($nom_syn, $annee); |
if (preg_match('/^\s*([^ ]*) ([^ ]*)( (?:VAR\.|v\.) [^ ]+)?(?: (.*))?$/', $nom_syn, $match)) { |
$num_syn++; |
$nom_sci = $this->recupererNomSciComplet($match, $donnees, $num_syn, $genre_syn); |
$auteur_syn = $this->recupererAuteurSyn($match, $auteur, $et); |
$this->ajouterSynonymeALaTableEspece($donnees, $nom_sci, $auteur_syn, $annee, $notes, $num_syn); |
} else { |
$this->traiterErreur('Synonyme '.$nom_syn.' non reconnu par l\'expression régulière '); |
} |
} |
} |
} |
} |
|
|
private function recupererNomSciComplet(&$match, &$donnees, &$num_syn, &$genre_syn) { |
//on récupère le nom complet du genre dans les cas ou le genre est noté : A. |
//Attention à l'ex suivant : D. THUILLIERI G. G. ; AIRA SETACEA Huds.; A. DISCOLOR Thuil.; A. ULIGINOSA Weihe |
if ($num_syn == 1 && preg_match('/^\s*[A-Z]{1}[.]\s*$/', $match[1])) { |
preg_match('/\s*([^ ]+) .+$/', $donnees['nom_sci'], $nom_genre); |
$match[1] = $nom_genre[1]; |
$genre_syn = $nom_genre[1]; |
} elseif (!preg_match('/^\s*[A-Z]{1}[.]\s*$/', $match[1])) { |
$genre_syn = $match[1]; |
} elseif ($num_syn != 1 && preg_match('/^\s*[A-Z]{1}[.]\s*$/', $match[1])) { |
$match[1] = $genre_syn; |
} |
if (isset($match[3])) { |
$nom_sci = ucfirst(strtolower($match[1].' '.$match[2].str_replace('v. ', 'var. ', $match[3]))); |
} else { |
$nom_sci = ucfirst(strtolower($match[1].' '.$match[2])); |
} |
return $nom_sci; |
} |
|
|
private function recupererAnneeSynonyme(&$nom_syn, &$annee) { |
if (preg_match('/ ([0-9]{4})\s*/', $nom_syn, $annee_match)) { |
$annee = $annee_match[1]; |
} |
} |
|
|
private function recupererAuteurSyn(&$match, &$auteur, &$et) { |
//on recupere l'auteur ds une variable ds le cas ou : R. machin et R. truc auteur. |
if (isset($match[4]) && $match[4] != '' && $et) { |
$auteur = $match[4]; |
} |
$auteur_syn = $auteur; |
if (isset($match[3]) && !$et) { |
$auteur_syn = preg_replace('/ [0-9]{4}/', '', $match[4]); |
} elseif ($auteur != '' && $et) { |
$auteur_syn = preg_replace('/ [0-9]{4}/', '', $auteur); |
} |
return $auteur_syn; |
} |
|
public function recupererLesNotesDesSynonymes(&$nom_syn) { |
// on recupère les notes |
if (preg_match('/^(ompr.|incl.) (.*)/i', $nom_syn, $note_abbr)) { |
$notes = ($note_abbr[1] == 'ompr.') ? 'compr.' : 'incl.'; |
$nom_syn = $note_abbr[2]; |
} else { |
$notes = ''; |
} |
return $notes; |
} |
|
public function ajouterSynonymeALaTableEspece($donnees, $nom_sci, $auteur_syn, $annee, $notes, $num_syn) { |
$num_nom_coste_syn = $donnees['num_nom_coste'].'.'.$num_syn; |
$this->table_espece[$num_nom_coste_syn] = array( |
'num_nom_coste' => $donnees['num_nom_coste'].'.'.$num_syn, |
'num_nom_retenu_coste' => $donnees['num_nom_coste'], |
'num_tax_sup_genre' => $donnees['num_tax_sup_genre'], |
'rang' => 290, |
'nom_sci' => $nom_sci, |
'auteur' => $auteur_syn, |
'nom_vernaculaire' => '', |
'nom_coste' => $nom_sci, |
'tome' => $donnees['tome'], |
'annee' => $annee, |
'flore_bdnff_num' => '', |
'flore_bdnff_nom_sci' => '', |
'notes' => $notes); |
} |
|
private function recupererDonneesBdnff() { |
$req = "SELECT * FROM coste_correspondance_bdnff"; |
$res = $this->bdd->recupererTous($req); |
$total = 0; |
if ($res) { |
foreach ($res as $espece_bdnff) { |
$num_nom_coste = $espece_bdnff['id']; |
if (isset($this->table_espece[$num_nom_coste])) { |
$this->table_espece[$num_nom_coste]['flore_bdnff_num'] = $espece_bdnff['num_nom']; |
$this->table_espece[$num_nom_coste]['flore_bdnff_num_tax'] = $espece_bdnff['num_tax']; |
$this->table_espece[$num_nom_coste]['flore_bdnff_nom_sci'] = $espece_bdnff['nom_sci']; |
$total++; |
} else { |
$e = "Le num_nom_coste $num_nom_coste de la table de correspondance bdnff n'exsite pas dans la table donneesEspece "; |
$this->traiterErreur($e); |
} |
} |
} else { |
$this->traiterErreur('recupererDonneesBdnff() : mauvaise requete'); |
} |
if ($total != 0) { |
$this->traiterInfo('Donnees de la bdnff recuperées pour les especes. Total bdnff = '.$total.'\n'); |
} |
} |
|
|
private function genererNumNom() { |
$this->table_num_nom = array(); |
$num_nom = 1; |
foreach($this->indexGpFG as $donneesCle) { |
$this->table_num_nom[$num_nom] = $donneesCle['num_nom_coste']; |
$this->indexGpFG[$donneesCle['num_nom_coste']]['num_nom'] = $num_nom; |
$num_nom++; |
if (preg_match('/^G[0-9]+/',$donneesCle['num_nom_coste'])) { |
foreach ($this->table_espece as $donneesEspece) { |
if ($donneesEspece['num_tax_sup_genre'] == $donneesCle['num_nom_coste']) { |
$this->table_num_nom[$num_nom] = $donneesEspece['num_nom_coste']; |
$this->table_espece[$donneesEspece['num_nom_coste']]['num_nom'] = $num_nom; |
$num_nom++; |
} |
} |
} |
} |
if ($this->table_num_nom != array()) $this->traiterInfo('Num_nom generer. Total num_nom = '.count($this->table_num_nom)); |
else $this->traiterErreur( 'erreur dans la génération des num_nom\n'); |
} |
|
|
private function insererNumNomDansTriples() { |
$table_triples = array(); |
foreach ($this->table_espece as $num_nom_coste => $donnees) { |
if (isset($donnees['synonyme'])) { |
$table_triples[] = array('resource' => $donnees['tag'], 'property' => 'num_nom', 'value' => $donnees['num_nom']); |
} |
} |
$this->suppressionTriplesExistants(); |
$this->reinitialiserAutoIncrement('coste_triples'); |
//insertion des triples num_nom en une seule requete |
foreach ($table_triples as $triple) { |
$resource = $this->bdd->proteger($triple['resource']); |
$property = $this->bdd->proteger($triple['property']); |
$value = $this->bdd->proteger($triple['value']); |
$requete = "INSERT INTO coste_triples (resource, property, value) VALUES ($resource,$property ,$value)"; |
$res = $this->bdd->requeter($requete); |
if ($res) { |
$this->afficherAvancement('Insertion des triples existants'); |
} else { |
$this->afficherAvancement('Erreur de insertion des triples existants'); |
} |
} |
} |
|
private function suppressionTriplesExistants() { |
$requete = 'DELETE FROM coste_triples '. |
'WHERE property = "num_nom"'. |
'AND resource IN ("'.implode(array_keys($this->table_espece), '","').'")'; |
$res = $this->bdd->requeter($requete); |
if ($res == '') { |
$this->traiterErreur('Suppression des triples existants : aucun existant'); |
} elseif ($res) { |
$this->traiterInfo('Suppression des triples existants'); |
} else { |
$this->traiterErreur('Erreur de suppression des triples existants'); |
} |
} |
|
private function creerTableCoste() { |
$this->insererGpFG(); |
$this->insererEspeces(); |
ksort($this->table_projet); |
} |
|
private function insererGpFG() { |
$total = 0; |
foreach ($this->indexGpFG as $donneesGpFG) { |
$num_nom = $donneesGpFG['num_nom']; |
$num_nom_retenu = $donneesGpFG['num_nom']; |
$num_tax_sup = array_search($donneesGpFG['num_tax_sup_coste'], $this->table_num_nom); |
$annee = ''; |
$nom_sci = $donneesGpFG['nom_sci']; |
$rang = $donneesGpFG['rang']; |
$nom_coste = $donneesGpFG['nom_coste']; |
$num_nom_coste = $donneesGpFG['num_nom_coste']; |
$tome = $donneesGpFG['tome']; |
$page = $donneesGpFG['page']; |
$genre = ''; |
$nom_supra_generique = ''; |
if ($rang != '220') { |
$nom_supra_generique = $nom_sci; |
} else { |
$genre = $nom_sci; |
} |
|
$this->table_projet[$num_nom] = array( |
'num_nom_retenu' => $num_nom_retenu, |
'num_tax_sup' => $num_tax_sup, |
'rang' => $rang, |
'nom_sci' => $nom_sci, |
'nom_supra_generique' => $nom_supra_generique, |
'genre' => $genre, |
'epithete_infra_generique' => '', |
'epithete_sp' => '', |
'type_epithete' => '', |
'epithete_infra_sp' => '', |
'cultivar_groupe' => '', |
'cultivar' => '', |
'nom_commercial' => '', |
'auteur' => '', |
'annee' => '', |
'biblio_origine' => '', |
'notes' => '', |
'nom_adenddum' => '', |
'basionyme' => '', |
'nom_francais' => '', |
'nom_coste' => $nom_coste, |
'num_nom_coste' => $num_nom_coste, |
'tome' => $tome, |
'page' => $page, |
'flore_bdnff_num' => '', |
'flore_bdnff_nom_sci' => '', |
'nom_sci_html' => '' |
); |
$total++; |
} |
$this->traiterInfo('Donnees ajoutées à la table pour les groupes, familles et genres. Total donnees = '.$total.'\n'); |
} |
|
|
private function insererEspeces() { |
$total = 0; |
foreach ($this->table_espece as $donnees) { |
$num_nom = $donnees['num_nom']; |
if (isset($donnees['num_nom_retenu_coste'])) { |
$num_nom_retenu = array_search($donnees['num_nom_retenu_coste'], $this->table_num_nom); //on recupere le num_nom à partir du num_nom_coste |
} else { |
$num_nom_retenu = $donnees['num_nom']; |
} |
$num_tax_sup = array_search($donnees['num_tax_sup_genre'], $this->table_num_nom); //on recupere le num_nom à partir du num_nom_coste |
$nom_sci = $donnees['nom_sci']; |
$rang = $donnees['rang']; |
$nom_coste = $donnees['nom_coste']; |
$num_nom_coste = (preg_match('/^([0-9]+)(?:\.[0-9]{1})?$/', $donnees['num_nom_coste'], $match)) ? $match[1] : $donnees['num_nom_coste']; |
$tome = $donnees['tome']; |
$auteur = $donnees['auteur']; |
$annee = $donnees['annee']; |
//$synonyme = $donnees['synonyme']; |
$nom_verna = $donnees['nom_vernaculaire']; |
$flore_bdnff_num = $donnees['flore_bdnff_num']; |
$flore_bdnff_nom_sci = $donnees['flore_bdnff_nom_sci']; |
$notes = (isset($donnees['notes'])) ? $donnees['notes'] : ''; |
$genre = ''; |
$epithete_sp = ''; |
$type_epithete = ''; |
$epithete_infra_sp = ''; |
$biblio_origine = ''; |
if ($num_nom_coste == '1988') $auteur = 'Coste'; |
$this->traiterTypeEpithete($type_epithete, $nom_sci, $genre, $epithete_sp, $epithete_infra_sp); |
$this->traiterRefBiblio($auteur, $biblio_origine, $num_nom_coste); |
|
$this->table_projet[$num_nom] = array( |
'num_nom_retenu' => $num_nom_retenu, |
'num_tax_sup' => $num_tax_sup, |
'rang' => $rang, |
'nom_sci' => $nom_sci, |
'nom_supra_generique' => '', |
'genre' => $genre, |
'epithete_infra_generique' => '', |
'epithete_sp' => $epithete_sp, |
'type_epithete' => $type_epithete, |
'epithete_infra_sp' => $epithete_infra_sp, |
'cultivar_groupe' => '', |
'cultivar' => '', |
'nom_commercial' => '', |
'auteur' => $auteur, |
'annee' => $annee, |
'biblio_origine' => $biblio_origine, |
'notes' => $notes, |
'nom_adenddum' => '', |
'basionyme' => '', |
'nom_francais' => $nom_verna, |
'nom_coste' => $nom_coste, |
'num_nom_coste' => $num_nom_coste, |
'tome' => $tome, |
'page' => null, |
'flore_bdnff_num' => $flore_bdnff_num, |
'flore_bdnff_nom_sci' => $flore_bdnff_nom_sci, |
'nom_sci_html' => '' |
); |
$total++; |
} |
$this->traiterInfo('Donnees ajoutées à la table pour les especes. Total donnees = '.$total.'\n'); |
} |
|
|
private function traiterRefBiblio(&$auteur, &$biblio_origine, $num_nom_coste) { |
if (preg_match('/^(.+)\s*(in .+)$/i', $auteur, $match)) { |
if (isset($match[2]) && !empty($match[2]) && isset($match[1]) && !empty($match[1])) { |
$auteur = rtrim($match[1], ' ,'); |
$biblio_origine = $match[2]; |
} |
} elseif (preg_match('/^[^,]+\s*,\s*(.+)$/', $auteur, $match2)) { |
if (!preg_match('/^\s*non /i', $match2[1]) && !preg_match('/\s*et /i', $match2[1])) { |
if (isset($match2) && !empty($match2)) { |
//affichage pour vérfier qu"aucun n'a été oublié |
//echo $num_nom_coste; |
//print_r($match2); |
} |
} |
} elseif (preg_match('/^(.+) (Sp[.].*)$/', $auteur, $match3)) { |
if (isset($match3) && !empty($match3)) { |
$auteur = rtrim($match3[1], ', '); |
$biblio_origine = $match3[2]; |
} |
} |
} |
|
|
private function traiterTypeEpithete(&$type_epithete, &$nom_sci, &$genre, &$epithete_sp, &$epithete_infra_sp) { |
if (preg_match('/^([^ ]+) ([^ ]+)(?: ([^ ]+\.) ([^ ]+))?$/', $nom_sci, $match)) { |
$genre = $match[1]; |
$epithete_sp = $match[2]; |
if (isset($match[3])) { |
$type_epithete = $match[3]; |
//$this->traiterErreur('Nom : '.$nom_sci); |
} |
if (isset($match[4])) $epithete_infra_sp = $match[4]; |
} else { |
$this->traiterErreur('Erreur pr récupérer la nomenclature pr le nom_sci : '.$nom_sci); |
} |
} |
|
|
private function insererTableProjetCoste() { |
$this->supprimerTableExistante(); |
$this->creerTableCosteSQL(); |
$total = 0; |
foreach ($this->table_projet as $num_nom => $donnees) { |
|
foreach ($donnees as $key => $donn) { |
if (!in_array($key, array('rang', 'annee', 'tome', 'page'))) { |
if ($donn == 'NULL') $donn = ''; |
$donnees_2[$key] = $this->bdd->proteger($donn); |
} else { |
if ($donn == '') $donn = 'null'; |
$donnees_2[$key] = $donn; |
} |
} |
$req = 'INSERT INTO coste_v0_2 values ('.$num_nom.', '.implode(', ', $donnees_2).')'; |
$res = $this->bdd->requeter($req); |
|
if ($res) { |
$this->afficherAvancement('Insertion des noms dans Coste'); |
} else { |
$this->afficherAvancement('Erreur d\'insertion des noms dans coste'); |
} |
} |
} |
|
private function supprimerTableExistante() { |
$req = 'DROP TABLE coste_v0_2'; |
$res = $this->bdd->requeter($req); |
if ($res) { |
$this->traiterInfo('La table coste a été supprimer'); |
} |
} |
|
private function creerTableCosteSQL() { |
$requete = 'CREATE TABLE IF NOT EXISTS coste_v0_2 ( |
num_nom int(9) NOT NULL DEFAULT 0, |
num_nom_retenu varchar(9) DEFAULT NULL, |
num_tax_sup varchar(9) DEFAULT NULL, |
rang int(3), |
nom_sci varchar(500) CHARACTER SET utf8 DEFAULT "", |
nom_supra_generique varchar(500) CHARACTER SET utf8 DEFAULT "", |
genre varchar(500) CHARACTER SET utf8 DEFAULT "", |
epithete_infra_generique varchar(500) CHARACTER SET utf8 DEFAULT "", |
epithete_sp varchar(500) CHARACTER SET utf8 DEFAULT "", |
type_epithete varchar(500) CHARACTER SET utf8 DEFAULT "", |
epithete_infra_sp varchar(500) CHARACTER SET utf8 DEFAULT "", |
cultivar_groupe varchar(500) CHARACTER SET utf8 DEFAULT "", |
cultivar varchar(500) CHARACTER SET utf8 DEFAULT "", |
nom_commercial varchar(500) CHARACTER SET utf8 DEFAULT "", |
auteur varchar(100) CHARACTER SET utf8 DEFAULT "", |
annee int(4) DEFAULT NULL, |
biblio_origine varchar(500) CHARACTER SET utf8 NOT NULL DEFAULT "", |
notes varchar(500) CHARACTER SET utf8 NOT NULL DEFAULT "", |
nom_addendum varchar(500) CHARACTER SET utf8 NOT NULL DEFAULT "", |
basionyme varchar(9) CHARACTER SET utf8 NOT NULL DEFAULT "", |
nom_francais text CHARACTER SET utf8 DEFAULT "", |
nom_coste varchar(500) CHARACTER SET utf8 DEFAULT "", |
num_nom_coste varchar(9) CHARACTER SET utf8 DEFAULT "", |
tome int(1) DEFAULT NULL, |
page int(4) DEFAULT NULL, |
flore_bdnff_num varchar(9) DEFAULT NULL, |
flore_bdnff_nom_sci varchar(500) CHARACTER SET utf8 DEFAULT NULL, |
nom_sci_html varchar(500) CHARACTER SET utf8 DEFAULT NULL, |
PRIMARY KEY (num_nom) |
) ENGINE=MyISAM DEFAULT CHARSET=utf8'; |
$res = $this->bdd->requeter($requete); |
if ($res) { |
$this->traiterInfo('La table coste a été crée'); |
} else { |
$this->traiterErreur('Probleme : la table coste n\'a pas été créée'); |
} |
} |
|
|
private function creerFichier($fichier, $tab, $chemin = null) { |
if (!$chemin) { |
$chemin = Config::get('chemin_test'); |
} |
$intitule = ''; |
$nom_fichier = fopen($chemin.$fichier, 'w+'); |
foreach ($tab as $key => $val) { |
foreach ($val as $k => $v) { |
$intitule .= $k."\t"; |
} |
fwrite($nom_fichier, trim($intitule)."\n"); |
break; |
} |
foreach ($tab as $key => $val) { |
fwrite($nom_fichier, implode("\t", $val)."\n"); |
} |
fclose($nom_fichier); |
} |
|
|
} |
?> |