Subversion Repositories eFlore/Applications.cel

Rev

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

Rev 2985 Rev 3500
Line 19... Line 19...
19
 * @license    CECILL v2 <http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt>
19
 * @license    CECILL v2 <http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt>
20
 * @copyright  1999-2014 Tela Botanica <accueil@tela-botanica.org>
20
 * @copyright  1999-2014 Tela Botanica <accueil@tela-botanica.org>
21
 */
21
 */
22
class GestionObservation extends Cel {
22
class GestionObservation extends Cel {
Line -... Line 23...
-
 
23
 
-
 
24
    static $cel_obs = ["input_source='widget'", "published_location si tag sensible", "occurrence_type = 'observation de terrain'", 
23
 
25
        "is_visible_in_cel =1", "is_visible_in_veglab =0", "is_wild = 1", "sample_herbarium = 0"];
24
	static $cel_obs = ['id_observation', 'ordre', 'ce_utilisateur', 'prenom_utilisateur', 'nom_utilisateur',
26
	static $correspondance_obs_occurrence = ['id_observation' => 'id',  'ce_utilisateur', 'prenom_utilisateur', 'nom_utilisateur',
25
		'courriel_utilisateur', 'nom_sel', 'nom_sel_nn', 'nom_ret', 'nom_ret_nn', 'nt', 'famille',
27
	    'courriel_utilisateur', 'nom_sel', 'nom_sel_nn', 'nom_ret', 'nom_ret_nn', 'nt', 'famille',
26
		'nom_referentiel', 'pays', 'ce_zone_geo', 'zone_geo', 'lieudit', 'station', 'milieu', 'latitude', 'longitude',
28
	    'nom_referentiel', 'pays', 'ce_zone_geo', 'zone_geo', 'lieudit', 'station', 'milieu', 'latitude', 'longitude',
27
		'altitude', 'geodatum', 'date_observation', 'mots_cles_texte', 'commentaire', 'transmission',
29
	    'altitude', 'geodatum', 'date_observation', 'mots_cles_texte', 'commentaire', 'transmission',
28
		'date_creation', 'date_modification', 'date_transmission', 'abondance', 'certitude', 'phenologie',
30
	    'date_creation', 'date_modification', 'date_transmission', 'abondance', 'certitude', 'phenologie',
Line 29... Line 31...
29
		'code_insee_calcul'];
31
	    'code_insee_calcul'];
30
 
32
 
31
	/**
33
	/**
32
	* Ajoute une observation grâce aux paramètres fournis
34
	* Ajoute une observation grâce aux paramètres fournis
Line 43... Line 45...
43
			'nom_sel' => NULL,
45
			'nom_sel' => NULL,
44
			'nom_ret_nn' => NULL,
46
			'nom_ret_nn' => NULL,
45
			'nom_referentiel' => NULL);
47
			'nom_referentiel' => NULL);
46
		$parametres = array_merge($base_param, $parametres);
48
		$parametres = array_merge($base_param, $parametres);
Line 47... Line -...
47
 
-
 
-
 
49
 
Line 48... Line 50...
48
		$parametres['ordre'] = $this->renvoyerDernierOrdreUtilisePlusUn($utilisateur);
50
	
Line 49... Line 51...
49
 
51
 
50
		$this->traiterEspece($parametres);
52
		$this->traiterEspece($parametres);
Line 71... Line 73...
71
		$retour = true;
73
		$retour = true;
72
		if ($resultat_ajout_observation === false) {
74
		if ($resultat_ajout_observation === false) {
73
			$retour = false;
75
			$retour = false;
74
			$msg = "Erreur de creation d'une observation : $resultat_ajout_observation";
76
			$msg = "Erreur de creation d'une observation : $resultat_ajout_observation";
75
			$this->logger('CEL_bugs', $msg);
77
			$this->logger('CEL_bugs', $msg);
76
		} else {
-
 
77
			$retour = $this->renvoyerIdPourOrdre($utilisateur ,$parametres['ordre']);
-
 
78
		}
78
		}
79
		return $retour;
79
		return $retour;
80
	}
80
	}
Line 81... Line -...
81
 
-
 
82
	/**
-
 
83
	* Renvoie le prochain numero d'ordre relatif à un utilisateur (i.e. dernier ordre + 1)
-
 
84
	*
-
 
85
	* @param int $utilisateur id utilisateur
-
 
86
	*
-
 
87
	* @return int le nouveau numero d'ordre relatif à l'utilisateur ou bien 0 s'il n'a jamais créé d'observations
-
 
88
	*/
-
 
89
	public function renvoyerDernierOrdreUtilisePlusUn($utilisateur) {
-
 
90
		$idUtilisateurP = Cel::db()->proteger($utilisateur);
-
 
91
		$requete = 'SELECT max(ordre) AS ordre '.
-
 
92
			'FROM cel_obs '.
-
 
93
			"WHERE ce_utilisateur = $idUtilisateurP ".
-
 
94
			' -- ' . __FILE__ . ':' . __LINE__;
-
 
95
		$dernier_ordre = Cel::db()->requeter($requete);
-
 
96
 
-
 
97
		$nouvel_ordre = 0;
-
 
98
		if (is_array($dernier_ordre) && count($dernier_ordre) > 0 && trim($dernier_ordre[0]['ordre']) != '') {
-
 
99
			$nouvel_ordre = $dernier_ordre[0]['ordre'] + 1;
-
 
100
		}
-
 
101
		return $nouvel_ordre;
-
 
Line 102... Line 81...
102
	}
81
 
103
 
82
 
104
	/**
83
	/**
105
	* Renvoie l'id d'observation associé à l'utilisateur et l'ordre donné
84
	* Renvoie l'id d'observation associé à l'utilisateur et l'ordre donné
Line 200... Line 179...
200
	}
179
	}
Line 201... Line 180...
201
 
180
 
202
 
181
 
-
 
182
	/**
203
	/**
183
	* Modifie une observation publique dont l'id et l'utilisateur sont passé en paramètre
204
	* Modifie une observation publique dont l'id et l'utilisateur sont passé en paramètre
184
	* Utiliser uniquement pour identiplante
205
	*
185
	*
206
	* @param int $utilisateur id utilisateur du proprietaire de l'observation
186
	* @param int $utilisateur id utilisateur du proprietaire de l'observation
207
	* @param int $id identifiant de l'observation
187
	* @param int $id identifiant de l'observation
Line 219... Line 199...
219
 
199
 
220
		$this->traiterEspece($parametres);
200
		$this->traiterEspece($parametres);
Line 221... Line 201...
221
		$this->formaterParametresObservation($parametres);
201
		$this->formaterParametresObservation($parametres);
222
 
202
 
Line 223... Line 203...
223
		$champ_maj = self::traiterParametresObservationEtConstruireSousRequeteMaj($parametres);
203
		$champ_maj = self::traiterParametresObservationEtConstruireSousRequeteMaj($parametres);
224
		$champ_maj[] = 'date_modification = NOW()';
204
		$champ_maj[] = 'date_updated = NOW()';
225
 
205
 
226
		$requete = "UPDATE cel_obs SET " .
206
		$requete = "UPDATE occurrence SET " .
227
			implode(', ', $champ_maj) .
207
			implode(', ', $champ_maj) .
228
			" WHERE id_observation = ".Cel::db()->proteger($id_obs).
208
			" WHERE id = ".Cel::db()->proteger($id_obs).
Line 229... Line 209...
229
			" AND transmission = 1 ".
209
			" AND  is_public  = 1 ".
230
			' -- ' . __FILE__ . ':' . __LINE__;
210
			' -- ' . __FILE__ . ':' . __LINE__;
Line 247... Line 227...
247
		$ids_obs_proteges = Cel::db()->proteger($idsObs);
227
		$ids_obs_proteges = Cel::db()->proteger($idsObs);
248
		$idsObsConcat = is_array($ids_obs_proteges) ? implode(', ', $ids_obs_proteges) : $ids_obs_proteges;
228
		$idsObsConcat = is_array($ids_obs_proteges) ? implode(', ', $ids_obs_proteges) : $ids_obs_proteges;
249
		$etat_transmission = $publier ? 1 : 0;
229
		$etat_transmission = $publier ? 1 : 0;
250
		$dateTransmission = $publier ? 'NOW()' : 'NULL';
230
		$dateTransmission = $publier ? 'NOW()' : 'NULL';
Line 251... Line 231...
251
 
231
 
252
		$requete = 'UPDATE cel_obs '.
232
		$requete = 'UPDATE occurrence '.
253
			"SET transmission = $etat_transmission , date_transmission = $dateTransmission, date_modification = NOW() ".
233
			"SET is_public = $etat_transmission ,  	date_published = $dateTransmission, date_updated = NOW() ".
254
			"WHERE id_observation IN ($idsObsConcat) ".
234
			"WHERE id IN ($idsObsConcat) ".
255
			' -- ' . __FILE__ . ':' . __LINE__;
235
			' -- ' . __FILE__ . ':' . __LINE__;
256
		$resultat = Cel::db()->executer($requete);
236
		$resultat = Cel::db()->executer($requete);
257
		return $resultat;
237
		return $resultat;
Line 263... Line 243...
263
	* @param int $utilisateur id utilisateur du proprietaire de l'observation
243
	* @param int $utilisateur id utilisateur du proprietaire de l'observation
264
	* @param mixed $ordre ordre(s) observation(s) relatif(s) à l'utilisateur: un seul ordre ou bien "ordre1,ordre2,ordre3" etc...
244
	* @param mixed $ordre ordre(s) observation(s) relatif(s) à l'utilisateur: un seul ordre ou bien "ordre1,ordre2,ordre3" etc...
265
	*
245
	*
266
	* @return true ou false suivant le succès de l'opération
246
	* @return true ou false suivant le succès de l'opération
267
	*/
247
	*/
268
	public function supprimerObservation($utilisateur, $ordre) {
248
	public function supprimerObservation($utilisateur, $id) {
269
		// TODO changer le systeme pour n'utiliser plus que les id
249
		// TODO changer le systeme pour n'utiliser plus que les id
270
		$retour = false;
250
		$retour = false;
271
		$tableau_ordre = explode(',', $ordre);
251
		$tableau_ordre = explode(',', $ordre);
272
		$tableau_ordre = array_map(array(Cel::db(),'proteger'), $tableau_ordre);
252
		$tableau_ordre = array_map(array(Cel::db(),'proteger'), $tableau_ordre);
273
		$ordre = implode(',', $tableau_ordre);
253
		$ordre = implode(',', $tableau_ordre);
274
		$idUtilisateurP = Cel::db()->proteger($utilisateur);
254
		$idUtilisateurP = Cel::db()->proteger($utilisateur);
Line 275... Line 255...
275
 
255
 
276
		$requete = 'SELECT id_observation AS id_obs '.
256
		$requete = 'SELECT id AS id_obs '.
277
			'FROM cel_obs '.
257
			'FROM occurrence '.
278
			"WHERE ce_utilisateur = $idUtilisateurP ".
-
 
279
			"AND ordre IN ($ordre) ".
258
			"WHERE user_id = $idUtilisateurP ".
280
			' -- '.__FILE__.':'.__LINE__;
259
			' -- '.__FILE__.':'.__LINE__;
Line 281... Line 260...
281
		$resultats = Cel::db()->requeter($requete);
260
		$resultats = Cel::db()->requeter($requete);
282
 
261
 
Line 287... Line 266...
287
				$ids_obs[] = Cel::db()->proteger($id_observation['id_obs']);
266
				$ids_obs[] = Cel::db()->proteger($id_observation['id_obs']);
288
				$ids_obs_non_protegees[] = $id_observation['id_obs'];
267
				$ids_obs_non_protegees[] = $id_observation['id_obs'];
289
			}
268
			}
Line 290... Line 269...
290
 
269
 
291
			$chaine_ids_obs = implode(',', $ids_obs);
270
			$chaine_ids_obs = implode(',', $ids_obs);
292
			$requete = 'DELETE FROM cel_obs WHERE '.
271
			$requete = 'DELETE FROM occurrence WHERE '.
293
				"ce_utilisateur = $idUtilisateurP ".
272
				"ce_utilisateur = $idUtilisateurP ".
294
				"AND id_observation IN ($chaine_ids_obs) ".
273
				"AND id_observation IN ($chaine_ids_obs) ".
295
				' -- '.__FILE__.':'.__LINE__;
274
				' -- '.__FILE__.':'.__LINE__;
Line 569... Line 548...
569
	 *
548
	 *
570
	 * @return string une sous requete utilisable pour la modification d'une observation
549
	 * @return string une sous requete utilisable pour la modification d'une observation
571
	 * selon la syntaxe UPDATE table SET colonne1 = valeur1, colonne2 = valeur2 WHERE condition
550
	 * selon la syntaxe UPDATE table SET colonne1 = valeur1, colonne2 = valeur2 WHERE condition
572
	 */
551
	 */
573
	static function traiterParametresObservationEtConstruireSousRequeteMaj($parametres) {
552
	static function traiterParametresObservationEtConstruireSousRequeteMaj($parametres) {
-
 
553
	    $correspondance = array("nom_sel" => "user_sci_name",
-
 
554
	        "nom_sel_nn" => "user_sci_name_id",
-
 
555
	        "nom_ret" => "accepted_sci_name",
-
 
556
	        "nom_ret_nn" => "accepted_sci_name_id",
-
 
557
	        "famille" => "family",
-
 
558
	        "valide" => "is_identiplante_validated",
-
 
559
	        "transmission" => "is_public");
574
		// Nullifiage ...
560
		// Nullifiage ...
575
		// TODO: code dupliqué, en faire une fonction à mettre à la place appropriée
561
		// TODO: code dupliqué, en faire une fonction à mettre à la place appropriée
576
		$champs = array();
562
		$champs = array();
577
		foreach ($parametres as $cle => $valeur) {
563
		foreach ($parametres as $cle => $valeur) {
578
			$valeur = self::renvoyerValeurDenullifiee($valeur);
564
			$valeur = self::renvoyerValeurDenullifiee($valeur);
-
 
565
			if (isset($correspondance[$cle])) {
579
			$champs[] = $cle.' = '.$valeur;
566
			    $champs[] = $correspondance[$cle].' = '.$valeur;
-
 
567
			}
-
 
568
		}
-
 
569
		if (!isset($parametres['transmission'])) {
-
 
570
		    $champs[] = "is_identiplante_validated = 1";
580
		}
571
		}
581
		return $champs;
572
		return $champs;
582
	}
573
	}
Line 583... Line 574...
583
 
574