Subversion Repositories eFlore/Projets.eflore-projets

Compare Revisions

Ignore whitespace Rev 1165 → Rev 1166

/trunk/services/configurations/config_bdtfx.ini
96,21 → 96,16
flore_fh_rem = flore.helvetica.rem,
flore_fournier_num = flore.fournier.id,
flore_fournier_rem = flore.fournier.rem,
flore_fg_num = flore.floragallica.num,
typus = typus,
num_meme_type = num_meme_type,
flore_belge_ed5_page = flore.belge.page,
auteur_principal = auteur_principal,
source_biblio_exclure = source_biblio_exclure,
cd_nom = cd_nom"
; noms complets des flores utilisées par le service noms/id/relations/flores
flore_bonnier_texte="COSTE, 1899-1906. Flore illustrée France, (3 vol.)."
flore_cnrs_texte="GUINOCHET & VILMORIN, 1973-1984. Flore de France éd. C.N.R.S., (5 vol.)."
flore_fe_texte="TUTIN & al., 1964-1980. Flora Europaea, (5 vol.)."
flore_coste_texte="COSTE, 1899-1906. Flore illustrée France, (3 vol.)."
flore_fh_texte="LAUBER & WAGNER, 2000 Flore illustrée de Suisse"
flore_fournier_texte="FOURNIER, 1934-1940. Quatre Flores de France."
flore_belge_ed5_texte="LAMBINON & DELVOSALLE & DUVIGNEAUD, 2004 Nouvelle flore de la Belgique du G.-D. de Luxembourg du nord de la France et des régions voisines"
cd_nom = cd_nom,
source_biblio = source_biblio,
num_nom_sup = nom_sup.id"
 
; +------------------------------------------------------------------------------------------------------+
;correspondance champs bdnt pour l'affichage lors du résultat renvoyé
correspondance_champs = "
159,13 → 154,25
 
;tableau contenant tous les noms des projet et la correspondance avec le nom des champs des flores de la bdnff
noms_projets="
flore_bonnier=bonnier,
flore_cnrs=cnrs,
flore_fe=helvetica,
flore_coste=coste,
flore_fh=europaea,
flore_fournier=fournier,
flore_belge_ed5=flore_belge"
flore_bonnier=BONNIER & LAYENS 1894. Tables synoptiques des plantes vasculaires de la flore de France.,
flore_cnrs=GUINOCHET & VILMORIN 1973-1984. Flore de France éd. C.N.R.S. (5 vol.).,
flore_fe=TUTIN & al. 1964-1980. Flora Europaea (5 vol.).,
flore_coste=COSTE 1899-1906. Flore illustrée France (3 vol.).,
flore_fh=LAUBER & WAGNER 2000 Flore illustrée de Suisse,
flore_fournier=FOURNIER 1934-1940. Quatre Flores de France.,
flore_belge_ed5=LAMBINON & DELVOSALLE & DUVIGNEAUD 2004 Nouvelle flore de la Belgique du G.-D. de Luxembourg du nord de la France et des régions voisines,
flore_fg=TISON & DE FOUCAULT 2014. Flora gallica."
 
; tableau contenant le nom du champ flores
correspondance_flores="
1=BONNIER & LAYENS 1894. Tables synoptiques des plantes vasculaires de la flore de France.,
2=COSTE 1899-1906. Flore illustrée France (3 vol.).,
3=FOURNIER 1934-1940. Quatre Flores de France.,
3*=FOURNIER, additions dans l'édition de 1961.,
4=TUTIN & al. 1964-1980. Flora Europaea (5 vol.).,
4*=Flora Europaea, édition 2 (Vol. 1), voir TUTIN & al. (1993), abrégée en FE2. L'indication est surtout donnée quand la citation n'a pas été faite dans 4 (supplémentaire ou modifiée).,
5=GUINOCHET & VILMORIN 1973-1984. Flore de France éd. C.N.R.S. (5 vol.).,
6=KERGUÉLEN 1993. Liste synonymique de la flore de France."
; Correspondance entre les champs et les code l'ontologie
ChampsCodesOntologie = "
188,7 → 195,8
ssp=epithete_infra_sp,
fam=famille,
bib_ss=biblio_origine,
au_ss=auteur"
au_ss=auteur,
bib_excl=source_biblio_exclure"
[Noms]
dureecache = "php:3600*24"
/trunk/services/modules/0.1/bdtfx/CommunNomsTaxons.php
72,7 → 72,7
}
if (empty($this->parametres['ns.structure']) &&
$this->parametres['retour.format'] != 'oss') {
$this->parametres['ns.structure'] = 'au,an,bib';
$this->parametres['ns.structure'] = 'au,an,bib,bib_excl';
}
}
 
83,7 → 83,7
$this->verifierParametre('recherche', 'stricte|floue|etendue|complete');
$this->verifierParametre('ns.format', 'htm|txt');
$this->verifierParametre('retour.format', 'min|max|oss|perso');
$this->verifierParametreAvecValeurMultipe('ns.structure', 'an|au|bib|ad|gen|sp|ssp|fam|au_ss|bib_ss');
$this->verifierParametreAvecValeurMultipe('ns.structure', 'an|au|bib|ad|gen|sp|ssp|fam|au_ss|bib_ss|bib_excl');
 
/*if (count($this->erreursParametres) > 0) {
$m = 'Erreur dans votre requête : '.implode('<br/>', $this->erreursParametres);
253,9 → 253,9
foreach ($structure_nom as $structure) {
$structure = trim($structure);
$patterns = array('/^an$/', '/^au$/', '/^bib$/', '/^ad$/', '/^sp$/', '/^gen$/', '/^ssp$/','/^fam$/',
'/^au_ss$/','/^bib_ss$/');
'/^au_ss$/','/^bib_ss$/','/^bib_excl$/');
$champs = array('annee', 'auteur', 'biblio_origine', 'nom_addendum', 'epithete_sp', 'genre',
'epithete_infra_sp','famille','auteur', 'biblio_origine');
'epithete_infra_sp','famille','auteur', 'biblio_origine','source_biblio_exclure');
 
// avec str_replace() 'sp' est inclu dans 'ssp', et la conversion pour 'ssp' est mauvaise
$this->compo_nom[$structure] = preg_replace($patterns, $champs, $structure);
807,7 → 807,8
'an' => '[<span class="annee">%s</span>]',
'an_bib' => '[<span class="annee">%s</span>, <span class="biblio">%s</span>]',
'bib' => '[<span class="biblio">%s</span>]',
'ad' => '[<span class="adendum">%s</span>]');
'ad' => '[<span class="adendum">%s</span>]',
'bib_excl' => '<span class="bib_excl">, %s</span>');
} else {
$format = array(
'au' => '%s',
820,7 → 821,9
'ssp' => '%s',
'fam' => '%s',
'au_ss' => '%s',
'bib_ss' => '%s');
'bib_ss' => '%s',
'bib_excl' => ', %s'
);
}
$compo_nom = array();
 
849,6 → 852,9
} elseif (isset($bib)) {
$nom_complet[] = sprintf($format['bib'], $bib);
}
if (isset($bib_excl)) {
$nom_complet[] = sprintf($format['bib_excl'], $bib_excl);
}
if (isset($ad)) $nom_complet[] = sprintf($format['ad'], $ad);
if (isset($gen)) $nom_complet[] = sprintf($format['gen'], $gen);
if (isset($ssp)) $nom_complet[] = sprintf($format['ssp'], $ssp);
/trunk/services/modules/0.1/bdtfx/Noms.php
123,7 → 123,7
$champs_demandes = explode(',', $val);
$champs_verifies = array();
$champs_api = array_flip($this->champs_api);
$champs_supp = array('nom_retenu_complet'=>'num_nom_retenu', 'basionyme_complet'=>'basionyme');
$champs_supp = array('nom_retenu_complet'=>'num_nom_retenu', 'num_basionyme_complet'=>'num_basionyme');
$champs_api = array_merge($champs_api, $champs_supp);
foreach ($champs_demandes as $champ) {
if (array_key_exists($champ, $champs_api)) {
216,14 → 216,15
}
 
public function traiterRessourceIdSynonymie() {
// SELECT num_nom, nom_sci, num_nom_retenu, basionyme FROM bdtfx_v2_00 WHERE num_nom = X LIMIT 0,100;
// SELECT num_nom, nom_sci, num_nom_retenu, num_basionyme FROM bdtfx_v2_00 WHERE num_nom = X LIMIT 0,100;
$this->format_reponse .= '/synonymie';
if (strrpos($this->requete_champ, ', basionyme') === false) {
$this->requete_champ .= ', basionyme ';
if (strrpos($this->requete_champ, ', num_basionyme') === false) {
$this->requete_champ .= ', num_basionyme ';
}
if (strrpos($this->requete_champ, ', num_type') === false) {
$this->requete_champ .= ', num_type ';
}
$this->requete_champ .= ', source_biblio ';
$this->requete_condition[0] = 'num_nom_retenu = '.
'(SELECT num_nom_retenu FROM '.$this->table.' WHERE '.$this->requete_condition[0].')';
}
243,7 → 244,9
}
}
$this->format_reponse .= '/flores';
$this->requete_champ = 'num_nom'.$champ_flores;
$this->requete_champ = 'num_nom,num_nom_retenu,nom_sci,flores'.$champ_flores;
$this->requete_condition = null;
$this->requete_condition[] = "num_nom_retenu = ".$this->ressources[0]." OR num_nom = ".$this->ressources[0];
}
 
public function traiterRessourceStatsRangs() {
396,7 → 399,7
$reponse = $this->formaterIdHomonymie($resultat);
break;
case 'noms/id/relations/flores' : //ds CommunsNomsTaxons
$reponse = $this->formaterIdFlores($resultat[0]);
$reponse = $this->formaterIdFlores($resultat);
break;
case 'noms/stats/annees' : //ds CommunNomsTaxons
$reponse = $this->formaterStatsAnnee($resultat);
485,13 → 488,18
// résultat contient aussi l'original
if(count($resultat) > 1) {
//on remplit d'abord l'entete du resultat
$this->table_retour['id'] = $this->ressources[0];
$this->afficherEnteteResultat('/'.$this->service.'/'.$this->ressources[0].'/relations/synonymie');
$retour_id_syn['entete'] = $this->table_retour;
$this->table_retour = array();
foreach ($resultat as $tab) {
//pour chaque basionyme, on recupère le résultat : num_nom, nom_sci, basionyme et num_nom_retenu :
//pour chaque basionyme, on recupère le résultat : num_nom, nom_sci, num_basionyme et num_nom_retenu :
$this->resultat_req = $tab;
$num = $tab['num_nom'];
$this->afficherNomHrefRetenu($tab, $num);
$this->afficherDonnees('basionyme', $tab['basionyme']);
$this->afficherDonnees('num_basionyme', $tab['num_basionyme']);
$this->afficherDonnees('num_type', $tab['num_type']);
$this->afficherDonnees('source_biblio', $tab['source_biblio']);
$retour_id_syn['resultat'][$num] = $this->table_retour;
$this->table_retour = array();
}
529,42 → 537,39
return $retour_id_hom;
}
 
public function obtenirSynonymesParNumNomAvecInfosFlore($num_nom, $version='1_02') {
 
$champs_flore = 'flore_bonnier_num, flore_bonnier_rem,'.
'flore_cnrs_num, flore_cnrs_rem '.
'flore_fe_num, flore_fe_rem '.
'flore_coste_num, flore_coste_rem '.
'flore_fh_num, flore_fh_rem '.
'flore_fournier_num, flore_fournier_rem';
 
$requete = 'SELECT num_nom, nom_sci, '.$champs_flore.' '.
'FROM '.$this->table.' '.
'WHERE num_nom_retenu = '.
'('.
'SELECT num_nom_retenu FROM '.$this->table.' WHERE num_nom = "'.$num_nom.'"'.
')';
 
return $this->getBdd()->recupererTous($requete . ' -- ' . __FILE__ . ':' . __LINE__ );
}
 
public function formaterIdFlores($resultat) {
$this->recupererTableSignification('correspondance_champs,champs_api,champs_comp,noms_projets');
$this->resultat_req = $resultat;
$id = array_shift($resultat);
$reponse['entete']['id'] = $id;
$synonymes_flores = $this->obtenirSynonymesParNumNomAvecInfosFlore($this->ressources[0]);
if(is_array($synonymes_flores)) {
public function formaterIdFlores($synonymes_flores) {//print_r($resultat);
$this->recupererTableSignification('noms_projets');
if (is_array($synonymes_flores)) {//print_r($synonymes_flores);
foreach ($synonymes_flores as $synonyme) {
$nom_sci = $synonyme['nom_sci'];
$num_nom = $synonyme['num_nom'];
unset($synonyme['nom_sci']);
unset($synonyme['num_nom']);
foreach ($synonyme as $flores => $valeur) {
if ($valeur != '' && $valeur != '0') {
$this->afficherInfosFlore($synonyme, $flores, $valeur, $nom_sci, $num_nom);
if ($synonyme['num_nom'] === $synonyme['num_nom_retenu']) {
$reponse['entete']['id'] = $synonyme['num_nom'];
}
foreach ($this->noms_projets as $flore => $valeur) {
if (isset($synonyme[$flore.'_num']) && $synonyme[$flore.'_num'] != '') {
$presence[$valeur] = $flore;
$this->table_retour[$flore]['type'] = "code";
$this->afficherInfosFlore($synonyme, $flore, $valeur, '_num');
} else if (isset($synonyme[$flore.'_page']) && $synonyme[$flore.'_page'] != '') {
$this->table_retour[$flore]['type'] = "page";
$this->afficherInfosFlore($synonyme, $flore, $valeur, '_page');
} else if (isset($synonyme[$flore]) && $synonyme[$flore] != '') {
$this->table_retour[$flore]['type'] = "page";
$this->afficherInfosFlore($synonyme, $flore, $valeur, 'page');
}
}
if ($synonyme['flores'] != "") {
$this->recupererTableSignification('correspondance_flores');
$flores = explode(',', $synonyme['flores']);
$projet = array_flip($this->noms_projets);
foreach ($flores as $b =>$code) {
$code = trim($code);
if (isset($this->correspondance_flores[$code]) && !isset($presence[$this->correspondance_flores[$code]])) {
$this->table_retour[$projet[$this->correspondance_flores[$code]]]['nom_flore'] = $this->correspondance_flores[$code];
}
}
}
}
}
 
577,41 → 582,25
return $reponse;
}
 
public function getNomCompletFlore($flore) {
return Config::get($flore.'_texte');
}
 
public function afficherInfosFlore(&$resultat, $flores, $valeur, $nom_sci, $num_nom) {
$flore = substr($flores,0,strrpos($flores, '_'));
$projet = $this->noms_projets[$flore];
 
//TODO voir si l'on peut factoriser les affectations à la table retour
// et simplifier ce gros pavé
if (strrpos($flores, 'num') !== false) {
if (preg_match('/^([0-9]+)(?:[.]syn[^a-z]*|(.*))?$/', $valeur, $match)) {
$this->table_retour[$num_nom][$flore]['id'] = $match[1];
if ($projet == 'coste') {
$this->table_retour[$num_nom][$flore]['href'] = $this->ajouterHrefAutreProjet('noms', 'nn_coste:', $match[1], $projet);
}
if (isset($match[2]) && $match[2] != '') $this->table_retour[$num_nom][$flore]['cle'] = $match[2];
$this->table_retour[$num_nom][$flore]['nom_flore'] = $this->getNomCompletFlore($flore);
$this->table_retour[$num_nom][$flore]['nom_sci'] = $nom_sci;
}
if (isset($resultat[$flore.'_rem']) && !empty($resultat[$flore.'_rem'])) {
$this->table_retour[$num_nom][$flore]['remarque'] = $resultat[$flore.'_rem'];
$this->table_retour[$num_nom][$flore]['nom_flore'] = $this->getNomCompletFlore($flore);
$this->table_retour[$num_nom][$flore]['nom_sci'] = $nom_sci;
unset($resultat[$flore.'_rem']);
}
} elseif (strrpos($flores,'belge') !== false) {
if (preg_match('/^([0-9]+) (R|S)?$/', $valeur, $match)) {
if (isset($match[2])) $type = ($match[2] == 'R') ? 'taxons' : 'synonyme';
$this->table_retour[$num_nom][$flore]['page'] = $match[1];
$this->table_retour[$num_nom][$flore]['type'] = $type;
$this->table_retour[$num_nom][$flore]['nom_flore'] = $this->getNomCompletFlore($flore);
$this->table_retour[$num_nom][$flore]['nom_sci'] = $nom_sci;
}
public function afficherInfosFlore($synonyme, $flore, $nom_flore, $type) {
$statuts = array('R'=> 'nom retenu', 'S' => 'synonyme','r' => 'nom retenu', 'c' => 'cité hors clé', 's' => 'synonyme d’un nom retenu', 'cs' => 'synonyme d’un nom cité hors clé', 'i' => 'nom d’un taxon inclus dans un autre', 'is' => 'syn d’un nom d’un taxon inclus dans un autre');
preg_match('/^([0-9]+)(.*)?$/', $synonyme[$flore.$type], $match);
$this->table_retour[$flore]['nom_flore'] = $nom_flore;
$this->table_retour[$flore]['num'][$synonyme[$flore.$type]]['id'] = $match['1'];
$this->table_retour[$flore]['num'][$synonyme[$flore.$type]]['num_nom'] = $synonyme['num_nom'];
$this->table_retour[$flore]['num'][$synonyme[$flore.$type]]['nom_sci'] = $synonyme['nom_sci'];
if (isset($synonyme[$flore.'_rem']) && $synonyme[$flore.'_rem'] != '') {
$this->table_retour[$flore]['num'][$synonyme[$flore.$type]]['remarques'] = $synonyme[$flore.'_rem'];
}
if ($flore == flore_coste) {
$this->table_retour[$flore]['num'][$synonyme[$flore.$type]]['href'] = $this->ajouterHrefAutreProjet('noms', 'nn_coste:', $match[1], $projet);
}
if (isset($statuts[trim($match[2])])) {
$this->table_retour[$flore]['num'][$synonyme[$flore.$type]]['statut'] = $statuts[trim($match[2])];
} else if(trim($match[2]) != "") {
$this->table_retour[$flore]['num'][$synonyme[$flore.$type]]['statut'] = trim($match[2]);
}
}
 
//+---------------------concerne les resultats pour des requetes de type /noms avec ou sans paramètres-------+