| Line 1... |
Line 1... |
| 1 |
<?php
|
1 |
<?php
|
| 2 |
// ATTENTION ! Classe compatible uniquement avec nouveau format de bdd du cel //
|
- |
|
| 3 |
|
- |
|
| 4 |
/**
|
- |
|
| 5 |
* PHP Version 5
|
- |
|
| 6 |
*
|
- |
|
| 7 |
* @category PHP
|
- |
|
| 8 |
* @package jrest
|
- |
|
| 9 |
* @author Aurelien Peronnet <aurelien@tela-botanica.org>
|
- |
|
| 10 |
* @copyright 2010 Tela-Botanica
|
- |
|
| 11 |
* @license http://www.cecill.info/licences/Licence_CeCILL_V2-fr.txt Licence CECILL
|
- |
|
| 12 |
* @version SVN: <svn_id>
|
- |
|
| 13 |
* @link /doc/jrest/
|
- |
|
| 14 |
*/
|
- |
|
| 15 |
|
- |
|
| 16 |
/**
|
2 |
/**
|
| - |
|
3 |
* PHP Version 5.2
|
| - |
|
4 |
*
|
| - |
|
5 |
* @category PHP
|
| - |
|
6 |
* @package jrest
|
| - |
|
7 |
* @author Raphaël Droz <raphael@tela-botanica.org>
|
| - |
|
8 |
* @author Aurelien Peronnet <aurelien@tela-botanica.org>
|
| - |
|
9 |
* @copyright 2010, 2013 Tela-Botanica
|
| - |
|
10 |
* @license http://www.cecill.info/licences/Licence_CeCILL_V2-fr.txt Licence CECILL
|
| - |
|
11 |
* @license GPL v3 <http://www.gnu.org/licenses/gpl.txt>
|
| - |
|
12 |
* @link /doc/jrest/
|
| - |
|
13 |
*
|
| 17 |
* Classe de gestion de l'ajout, modification et suppression des observations
|
14 |
* Classe de gestion de l'ajout, modification et suppression des observations
|
| 18 |
*
|
15 |
*
|
| 19 |
* in=utf8
|
16 |
* TODO: $sous_requete .= ' date_modification = now() '
|
| 20 |
* out=utf8
|
17 |
* devrait être une clause ON UPDATE ou un TRIGGER
|
| - |
|
18 |
* afin de mettre à jour la date de modification uniquement lorsqu'une modification a effectivement eu lieu
|
| 21 |
*
|
19 |
*
|
| 22 |
*/
|
20 |
*/
|
| 23 |
class GestionObservation extends Cel {
|
21 |
class GestionObservation extends Cel {
|
| 24 |
|
22 |
|
| - |
|
23 |
static $cel_obs = array(
|
| - |
|
24 |
"id_observation", "ordre", "ce_utilisateur", "prenom_utilisateur", "nom_utilisateur", "courriel_utilisateur", "nom_sel", "nom_sel_nn", "nom_ret", "nom_ret_nn", "nt", "famille", "nom_referentiel",
|
| - |
|
25 |
"ce_zone_geo", "zone_geo", "lieudit", "station", "milieu", "latitude", "longitude", "altitude", "geodatum", "date_observation", "mots_cles_texte", "commentaire", "transmission",
|
| - |
|
26 |
"date_creation", "date_modification", "date_transmission", "abondance", "certitude", "phenologie", "code_insee_calcul");
|
| - |
|
27 |
|
| 25 |
/**
|
28 |
/**
|
| 26 |
* Ajoute une observation grâce aux paramètres fournis
|
29 |
* Ajoute une observation grâce aux paramètres fournis
|
| 27 |
*
|
30 |
*
|
| 28 |
* @param int $utilisateur id utilisateur du proprietaire de l'observation
|
31 |
* @param int $utilisateur id utilisateur du proprietaire de l'observation
|
| 29 |
* @param array $parametres tableau indexé avec les mêmes noms de champs que la bdd
|
32 |
* @param array $parametres tableau indexé avec les mêmes noms de champs que la bdd
|
| Line 48... |
Line 51... |
| 48 |
if(!$parametres['nom_sel_nn']) {
|
51 |
if(!$parametres['nom_sel_nn']) {
|
| 49 |
// quoiqu'il en soit, on le met à "autre"
|
52 |
// quoiqu'il en soit, on le met à "autre"
|
| 50 |
$parametres['nom_referentiel'] = Cel::$fallback_referentiel;
|
53 |
$parametres['nom_referentiel'] = Cel::$fallback_referentiel;
|
| 51 |
}
|
54 |
}
|
| Line -... |
Line 55... |
| - |
|
55 |
|
| 52 |
|
56 |
$this->ajoutInfoUtilisateurARequete($parametres);
|
| Line 53... |
Line 57... |
| 53 |
$this->formaterParametresObservation($parametres);
|
57 |
self::formaterParametresObservation($parametres);
|
| 54 |
|
58 |
|
| Line 55... |
Line 59... |
| 55 |
$requete_insertion_observation = 'INSERT INTO cel_obs ';
|
59 |
$requete_insertion_observation = 'INSERT INTO cel_obs ';
|
| Line 150... |
Line 154... |
| 150 |
}
|
154 |
}
|
| 151 |
elseif(isset($parametres['nom_sel'])) {
|
155 |
elseif(isset($parametres['nom_sel'])) {
|
| 152 |
// uniquement en cas de nom_sel présent
|
156 |
// uniquement en cas de nom_sel présent
|
| 153 |
$this->traiterEspece($parametres);
|
157 |
$this->traiterEspece($parametres);
|
| 154 |
}
|
158 |
}
|
| 155 |
$this->formaterParametresObservation($parametres);
|
- |
|
| Line -... |
Line 159... |
| - |
|
159 |
|
| - |
|
160 |
self::formaterParametresObservation($parametres);
|
| 156 |
|
161 |
|
| - |
|
162 |
$champ_maj = self::traiterParametresObservationEtConstruireSousRequeteMaj($parametres);
|
| - |
|
163 |
$champ_maj[] = "date_modification = now()";
|
| - |
|
164 |
|
| - |
|
165 |
$requete_modification .=
|
| 157 |
$requete_modification .= $this->traiterParametresObservationEtConstruireSousRequeteMaj($parametres) .
|
166 |
implode(', ', $champ_maj)
|
| Line 158... |
Line 167... |
| 158 |
" WHERE ordre IN (".$ordre.") AND ce_utilisateur = ".Cel::db()->proteger($utilisateur);
|
167 |
. " WHERE ordre IN (".$ordre.") AND ce_utilisateur = ".Cel::db()->proteger($utilisateur);
|
| 159 |
|
168 |
|
| 160 |
|
169 |
|
| Line 168... |
Line 177... |
| 168 |
$this->logger("CEL_bugs","Erreur de mise à jour d'une liste d'observations : ".$requete_modification);
|
177 |
$this->logger("CEL_bugs","Erreur de mise à jour d'une liste d'observations : ".$requete_modification);
|
| 169 |
}
|
178 |
}
|
| Line 170... |
Line 179... |
| 170 |
|
179 |
|
| 171 |
return $retour;
|
180 |
return $retour;
|
| - |
|
181 |
}
|
| - |
|
182 |
|
| - |
|
183 |
/**
|
| - |
|
184 |
* @return nombre d'observations mises à jour, ou FALSE en cas de problème
|
| - |
|
185 |
*/
|
| - |
|
186 |
static function modifierMultiplesObservation($utilisateur, Array $ordre, $parametres) {
|
| - |
|
187 |
// nous pouvons aussi retirer 'ce_utilisateur' (== $utilisateur) qui sera dans la clause WHERE
|
| - |
|
188 |
$exclusions = array('nom_sel_nn', 'nom_sel', 'nom_ret_nn', 'nom_referentiel', 'ce_utilisateur');
|
| - |
|
189 |
$parametres = array_diff_key($parametres, array_flip($exclusions));
|
| - |
|
190 |
$parametres = array_intersect_key($parametres, array_flip(self::$cel_obs));
|
| - |
|
191 |
|
| - |
|
192 |
$parametres = array_filter(
|
| - |
|
193 |
$parametres,
|
| - |
|
194 |
create_function('$e','return strpos($e, "(Valeurs multiples)") === false;'));
|
| - |
|
195 |
|
| - |
|
196 |
// modifie $parametres par référence
|
| - |
|
197 |
self::formaterParametresObservation($parametres);
|
| - |
|
198 |
|
| - |
|
199 |
$champ_maj = self::traiterParametresObservationEtConstruireSousRequeteMaj($parametres);
|
| - |
|
200 |
if(!$champ_maj) return 0; // rien à mettre à jour finalement
|
| - |
|
201 |
|
| - |
|
202 |
$champ_maj[] = "date_modification = now()";
|
| - |
|
203 |
$nb_upd = Cel::db()->executer(sprintf(
|
| - |
|
204 |
"UPDATE cel_obs SET %s WHERE ordre IN (%s) AND ce_utilisateur = %s -- %s:%d",
|
| - |
|
205 |
implode(', ', $champ_maj),
|
| - |
|
206 |
implode(', ', $ordre),
|
| - |
|
207 |
Cel::db()->proteger($utilisateur),
|
| - |
|
208 |
__FILE__, __LINE__));
|
| - |
|
209 |
|
| - |
|
210 |
if($nb_upd === FALSE) return FALSE;
|
| - |
|
211 |
return $nb_upd;
|
| - |
|
212 |
// TODO: return json_encode(updated_rows());
|
| - |
|
213 |
}
|
| Line 172... |
Line 214... |
| 172 |
}
|
214 |
|
| 173 |
|
215 |
|
| 174 |
/**
|
216 |
/**
|
| 175 |
* Modifie une observation publique dont l'id et l'utilisateur sont passé en paramètre
|
217 |
* Modifie une observation publique dont l'id et l'utilisateur sont passé en paramètre
|
| Line 186... |
Line 228... |
| 186 |
'nom_ret_nn' => NULL,
|
228 |
'nom_ret_nn' => NULL,
|
| 187 |
'nom_referentiel' => NULL);
|
229 |
'nom_referentiel' => NULL);
|
| 188 |
$parametres = array_merge($base_param, $parametres);
|
230 |
$parametres = array_merge($base_param, $parametres);
|
| Line 189... |
Line 231... |
| 189 |
|
231 |
|
| 190 |
$this->traiterEspece($parametres);
|
232 |
$this->traiterEspece($parametres);
|
| Line 191... |
Line 233... |
| 191 |
$this->formaterParametresObservation($parametres);
|
233 |
self::formaterParametresObservation($parametres);
|
| - |
|
234 |
|
| - |
|
235 |
$retour = true;
|
| - |
|
236 |
|
| - |
|
237 |
$champ_maj = self::traiterParametresObservationEtConstruireSousRequeteMaj($parametres);
|
| 192 |
|
238 |
$champ_maj[] = "date_modification = now()";
|
| 193 |
$retour = true;
|
239 |
|
| 194 |
$requete_modification = "UPDATE cel_obs SET " .
|
240 |
$requete_modification = "UPDATE cel_obs SET " .
|
| 195 |
$this->traiterParametresObservationEtConstruireSousRequeteMaj($parametres) .
|
241 |
implode(', ', $champ_maj) .
|
| 196 |
" WHERE id_observation = ".Cel::db()->proteger($id).
|
242 |
" WHERE id_observation = ".Cel::db()->proteger($id).
|
| Line 197... |
Line 243... |
| 197 |
" AND ce_utilisateur = ".Cel::db()->proteger($utilisateur)." ".
|
243 |
" AND ce_utilisateur = ".Cel::db()->proteger($utilisateur)." ".
|
| Line 410... |
Line 456... |
| 410 |
|
456 |
|
| 411 |
// mise à jour du référentiel utilisé, sans n° de version
|
457 |
// mise à jour du référentiel utilisé, sans n° de version
|
| 412 |
$parametres['nom_referentiel'] = $code_referentiel;
|
458 |
$parametres['nom_referentiel'] = $code_referentiel;
|
| Line -... |
Line 459... |
| - |
|
459 |
}
|
| - |
|
460 |
|
| - |
|
461 |
// uniquement nécessaire lors de l'ajout
|
| - |
|
462 |
private function ajoutInfoUtilisateurARequete(&$parametres) {
|
| - |
|
463 |
if(! isset($parametres['ce_utilisateur'])) return;
|
| - |
|
464 |
|
| - |
|
465 |
$infos_utilisateur = $this->getInfosComplementairesUtilisateur($parametres['ce_utilisateur']);
|
| - |
|
466 |
$parametres['courriel_utilisateur'] = $infos_utilisateur['courriel'];
|
| - |
|
467 |
$parametres['nom_utilisateur'] = $infos_utilisateur['nom'];
|
| - |
|
468 |
$parametres['prenom_utilisateur'] = $infos_utilisateur['prenom'];
|
| 413 |
}
|
469 |
}
|
| 414 |
|
470 |
|
| 415 |
/**
|
471 |
/**
|
| 416 |
* Formate les paramètres fournis en ajoutant des infos complementaires
|
472 |
* Formate les paramètres fournis en ajoutant des infos complementaires
|
| 417 |
*
|
473 |
*
|
| 418 |
* @param array $parametres tableau indexé avec les mêmes noms de champs que la bdd
|
474 |
* @param array $parametres tableau indexé avec les mêmes noms de champs que la bdd
|
| 419 |
*
|
475 |
*
|
| 420 |
* @return $parametres le tableau modifié selon ce qu'il contenait
|
476 |
* @return $parametres le tableau modifié selon ce qu'il contenait
|
| 421 |
*/
|
- |
|
| 422 |
private function formaterParametresObservation(&$parametres) {
|
- |
|
| 423 |
if(isset($parametres['ce_utilisateur'])) {
|
- |
|
| 424 |
|
- |
|
| 425 |
$infos_utilisateur = $this->getInfosComplementairesUtilisateur($parametres['ce_utilisateur']);
|
- |
|
| 426 |
|
- |
|
| 427 |
$parametres['courriel_utilisateur'] = $infos_utilisateur['courriel'];
|
- |
|
| 428 |
$parametres['nom_utilisateur'] = $infos_utilisateur['nom'];
|
- |
|
| 429 |
$parametres['prenom_utilisateur'] = $infos_utilisateur['prenom'];
|
- |
|
| 430 |
}
|
477 |
*/
|
| 431 |
|
478 |
static function formaterParametresObservation(&$parametres) {
|
| 432 |
// Pour empecher que des numéros de département de 1 à 9 soient saisis sans 0
|
479 |
// Pour empecher que des numéros de département de 1 à 9 soient saisis sans 0
|
| Line 433... |
Line 480... |
| 433 |
// TODO: décider quoi faire pour les zones géo plus générales
|
480 |
// TODO: décider quoi faire pour les zones géo plus générales
|
| Line 439... |
Line 486... |
| 439 |
if (strlen($parametres['ce_zone_geo']) == 4) {
|
486 |
if (strlen($parametres['ce_zone_geo']) == 4) {
|
| 440 |
$parametres['ce_zone_geo'] = '0'.$parametres['ce_zone_geo'];
|
487 |
$parametres['ce_zone_geo'] = '0'.$parametres['ce_zone_geo'];
|
| 441 |
}
|
488 |
}
|
| Line 442... |
Line 489... |
| 442 |
|
489 |
|
| 443 |
if (strlen($parametres['ce_zone_geo']) > 0 && strlen($parametres['ce_zone_geo']) <= 2) {
|
490 |
if (strlen($parametres['ce_zone_geo']) > 0 && strlen($parametres['ce_zone_geo']) <= 2) {
|
| 444 |
$parametres['ce_zone_geo'] = $this->obtenirCodeInseeCommunePourNomEtDepartement($parametres['zone_geo'], $parametres['ce_zone_geo']);
|
491 |
$parametres['ce_zone_geo'] = Cel::obtenirCodeInseeCommunePourNomEtDepartement($parametres['zone_geo'], $parametres['ce_zone_geo']);
|
| 445 |
} else {
|
492 |
} else {
|
| 446 |
$parametres['ce_zone_geo'] = $this->convertirCodeInseeVersCodeZoneGeo($parametres['ce_zone_geo']);
|
493 |
$parametres['ce_zone_geo'] = 'INSEE-C:'. $parametres['ce_zone_geo'];
|
| 447 |
}
|
494 |
}
|
| 448 |
}
|
495 |
}
|
| Line 449... |
Line 496... |
| 449 |
}
|
496 |
}
|
| Line 503... |
Line 550... |
| 503 |
* @param array $parametres un tableau avec les index correspondant aux champs de la bdd
|
550 |
* @param array $parametres un tableau avec les index correspondant aux champs de la bdd
|
| 504 |
*
|
551 |
*
|
| 505 |
* @return string une sous requete utilisable pour la modification d'une observation
|
552 |
* @return string une sous requete utilisable pour la modification d'une observation
|
| 506 |
* selon la syntaxe UPDATE table SET colonne1 = valeur1, colonne2 = valeur2 WHERE condition
|
553 |
* selon la syntaxe UPDATE table SET colonne1 = valeur1, colonne2 = valeur2 WHERE condition
|
| 507 |
*/
|
554 |
*/
|
| 508 |
private function traiterParametresObservationEtConstruireSousRequeteMaj($parametres) {
|
555 |
static function traiterParametresObservationEtConstruireSousRequeteMaj($parametres) {
|
| 509 |
$sous_requete = '';
|
556 |
$champs = array();
|
| 510 |
|
557 |
|
| 511 |
// Nullifiage ...
|
558 |
// Nullifiage ...
|
| 512 |
// TODO: code dupliqué, en faire une fonction à mettre à la place appropriée
|
559 |
// TODO: code dupliqué, en faire une fonction à mettre à la place appropriée
|
| 513 |
foreach($parametres as $cle => $valeur) {
|
560 |
foreach($parametres as $cle => $valeur) {
|
| 514 |
|
- |
|
| 515 |
// Pour apparaitre le premier dans les tris ...
|
561 |
// Pour apparaitre le premier dans les tris ...
|
| 516 |
if (trim($valeur) == "" || trim($valeur) == "null" || trim($valeur) == "000null") {
|
562 |
if (trim($valeur) == "" || trim($valeur) == "null" || trim($valeur) == "000null") {
|
| 517 |
$valeur = "NULL";
|
563 |
$valeur = "NULL";
|
| 518 |
} else {
|
564 |
} else {
|
| 519 |
$valeur = Cel::db()->proteger($valeur);
|
565 |
$valeur = Cel::db()->proteger($valeur);
|
| 520 |
}
|
566 |
}
|
| 521 |
|
- |
|
| 522 |
$sous_requete .= $cle." = ".$valeur.", ";
|
567 |
$champs[] = $cle." = ".$valeur;
|
| 523 |
}
|
568 |
}
|
| 524 |
|
- |
|
| 525 |
// TODO: devrait être une clause ON UPDATE ou un TRIGGER
|
- |
|
| 526 |
// afin de mettre à jour la date de modification uniquement lorsqu'une modification
|
- |
|
| 527 |
// a effectivement eu lieu
|
- |
|
| 528 |
$sous_requete .= ' date_modification = now() ';
|
- |
|
| 529 |
|
- |
|
| 530 |
return $sous_requete;
|
569 |
return $champs;
|
| 531 |
}
|
570 |
}
|
| 532 |
}
|
- |
|
| 533 |
?>
|
- |
|
| 534 |
|
571 |
}
|
| - |
|
572 |
|