40,6 → 40,7 |
$this->url_service_nom = str_replace('{referentiel}', $this->code_referentiel ,$config['eflore']['url_service_nom']); |
$this->url_service_taxon = str_replace('{referentiel}', $this->code_referentiel ,$config['eflore']['url_service_taxon']); |
$this->url_service_chorologie_obs = $config['eflore']['url_service_chorologie_obs']; |
$this->config = $config; |
} |
|
public function rechercherGenreEspeceSurPrefixe($genre = null, $espece = null) { |
84,26 → 85,30 |
public function rechercherInformationsComplementairesSurNom($nom_saisi) { |
$nom_saisi = trim($nom_saisi); |
// Essai de recherche sur le nom saisi tel quel |
$liste_genre_espece = $this->effectuerRequeteUrlRecherche($nom_saisi, true); |
if(empty($liste_genre_espece)) { |
$liste_genre_espece = $this->effectuerRequeteUrlRecherche($nom_saisi, 'stricte'); |
if($liste_genre_espece) return $liste_genre_espece; |
|
// Essai de recherche stricte en tentant de supprimer le nom d'auteur |
$nom_saisi_sans_auteur = self::supprimerAuteur($nom_saisi); |
if($nom_saisi_sans_auteur) { // ne pas faire la requête sur un mot vide |
$liste_genre_espece = $this->effectuerRequeteUrlRecherche($nom_saisi_sans_auteur, true); |
if( ($nom_saisi_sans_auteur = self::supprimerAuteur($nom_saisi)) ) { // ne pas faire la requête sur un mot vide |
$liste_genre_espece = $this->effectuerRequeteUrlRecherche($nom_saisi_sans_auteur, 'stricte'); |
} |
if(empty($liste_genre_espece)) { |
// Dernière tentative : essai de recherche étendue |
$liste_genre_espece = $this->effectuerRequeteUrlRecherche($nom_saisi, false); |
} |
} |
if($liste_genre_espece) return $liste_genre_espece; |
|
// avant-dernière tentative : essai de recherche étendue |
$liste_genre_espece = $this->effectuerRequeteUrlRecherche($nom_saisi, 'etendue'); |
if($liste_genre_espece) return $liste_genre_espece; |
|
// dernière tentative: concaténation (nom_sci,auteur) (= nom-retenu généré utilisé comme nom_sci) |
$liste_genre_espece = $this->effectuerRequeteUrlRecherche($nom_saisi, 'concat'); |
|
return $liste_genre_espece; |
} |
|
private function effectuerRequeteUrlRecherche($nom_saisi, $stricte = true) { |
private function effectuerRequeteUrlRecherche($nom_saisi, $mode = 'stricte') { |
$res = @json_decode(file_get_contents(sprintf('%1$s?masque=%2$s&recherche=%3$s&ns.format=txt&retour.champs=%4$s&navigation.limite=1', |
$this->url_service_nom, |
urlencode($nom_saisi), |
($stricte ? 'stricte' : 'etendue'), |
$mode, |
implode(',', array("id","nom_sci","auteur","nom_retenu.id","famille","num_taxonomique","nom_retenu_complet"))))); |
if(!$res) return NULL; |
$resultat = (array)$res->resultat; |
136,7 → 141,20 |
return strpos($nom_saisi,'x ') === 0; |
} |
|
public function effectuerRequeteInfosComplementairesSurNumNom($num_nom) { |
public function effectuerRequeteInfosComplementairesSurNumNom($num_nom, $ref = NULL) { |
if($ref && isset($this->config['eflore']['api_host'])) { |
return @json_decode(file_get_contents($this->config['eflore']['api_host'] . '/' . |
$ref . '/' . |
'noms' . '/' . |
$num_nom . |
'?retour.champs=' . implode(',', array('nom_sci,auteur', |
'id', |
'nom_retenu_complet', |
'nom_retenu.id', |
'num_taxonomique', |
'famille')))); |
} |
// XXX: compat |
return @json_decode(file_get_contents($this->url_service_nom.'/'.$num_nom.'?retour.champs=nom_sci,auteur,id,nom_retenu_complet,nom_retenu.id,num_taxonomique,famille')); |
} |
|
183,10 → 201,12 |
// TODO: ignorer la colonne référentiel, et utiliser le référentiel donné |
// mais il faut alors avertir le service (d'import/modif) d'utiliser le référentiel |
// passé au nom d'espèce |
// Seul le effectuerRequeteInfosComplementairesSurNumNom() le supporte, car c'est encore |
// un peu complexe à implémenter proprement pour cause d'attributs de classes. |
} |
// Numero nomenclatural |
if ($type == 'nn') { |
$obj = $this->effectuerRequeteInfosComplementairesSurNumNom($num); |
$obj = $this->effectuerRequeteInfosComplementairesSurNumNom($num, $ref); |
} |
// Numero taxonomique |
else { |