1,30 → 1,27 |
<?php |
// ATTENTION ! Classe compatible uniquement avec nouveau format de bdd du cel // |
|
/** |
* PHP Version 5.2 |
* |
* @category PHP |
* @package jrest |
* @author Raphaël Droz <raphael@tela-botanica.org> |
* @author Aurelien Peronnet <aurelien@tela-botanica.org> |
* @copyright 2010, 2013 Tela-Botanica |
* @license http://www.cecill.info/licences/Licence_CeCILL_V2-fr.txt Licence CECILL |
* @license GPL v3 <http://www.gnu.org/licenses/gpl.txt> |
* @link /doc/jrest/ |
* |
* Classe de gestion de l'ajout, modification et suppression des observations |
* |
* TODO: $sous_requete .= ' date_modification = now() ' |
* devrait être une clause ON UPDATE ou un TRIGGER |
* afin de mettre à jour la date de modification uniquement lorsqu'une modification a effectivement eu lieu |
* |
*/ |
* PHP Version 5 |
* |
* @category PHP |
* @package jrest |
* @author Aurelien Peronnet <aurelien@tela-botanica.org> |
* @copyright 2010 Tela-Botanica |
* @license http://www.cecill.info/licences/Licence_CeCILL_V2-fr.txt Licence CECILL |
* @version SVN: <svn_id> |
* @link /doc/jrest/ |
*/ |
|
/** |
* Classe de gestion de l'ajout, modification et suppression des observations |
* |
* in=utf8 |
* out=utf8 |
* |
*/ |
class GestionObservation extends Cel { |
|
static $cel_obs = array( |
"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", |
"ce_zone_geo", "zone_geo", "lieudit", "station", "milieu", "latitude", "longitude", "altitude", "geodatum", "date_observation", "mots_cles_texte", "commentaire", "transmission", |
"date_creation", "date_modification", "date_transmission", "abondance", "certitude", "phenologie", "code_insee_calcul"); |
|
|
/** |
* Ajoute une observation grâce aux paramètres fournis |
* |
53,8 → 50,7 |
$parametres['nom_referentiel'] = Cel::$fallback_referentiel; |
} |
|
$this->ajoutInfoUtilisateurARequete($parametres); |
self::formaterParametresObservation($parametres); |
$this->formaterParametresObservation($parametres); |
|
$requete_insertion_observation = 'INSERT INTO cel_obs '; |
$sous_requete_colonnes = $this->traiterParametresObservationEtConstruireSousRequeteAjout($parametres); |
156,17 → 152,12 |
// uniquement en cas de nom_sel présent |
$this->traiterEspece($parametres); |
} |
$this->formaterParametresObservation($parametres); |
|
self::formaterParametresObservation($parametres); |
$requete_modification .= $this->traiterParametresObservationEtConstruireSousRequeteMaj($parametres) . |
" WHERE ordre IN (".$ordre.") AND ce_utilisateur = ".Cel::db()->proteger($utilisateur); |
|
$champ_maj = self::traiterParametresObservationEtConstruireSousRequeteMaj($parametres); |
$champ_maj[] = "date_modification = now()"; |
|
$requete_modification .= |
implode(', ', $champ_maj) |
. " WHERE ordre IN (".$ordre.") AND ce_utilisateur = ".Cel::db()->proteger($utilisateur); |
|
|
// important ! ne pas utiliser la fonction executerRequete qui renvoie une erreur si la requete contient des | (pipes) |
// ce qui peut arriver dans les commentaires |
// TODO: corriger la fonction ou bien continuer à utiliser executerRequeteSimple |
179,39 → 170,6 |
|
return $retour; |
} |
|
/** |
* @return nombre d'observations mises à jour, ou FALSE en cas de problème |
*/ |
static function modifierMultiplesObservation($utilisateur, Array $ordre, $parametres) { |
// nous pouvons aussi retirer 'ce_utilisateur' (== $utilisateur) qui sera dans la clause WHERE |
$exclusions = array('nom_sel_nn', 'nom_sel', 'nom_ret_nn', 'nom_referentiel', 'ce_utilisateur'); |
$parametres = array_diff_key($parametres, array_flip($exclusions)); |
$parametres = array_intersect_key($parametres, array_flip(self::$cel_obs)); |
|
$parametres = array_filter( |
$parametres, |
create_function('$e','return strpos($e, "(Valeurs multiples)") === false;')); |
|
// modifie $parametres par référence |
self::formaterParametresObservation($parametres); |
|
$champ_maj = self::traiterParametresObservationEtConstruireSousRequeteMaj($parametres); |
if(!$champ_maj) return 0; // rien à mettre à jour finalement |
|
$champ_maj[] = "date_modification = now()"; |
$nb_upd = Cel::db()->executer(sprintf( |
"UPDATE cel_obs SET %s WHERE ordre IN (%s) AND ce_utilisateur = %s -- %s:%d", |
implode(', ', $champ_maj), |
implode(', ', $ordre), |
Cel::db()->proteger($utilisateur), |
__FILE__, __LINE__)); |
|
if($nb_upd === FALSE) return FALSE; |
return $nb_upd; |
// TODO: return json_encode(updated_rows()); |
} |
|
|
/** |
* Modifie une observation publique dont l'id et l'utilisateur sont passé en paramètre |
230,15 → 188,11 |
$parametres = array_merge($base_param, $parametres); |
|
$this->traiterEspece($parametres); |
self::formaterParametresObservation($parametres); |
$this->formaterParametresObservation($parametres); |
|
$retour = true; |
|
$champ_maj = self::traiterParametresObservationEtConstruireSousRequeteMaj($parametres); |
$champ_maj[] = "date_modification = now()"; |
|
$requete_modification = "UPDATE cel_obs SET " . |
implode(', ', $champ_maj) . |
$this->traiterParametresObservationEtConstruireSousRequeteMaj($parametres) . |
" WHERE id_observation = ".Cel::db()->proteger($id). |
" AND ce_utilisateur = ".Cel::db()->proteger($utilisateur)." ". |
" AND transmission = 1"; |
458,16 → 412,6 |
$parametres['nom_referentiel'] = $code_referentiel; |
} |
|
// uniquement nécessaire lors de l'ajout |
private function ajoutInfoUtilisateurARequete(&$parametres) { |
if(! isset($parametres['ce_utilisateur'])) return; |
|
$infos_utilisateur = $this->getInfosComplementairesUtilisateur($parametres['ce_utilisateur']); |
$parametres['courriel_utilisateur'] = $infos_utilisateur['courriel']; |
$parametres['nom_utilisateur'] = $infos_utilisateur['nom']; |
$parametres['prenom_utilisateur'] = $infos_utilisateur['prenom']; |
} |
|
/** |
* Formate les paramètres fournis en ajoutant des infos complementaires |
* |
475,7 → 419,16 |
* |
* @return $parametres le tableau modifié selon ce qu'il contenait |
*/ |
static function formaterParametresObservation(&$parametres) { |
private function formaterParametresObservation(&$parametres) { |
if(isset($parametres['ce_utilisateur'])) { |
|
$infos_utilisateur = $this->getInfosComplementairesUtilisateur($parametres['ce_utilisateur']); |
|
$parametres['courriel_utilisateur'] = $infos_utilisateur['courriel']; |
$parametres['nom_utilisateur'] = $infos_utilisateur['nom']; |
$parametres['prenom_utilisateur'] = $infos_utilisateur['prenom']; |
} |
|
// Pour empecher que des numéros de département de 1 à 9 soient saisis sans 0 |
// TODO: décider quoi faire pour les zones géo plus générales |
if (isset($parametres['ce_zone_geo'])) { |
488,9 → 441,9 |
} |
|
if (strlen($parametres['ce_zone_geo']) > 0 && strlen($parametres['ce_zone_geo']) <= 2) { |
$parametres['ce_zone_geo'] = Cel::obtenirCodeInseeCommunePourNomEtDepartement($parametres['zone_geo'], $parametres['ce_zone_geo']); |
$parametres['ce_zone_geo'] = $this->obtenirCodeInseeCommunePourNomEtDepartement($parametres['zone_geo'], $parametres['ce_zone_geo']); |
} else { |
$parametres['ce_zone_geo'] = 'INSEE-C:'. $parametres['ce_zone_geo']; |
$parametres['ce_zone_geo'] = $this->convertirCodeInseeVersCodeZoneGeo($parametres['ce_zone_geo']); |
} |
} |
} |
552,12 → 505,13 |
* @return string une sous requete utilisable pour la modification d'une observation |
* selon la syntaxe UPDATE table SET colonne1 = valeur1, colonne2 = valeur2 WHERE condition |
*/ |
static function traiterParametresObservationEtConstruireSousRequeteMaj($parametres) { |
$champs = array(); |
|
private function traiterParametresObservationEtConstruireSousRequeteMaj($parametres) { |
$sous_requete = ''; |
|
// Nullifiage ... |
// TODO: code dupliqué, en faire une fonction à mettre à la place appropriée |
foreach($parametres as $cle => $valeur) { |
|
// Pour apparaitre le premier dans les tris ... |
if (trim($valeur) == "" || trim($valeur) == "null" || trim($valeur) == "000null") { |
$valeur = "NULL"; |
564,8 → 518,16 |
} else { |
$valeur = Cel::db()->proteger($valeur); |
} |
$champs[] = $cle." = ".$valeur; |
|
$sous_requete .= $cle." = ".$valeur.", "; |
} |
return $champs; |
|
// TODO: devrait être une clause ON UPDATE ou un TRIGGER |
// afin de mettre à jour la date de modification uniquement lorsqu'une modification |
// a effectivement eu lieu |
$sous_requete .= ' date_modification = now() '; |
|
return $sous_requete; |
} |
} |
} |
?> |