86,7 → 86,7 |
$obsAAjouter['nom_utilisateur'] = $nom; |
$obsAAjouter['ordre'] = $ordreObs; |
|
$obsAAjouter['nom_sel'] = isset($obs['nom_sel']) ? $obs['nom_sel'] : null; |
$obsAAjouter['nom_sel'] = $obs['nom_sel']; |
$obsAAjouter['nom_sel_nn'] = isset($obs['num_nom_sel']) ? $obs['num_nom_sel'] : null; |
$obsAAjouter['nom_ret'] = isset($obs['nom_ret']) ? $obs['nom_ret'] : null; |
$obsAAjouter['nom_ret_nn'] = isset($obs['num_nom_ret']) ? $obs['num_nom_ret'] : null; |
135,10 → 135,6 |
"\n=\n", $_SERVER); |
} |
|
// Tentative d'enrichissement des données taxonomiques |
// @TODO attention aux perfs, aux timeouts de WS etc. |
$this->enrichirDonneesTaxonomiques($obsAAjouter); |
|
$observations[$ordreObs] = array( |
'obs' => $this->protegerTableau($obsAAjouter), |
'img' => $imgAAjouter); |
251,124 → 247,6 |
exit; |
} |
|
/** |
* Si les données taxonomiques sont incomplètes dans $obs |
* (clefs 'nom_sel_nn', 'nom_sel', 'nom_referentiel', 'nom_ret_nn', |
* 'nom_ret', 'famille'), tente d'en récupérer un maximum à l'aide des |
* services eFlore, à condition que soient mentionnés au moins : |
* - un nom de référentiel |
* - un nom_sel_nn OU un nom_sel |
*/ |
protected function enrichirDonneesTaxonomiques(&$obs) { |
// sans référentiel, on ne peut rien faire |
if (! empty($obs['nom_referentiel'])) { |
// copies locales pour ne pas abimer les donénes d'entrée |
$nn = $obs['nom_sel_nn']; |
$ref = $obs['nom_referentiel']; |
$ns = $obs['nom_sel']; |
$nr = $obs['nom_ret']; |
$nnr = $obs['nom_ret_nn']; |
$fam = $obs['famille']; |
$nt = $obs['nt']; |
|
// si j'ai un nn, tentative de retrouver le nnr, le nom_sel, |
// le nom_ret et la famille, s'ils ne sont pas déjà présents (on |
// pourrait les écraser systématiquement mais l'appel au service |
// dégrade les perfs) |
if ((! empty($nn) && is_numeric($nn)) |
// omission du test sur 'nom_ret' car le service eFlore noms ne le retourne que sans auteur (pas bon) |
&& (empty($ns) || empty($nnr) || empty($nt) || empty($fam) /*|| empty($nr)*/)) { |
// go |
$this->enrichirDonneesTaxonomiquesParNN($ref, $nn, $obs); |
} else { |
// si j'ai un nom complet, avec un peu de bol il sera dans le référentiel |
if ((! empty($ns)) |
&& (empty($nn) || empty($nnr) || empty($nt) || empty($fam) /*|| empty($nr)*/)) { |
// go |
$this->enrichirDonneesTaxonomiquesParNS($ref, $ns, $obs); |
} |
} // sinon fuque |
|
} |
} |
|
/** |
* Enrichit le tableau $obs destiné à être inséré dans le BDD, en |
* interrogeant le service eFlore/noms par référentiel + nom scientifique |
* avec auteur |
*/ |
protected function enrichirDonneesTaxonomiquesParNS($ref, $ns, &$obs) { |
$url_nom = $this->config['eflore']['url_service_nom']; |
$url_nom = str_replace('{referentiel}', $ref, $url_nom); |
$url_nom .= '?recherche=etendue&ns.structure=au&masque=' . urlencode($ns); |
// un horrible @ car les erreurs de file_get_contents() ne sont pas try/catchables |
// @TODO mettre du cURL à l'occase |
$infos_nom = @file_get_contents($url_nom); |
if ($infos_nom != NULL) { |
try { |
$infos_nom = json_decode($infos_nom, true); |
if (count($infos_nom['resultat']) > 0) { |
$nn_trouve = null; |
$ret_trouve = false; |
// on prend le nom avec auteur correspondant exactement; |
// s'il y en a plusieurs on prend le premier qui est retenu |
foreach($infos_nom['resultat'] as $n => $nom) { |
if (! $ret_trouve) { |
if ($nom['nom_sci_complet'] == $ns) { |
if ($nn_trouve == null || $nom['retenu'] == 'true') { |
$nn_trouve = $n; |
$ret_trouve = ($nom['retenu'] == 'true'); |
} |
} |
} |
} |
if ($nn_trouve != null) { |
// gagné ! |
$obs['nom_sel_nn'] = $nn_trouve; |
// et maintenant on recolle ce qu'on peut à partir du nn |
$this->enrichirDonneesTaxonomiquesParNN($ref, $nn_trouve, $obs); |
} |
} |
} catch(Exception $e) { |
// échec silencieux |
} |
} |
} |
|
/** |
* Enrichit le tableau $obs destiné à être inséré dans le BDD, en |
* interrogeant le service eFlore/noms par référentiel + nn |
*/ |
protected function enrichirDonneesTaxonomiquesParNN($ref, $nn, &$obs) { |
$url_nom = $this->config['eflore']['url_service_nom']; |
$url_nom = str_replace('{referentiel}', $ref, $url_nom); |
$url_nom .= '/' . $nn; |
// un horrible @ car les erreurs de file_get_contents() ne sont pas try/catchables |
// @TODO mettre du cURL à l'occase |
$infos_nom = @file_get_contents($url_nom); |
if ($infos_nom != NULL) { |
try { |
$infos_nom = json_decode($infos_nom, true); |
// une fois qu'on a les infos, on écrase tout |
if ($infos_nom['nom_complet'] != null) { |
$obs['nom_sel'] = $infos_nom['nom_complet']; |
} |
if ($infos_nom['nom_retenu.id'] != null) { |
$obs['nom_ret_nn'] = $infos_nom['nom_retenu.id']; |
} |
if ($infos_nom['num_taxonomique'] != null) { |
$obs['nt'] = $infos_nom['num_taxonomique']; |
} |
// manque le nom_ret retourné sans auteur (insatisfaisant) |
if ($infos_nom['famille'] != null) { |
$obs['famille'] = $infos_nom['famille']; |
} |
} catch(Exception $e) { |
// échec silencieux |
} |
} |
} |
|
private function traiterProjetTags() { |
if (strpos($this->projet, ',') === false) { |
$this->projetTags = array('Projets coopératifs>'.$this->projet); |