Subversion Repositories eFlore/Applications.cel

Rev

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

Rev 1730 Rev 1762
Line 87... Line 87...
87
		$requete_selection_dernier_id = "SELECT id_observation FROM cel_obs ".
87
		$requete_selection_dernier_id = "SELECT id_observation FROM cel_obs ".
88
	       									   "WHERE ce_utilisateur = ".Cel::db()->proteger($utilisateur)." ".
88
	       									   "WHERE ce_utilisateur = ".Cel::db()->proteger($utilisateur)." ".
89
	       									   "AND ordre = ".Cel::db()->proteger($ordre)." ";
89
	       									   "AND ordre = ".Cel::db()->proteger($ordre)." ";
Line 90... Line 90...
90
	
90
	
-
 
91
		$dernier_id = Cel::db()->executerRequete($requete_selection_dernier_id); 
91
		$dernier_id = Cel::db()->executerRequete($requete_selection_dernier_id); 
92
		if(!$dernier_id) return NULL;
92
		return $dernier_id[0]['id_observation'];
93
		return $dernier_id[0]['id_observation'];
Line 93... Line 94...
93
	}
94
	}
94
	
95
	
Line 104... Line 105...
104
	public function modifierObservation($utilisateur, $ordre, $parametres) {
105
	public function modifierObservation($utilisateur, $ordre, $parametres) {
Line 105... Line 106...
105
		
106
		
106
		$retour = true;
107
		$retour = true;
Line -... Line 108...
-
 
108
		$requete_modification = "UPDATE cel_obs SET " ;
-
 
109
 
-
 
110
		/* TODO:
-
 
111
		 * si (à l'origine) pas de nom_sel_nn (donc pas de référentiel) POSTé
-
 
112
		 * et aucun nom déterminés, alors on supprime les données automatiques:
-
 
113
		 * alors on test une différence de réferentiel... 
-
 
114
		 nom_sel_nn = IF(SUBSTR(nom_referentiel, 1, 5) != "{$parametre['referentiel']}", NULL, nom_sel_nn),
-
 
115
		 nom_ret_nn = IF(SUBSTR(nom_referentiel, 1, 5) != "{$parametre['referentiel']}", NULL, nom_ret_nn),
-
 
116
		 nom_ret = IF(SUBSTR(nom_referentiel, 1, 5) != "{$parametre['referentiel']}", NULL, nom_ret),
-
 
117
		 nt = IF(SUBSTR(nom_referentiel, 1, 5) != "{$parametre['referentiel']}", NULL, nt),
107
		$requete_modification = "UPDATE cel_obs SET " ;
118
		 famille = IF(SUBSTR(nom_referentiel, 1, 5) != "{$parametre['referentiel']}", NULL, famille)
108
 
119
		*/
Line 109... Line 120...
109
		$sous_requete_modification = $this->traiterParametresObservationEtConstruireSousRequeteMaj($parametres);
120
		$sous_requete_modification = $this->traiterParametresObservationEtConstruireSousRequeteMaj($parametres);
Line 132... Line 143...
132
	* @param array $parametres tableau indexé avec les mêmes noms de champs que la bdd
143
	* @param array $parametres tableau indexé avec les mêmes noms de champs que la bdd
133
	*
144
	*
134
	* @return true ou false suivant le succès de l'opération
145
	* @return true ou false suivant le succès de l'opération
135
	*/
146
	*/
136
	public function modifierObservationPublique($utilisateur, $id, $parametres) {
147
	public function modifierObservationPublique($utilisateur, $id, $parametres) {
-
 
148
		$base_param = array('nom_sel_nn' => NULL,
-
 
149
							'nom_sel' => NULL,
-
 
150
							'nom_ret_nn' => NULL,
-
 
151
							'nom_referentiel' => NULL);
-
 
152
		$parametres = array_merge($base_param, $parametres);
137
	
153
 
138
		$retour = true;
154
		$retour = true;
139
		$requete_modification = "UPDATE cel_obs SET " ;
155
		$requete_modification = "UPDATE cel_obs SET " ;
Line 140... Line 156...
140
	
156
	
141
		$sous_requete_modification = $this->traiterParametresObservationEtConstruireSousRequeteMaj($parametres);
157
		$sous_requete_modification = $this->traiterParametresObservationEtConstruireSousRequeteMaj($parametres);
Line 295... Line 311...
295
	* @param array $parametres tableau indexé avec les mêmes noms de champs que la bdd
311
	* @param array $parametres tableau indexé avec les mêmes noms de champs que la bdd
296
	* 
312
	* 
297
	* @return $parametres le tableau modifié selon ce qu'il contenait
313
	* @return $parametres le tableau modifié selon ce qu'il contenait
298
	*/
314
	*/
299
	private function formaterParametresObservation(&$parametres) {
315
	private function formaterParametresObservation(&$parametres) {
300
				
316
 
301
		$code_referentiel = 'bdtfx';
317
		$code_referentiel = 'bdtfx';
302
		if(!isset($parametres['nom_referentiel'])) {
318
		if(!$parametres['nom_referentiel']) {
303
			$parametres['nom_referentiel'] = 'bdtfx:v1.01';
319
			$parametres['nom_referentiel'] = Cel::$default_referentiel;
304
		}
320
		}
305
		$code_referentiel = substr($parametres['nom_referentiel'], 0, 5);
321
		$code_referentiel = substr(trim($parametres['nom_referentiel']), 0, 5);
306
		
322
 
307
		if($this->estUnNomRetenuSansSaisi($parametres)) {
323
		// TODO/XXX: quoi ?!
308
			echo $this->estUnNomRetenuSansSaisi($parametres, 'nom_ret_nn');exit;
324
		if(!$parametres['nom_sel_nn'] && !$parametres['nom_sel'] && $parametres['nom_ret_nn']) {
309
			$parametres['nom_ret']= "";
-
 
310
			$parametres['nom_ret_nn']= "";
325
			$parametres['nom_ret'] = $parametres['nom_ret_nn'] = $parametres['nt'] = $parametres['famille'] =  "";
311
			$parametres['nt']= "";
-
 
312
			$parametres['famille']= "";
-
 
313
		}
326
		}
314
		
327
 
-
 
328
		/* pour un nom saisi sans autocomplétion 3 cas de figure existent:
-
 
329
		   1) référentiel bdtfx
-
 
330
		   1.1) trouvé par le webservice => ref = bdtfx
-
 
331
		   1.2) pas trouvé par le webservice => ref = autre
-
 
332
		   2) si le référentiel est inconnu (explicitement mis à "autre"), alors pas d'appel au webservice => ref = autre */
-
 
333
		if(in_array($code_referentiel, Cel::$referentiels_valides)) {
-
 
334
			// nom saisi sans numéro
315
		if ($this->estUnNomSolitaire($parametres)) {
335
			if ($parametres['nom_sel'] && !$parametres['nom_sel_nn']) {
316
			
-
 
317
			$chercheur_infos_complementaires = new RechercheInfosTaxonBeta($this->config, $code_referentiel);
336
				$chercheur_infos_complementaires = new RechercheInfosTaxonBeta($this->config, $code_referentiel);
318
			// Utilisation d'un nom sans numéro nomenclatural, recherche d'une correspondance sur le nom
337
				// Utilisation d'un nom sans numéro nomenclatural, recherche d'une correspondance sur le nom
-
 
338
 
319
			$complement = $chercheur_infos_complementaires->rechercherInformationsComplementairesSurNom($parametres['nom_sel']);
339
				$complement = $chercheur_infos_complementaires->rechercherInformationsComplementairesSurNom($parametres['nom_sel']);
320
 
340
 
321
			// Si l'on a trouvé un résultat sur la recherche, il s'agit vraisemblablement d'un copié-collé
341
				// Si l'on a trouvé un résultat sur la recherche, il s'agit vraisemblablement d'un copié-collé
322
			// de nom de taxon qui n'a pas été validé par la selection
342
				// de nom de taxon qui n'a pas été validé par la selection
323
			if(count($complement) > 0) {
343
				if(count($complement) > 0) {
324
				$parametres['nom_sel_nn'] = $complement[0][0];
344
					$parametres['nom_sel_nn'] = $complement[0][0];
-
 
345
				}
-
 
346
				else {
-
 
347
					// pas de résultat de recherche sur le référentiel demandé, le webservice doit peut-être être corrigé
-
 
348
					// mais en tout état de cause nous n'insérerons PAS de données incertaines associé à un référentiel !
-
 
349
					$code_referentiel = Cel::$fallback_referentiel;
-
 
350
					// note: 'nom_sel_nn' devrait être NULL, donc parametreNumNomEstPresent() ci-dessous ne devrait pas advenir
-
 
351
				}
325
			}
352
			}
326
		}
-
 
Line 327... Line 353...
327
 
353
 
328
		if ($this->parametreNumNomEstPresent($parametres)) {
354
			if ($parametres['nom_sel_nn']) {
329
			// Utilisation d'un nom faisant parti du referentiel : recherche du nom valide correspondant
355
				// Utilisation d'un nom faisant parti du referentiel : recherche du nom valide correspondant
330
			$chercheur_infos_complementaires = new RechercheInfosTaxonBeta($this->config , $code_referentiel);
356
				$chercheur_infos_complementaires = new RechercheInfosTaxonBeta($this->config , $code_referentiel);
Line 331... Line 357...
331
			$complement = $chercheur_infos_complementaires->rechercherInformationsComplementairesSurNumNom($parametres['nom_sel_nn']);
357
				$complement = $chercheur_infos_complementaires->rechercherInformationsComplementairesSurNumNom($parametres['nom_sel_nn']);
332
			
358
			
333
			$parametres['nom_ret']=$complement['Nom_Retenu'];
359
				$parametres['nom_ret']=$complement['Nom_Retenu'];
334
	        $parametres['nom_ret_nn']=$complement['Num_Nom_Retenu'];
360
				$parametres['nom_ret_nn']=$complement['Num_Nom_Retenu'];
-
 
361
				$parametres['nt']=$complement['Num_Taxon'];
335
	        $parametres['nt']=$complement['Num_Taxon'];
362
				$parametres['famille']=$complement['Famille'];
-
 
363
			}
-
 
364
		}
-
 
365
 
Line 336... Line 366...
336
	        $parametres['famille']=$complement['Famille'];
366
		// mise à jour du référentiel utilisé, sans n° de version
Line 337... Line 367...
337
		}
367
		$parametres['nom_referentiel'] = $code_referentiel;
Line 375... Line 405...
375
 
405
 
376
        return $parametres;
406
        return $parametres;
Line 377... Line -...
377
	}
-
 
378
	
-
 
379
	
-
 
380
	private function estUnNomRetenuSansSaisi($parametres) {
-
 
381
		return $this->parametreNumNomPasPresent($parametres) &&
-
 
382
		$this->parametreNomSelPasPresent($parametres) &&
-
 
383
		$this->parametreEstPresentEtValide($parametres, 'nom_ret_nn');
-
 
384
	}
-
 
385
		
-
 
386
	private function parametreEstPresentEtValide($parametres, $index) {
-
 
387
		return (isset($parametres[$index]) &&
-
 
388
		$parametres[$index] != null &&
-
 
389
		$parametres[$index] != '' &&
-
 
390
		$parametres[$index] != 0);
-
 
391
	}
-
 
392
	
-
 
393
	private function estUnNomSolitaire($parametres) {
-
 
394
		return $this->parametreNumNomPasPresent($parametres) && isset($parametres['nom_sel']) && $parametres['nom_sel'] != '';
-
 
395
	}
-
 
396
	
-
 
397
	private function parametreNumNomEstPresent($parametres) {
-
 
398
		return !$this->parametreNumNomPasPresent($parametres);
-
 
399
	}
-
 
400
	
-
 
401
	private function parametreNumNomPasPresent($parametres) {
-
 
402
		return (!isset($parametres['nom_sel_nn']) || 
-
 
403
				$parametres['nom_sel_nn'] == null ||
-
 
404
				$parametres['nom_sel_nn'] == '' || 
-
 
405
				$parametres['nom_sel_nn'] == 0);
-
 
406
	}
-
 
407
	
-
 
408
	private function parametreNomSelPasPresent($parametres) {
-
 
409
		return (!isset($parametres['nom_sel']) ||
-
 
410
		$parametres['nom_sel'] == null ||
-
 
411
		$parametres['nom_sel'] == '' ||
-
 
412
		$parametres['nom_sel'] == 0);
407
	}
413
	}
408
	
414
	
409
	
415
	/**
410
	/**
416
	* Assemble une sous requete pour un ajout, tout en formatant les paramètres et en recherchant
411
	* Assemble une sous requete pour un ajout, tout en formatant les paramètres et en recherchant
Line 423... Line 418...
423
	private function traiterParametresObservationEtConstruireSousRequeteAjout($parametres) {
418
	private function traiterParametresObservationEtConstruireSousRequeteAjout($parametres) {
Line 424... Line 419...
424
		
419
		
Line 425... Line 420...
425
		$sous_requete = '';
420
		$sous_requete = '';
426
 
421
 
427
		$parametres = $this->formaterParametresObservation($parametres);
422
		$parametres = $this->formaterParametresObservation($parametres);
428
		
423
 
Line 429... Line 424...
429
		$champs = '';
424
		$champs = '';
430
		$valeurs = '';
425
		$valeurs = '';
Line 459... Line 454...
459
	 * @param array $parametres un tableau avec les index correspondant aux champs de la bdd 
454
	 * @param array $parametres un tableau avec les index correspondant aux champs de la bdd 
460
	 * 
455
	 * 
461
	 * @return string une sous requete utilisable pour la modification d'une observation
456
	 * @return string une sous requete utilisable pour la modification d'une observation
462
	 * selon la syntaxe UPDATE table SET colonne1 = valeur1, colonne2 = valeur2 WHERE condition 
457
	 * selon la syntaxe UPDATE table SET colonne1 = valeur1, colonne2 = valeur2 WHERE condition 
463
	 */	
458
	 */	
464
	private function traiterParametresObservationEtConstruireSousRequeteMAJ($parametres) {
459
	private function traiterParametresObservationEtConstruireSousRequeteMaj($parametres) {
Line 465... Line 460...
465
		
460
		
Line 466... Line 461...
466
		$sous_requete = '';
461
		$sous_requete = '';