Subversion Repositories Sites.obs-saisons.fr

Compare Revisions

Ignore whitespace Rev 323 → Rev 324

/trunk/applications/jrest/services/OdsSyndicationObservation.php
10,11 → 10,11
* /CelSyndicationObservation/pour-admin/(rss1|rss2|atom)?start=0&limit=150
* /CelSyndicationObservation/par-mots-cles/(rss1|rss2|atom)/mot-cle?start=0&limit=150
* /CelSyndicationObservation/par-commune/(rss1|rss2|atom)/nom-commune?start=0&limit=150
*
*
* Les paramêtres :
* - "start" indique le numéro du premier item à afficher
* - "limit" nombre d'items à afficher
*
*
* @author Jean-Pascal MILCENT <jpm@tela-botanica.org>
* @license GPL v3 <http://www.gnu.org/licenses/gpl.txt>
* @license CECILL v2 <http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt>
22,7 → 22,7
* @copyright 2010
*/
class OdsSyndicationObservation extends OdsTriple {
 
private $parametres_origines = null;
private $format = null;
private $service = null;
29,12 → 29,12
private $squelette = null;
private $squelette_dossier = null;
private $flux = array();
 
private $tri = 'oo_date_modification';
private $tri_dir = "DESC";
 
private $mode = 'normal';
 
/**
* Méthode appelée avec une requête de type GET.
*/
43,7 → 43,7
$this->parametres_origines = $params;
$info = array();
$contenu = '';
 
if (! $this->etreFluxAdmin() || $this->authentifier()) {
// Pré traitement des paramêtres
$pour_bdd = false;
52,10 → 52,10
$this->traiterParametresTri();
$this->parametres = $params;
$this->squelette_dossier = dirname(__FILE__).DIRECTORY_SEPARATOR.'squelettes'.DIRECTORY_SEPARATOR;
 
// Récupération de la liste des flux
$this->chargerListeDesFlux();
 
// Chargement du bon type de service demandé
if (isset($service)) {
$this->service = $this->traiterNomService($service);
70,12 → 70,12
$this->format = '';
$this->messages[] = "Le service ODS Syndication nécessite d'indiquer en second paramètre le format : rss1, rss2 ou atom.";
}
 
if (!isset($this->flux[$this->service]) || isset($this->format)) {
// Suppression des paramêtres inutile pour le reste des méthodes
array_shift($this->parametres);
array_shift($this->parametres);
 
// Récupération du contenu à renvoyer
$contenu = $this->$methode();
}
86,7 → 86,7
$this->messages[] = "Le service ODS Syndication Observation nécessite d'indiquer en premier paramètre le type d'information demandé.";
}
}
 
// Envoie sur la sortie standard
$encodage = 'utf-8';
$mime = $this->getTypeMime();
93,33 → 93,33
$formatage_json = $this->getFormatageJson();
$this->envoyer($contenu, $mime, $encodage, $formatage_json);
}
 
private function traiterParametresTri() {
$tris_possibles = array('oo_date_modification', 'oo_date_saisie', 'oo_date');
$tris_dirs_possibles = array('ASC', 'DESC');
 
$this->tri = !empty($_GET['tri']) && in_array($_GET['tri'], $tris_possibles) ? $_GET['tri'] : 'oo_date_modification';
$this->tri_dir = !empty($_GET['tri_dir']) && in_array($_GET['tri_dir'], $tris_dirs_possibles) ? $_GET['tri_dir'] : 'DESC';
 
unset($_GET['tri']);
unset($_GET['tri_dir']);
}
 
private function getUrlBase() {
$url_base = sprintf($this->config['settings']['baseURLAbsoluDyn'], get_class($this).'/');
return $url_base;
}
 
private function getUrlServiceBase() {
$url_service = $this->getUrlBase().implode('/', $this->parametres_origines);
return $url_service;
}
 
private function traiterNomService($nom) {
$nom = strtolower($nom);
return $nom;
}
 
private function getNomMethodeService() {
$methode = '';
$service_formate = str_replace(' ', '', ucwords(implode(' ', explode('-', $this->service))));
126,10 → 126,10
$methode = 'getService'.$service_formate;
return $methode;
}
 
private function getTypeMime() {
$mime = '';
$test = isset($this->format) ? $this->format : $this->service;
$test = isset($this->format) ? $this->format : $this->service;
switch ($test) {
case 'atom' :
$mime = 'application/atom+xml';
146,7 → 146,7
}
return $mime;
}
 
private function getFormatageJson() {
$json = false;
switch ($this->service) {
158,7 → 158,7
}
return $json;
}
 
private function getFlux($nom) {
return isset($this->flux[$nom]) ? $this->flux[$nom] : array();
}
173,16 → 173,16
}
$this->flux[$nom] = array('titre' => $titre, 'description' => $description, 'urls' => $flux);
}
 
private function chargerListeDesFlux() {
$this->setFlux('par-defaut', 'Flux de syndication des observations d\'ODS',
$this->setFlux('par-defaut', 'Flux de syndication des observations d\'ODS',
'Ce flux fournit des informations sur les observations d\'ODS');
}
 
private function getServiceListeDesFlux() {
return $this->flux;
}
 
private function getServiceOpml() {
$donnees = array();
$id = 1;
195,12 → 195,12
$info['url_xml'] = $this->getUrlBase().$flux_nom.'/atom';
$donnees['liste_flux'][] = $info;
}
 
$this->squelette = $this->squelette_dossier.'opml.tpl.xml';
$contenu = Cel::traiterSquelettePhp($this->squelette, $donnees);
return $contenu;
}
 
private function getServiceParDefaut() {
// Construction de la requête
$requete = 'SELECT oo.* '.
217,16 → 217,16
"LIMIT $this->start,$this->limit ";
 
$elements = $this->executerRequete($requete);
 
// Création du contenu
$contenu = $this->executerService($elements);
return $contenu;
}
 
private function getServiceModificationObservations() {
 
$this->mode = 'admin';
 
// Construction de la requête
$requete = 'SELECT * '.
'FROM ods_observations oo '.
244,30 → 244,30
"LIMIT $this->start,$this->limit ";
 
$elements = $this->executerRequete($requete);
 
// Création du contenu
$contenu = $this->executerService($elements);
return $contenu;
}
 
private function executerService($elements) {
$contenu = '';
if (is_array($elements)) {
// Prétraitement des données
$donnees = $this->construireDonneesCommunesAuFlux($elements);
 
foreach ($elements as $element) {
$donnees['items'][] = $this->construireDonneesCommunesAuxItems($element);
}
 
// Création du contenu à partir d'un template PHP
if (isset($this->squelette)) {
$contenu = JrestService::traiterSquelettePhp($this->squelette, $donnees);
}
}
}
return $contenu;
}
 
private function construireDonneesCommunesAuFlux($observations) {
$donnees = $this->getFlux($this->service);
$donnees['guid'] = $this->getUrlServiceBase();
285,9 → 285,9
$donnees['generateur'] = 'ODS - Jrest - OdsSyndicationObservation';
preg_match('/([0-9]+)/', '$Revision$', $match);
$donnees['generateur_version'] = isset($match[1]) ? $match[1] : 'Inconnue';
return $donnees;
return $donnees;
}
 
private function construireDonneesCommunesAuxItems($observation) {
$item = array();
$date_modification_timestamp = $this->convertirDateHeureMysqlEnTimestamp($observation['oo_date_modification']);
305,7 → 305,7
$item['modifier_par'] = $this->creerAuteur($observation['oo_ce_participant'], $this->etreFluxAdmin());
return $item;
}
 
private function creerTitreService() {
$titre = '';
switch($this->service) {
317,7 → 317,7
}
return $titre;
}
 
private function creerDescriptionService() {
$description = '';
switch($this->service) {
329,11 → 329,11
}
return $description;
}
private function creerTitre($obs) {
 
private function creerTitre($obs) {
$date_saisie = date("d/m/Y", strtotime($obs['oo_date']));
$date_modif = date("d/m/Y", strtotime($obs['oo_date_modification']));
 
$stade_obs = $this->obtenirValeurTripleParId($obs['oo_ce_evenement']);
$nom_plante = $this->obtenirNomEspecePourIdIndividu($obs['oo_ce_individu']);
$utilisateur = $this->creerAuteur($obs['oo_ce_participant'], $this->etreFluxAdmin());
341,95 → 341,95
$titre = $this->nettoyerTexte($titre);
return $titre;
}
 
private function obtenirNomEspecePourIdIndividu($id_individu) {
 
$requete_id_espece_individu = 'SELECT oi_ce_espece FROM ods_individus '.
'WHERE oi_id_individu = '.$this->proteger($id_individu);
 
$resultat_id_espece = $this->executerRequete($requete_id_espece_individu);
$id_espece = $resultat_id_espece[0]['oi_ce_espece'];
 
$requete_nom_espece_individu = 'SELECT oe_nom_vernaculaire FROM ods_especes '.
'WHERE oe_id_espece = '.$this->proteger($id_espece);
 
$resultat_nom_espece = $this->executerRequete($requete_nom_espece_individu);
$nom_espece = $resultat_nom_espece[0]['oe_nom_vernaculaire'];
 
return $nom_espece;
}
 
private function creerGuidItem($element) {
$guid = sprintf($this->config['settings']['guidObsTpl'], 'obs'.$element['oo_id_observation']);
return $guid;
}
 
private function creerLienItem($element) {
return $this->config['settings']['odsSaisieUrlAbsolu'];
}
 
private function creerAuteur($element) {
 
//TODO externaliser les champs dans le fichier de config
$requete_selection_auteur = 'SELECT * FROM drupal_users '.
'WHERE uid = '.$this->proteger($element);
 
$resultat_auteur = $this->executerRequete($requete_selection_auteur);
 
$nom_auteur = !empty($resultat_auteur[0]['name']) ? $resultat_auteur[0]['name'] : "";
 
if($this->mode == 'admin') {
$nom_auteur = $resultat_auteur[0]['mail'];
}
 
return $nom_auteur;
}
 
private function creerDescription($obs, $item) {
 
$requete_commune_pour_station = 'SELECT os_ce_commune FROM ods_stations '.
'WHERE os_id_station = '.
'(SELECT oi_ce_station FROM ods_individus '.
'(SELECT oi_ce_station FROM ods_individus '.
'WHERE oi_id_individu = '.$this->proteger($obs['oo_ce_individu']).')';
 
$resultat_commune = $this->executerRequete($requete_commune_pour_station);
$commune = $resultat_commune[0]['os_ce_commune'];
 
if(is_numeric($commune)) {
$requete_lieu = 'SELECT * FROM ods_communes '.
'WHERE oc_code_insee = '.$this->proteger($commune);
$resultat_lieu = $this->executerRequete($requete_lieu);
 
$resultat_lieu = $this->executerRequete($requete_lieu);
$lieu = $resultat_lieu[0]['oc_nom']. ' ('.substr($commune,0,2).')';
} else {
$lieu = $commune;
}
 
$description = "Observé à $lieu".'<br />';
 
if($this->mode == 'admin') {
$description .= ' Individu : '.$obs['oi_nom'].'<br />';
$description .= ' Individu : '.$obs['oi_nom'].'<br />';
$description .= 'Station : '.$obs['os_nom'].'<br />';
if($this->estUneDateSqlInvalide($obs['oo_date'])) {
$description .= ' Date d\'observation supprimée <br />';
$description .= ' Date d\'observation supprimée <br />';
} else {
$description .= ' Date de l\'observation changée en : '.strftime('%A %d %B %Y', strtotime($obs['oo_date'])).'<br />';
}
$description .= ' Date de l\'observation changée en : '.strftime('%A %d %B %Y', strtotime($obs['oo_date'])).'<br />';
}
$description .= 'Saisi le : '.$item['date_creation_simple'].'<br />';
$description .= 'Modifié le : '.$item['date_maj_simple'].'<br />';
}
 
$description = $this->nettoyerTexte($description);
 
return $description;
}
 
private function estUneDateSqlInvalide($date) {
 
$date_tab = explode('-', $date);
return ($date_tab[2] == '00' || $date_tab[1] == '00' || $date_tab[0] == '0000');
}
 
private function creerCategorie($element) {
$categorie = '';
$categorie = 'Observation';
436,18 → 436,18
$categorie = $this->nettoyerTexte($categorie);
return $categorie;
}
 
private function etreFluxAdmin() {
return (isset($_GET['admin']) && $_GET['admin'] == '1') ? true : false;
}
 
private function creerUrlService() {
$url_service = $this->getUrlServiceBase();
if (count($_GET) > 0) {
 
$url_service .= '?';
$requete = '';
 
foreach($_GET as $cle => $valeur) {
if($cle != '' && trim($valeur) != '') {
$requete .= '&'.$cle.'='.$valeur;
456,9 → 456,8
 
$url_service = $url_service.ltrim($requete, '&');
}
 
return $url_service;
}
}
 
?>
}
?>
/trunk/applications/jrest/services/OdsIndividu.php
3,15 → 3,15
class OdsIndividu extends JRestService {
 
const PREFIXE = 'get';
 
/**
* Méthode appelée avec une requête de type GET.
*
*/
function getElement($param = array()) {
 
$type = $param[0];
 
if ($type == '*' || is_numeric($type)) {
$info = $this->getElementParDefaut($param);
} else {
23,83 → 23,99
$this->messages[] = "Le type d'information demandé '$type' n'est pas disponible.";
}
}
 
// Envoi sur la sortie standard
$this->envoyer($info);
}
 
/**
* Méthode appelée pour ajouter un élément.
*/
public function createElement($params) {
$elements_requis = array('id_participant','id_espece','id_station','individu_nom');
 
$elements_requis = array('id_participant','id_espece','id_station','individu_nom');
 
foreach($elements_requis as $requis) {
if(!isset($params[$requis])) {
//TODO: pourquoi est-ce que c'est commenté ça ?
//$erreurs[$requis] = 'erreur ';
}
}
 
if(!empty($erreurs)) {
$this->envoyer($erreurs);
}
 
// commentaire optionnel
$commentaire = !empty($params['individu_commentaire']) ? $params['individu_commentaire'] : '';
// limité à 1000 caractères (pas besoin de renvoyer une erreur ici car c'est un cas très peu fréquent)
$commentaire = substr($commentaire, 0, 1000);
 
$requete_creation_individu = 'INSERT INTO ods_individus '.
'(oi_ce_espece, oi_ce_station, oi_nom) '.
'(oi_ce_espece, oi_ce_station, oi_nom, oi_commentaire) '.
'VALUES ('.
$this->proteger($params['id_espece']).','.
$this->proteger($params['id_station']).','.
$this->proteger($params['individu_nom']).')';
$creation_individu = $this->executerRequeteSimple($requete_creation_individu);
$this->proteger($params['id_station']).','.
$this->proteger($params['individu_nom']).','.
$this->proteger($commentaire).')';
$creation_individu = $this->executerRequeteSimple($requete_creation_individu);
 
 
if(!$creation_individu) {
$retour['erreurs'] = 'erreur d\'insertion';
} else {
$retour['id_nouvel_individu'] = $this->renvoyerDernierIdInsere();
}
 
$this->envoyer($retour);
}
 
/**
* Méthode appelée pour mettre à jour un élément
*/
public function updateElement($uid, $params) {
if(isset($uid[0])) {
 
if(isset($uid[0])) {
$id_individu = $uid[0];
} else {
return;
}
$requete_modification_individu = 'UPDATE ods_individus '.
'SET oi_nom = '.$this->proteger($params['individu_nom']).' '.
'WHERE oi_id_individu = '.$this->proteger($id_individu);
$modification_individu = $this->executerRequeteSimple($requete_modification_individu);
$this->envoyer();
 
// commentaire optionnel
$commentaire = !empty($params['individu_commentaire']) ? $params['individu_commentaire'] : '';
// limité à 1000 caractères (pas besoin de renvoyer une erreur ici car c'est un cas très peu fréquent)
$commentaire = substr($commentaire, 0, 1000);
 
$requete_modification_individu = 'UPDATE ods_individus '.
'SET oi_nom = '.$this->proteger($params['individu_nom']).' ';
 
// mise à jour éventuelle du commentaire optionnel
if(!empty($params['individu_commentaire'])) {
$requete_modification_individu .= ', oi_commentaire = '.$this->proteger($params['individu_commentaire']).' ';
}
$requete_modification_individu .= 'WHERE oi_id_individu = '.$this->proteger($id_individu);
$modification_individu = $this->executerRequeteSimple($requete_modification_individu);
 
$this->envoyer();
}
 
/**
* Méthode appelée pour supprimer un élément
*/
public function deleteElement($uid) {
 
if(isset($uid[0])) {
$id_participant = $uid[0];
} else {
return;
}
 
if(isset($uid[1])) {
$id_individu = $uid[1];
} else {
return;
}
 
$requete_suppression_individu = 'DELETE FROM ods_individus '.
'WHERE oi_id_individu = '.$this->proteger($id_individu).' '.
'AND oi_ce_station IN '.
106,85 → 122,86
'(SELECT os_id_station FROM ods_stations '.
'WHERE os_ce_participant = '.$this->proteger($id_participant).' '.
')';
 
$suppression_individu = $this->executerRequeteSimple($requete_suppression_individu);
 
if(!$suppression_individu) {
// TODO: comment gère t'on les erreurs ?
}
 
// Envoie sur la sortie standard
$this->envoyer();
}
 
private function getElementParDefaut($params) {
return $this->getInformationsIndividu($params);
}
 
private function getInformationsIndividu($params) {
 
$id_individu = $params[0];
 
$requete_informations_individu = 'SELECT * FROM ods_individus '.
$requete_informations_individu = 'SELECT * FROM ods_individus '.
'WHERE oi_id_individu = '.$this->proteger($id_individu);
 
$informations_individu = $this->executerRequete($requete_informations_individu);
 
if(!empty($informations_individu)) {
$informations_individu_formatees = $this->formaterTableauIndividuPourEnvoi($informations_individu[0]);
}
 
return $informations_individu_formatees;
 
}
 
private function getIndividusPourStation($params) {
 
$id_station = $params[0];
$requete_individus_station = 'SELECT oi.* FROM ods_individus oi '.
 
$requete_individus_station = 'SELECT oi.* FROM ods_individus oi '.
'INNER JOIN ods_especes oe '.
'ON oi.oi_ce_espece = oe.oe_id_espece '.
'AND oe.oe_espece_active = 1 '.
'AND oe.oe_espece_active = 1 '.
'WHERE oi_ce_station = '.$this->proteger($id_station);
$liste_individus_pour_station = $this->executerRequete($requete_individus_station);
 
foreach($liste_individus_pour_station as &$individu_pour_station) {
$individu_pour_station = $this->formaterTableauIndividuPourEnvoi($individu_pour_station);
 
$individu_pour_station = $this->formaterTableauIndividuPourEnvoi($individu_pour_station);
}
 
return $liste_individus_pour_station;
}
 
private function getIndividusPourStationPourEspece($params) {
 
$id_station = $params[0];
$id_espece = $params[1];
$requete_individus_station_espece = 'SELECT * FROM ods_individus '.
 
$requete_individus_station_espece = 'SELECT * FROM ods_individus '.
'WHERE oi_ce_station = '.$this->proteger($id_station).' '.
'AND oi_ce_espece ='.$this->proteger($id_espece);
 
$liste_individus_pour_station_pour_espece = $this->executerRequete($requete_individus_station_espece);
 
foreach($liste_individus_pour_station_pour_espece as &$individu_pour_station_pour_espece) {
$individu_pour_station_pour_espece = $this->formaterTableauIndividuPourEnvoi($individu_pour_station_pour_espece);
 
$individu_pour_station_pour_espece = $this->formaterTableauIndividuPourEnvoi($individu_pour_station_pour_espece);
}
 
return $liste_individus_pour_station_pour_espece;
}
 
private function formaterTableauIndividuPourEnvoi($individu) {
return array(
 
return array(
'id_individu' => $individu['oi_id_individu'],
'id_espece' => $individu['oi_ce_espece'],
'id_station' => $individu['oi_ce_station'],
'nom' => $individu['oi_nom']
);
'id_espece' => $individu['oi_ce_espece'],
'id_station' => $individu['oi_ce_station'],
'nom' => $individu['oi_nom'],
'commentaire' => $individu['oi_commentaire'],
);
 
}
}
?>
?>
/trunk/applications/jrest/services/OdsExport.php
248,7 → 248,6
}
$condition .= ' ('. implode(' OR ', $departements).')';
break;
default:
}
 
$condition .= ' AND ';
262,6 → 261,12
$condition .= ' AND oo_ce_participant != '.$id_demo;
$condition .= ' AND oo_ce_participant != '.$id_admin;
 
// par défaut les observations d'absence d'évènement ne sont pas incluses
// sauf si on le demande explicitement
if(empty($_GET['inclure-absences']) || $_GET['inclure-absences'] == 0) {
$condition .= ' AND oo_absence_evenement = 0';
}
 
return $condition;
}
 
273,7 → 278,8
}
 
public function getExportObservationPlat() {
 
// dans le csv les observations d'absence sont inclues par contre
$_GET['inclure-absences'] = 1;
$donnees = $this->getExportObservation();
$donnees_formatees = $this->formaterListeObservationPourExportCSV($donnees);
 
350,7 → 356,8
}
 
public function getFichierExportObservationCsv() {
 
// dans le csv les observations d'absence sont inclues par contre
$_GET['inclure-absences'] = 1;
$donnees = $this->getExportObservation();
$donnees_formatees = $this->formaterListeObservationPourExportCSV($donnees);
$chaine_csv = $this->convertirTableauAssocVersCSV($donnees_formatees);
389,6 → 396,8
$infos_formatees = array(
'id_observation' => $id_observation,
'id_individu' => $observations_infos['oo_ce_individu'],
'commentaire_individu' => $observations_infos['oi_commentaire'],
'presence_evenement' => $observations_infos['oo_absence_evenement'] == 1 ? 'Absence' : 'Présence',
'date' => $date_observation_formatee,
'evenenement' => $infos_evenement['nom'],
'code_bbch' => $infos_evenement['numero'],
/trunk/applications/jrest/services/OdsObservation.php
78,10 → 78,11
if(!$this->estUneDateInvalide($tableau_date['day'], $tableau_date['month'], $tableau_date['year'])) {
 
$date_observation_formatee = date($this->config['appli']['format_date'], strtotime($observation_individu['oo_date']));
 
$liste_observation_individu_formatees[$annee_obs][$titre_stade][$numero_stade][$observation_individu['oo_id_observation']] = $date_observation_formatee;
$liste_observation_individu_formatees[$annee_obs][$titre_stade][$numero_stade][$observation_individu['oo_id_observation']] = [
'date' => $date_observation_formatee,
'absence_evenement' => $observation_individu['oo_absence_evenement']
];
}
 
}
 
krsort($liste_observation_individu_formatees);
107,6 → 108,11
}
}
 
if(!empty($erreurs)) {
$this->envoyer($erreurs);
exit;
}
 
if(!isset($params['annee_en_cours'])) {
$annee_en_cours = date('Y');
} else {
113,15 → 119,10
$annee_en_cours = $params['annee_en_cours'];
}
 
if(!empty($erreurs)) {
$this->envoyer($erreurs);
exit;
}
 
$id_participant = $params['id_participant'];
$id_individu = $params['id_individu'];
 
$a_modifier_ou_inserer = !empty($params['id_observation']) ? $params['id_observation'] : false;
$a_modifier = !empty($params['id_observation']) ? $params['id_observation'] : false;
$retour = array();
 
$date_evenement = $this->formaterDateObservationPourBdd($params['date_evenement']);
150,12 → 151,22
'date_evenement' => $date_evenement,
'id_evenement' => $params['id_evenement'],
'id_individu' => $params['id_individu'],
'absence_observation' => 0,
'commentaire' => '');
 
if($a_modifier_ou_inserer) {
$obs_a_traiter['id_observation'] = $a_modifier_ou_inserer;
$this->modifierObservation($id_participant, $obs_a_traiter);
if($a_modifier) {
$obs_a_traiter['id_observation'] = $a_modifier;
$retour = $this->modifierObservation($id_participant, $obs_a_traiter);
} else {
// le signalement de l'absence d'un stade pour une année et un individu donné est toujours
// une nouvelle observation (car cela bloque la saisie d'obs supplementaires pour ce stade,
// cette année et cet individu)
if(!empty($params['absence_observation']) && $params['absence_observation'] == 1) {
// si l'observation d'absence concerne l'année en cours on la met à la date du jour
// sinon on la met arbitrairement au premier janvier de l'année concernée
$obs_a_traiter['date_evenement'] = ($annee_en_cours == date('Y')) ? date('Y-m-d') : $annee_en_cours.'-01-01';
$obs_a_traiter['absence_observation'] = $params['absence_observation'];
}
$retour = ['id_observation' => $this->insererObservation($id_participant, $obs_a_traiter)];
}
 
176,7 → 187,7
}
 
$requete_nouvelle_observation = 'INSERT INTO ods_observations '.
'(oo_ce_participant, oo_ordre, oo_ce_individu, oo_ce_evenement, oo_date, oo_commentaire, oo_date_saisie, oo_date_modification) '.
'(oo_ce_participant, oo_ordre, oo_ce_individu, oo_ce_evenement, oo_date, oo_commentaire, oo_date_saisie, oo_date_modification, oo_absence_evenement) '.
'VALUES '.
'( '.
$this->proteger($id_participant).','.
186,7 → 197,8
$this->proteger($donnees_obs_a_inserer['date_evenement']).','.
'"",'.
'NOW(),'.
'NOW()'.
'NOW(),'.
$this->proteger($donnees_obs_a_inserer['absence_observation']).
')';
 
$this->executerRequeteSimple($requete_nouvelle_observation);
195,15 → 207,48
 
private function modifierObservation($id_participant, $donnees_obs_a_inserer) {
 
$requete_modification_observation = 'UPDATE ods_observations '.
'SET '.
'oo_date = '.$this->proteger($donnees_obs_a_inserer['date_evenement']).', '.
'oo_commentaire = '.$this->proteger($donnees_obs_a_inserer['commentaire']).', '.
'oo_date_modification = NOW() '.
'WHERE oo_id_observation = '.$donnees_obs_a_inserer['id_observation'].' '.
'AND oo_ce_participant = '.$this->proteger($id_participant);
$requete_obs_existante = 'SELECT * FROM ods_observations '.
'WHERE oo_id_observation = '.$this->proteger($donnees_obs_a_inserer['id_observation']);
$obs_existante = $this->executerRequete($requete_obs_existante);
 
return $this->executerRequeteSimple($requete_modification_observation);
if(empty($obs_existante)) {
return false;
}
 
$obs_existante = $obs_existante[0];
 
$tableau_date = date_parse($donnees_obs_a_inserer['date_evenement']);
$est_une_suppression_obs = $this->estUneDateInvalide($tableau_date['day'], $tableau_date['month'], $tableau_date['year']);
 
$resultat = true;
// Pour supprimer une observation, on indique une date invalide contenant seulement son année.
// Celle-ci n'est du coup pas supprimée mais plutôt désactivée car le reste du programme
// ne tient normalement pas compte des obs avec des dates au format 00-00-yyyy (où yyyy est l'année où elle a eu lieu).
// Ceci permet de garder les données et les faires traiter par Isabelle.
// TODO: on pourrait faire bien mieux mais ça fonctionne et changer le système demanderait
// plus de temps mais ça serait une bonne chose à faire.
// Par contre si c'est une obs de signalement d'absence d'évènement on la supprime carrément
// car ça n'a pas d'interêt à être gardé (car c'est surement pour saisir une vraie obs après)
if($est_une_suppression_obs && $obs_existante['oo_absence_evenement'] == 1) {
 
$requete_suppression_observation = 'DELETE FROM ods_observations '.
'WHERE oo_id_observation = '.$this->proteger($donnees_obs_a_inserer['id_observation']).' '.
'AND oo_absence_evenement = 1';
$this->executerRequeteSimple($requete_suppression_observation);
} else {
$requete_modification_observation = 'UPDATE ods_observations '.
'SET '.
'oo_date = '.$this->proteger($donnees_obs_a_inserer['date_evenement']).', '.
'oo_commentaire = '.$this->proteger($donnees_obs_a_inserer['commentaire']).', '.
'oo_date_modification = NOW() '.
'WHERE oo_id_observation = '.$donnees_obs_a_inserer['id_observation'].' '.
'AND oo_ce_participant = '.$this->proteger($id_participant);
 
$resultat = $this->executerRequeteSimple($requete_modification_observation);
}
 
return $resultat;
}
 
private function renvoyerIdObservationSiEvenementDejaObserveCetteAnnee($id_evenement, $tableau_observations_cette_annee) {