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 |
|