| Line 84... |
Line 84... |
| 84 |
$obsAAjouter['courriel_utilisateur'] = $courriel;
|
84 |
$obsAAjouter['courriel_utilisateur'] = $courriel;
|
| 85 |
$obsAAjouter['prenom_utilisateur'] = $prenom;
|
85 |
$obsAAjouter['prenom_utilisateur'] = $prenom;
|
| 86 |
$obsAAjouter['nom_utilisateur'] = $nom;
|
86 |
$obsAAjouter['nom_utilisateur'] = $nom;
|
| 87 |
$obsAAjouter['ordre'] = $ordreObs;
|
87 |
$obsAAjouter['ordre'] = $ordreObs;
|
| Line 88... |
Line 88... |
| 88 |
|
88 |
|
| 89 |
$obsAAjouter['nom_sel'] = $obs['nom_sel'];
|
89 |
$obsAAjouter['nom_sel'] = isset($obs['nom_sel']) ? $obs['nom_sel'] : null;
|
| 90 |
$obsAAjouter['nom_sel_nn'] = isset($obs['num_nom_sel']) ? $obs['num_nom_sel'] : null;
|
90 |
$obsAAjouter['nom_sel_nn'] = isset($obs['num_nom_sel']) ? $obs['num_nom_sel'] : null;
|
| 91 |
$obsAAjouter['nom_ret'] = isset($obs['nom_ret']) ? $obs['nom_ret'] : null;
|
91 |
$obsAAjouter['nom_ret'] = isset($obs['nom_ret']) ? $obs['nom_ret'] : null;
|
| 92 |
$obsAAjouter['nom_ret_nn'] = isset($obs['num_nom_ret']) ? $obs['num_nom_ret'] : null;
|
92 |
$obsAAjouter['nom_ret_nn'] = isset($obs['num_nom_ret']) ? $obs['num_nom_ret'] : null;
|
| 93 |
$obsAAjouter['nt'] = isset($obs['num_taxon']) ? $obs['num_taxon'] : null;
|
93 |
$obsAAjouter['nt'] = isset($obs['num_taxon']) ? $obs['num_taxon'] : null;
|
| Line 133... |
Line 133... |
| 133 |
file_put_contents("/tmp/debug-cel-" . time(),
|
133 |
file_put_contents("/tmp/debug-cel-" . time(),
|
| 134 |
$_POST . "\n=\n" . $requeteDonnees . "\n=\n" . var_export($obsAAjouter, true) .
|
134 |
$_POST . "\n=\n" . $requeteDonnees . "\n=\n" . var_export($obsAAjouter, true) .
|
| 135 |
"\n=\n", $_SERVER);
|
135 |
"\n=\n", $_SERVER);
|
| 136 |
}
|
136 |
}
|
| Line -... |
Line 137... |
| - |
|
137 |
|
| - |
|
138 |
// Tentative d'enrichissement des données taxonomiques
|
| - |
|
139 |
// @TODO attention aux perfs, aux timeouts de WS etc.
|
| - |
|
140 |
$this->enrichirDonneesTaxonomiques($obsAAjouter);
|
| 137 |
|
141 |
|
| 138 |
$observations[$ordreObs] = array(
|
142 |
$observations[$ordreObs] = array(
|
| 139 |
'obs' => $this->protegerTableau($obsAAjouter),
|
143 |
'obs' => $this->protegerTableau($obsAAjouter),
|
| 140 |
'img' => $imgAAjouter);
|
144 |
'img' => $imgAAjouter);
|
| 141 |
}
|
145 |
}
|
| Line 245... |
Line 249... |
| 245 |
);
|
249 |
);
|
| 246 |
$this->envoyerJson($retour);
|
250 |
$this->envoyerJson($retour);
|
| 247 |
exit;
|
251 |
exit;
|
| 248 |
}
|
252 |
}
|
| Line -... |
Line 253... |
| - |
|
253 |
|
| - |
|
254 |
/**
|
| - |
|
255 |
* Si les données taxonomiques sont incomplètes dans $obs
|
| - |
|
256 |
* (clefs 'nom_sel_nn', 'nom_sel', 'nom_referentiel', 'nom_ret_nn',
|
| - |
|
257 |
* 'nom_ret', 'famille'), tente d'en récupérer un maximum à l'aide des
|
| - |
|
258 |
* services eFlore, à condition que soient mentionnés au moins :
|
| - |
|
259 |
* - un nom de référentiel
|
| - |
|
260 |
* - un nom_sel_nn OU un nom_sel
|
| - |
|
261 |
*/
|
| - |
|
262 |
protected function enrichirDonneesTaxonomiques(&$obs) {
|
| - |
|
263 |
// sans référentiel, on ne peut rien faire
|
| - |
|
264 |
if (! empty($obs['nom_referentiel'])) {
|
| - |
|
265 |
// copies locales pour ne pas abimer les donénes d'entrée
|
| - |
|
266 |
$nn = $obs['nom_sel_nn'];
|
| - |
|
267 |
$ref = $obs['nom_referentiel'];
|
| - |
|
268 |
$ns = $obs['nom_sel'];
|
| - |
|
269 |
$nr = $obs['nom_ret'];
|
| - |
|
270 |
$nnr = $obs['nom_ret_nn'];
|
| - |
|
271 |
$fam = $obs['famille'];
|
| - |
|
272 |
$nt = $obs['nt'];
|
| - |
|
273 |
|
| - |
|
274 |
// si j'ai un nn, tentative de retrouver le nnr, le nom_sel,
|
| - |
|
275 |
// le nom_ret et la famille, s'ils ne sont pas déjà présents (on
|
| - |
|
276 |
// pourrait les écraser systématiquement mais l'appel au service
|
| - |
|
277 |
// dégrade les perfs)
|
| - |
|
278 |
if ((! empty($nn) && is_numeric($nn))
|
| - |
|
279 |
// omission du test sur 'nom_ret' car le service eFlore noms ne le retourne que sans auteur (pas bon)
|
| - |
|
280 |
&& (empty($ns) || empty($nnr) || empty($nt) || empty($fam) /*|| empty($nr)*/)) {
|
| - |
|
281 |
// go
|
| - |
|
282 |
$this->enrichirDonneesTaxonomiquesParNN($ref, $nn, $obs);
|
| - |
|
283 |
} else {
|
| - |
|
284 |
// si j'ai un nom complet, avec un peu de bol il sera dans le référentiel
|
| - |
|
285 |
if ((! empty($ns))
|
| - |
|
286 |
&& (empty($nn) || empty($nnr) || empty($nt) || empty($fam) /*|| empty($nr)*/)) {
|
| - |
|
287 |
// go
|
| - |
|
288 |
$this->enrichirDonneesTaxonomiquesParNS($ref, $ns, $obs);
|
| - |
|
289 |
}
|
| - |
|
290 |
} // sinon fuque
|
| - |
|
291 |
|
| - |
|
292 |
}
|
| - |
|
293 |
}
|
| - |
|
294 |
|
| - |
|
295 |
/**
|
| - |
|
296 |
* Enrichit le tableau $obs destiné à être inséré dans le BDD, en
|
| - |
|
297 |
* interrogeant le service eFlore/noms par référentiel + nom scientifique
|
| - |
|
298 |
* avec auteur
|
| - |
|
299 |
*/
|
| - |
|
300 |
protected function enrichirDonneesTaxonomiquesParNS($ref, $ns, &$obs) {
|
| - |
|
301 |
$url_nom = $this->config['eflore']['url_service_nom'];
|
| - |
|
302 |
$url_nom = str_replace('{referentiel}', $ref, $url_nom);
|
| - |
|
303 |
$url_nom .= '?recherche=etendue&ns.structure=au&masque=' . urlencode($ns);
|
| - |
|
304 |
// un horrible @ car les erreurs de file_get_contents() ne sont pas try/catchables
|
| - |
|
305 |
// @TODO mettre du cURL à l'occase
|
| - |
|
306 |
$infos_nom = @file_get_contents($url_nom);
|
| - |
|
307 |
if ($infos_nom != NULL) {
|
| - |
|
308 |
try {
|
| - |
|
309 |
$infos_nom = json_decode($infos_nom, true);
|
| - |
|
310 |
if (count($infos_nom['resultat']) > 0) {
|
| - |
|
311 |
$nn_trouve = null;
|
| - |
|
312 |
$ret_trouve = false;
|
| - |
|
313 |
// on prend le nom avec auteur correspondant exactement;
|
| - |
|
314 |
// s'il y en a plusieurs on prend le premier qui est retenu
|
| - |
|
315 |
foreach($infos_nom['resultat'] as $n => $nom) {
|
| - |
|
316 |
if (! $ret_trouve) {
|
| - |
|
317 |
if ($nom['nom_sci_complet'] == $ns) {
|
| - |
|
318 |
if ($nn_trouve == null || $nom['retenu'] == 'true') {
|
| - |
|
319 |
$nn_trouve = $n;
|
| - |
|
320 |
$ret_trouve = ($nom['retenu'] == 'true');
|
| - |
|
321 |
}
|
| - |
|
322 |
}
|
| - |
|
323 |
}
|
| - |
|
324 |
}
|
| - |
|
325 |
if ($nn_trouve != null) {
|
| - |
|
326 |
// gagné !
|
| - |
|
327 |
$obs['nom_sel_nn'] = $nn_trouve;
|
| - |
|
328 |
// et maintenant on recolle ce qu'on peut à partir du nn
|
| - |
|
329 |
$this->enrichirDonneesTaxonomiquesParNN($ref, $nn_trouve, $obs);
|
| - |
|
330 |
}
|
| - |
|
331 |
}
|
| - |
|
332 |
} catch(Exception $e) {
|
| - |
|
333 |
// échec silencieux
|
| - |
|
334 |
}
|
| - |
|
335 |
}
|
| - |
|
336 |
}
|
| - |
|
337 |
|
| - |
|
338 |
/**
|
| - |
|
339 |
* Enrichit le tableau $obs destiné à être inséré dans le BDD, en
|
| - |
|
340 |
* interrogeant le service eFlore/noms par référentiel + nn
|
| - |
|
341 |
*/
|
| - |
|
342 |
protected function enrichirDonneesTaxonomiquesParNN($ref, $nn, &$obs) {
|
| - |
|
343 |
$url_nom = $this->config['eflore']['url_service_nom'];
|
| - |
|
344 |
$url_nom = str_replace('{referentiel}', $ref, $url_nom);
|
| - |
|
345 |
$url_nom .= '/' . $nn;
|
| - |
|
346 |
// un horrible @ car les erreurs de file_get_contents() ne sont pas try/catchables
|
| - |
|
347 |
// @TODO mettre du cURL à l'occase
|
| - |
|
348 |
$infos_nom = @file_get_contents($url_nom);
|
| - |
|
349 |
if ($infos_nom != NULL) {
|
| - |
|
350 |
try {
|
| - |
|
351 |
$infos_nom = json_decode($infos_nom, true);
|
| - |
|
352 |
// une fois qu'on a les infos, on écrase tout
|
| - |
|
353 |
if ($infos_nom['nom_complet'] != null) {
|
| - |
|
354 |
$obs['nom_sel'] = $infos_nom['nom_complet'];
|
| - |
|
355 |
}
|
| - |
|
356 |
if ($infos_nom['nom_retenu.id'] != null) {
|
| - |
|
357 |
$obs['nom_ret_nn'] = $infos_nom['nom_retenu.id'];
|
| - |
|
358 |
}
|
| - |
|
359 |
if ($infos_nom['num_taxonomique'] != null) {
|
| - |
|
360 |
$obs['nt'] = $infos_nom['num_taxonomique'];
|
| - |
|
361 |
}
|
| - |
|
362 |
// manque le nom_ret retourné sans auteur (insatisfaisant)
|
| - |
|
363 |
if ($infos_nom['famille'] != null) {
|
| - |
|
364 |
$obs['famille'] = $infos_nom['famille'];
|
| - |
|
365 |
}
|
| - |
|
366 |
} catch(Exception $e) {
|
| - |
|
367 |
// échec silencieux
|
| - |
|
368 |
}
|
| - |
|
369 |
}
|
| - |
|
370 |
}
|
| 249 |
|
371 |
|
| 250 |
private function traiterProjetTags() {
|
372 |
private function traiterProjetTags() {
|
| 251 |
if (strpos($this->projet, ',') === false) {
|
373 |
if (strpos($this->projet, ',') === false) {
|
| 252 |
$this->projetTags = array('Projets coopératifs>'.$this->projet);
|
374 |
$this->projetTags = array('Projets coopératifs>'.$this->projet);
|
| 253 |
} else {
|
375 |
} else {
|