Subversion Repositories eFlore/Applications.cel

Rev

Rev 3068 | Rev 3088 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 3068 Rev 3076
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 {