Subversion Repositories eFlore/Applications.cel

Rev

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

Rev 3071 Rev 3072
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 150... Line 154...
150
						$img_a_taguer_ids_noms = array();
154
						$img_a_taguer_ids_noms = array();
151
						foreach ($observations as $infos) {
155
						foreach ($observations as $infos) {
152
							$obs = $infos['obs'];
156
							$obs = $infos['obs'];
153
							$img = $infos['img'];
157
							$img = $infos['img'];
Line 154... Line -...
154
 
-
 
155
							// Détection de nn depuis le nom sci :
-
 
156
							// si une obs est postée avec un nom de référentiel
-
 
157
							// mais pas de nn, alors si son nom_sel n'est pas
-
 
158
							// vide on essaye de trouver dans le référentiel le
-
 
159
							// nn correspondant à ce nom_sel
-
 
160
							if (! empty($obs['nom_referentiel'])) {
-
 
161
								// si j'ai un nn, tentative de retrouver le nnr, le nom_sel, le nom_ret et la famille
-
 
162
								$nn = $obs['nom_sel_nn'];
-
 
163
								$ref = $obs['nom_referentiel'];
-
 
164
								$nn = trim($nn, "'");
-
 
165
								$ref = trim($ref, "'");
-
 
166
								if (! empty($nn) && is_numeric($nn)) {
-
 
167
									// go
-
 
168
									$url_nom = $this->config['eflore']['url_service_nom'];
-
 
169
									$url_nom = str_replace('{referentiel}', $ref, $url_nom);
-
 
170
									$url_nom .= '/' . $nn;
-
 
171
									$infos_nom = json_decode(@file_get_contents($url_nom), true);
-
 
172
									if ($infos_nom !== NULL) {
-
 
173
										if ($infos_nom['nom_complet'] != null) {
-
 
174
											$obs['nom_sel'] = "'" . $infos_nom['nom_complet'] . "'";
-
 
175
										}
-
 
176
										if ($infos_nom['nom_retenu.id'] != null) {
-
 
177
											$obs['nom_ret_nn'] = "'" . $infos_nom['nom_retenu.id'] . "'";
-
 
178
										}
-
 
179
										// manque le nom_ret non retourné par le service noms :/
-
 
180
										if ($infos_nom['famille'] != null) {
-
 
181
											$obs['famille'] = "'" . $infos_nom['famille'] . "'";
-
 
182
										}
-
 
183
									} // sinon fuque
-
 
184
								} else {
-
 
185
									// si j'ai un nom complet, avec un peu de bol
-
 
186
									// il sera dans le référentiel
-
 
187
									if (! empty($obs['nom_sel'])) {
-
 
188
										// @TODO go
-
 
189
									}
-
 
190
								} // sinon fuque
-
 
191
								
-
 
192
							} // sinon fuque
-
 
193
							//exit;
-
 
194
 
158
 
195
							$champs = implode(', ', array_keys($obs));
159
							$champs = implode(', ', array_keys($obs));
196
							$valeurs = implode(', ', $obs);
160
							$valeurs = implode(', ', $obs);
Line 197... Line 161...
197
							$requete = "INSERT INTO cel_obs ($champs) VALUES ($valeurs) ";
161
							$requete = "INSERT INTO cel_obs ($champs) VALUES ($valeurs) ";
Line 285... Line 249...
285
		);
249
		);
286
		$this->envoyerJson($retour);
250
		$this->envoyerJson($retour);
287
		exit;
251
		exit;
288
	}
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&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 premier nom retenu qu'on trouve, ou à défaut
-
 
314
					// le premier nom tout court
-
 
315
					foreach($infos_nom['resultat'] as $n => $nom) {
-
 
316
						if (! $ret_trouve && ($nn_trouve == null || $nom['retenu'] == 'true')) { // oui oui, un 'true' entre quotes :/
-
 
317
							$nn_trouve = $n;
-
 
318
							$ret_trouve = ($nom['retenu'] == 'true');
-
 
319
						}
-
 
320
					}
-
 
321
					if ($nn_trouve != null) {
-
 
322
						// gagné !
-
 
323
						$obs['nom_sel_nn'] = $nn_trouve;
-
 
324
						// et maintenant on recolle ce qu'on peut à partir du nn
-
 
325
						$this->enrichirDonneesTaxonomiquesParNN($ref, $nn_trouve, $obs);
-
 
326
					}
-
 
327
				}
-
 
328
			} catch(Exception $e) {
-
 
329
				// échec silencieux
-
 
330
			}
-
 
331
		}
-
 
332
	}
-
 
333
 
-
 
334
	/**
-
 
335
	 * Enrichit le tableau $obs destiné à être inséré dans le BDD, en
-
 
336
	 * interrogeant le service eFlore/noms par référentiel + nn
-
 
337
	 */
-
 
338
	protected function enrichirDonneesTaxonomiquesParNN($ref, $nn, &$obs) {
-
 
339
		$url_nom = $this->config['eflore']['url_service_nom'];
-
 
340
		$url_nom = str_replace('{referentiel}', $ref, $url_nom);
-
 
341
		$url_nom .= '/' . $nn;
-
 
342
		// un horrible @ car les erreurs de file_get_contents() ne sont pas try/catchables
-
 
343
		// @TODO mettre du cURL à l'occase
-
 
344
		$infos_nom = @file_get_contents($url_nom);
-
 
345
		if ($infos_nom != NULL) {
-
 
346
			try {
-
 
347
				$infos_nom = json_decode($infos_nom, true);
-
 
348
				// une fois qu'on a les infos, on écrase tout
-
 
349
				if ($infos_nom['nom_complet'] != null) {
-
 
350
					$obs['nom_sel'] = $infos_nom['nom_complet'];
-
 
351
				}
-
 
352
				if ($infos_nom['nom_retenu.id'] != null) {
-
 
353
					$obs['nom_ret_nn'] = $infos_nom['nom_retenu.id'];
-
 
354
				}
-
 
355
				if ($infos_nom['num_taxonomique'] != null) {
-
 
356
					$obs['nt'] = $infos_nom['num_taxonomique'];
-
 
357
				}
-
 
358
				// manque le nom_ret retourné sans auteur (insatisfaisant)
-
 
359
				if ($infos_nom['famille'] != null) {
-
 
360
					$obs['famille'] = $infos_nom['famille'];
-
 
361
				}
-
 
362
			} catch(Exception $e) {
-
 
363
				// échec silencieux
-
 
364
			}
-
 
365
		}
-
 
366
	}
289
 
367
 
290
	private function traiterProjetTags() {
368
	private function traiterProjetTags() {
291
		if (strpos($this->projet, ',') === false) {
369
		if (strpos($this->projet, ',') === false) {
292
			$this->projetTags = array('Projets coopératifs>'.$this->projet);
370
			$this->projetTags = array('Projets coopératifs>'.$this->projet);
293
		} else {
371
		} else {