Line 38... |
Line 38... |
38 |
|
38 |
|
39 |
private function formaterUrlsServices($config) {
|
39 |
private function formaterUrlsServices($config) {
|
40 |
$this->url_service_nom = str_replace('{referentiel}', $this->code_referentiel ,$config['eflore']['url_service_nom']);
|
40 |
$this->url_service_nom = str_replace('{referentiel}', $this->code_referentiel ,$config['eflore']['url_service_nom']);
|
41 |
$this->url_service_taxon = str_replace('{referentiel}', $this->code_referentiel ,$config['eflore']['url_service_taxon']);
|
41 |
$this->url_service_taxon = str_replace('{referentiel}', $this->code_referentiel ,$config['eflore']['url_service_taxon']);
|
- |
|
42 |
$this->url_service_chorologie_obs = $config['eflore']['url_service_chorologie_obs'];
|
42 |
$this->url_service_chorologie_obs = $config['eflore']['url_service_chorologie_obs'];
|
43 |
$this->config = $config;
|
Line 43... |
Line 44... |
43 |
}
|
44 |
}
|
Line 44... |
Line 45... |
44 |
|
45 |
|
Line 82... |
Line 83... |
82 |
}
|
83 |
}
|
Line 83... |
Line 84... |
83 |
|
84 |
|
84 |
public function rechercherInformationsComplementairesSurNom($nom_saisi) {
|
85 |
public function rechercherInformationsComplementairesSurNom($nom_saisi) {
|
85 |
$nom_saisi = trim($nom_saisi);
|
86 |
$nom_saisi = trim($nom_saisi);
|
86 |
// Essai de recherche sur le nom saisi tel quel
|
87 |
// Essai de recherche sur le nom saisi tel quel
|
87 |
$liste_genre_espece = $this->effectuerRequeteUrlRecherche($nom_saisi, true);
|
88 |
$liste_genre_espece = $this->effectuerRequeteUrlRecherche($nom_saisi, 'stricte');
|
- |
|
89 |
if($liste_genre_espece) return $liste_genre_espece;
|
88 |
if(empty($liste_genre_espece)) {
|
90 |
|
89 |
// Essai de recherche stricte en tentant de supprimer le nom d'auteur
|
- |
|
90 |
$nom_saisi_sans_auteur = self::supprimerAuteur($nom_saisi);
|
91 |
// Essai de recherche stricte en tentant de supprimer le nom d'auteur
|
91 |
if($nom_saisi_sans_auteur) { // ne pas faire la requête sur un mot vide
|
92 |
if( ($nom_saisi_sans_auteur = self::supprimerAuteur($nom_saisi)) ) { // ne pas faire la requête sur un mot vide
|
92 |
$liste_genre_espece = $this->effectuerRequeteUrlRecherche($nom_saisi_sans_auteur, true);
|
- |
|
93 |
}
|
- |
|
94 |
if(empty($liste_genre_espece)) {
|
- |
|
95 |
// Dernière tentative : essai de recherche étendue
|
- |
|
96 |
$liste_genre_espece = $this->effectuerRequeteUrlRecherche($nom_saisi, false);
|
- |
|
97 |
}
|
93 |
$liste_genre_espece = $this->effectuerRequeteUrlRecherche($nom_saisi_sans_auteur, 'stricte');
|
- |
|
94 |
}
|
- |
|
95 |
if($liste_genre_espece) return $liste_genre_espece;
|
- |
|
96 |
|
- |
|
97 |
// avant-dernière tentative : essai de recherche étendue
|
- |
|
98 |
$liste_genre_espece = $this->effectuerRequeteUrlRecherche($nom_saisi, 'etendue');
|
- |
|
99 |
if($liste_genre_espece) return $liste_genre_espece;
|
- |
|
100 |
|
- |
|
101 |
// dernière tentative: concaténation (nom_sci,auteur) (= nom-retenu généré utilisé comme nom_sci)
|
- |
|
102 |
$liste_genre_espece = $this->effectuerRequeteUrlRecherche($nom_saisi, 'concat');
|
98 |
}
|
103 |
|
99 |
return $liste_genre_espece;
|
104 |
return $liste_genre_espece;
|
Line 100... |
Line 105... |
100 |
}
|
105 |
}
|
101 |
|
106 |
|
102 |
private function effectuerRequeteUrlRecherche($nom_saisi, $stricte = true) {
|
107 |
private function effectuerRequeteUrlRecherche($nom_saisi, $mode = 'stricte') {
|
103 |
$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',
|
108 |
$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',
|
104 |
$this->url_service_nom,
|
109 |
$this->url_service_nom,
|
105 |
urlencode($nom_saisi),
|
110 |
urlencode($nom_saisi),
|
106 |
($stricte ? 'stricte' : 'etendue'),
|
111 |
$mode,
|
107 |
implode(',', array("id","nom_sci","auteur","nom_retenu.id","famille","num_taxonomique","nom_retenu_complet")))));
|
112 |
implode(',', array("id","nom_sci","auteur","nom_retenu.id","famille","num_taxonomique","nom_retenu_complet")))));
|
108 |
if(!$res) return NULL;
|
113 |
if(!$res) return NULL;
|
109 |
$resultat = (array)$res->resultat;
|
114 |
$resultat = (array)$res->resultat;
|
Line 134... |
Line 139... |
134 |
|
139 |
|
135 |
static function estUnHybride($nom_saisi) {
|
140 |
static function estUnHybride($nom_saisi) {
|
136 |
return strpos($nom_saisi,'x ') === 0;
|
141 |
return strpos($nom_saisi,'x ') === 0;
|
Line 137... |
Line 142... |
137 |
}
|
142 |
}
|
- |
|
143 |
|
- |
|
144 |
public function effectuerRequeteInfosComplementairesSurNumNom($num_nom, $ref = NULL) {
|
- |
|
145 |
if($ref && isset($this->config['eflore']['api_host'])) {
|
- |
|
146 |
return @json_decode(file_get_contents($this->config['eflore']['api_host'] . '/' .
|
- |
|
147 |
$ref . '/' .
|
- |
|
148 |
'noms' . '/' .
|
- |
|
149 |
$num_nom .
|
- |
|
150 |
'?retour.champs=' . implode(',', array('nom_sci,auteur',
|
- |
|
151 |
'id',
|
- |
|
152 |
'nom_retenu_complet',
|
- |
|
153 |
'nom_retenu.id',
|
- |
|
154 |
'num_taxonomique',
|
- |
|
155 |
'famille'))));
|
138 |
|
156 |
}
|
139 |
public function effectuerRequeteInfosComplementairesSurNumNom($num_nom) {
|
157 |
// XXX: compat
|
Line 140... |
Line 158... |
140 |
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'));
|
158 |
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'));
|
141 |
}
|
159 |
}
|
Line 181... |
Line 199... |
181 |
|
199 |
|
182 |
if($ref != $this->code_referentiel) {
|
200 |
if($ref != $this->code_referentiel) {
|
183 |
// TODO: ignorer la colonne référentiel, et utiliser le référentiel donné
|
201 |
// TODO: ignorer la colonne référentiel, et utiliser le référentiel donné
|
184 |
// mais il faut alors avertir le service (d'import/modif) d'utiliser le référentiel
|
202 |
// mais il faut alors avertir le service (d'import/modif) d'utiliser le référentiel
|
- |
|
203 |
// passé au nom d'espèce
|
- |
|
204 |
// Seul le effectuerRequeteInfosComplementairesSurNumNom() le supporte, car c'est encore
|
185 |
// passé au nom d'espèce
|
205 |
// un peu complexe à implémenter proprement pour cause d'attributs de classes.
|
186 |
}
|
206 |
}
|
187 |
// Numero nomenclatural
|
207 |
// Numero nomenclatural
|
188 |
if ($type == 'nn') {
|
208 |
if ($type == 'nn') {
|
189 |
$obj = $this->effectuerRequeteInfosComplementairesSurNumNom($num);
|
209 |
$obj = $this->effectuerRequeteInfosComplementairesSurNumNom($num, $ref);
|
190 |
}
|
210 |
}
|
191 |
// Numero taxonomique
|
211 |
// Numero taxonomique
|
192 |
else {
|
212 |
else {
|
193 |
//TODO: retourner moins de champs grâce au paramètre retour.champs
|
213 |
//TODO: retourner moins de champs grâce au paramètre retour.champs
|