Subversion Repositories eFlore/Applications.cel

Rev

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

Rev 2152 Rev 2165
Line 1... Line 1...
1
<?php
1
<?php
2
/**
2
/**
3
 * PHP Version 5.2
-
 
4
 *
-
 
5
 * @category	CEL
-
 
6
 * @package		Services
-
 
7
 * @subpackage	Bibliothèque
-
 
8
 * @author	Raphaël Droz <raphael@tela-botanica.org>
-
 
9
 * @author	Aurelien Peronnet <aurelien@tela-botanica.org>
-
 
10
 * @copyright 2010, 2013 Tela-Botanica
-
 
11
 * @license	 http://www.cecill.info/licences/Licence_CeCILL_V2-fr.txt Licence CECILL
-
 
12
 * @license	 GPL v3 <http://www.gnu.org/licenses/gpl.txt>
-
 
13
 * @link	  /doc/jrest/
-
 
14
 *
-
 
15
 * Classe de gestion de l'ajout, modification et suppression des observations
3
 * Classe de gestion de l'ajout, modification et suppression des observations
16
 *
4
 *
17
 * TODO: $sous_requete .= ' date_modification = now() '
5
 * TODO: $sous_requete .= ' date_modification = now() '
18
 * devrait être une clause ON UPDATE ou un TRIGGER
6
 * devrait être une clause ON UPDATE ou un TRIGGER
19
 * afin de mettre à jour la date de modification uniquement lorsqu'une modification a effectivement eu lieu
7
 * afin de mettre à jour la date de modification uniquement lorsqu'une modification a effectivement eu lieu
20
 *
8
 *
-
 
9
 * @category	CEL
-
 
10
 * @package		Services
-
 
11
 * @subpackage	Bibliothèque
-
 
12
 * @author		Raphaël Droz <raphael@tela-botanica.org>
-
 
13
 * @author		Aurelien Peronnet <aurelien@tela-botanica.org>
-
 
14
 * @copyright	© 2010-2014, Tela-Botanica
-
 
15
 * @license		CECILL v2 <http://www.cecill.info/licences/Licence_CeCILL_V2-fr.txt>
-
 
16
 * @license		GPL v3 <http://www.gnu.org/licenses/gpl.txt>
21
 */
17
 */
22
class GestionObservation extends Cel {
18
class GestionObservation extends Cel {
Line 23... Line -...
23
 
-
 
24
	static $cel_obs = array(
19
 
25
		"id_observation", "ordre", "ce_utilisateur", "prenom_utilisateur", "nom_utilisateur",
20
	static $cel_obs = ['id_observation', 'ordre', 'ce_utilisateur', 'prenom_utilisateur', 'nom_utilisateur',
26
		"courriel_utilisateur", "nom_sel", "nom_sel_nn", "nom_ret", "nom_ret_nn", "nt", "famille",
21
		'courriel_utilisateur', 'nom_sel', 'nom_sel_nn', 'nom_ret', 'nom_ret_nn', 'nt', 'famille',
27
		"nom_referentiel", "ce_zone_geo", "zone_geo", "lieudit", "station", "milieu", "latitude", "longitude",
22
		'nom_referentiel', 'ce_zone_geo', 'zone_geo', 'lieudit', 'station', 'milieu', 'latitude', 'longitude',
28
		"altitude", "geodatum", "date_observation", "mots_cles_texte", "commentaire", "transmission",
23
		'altitude', 'geodatum', 'date_observation', 'mots_cles_texte', 'commentaire', 'transmission',
29
		"date_creation", "date_modification", "date_transmission", "abondance", "certitude", "phenologie",
24
		'date_creation', 'date_modification', 'date_transmission', 'abondance', 'certitude', 'phenologie',
Line 30... Line 25...
30
		"code_insee_calcul");
25
		'code_insee_calcul'];
31
 
26
 
32
	/**
27
	/**
33
	* Ajoute une observation grâce aux paramètres fournis
28
	* Ajoute une observation grâce aux paramètres fournis
Line 137... Line 132...
137
	* @param array $parametres tableau indexé avec les mêmes noms de champs que la bdd
132
	* @param array $parametres tableau indexé avec les mêmes noms de champs que la bdd
138
	*
133
	*
139
	* @return true ou false suivant le succès de l'opération
134
	* @return true ou false suivant le succès de l'opération
140
	*/
135
	*/
141
	public function modifierObservation($utilisateur, $ordre, $parametres) {
136
	public function modifierObservation($utilisateur, $ordre, $parametres) {
142
		$base_param = array(
-
 
143
			'nom_sel_nn' => NULL,
-
 
144
			'nom_sel' => NULL,
-
 
145
			'nom_ret_nn' => NULL,
-
 
146
			'nom_referentiel' => NULL);
-
 
147
		// $parametres = array_merge($base_param, $parametres);
-
 
148
 
-
 
149
		$requete_modification = "UPDATE cel_obs SET " ;
-
 
150
 
-
 
151
		// si pas de nom_sel : on supprime les champs automatiques. et le référentiel.
-
 
152
		if (false && (!isset($parametres['nom_sel']) || !@$parametres['nom_sel'])) {
-
 
153
			$parametres['nom_referentiel'] = NULL;
-
 
154
			// pas d'update de traiterParametresObservationEtConstruireSousRequeteMaj()
-
 
155
			$requete_modification .= "nom_referentiel = NULL, nom_sel_nn = NULL, nom_ret_nn = NULL, nom_ret = NULL, nt = NULL, famille = NULL,";
-
 
156
		} elseif (false) {
-
 
157
			/* TODO:
-
 
158
			 * si (à l'origine) pas de nom_sel_nn (donc pas de référentiel) POSTé
-
 
159
			 * et aucun nom déterminés, alors on supprime les données automatiques:
-
 
160
			 * alors on test une différence de réferentiel...
-
 
161
			 */
-
 
162
			$r = $parametres['nom_referentiel'];
-
 
163
			$requete_modification .= <<<EOF
-
 
164
nom_sel_nn = IF(SUBSTR(nom_referentiel, 1, 5) != "$r", NULL, nom_sel_nn),
-
 
165
nom_ret_nn = IF(SUBSTR(nom_referentiel, 1, 5) != "$r", NULL, nom_ret_nn),
-
 
166
nom_ret = IF(SUBSTR(nom_referentiel, 1, 5) != "$r", NULL, nom_ret),
-
 
167
nt = IF(SUBSTR(nom_referentiel, 1, 5) != "$r", NULL, nt),
-
 
168
famille = IF(SUBSTR(nom_referentiel, 1, 5) != "$r", NULL, famille),
-
 
169
EOF;
-
 
170
		} elseif (isset($parametres['nom_sel'])) {
137
		if (isset($parametres['nom_sel'])) {
171
			// uniquement en cas de nom_sel présent
138
			// uniquement en cas de nom_sel présent
172
			$this->traiterEspece($parametres);
139
			$this->traiterEspece($parametres);
173
		}
140
		}
174
 
-
 
175
		self::formaterParametresObservation($parametres);
141
		self::formaterParametresObservation($parametres);
176
 
-
 
177
		$champ_maj = self::traiterParametresObservationEtConstruireSousRequeteMaj($parametres);
142
		$champ_maj = self::traiterParametresObservationEtConstruireSousRequeteMaj($parametres);
178
		$champ_maj[] = "date_modification = now()";
143
		$champ_maj[] = "date_modification = now()";
-
 
144
		$clauseSet = implode(', ', $champ_maj);
-
 
145
		$utilisateurIdP = Cel::db()->proteger($utilisateur);
Line 179... Line 146...
179
 
146
 
180
		$requete_modification .=
147
		$requete = "UPDATE cel_obs SET $clauseSet ".
181
			implode(', ', $champ_maj).
148
			"WHERE ordre IN ($ordre) ".
182
			" WHERE ordre IN (".$ordre.") AND ce_utilisateur = ".Cel::db()->proteger($utilisateur).
149
			"	AND ce_utilisateur = $utilisateurIdP ".
183
			 ' -- ' . __FILE__ . ':' . __LINE__;
-
 
Line 184... Line 150...
184
 
150
			 ' -- '.__FILE__.':'.__LINE__;
185
 
151
 
186
		// important ! ne pas utiliser la fonction executerRequete qui renvoie une erreur si la requete contient des | (pipes)
152
		// important ! ne pas utiliser la fonction executerRequete qui renvoie une erreur si la requete contient des | (pipes)
187
		// ce qui peut arriver dans les commentaires
153
		// ce qui peut arriver dans les commentaires
Line 188... Line 154...
188
		// TODO: corriger la fonction ou bien continuer à utiliser executerRequeteSimple
154
		// TODO: corriger la fonction ou bien continuer à utiliser executerRequeteSimple
189
		$resultat_modification = Cel::db()->executer($requete_modification);
155
		$resultat = Cel::db()->executer($requete);
190
 
156
 
191
		$retour = true;
157
		$retour = true;
192
		if ($resultat_modification === false) {
158
		if ($resultat === false) {
193
			$retour = false;
159
			$retour = false;
194
			$this->logger('CEL_bugs', "Erreur de mise à jour d'une liste d'observations : $requete_modification");
160
			$this->logger('CEL_bugs', "Erreur de mise à jour d'une liste d'observations : $requete");
Line 195... Line 161...
195
		}
161
		}
196
		return $retour;
162
		return $retour;
197
	}
163
	}
198
 
164
 
199
	/**
165
	/**
200
	 * @return nombre d'observations mises à jour, ou FALSE en cas de problème
166
	 * @return nombre d'observations mises à jour, ou FALSE en cas de problème
201
	 */
167
	 */
202
	static function modifierMultiplesObservation($utilisateur, Array $ordre, $parametres) {
168
	static function modifierMultiplesObservation($utilisateur, Array $ordre, $parametres) {
Line 203... Line 169...
203
		// nous pouvons aussi retirer 'ce_utilisateur' (== $utilisateur) qui sera dans la clause WHERE
169
		// nous pouvons aussi retirer 'ce_utilisateur' (== $utilisateur) qui sera dans la clause WHERE
204
		$exclusions = array('nom_sel_nn', 'nom_sel', 'nom_ret_nn', 'nom_referentiel', 'ce_utilisateur');
170
		$exclusions = ['nom_sel_nn', 'nom_sel', 'nom_ret_nn', 'nom_referentiel', 'ce_utilisateur'];
Line 211... Line 177...
211
 
177
 
212
		// modifie $parametres par référence
178
		// modifie $parametres par référence
Line 213... Line 179...
213
		self::formaterParametresObservation($parametres);
179
		self::formaterParametresObservation($parametres);
214
 
-
 
215
		$champ_maj = self::traiterParametresObservationEtConstruireSousRequeteMaj($parametres);
-
 
216
		if (!$champ_maj) return 0; // rien à mettre à jour finalement
-
 
217
 
-
 
218
		$champ_maj[] = "date_modification = now()";
-
 
219
		$nb_upd = Cel::db()->executer(sprintf(
180
 
220
			"UPDATE cel_obs SET %s WHERE ordre IN (%s) AND ce_utilisateur = %s -- %s:%d",
-
 
221
			implode(', ', $champ_maj),
-
 
222
			implode(', ', $ordre),
-
 
Line 223... Line 181...
223
			Cel::db()->proteger($utilisateur),
181
		$champ_maj = self::traiterParametresObservationEtConstruireSousRequeteMaj($parametres);
-
 
182
		$nbreUpdate = count($champ_maj);
-
 
183
 
-
 
184
		if ($nbreUpdate > 0) {
-
 
185
			$champ_maj[] = 'date_modification = NOW()';
-
 
186
			$clauseSet = implode(', ', $champ_maj);
-
 
187
			$ordresListe = implode(', ', $ordre);
-
 
188
			$utilisateurIdP = Cel::db()->proteger($utilisateur);
-
 
189
 
-
 
190
			$requete = "UPDATE cel_obs SET $clauseSet ".
-
 
191
				"WHERE ordre IN ($ordresListe) ".
-
 
192
				"AND ce_utilisateur = $utilisateurIdP "
224
			__FILE__, __LINE__));
193
				.' -- '.__FILE__.':'.__LINE__;
225
 
194
			$nbreUpdate = Cel::db()->executer($requete);
226
		if ($nb_upd === FALSE) return FALSE;
195
		}
Line 227... Line 196...
227
		return $nb_upd;
196
		return $nbreUpdate;
Line 301... Line 270...
301
 
270
 
302
		$requete = 'SELECT id_observation AS id_obs '.
271
		$requete = 'SELECT id_observation AS id_obs '.
303
			'FROM cel_obs '.
272
			'FROM cel_obs '.
304
			"WHERE ce_utilisateur = $idUtilisateurP ".
273
			"WHERE ce_utilisateur = $idUtilisateurP ".
305
			"AND ordre IN ($ordre) ".
274
			"AND ordre IN ($ordre) ".
306
			' -- ' . __FILE__ . ':' . __LINE__;
275
			' -- '.__FILE__.':'.__LINE__;
Line 307... Line 276...
307
		$resultat_ids_observations = Cel::db()->requeter($requete);
276
		$resultat_ids_observations = Cel::db()->requeter($requete);
308
 
277
 
309
		$ids_obs = array();
278
		$ids_obs = array();
Line 316... Line 285...
316
 
285
 
317
			$chaine_ids_obs = implode(',', $ids_obs);
286
			$chaine_ids_obs = implode(',', $ids_obs);
318
			$requete = 'DELETE FROM cel_obs WHERE '.
287
			$requete = 'DELETE FROM cel_obs WHERE '.
319
				"ce_utilisateur = $idUtilisateurP ".
288
				"ce_utilisateur = $idUtilisateurP ".
320
				"AND id_observation IN ($chaine_ids_obs) ".
289
				"AND id_observation IN ($chaine_ids_obs) ".
Line 321... Line 290...
321
				' -- ' . __FILE__ . ':' . __LINE__;
290
				' -- '.__FILE__.':'.__LINE__;
Line 322... Line 291...
322
 
291
 
323
			$resultat_suppression_observations = Cel::db()->executer($requete);
292
			$resultat_suppression_observations = Cel::db()->executer($requete);
Line 594... Line 563...
594
		} else {
563
		} else {
595
			$valeur = Cel::db()->proteger($valeur);
564
			$valeur = Cel::db()->proteger($valeur);
596
		}
565
		}
597
		return $valeur;
566
		return $valeur;
598
	}
567
	}
599
}
568
}
600
569