Subversion Repositories eFlore/Projets.eflore-projets

Compare Revisions

Ignore whitespace Rev 10 → Rev 11

/trunk/scripts/modules/coste/DescriptionSp.php
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('&#173;', '', $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);
}
 
 
}
?>