Subversion Repositories Sites.obs-saisons.fr

Compare Revisions

Ignore whitespace Rev 323 → Rev 324

/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) {
/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/saisie/bibliotheque/dao/IndividuDao.php
13,11 → 13,11
*
*/
class IndividuDao extends Dao {
 
const SERVICE_INDIVIDU = 'OdsIndividu';
const METHODE_INDIVIDUS_STATION = 'IndividusPourStation';
const METHODE_INDIVIDUS_STATION_ESPECE = 'IndividusPourStationPourEspece';
 
/**
* Retourne l'ensemble des informations d'un individu.
*
25,24 → 25,24
* @return array un tableau contenant les informations sur les individus de cette station.
*/
public function getListeIndividusPourStation($id_station) {
 
$url = $this->url_jrest.self::SERVICE_INDIVIDU.'/'.self::METHODE_INDIVIDUS_STATION.'/'.$id_station;
$json = $this->envoyerRequeteConsultation($url);
$donnees = json_decode($json, true);
$donnees = json_decode($json, true);
return $donnees;
}
 
public function getListeIndividusPourStationPourEspece($id_station, $id_espece) {
 
$url = $this->url_jrest.self::SERVICE_INDIVIDU.'/'.self::METHODE_INDIVIDUS_STATION_ESPECE.'/'.$id_station.'/'.$id_espece;
$json = $this->envoyerRequeteConsultation($url);
$donnees = json_decode($json, true);
$donnees = json_decode($json, true);
 
return $donnees;
}
 
public function getInformationsIndividu($id_individu) {
 
if (is_numeric($id_individu)) {
$url = $this->url_jrest.self::SERVICE_INDIVIDU."/$id_individu";
$json = $this->envoyerRequeteConsultation($url);
50,55 → 50,55
return $donnees;
}
}
 
public function ajouterIndividu($valeurs_individu_verifiees) {
 
$donnees = $valeurs_individu_verifiees;
 
$url = $this->url_jrest.self::SERVICE_INDIVIDU."/";
$json = $this->envoyerRequeteAjout($url, $donnees);
$donnees = json_decode($json, true);
$donnees_retour = json_decode($json, true);
 
return $donnees_retour;
}
 
public function modifierIndividu($id_individu, $valeurs_individu_verifiees) {
 
$donnees = $valeurs_individu_verifiees;
if (is_numeric($id_individu)) {
$url = $this->url_jrest.self::SERVICE_INDIVIDU."/$id_individu";
$json = $this->envoyerRequeteModif($url, $donnees);
$donnees = json_decode($json, true);
if($donnees_retour['reponse'] == 'OK') {
return true;
}
}
 
if (is_numeric($id_individu)) {
$url = $this->url_jrest.self::SERVICE_INDIVIDU."/$id_individu";
 
$json = $this->envoyerRequeteModif($url, $donnees);
$donnees = json_decode($json, true);
 
if($donnees_retour['reponse'] == 'OK') {
return true;
}
}
 
return false;
}
 
public function supprimerIndividu($id_individu) {
 
$donnees = $valeurs_individu_verifiees;
 
if (is_numeric($id_individu)) {
$url = $this->url_jrest.self::SERVICE_INDIVIDU."/".AppControleur::getIdUtilisateur()."/".$id_individu;
$json = $this->envoyerRequeteSuppression($url, $donnees);
$donnees = json_decode($json, true);
 
$donnees_retour = json_decode($json, true);
 
if($donnees_retour['reponse'] == 'OK') {
return true;
}
 
}
 
return false;
}
}
?>
?>
/trunk/applications/saisie/squelettes/css/saisie.css
359,6 → 359,17
width: 20px;
}
 
.ajouter_observation .absence_observation {
background: url("../images/absence.png") no-repeat center center transparent;
width: 20px;
}
 
.ajouter_observation.hide,
.ajouter_observation .conteneur_supprimer_observation,
.ajouter_observation .absence_observation.hide {
display: none;
}
 
.conteneur_supprimer_observation {
position: absolute;
right: 0px;
398,6 → 409,12
position: relative;
}
 
.date_observation:not(.icone) {
padding-left: 20px;
padding-right: 20px;
}
 
 
.date_observation_individu .ui-datepicker {
position: absolute;
top: 100%;
419,7 → 436,19
margin-top: 31px;
}
 
#fiche_individu .commentaire_individu {
font-style: italic;
white-space: pre;
}
 
textarea[name="individu_commentaire"] {
width: 550px;
min-height: 160px;
border-radius: 5px;
height: 75px;
border: 1px solid #ACACAC;
}
 
/* =========================== Tableaux d'évenements ============================ */
 
#saisie_liste_evenements, #saisie_modif_evenements {
/trunk/applications/saisie/squelettes/formulaires/individu_saisie.tpl.html
11,18 → 11,30
<br />
<?= isset($erreurs['individu_nom']) ? '<span class="erreur"> '.$erreurs['individu_nom'].' </span>' : '' ?>
<br />
 
<div class="element_formulaire">
<label for="individu_commentaire">Commentaire :</label>
<div>
<textarea placeholder="Optionnel, 1000 caractères max." maxlength="1000"
<?= isset($erreurs['individu_commentaire']) ? 'class="erreur"' : '' ?>
name="individu_commentaire" id="individu_commentaire" ></textarea>
</div>
</div>
<br />
<?= isset($erreurs['individu_commentaire']) ? '<span class="erreur"> '.$erreurs['individu_commentaire'].' </span>' : '' ?>
<br />
 
<h3 class="titre_section_fiche"> Espèce </h3>
<div class="informations_espece">
<img title="<?= Liens::getCreditImageEspece($informations_espece['nom_scientifique']) ?>" alt="image de l'espece" class="droite" height="120px" src="<?= Liens::getUrlImageEspece($informations_espece['nom_scientifique'],'M') ?>" />
<span class="intitule_fiche"> <?= $informations_espece['nom_vernaculaire'] ?> </span>
<span class="valeur_fiche"> (<?= $informations_espece['nom_scientifique'] ?>) </span>
</div>
<div><a class="lien_voir_fiche_espece" href="<?= Liens::getUrlFicheEspece($informations_espece['nom_scientifique']); ?>"> Voir la fiche de cette espece </a></div>
<p class="intitule_fiche description_espece" > <?= $informations_espece['description'] ?></p>
<input type="hidden" id="espece" name="espece" value="<?= $id_espece; ?>" />
<input type="hidden" id="station" name="station" value="<?= $id_station; ?>" />
<input class="droite gros_bouton_validation" type="submit" value="Valider" />
<span class="valeur_fiche"> (<?= $informations_espece['nom_scientifique'] ?>) </span>
</div>
<div><a class="lien_voir_fiche_espece" href="<?= Liens::getUrlFicheEspece($informations_espece['nom_scientifique']); ?>"> Voir la fiche de cette espece </a></div>
<p class="intitule_fiche description_espece" > <?= $informations_espece['description'] ?></p>
<input type="hidden" id="espece" name="espece" value="<?= $id_espece; ?>" />
<input type="hidden" id="station" name="station" value="<?= $id_station; ?>" />
<input class="droite gros_bouton_validation" type="submit" value="Valider" />
</form>
</div>
<!-- ODS_SAISIE - FIN SAISIE INDIVIDU -->
<!-- ODS_SAISIE - FIN SAISIE INDIVIDU -->
/trunk/applications/saisie/squelettes/formulaires/individu_modification.tpl.html
11,7 → 11,19
<br />
<?= isset($erreurs['individu_nom']) ? '<span class="erreur"> '.$erreurs['individu_nom'].' </span>' : '' ?>
<br />
 
<div class="element_formulaire">
<label for="individu_commentaire">Commentaire :</label>
<div>
<textarea placeholder="Optionnel, 100 caractères max." maxlength="1000"
<?= isset($erreurs['individu_commentaire']) ? 'class="erreur"' : '' ?>
name="individu_commentaire" id="individu_commentaire" ><?= $infos_individu['commentaire']; ?></textarea>
</div>
</div>
<br />
<?= isset($erreurs['individu_commentaire']) ? '<span class="erreur"> '.$erreurs['individu_commentaire'].' </span>' : '' ?>
<br />
 
<h3 class="titre_section_fiche"> Espèce </h3>
<div class="informations_espece">
<img title="<?= Liens::getCreditImageEspece($espece['nom_scientifique']) ?>" alt="image de l'espece" class="droite" height="120" src="<?= Liens::getUrlImageEspece($informations_espece['nom_scientifique'],'M') ?>" />
22,7 → 34,7
<input type="hidden" id="id_espece" name="id_espece" value="<?= $id_espece; ?>" />
<input type="hidden" id="id_station" name="id_station" value="<?= $id_station; ?>" />
<input type="hidden" id="id_individu" name="id_individu" value="<?= $infos_individu['id_individu']; ?>" />
<input class="droite gros_bouton_validation" type="submit" value="Valider" />
<input class="droite gros_bouton_validation" type="submit" value="Valider" />
</form>
</div>
<!-- ODS_SAISIE - FIN MODIFICATION INDIVIDU -->
<!-- ODS_SAISIE - FIN MODIFICATION INDIVIDU -->
/trunk/applications/saisie/squelettes/js/saisie.js
63,7 → 63,7
initialiserOnglets();
});
 
function agrandirZoneCLicBoutonsRadios() {
function agrandirZoneClicBoutonsRadios() {
 
$('.formulaire_informations_espece_mini').addClass("element_cliquable");
 
81,7 → 81,7
}
 
$('#form_saisie_espece').ready(function() {
agrandirZoneCLicBoutonsRadios();
agrandirZoneClicBoutonsRadios();
});
 
 
97,11 → 97,6
************************************************************************************************
**/
 
htmlEnCours = '';
elementEnCours = null;
ancienneValeurEnCours = null;
id_formulaire = null;
 
function initialiserLignesCliquables() {
 
$('.conteneur_element_modifier').hide();
109,7 → 104,10
$(".date_observation_individu").live("click", function(e) {
e.preventDefault();
 
if($(e.target).hasClass('conteneur_supprimer_observation') || $(e.target).hasClass('supprimer_observation')) {
var est_absence_observation = $(e.target).parents('[data-absence-observation="1"]').length > 0;
if($(e.target).hasClass('conteneur_supprimer_observation') ||
$(e.target).hasClass('supprimer_observation') ||
est_absence_observation) {
return;
}
 
126,13 → 124,35
 
$(".date_observation_individu .conteneur_supprimer_observation").live("click", function(e) {
e.preventDefault();
if(window.confirm('Êtes-vous sûr de vouloir supprimer cette observation ?')) {
if(window.confirm('Êtes-vous sûr.e de vouloir supprimer cette observation ?')) {
// les obs ne sont jamais vraiment supprimées
// mais seulement remplacées par des dates au format 00/00/yyyy
envoyerRequeteAjaxSaisieObservation('', $(this).parent('.date_observation_individu'));
}
 
return false;
});
 
$(".date_observation_individu .absence_observation").live("click", function(e) {
e.preventDefault();
var avertissement_absence_evenement = 'Attention ! Vous êtes sur le point de signaler que ce stade n\'a pas eu lieu dans l\'année. '+"\n"+
'C\'est-à-dire que vous êtes certain.e de ne pas l\'avoir raté. '+"\n"+
'Êtes-vous sûr.e ?';
if(window.confirm(avertissement_absence_evenement)) {
$(this).parent('.date_observation_individu').data('absence-observation', '1');
var date_absence_evenement = '';
var dateEnCours = new Date();
if(getAnneeEnCoursDeConsultation() == dateEnCours.getFullYear()) {
date_absence_evenement = dateEnCours.getDate()+'/'+dateEnCours.getMonth()+'/'+dateEnCours.getFullYear();
} else {
date_absence_evenement = '01/01/'+dateEnCours.getFullYear();
}
envoyerRequeteAjaxSaisieObservation(date_absence_evenement, $(this).parent('.date_observation_individu'));
}
 
return false;
});
 
// pour fermer le datepicker sur esc
$(document).keyup(function(e) {
if (e.keyCode === 27) {
205,6 → 225,10
"annee_en_cours": anneeEnCours
};
 
if(!!$obs.data('absence-observation')) {
donnees_obs.absence_observation = $obs.data('absence-observation');
}
 
if(!!$obs.data('id-observation')) {
donnees_obs.id_observation = $obs.data('id-observation');
}
230,10 → 254,16
var $conteneurAjout = $('#'+id_conteneur_ajout).clone();
}
 
if(absenceStadePourIndividuEtAnneeEstSignalee($obs.data('id-individu'), $obs.data('id-stade'))) {
$obs.find('.date-observation').text('Absent');
return;
}
 
var donnees_obs = formaterDonneesObservationPourEnvoi(dateStr, $obs);
donnees_obs['id_participant'] = 3;
$.post(url_ajax, donnees_obs, function(obj_retour) {
 
if(obj_retour.data.erreurs) {
if(!!obj_retour.data.erreurs) {
var message = 'Une ou plusieurs erreurs se sont produites : '+"\n";
for (var key in obj_retour.data.erreurs) {
if (obj_retour.data.erreurs.hasOwnProperty(key))
248,23 → 278,39
// les obs ne sont jamais vraiment supprimées
// mais seulement remplacées par des dates au format 00/00/yyyy
if(estUneDateSuppressionObs(dateStr)) {
// si l'on a supprimé le signalement de l'absence d'un stade, alors on peut de nouveau saisir des
// observations pour ce stade (le signalement de l'absence d'un stade pour une année est une observation)
if(estUneAbsenceObservation($obs)) {
afficherOuCacherConteneurAjout($obs.data('id-individu'), $obs.data('id-stade-observation'), true);
afficherOuCacherBoutonSignalerAbsenceObservation($obs.data('id-individu'), $obs.data('id-stade-observation'), true);
}
 
$obs.remove();
delete $obs;
 
// s'il l'on vient de supprimer la dernière obs d'une évènement pour un individu on peut également à nouveau
// saisir des observations pour celui-ci
if(getDatesSaisiesPourStadeEtIndividu($obs.data('id-individu'), $obs.data('id-stade-observation')).length == 0) {
afficherOuCacherBoutonSignalerAbsenceObservation($obs.data('id-individu'), $obs.data('id-stade-observation'), true);
}
 
return;
}
 
$obs.find('.date_observation').text(dateStr);
$obs.data('date-observation', dateStr);
if(!!obj_retour.data.id_observation) {
donnees_obs['id_observation'] = obj_retour.data.id_observation;
}
 
if(!est_obs_existante) {
$obs.removeClass('ajouter_observation');
$obs.attr('title', 'Cliquez pour modifier la date de cette observation')
$obs.data('id-observation', obj_retour.data.id_observation);
 
var id_conteneur_observation = 'individu_'+donnees_obs['id_individu']+'_evenement_'+donnees_obs['id_evenement']+'_observation_'+obj_retour.data.id_observation;
$obs.attr('id', id_conteneur_observation);
 
$obs.after($conteneurAjout);
// sl'on vient de signaler que la stade n'a pas du tout eu lieu dans l'année
if(estUneAbsenceObservation($obs)) {
// alors on affiche une observation spéciale qui indique que le stade est absent
// et qui bloque la saisie d'autres observations de ce stade pour cet individu et cette année
afficherAbsenceObservationPourIndividuEtAnnee($obs, $conteneurAjout, donnees_obs);
} else {
afficherObservation(dateStr, $obs, $conteneurAjout, donnees_obs, est_obs_existante);
// à partir du moment où l'on a au moins une observation pour un stade et un individu donné
// on ne peut plus signaler que l'évènement n'a pas eu lieu cette année
afficherOuCacherBoutonSignalerAbsenceObservation($obs.data('id-individu'), $obs.data('id-stade-observation'), false);
}
 
$('.element_clique').removeClass('element_clique');
273,6 → 319,47
});
}
 
function afficherObservation(dateStr, $obs, $conteneurAjout, donnees_obs, est_obs_existante) {
$obs.find('.date_observation').text(dateStr);
$obs.data('date-observation', dateStr);
 
if(!est_obs_existante) {
$obs.removeClass('ajouter_observation');
$obs.attr('title', 'Cliquez pour modifier la date de cette observation')
$obs.data('id-observation', donnees_obs['id_observation']);
 
var id_conteneur_observation = 'individu_'+donnees_obs['id_individu']+'_evenement_'+donnees_obs['id_evenement']+'_observation_'+donnees_obs['id_observation'];
$obs.attr('id', id_conteneur_observation);
 
$obs.after($conteneurAjout);
}
}
 
function afficherAbsenceObservationPourIndividuEtAnnee($obs, $conteneurAjout, donnees_obs) {
afficherObservation('Absent', $obs, $conteneurAjout, donnees_obs, false);
$obs.attr('title', 'Vous avez indiqué que ce stade n\'a pas été observé pour cette année');
$obs.data('absence-observation', '1');
$obs.attr('data-absence-observation', '1');
// on cache le conteneur d'ajout car une fois l'absence d'un stade signalée pour une année
// et un individu, il est illogique de vouloir signaler des observations de ce stade
afficherOuCacherConteneurAjout(donnees_obs['id_individu'], donnees_obs['id_evenement'], false);
}
 
function afficherOuCacherConteneurAjout(id_individu, id_evenement, afficher) {
var $conteneurAjout = $('#ajouter_observation_individu_'+id_individu+'_evenement_'+id_evenement);
$conteneurAjout.toggleClass('hide', !afficher);
}
 
function afficherOuCacherBoutonSignalerAbsenceObservation(id_individu, id_evenement, afficher) {
var $conteneurSignalementAbsenceObs = $('#ajouter_observation_individu_'+id_individu+'_evenement_'+id_evenement+' .absence_observation');
console.log($conteneurSignalementAbsenceObs);
$conteneurSignalementAbsenceObs.toggleClass('hide', !afficher);
}
 
function estUneAbsenceObservation($obs) {
return $obs.data('absence-observation') == 1;
}
 
function estUneDateSuppressionObs(dateStr) {
var date_vide_pattern = /^00\/00\/\d{4}$/;
return dateStr == '' || date_vide_pattern.test(dateStr);
301,6 → 388,14
return d && (d.getMonth() + 1) == bits[1];
}
 
function absenceStadePourIndividuEtAnneeEstSignalee(id_individu, id_stade) {
var selecteur_data = '[data-id-individu="'+id_individu+'"]'+
'[data-id-stade-observation="'+id_stade+'"]'+
'[data-absence-observation="1"]';
 
return $('.date_observation_individu'+selecteur_data).length >= 1;
}
 
function getDatesSaisiesPourStadeEtIndividu(id_individu, id_stade) {
var selecteur_data = '[data-id-individu="'+id_individu+'"]'+
'[data-id-stade-observation="'+id_stade+'"]';
678,7 → 773,7
 
function initialiserLiensSuppression() {
$('.lien_suppression').click(function() {
return window.confirm('Êtes vous sur de vouloir supprimer ?');
return window.confirm('Êtes vous sûr.e de vouloir supprimer ?');
});
}
 
/trunk/applications/saisie/squelettes/fiches/individu_fiche.tpl.html
1,6 → 1,9
<!-- ODS_SAISIE - DEBUT FICHE INDIVIDU -->
<div id="fiche_individu">
<h2 class="titre_fiche"> <?= $infos_individu['nom'] ?></h2>
<h2 class="titre_fiche"><?= $infos_individu['nom'] ?></h2>
<?php if(!empty($infos_individu['commentaire'])) { ?>
<p class="commentaire_individu">&laquo; <?= $infos_individu['commentaire'] ?> &raquo;</p>
<?php } ?>
<hr class="separation_section" />
 
<h3 class="titre_section_fiche"> Espèce </h3>
/trunk/applications/saisie/squelettes/listes/evenement_liste.tpl.html
2,8 → 2,9
<div>
<h2> Observations pour l'année <?= $annee ?> </h2>
 
<p class="cadre_information">Pour ajouter ou modifier une observation, cliquez sur la case correspondante et sélectionnez une date dans le calendrier,
(vous pouvez annuler l'édition en appuyant sur la touche échap). Pour la supprimer cliquez sur la croix à droite de la date.
<p class="cadre_information">Pour ajouter ou modifier une observation, cliquez sur la case correspondante et sélectionnez une date dans le calendrier
(vous pouvez annuler l'édition en appuyant sur la touche échap). <br />
Pour la supprimer, cliquez sur la croix à droite de la date.
</p>
 
<ul class="liste_annees_observations">
48,30 → 49,52
</a>
</td>
<?php foreach($evenements as $nom_evenement => $evenement) : ?>
<?php foreach($evenement['stades'] as $id_stade => $stade) : ?>
<td class="conteneur_date_observation" title="Cliquez pour modifier la date de cette observation">
<?php foreach($evenement['stades'] as $id_stade => $stade) : ?>
<td class="conteneur_date_observation">
<?php $stade_absent_cette_annee = false; ?>
<?php if (!empty($individu['observations'][$annee][$nom_evenement][$stade])) { ?>
<?php foreach($individu['observations'][$annee][$nom_evenement][$stade] as $id_observation => $date_observation) : ?>
<div class="date_observation_individu element_cliquable"
data-id-stade-observation="<?=$id_stade?>"
data-id-observation="<?=$id_observation?>"
data-id-individu="<?=$individu['id_individu']?>"
data-date-observation="<?=$date_observation?>"
id="individu_<?=$individu['id_individu']?>_evenement_<?=$id_stade?>_observation_<?=$id_observation?>">
<span class="date_observation"><?= $date_observation ?></span>
<span class="datepicker_container"></span>
<div class="conteneur_supprimer_observation">
<span title="Cliquez pour supprimer cette observation" class="icone supprimer_observation">&nbsp;</span>
<?php foreach($individu['observations'][$annee][$nom_evenement][$stade] as $id_observation => $observation) : ?>
<?php if($observation['absence_evenement'] == 0) { ?>
<div class="date_observation_individu element_cliquable"
title="Cliquez pour modifier la date de cette observation"
data-id-stade-observation="<?=$id_stade?>"
data-id-observation="<?=$id_observation?>"
data-id-individu="<?=$individu['id_individu']?>"
data-date-observation="<?= $observation['date'] ?>"
id="individu_<?=$individu['id_individu']?>_evenement_<?=$id_stade?>_observation_<?=$id_observation?>">
<span class="date_observation"><?= $observation['date'] ?></span>
<span class="datepicker_container"></span>
<div class="conteneur_supprimer_observation">
<span title="Cliquez pour supprimer cette observation" class="icone supprimer_observation">&nbsp;</span>
</div>
</div>
</div>
<?php } else { ?>
<?php $stade_absent_cette_annee = true; ?>
<div class="date_observation_individu element_cliquable"
title="Vous avez indiqué que ce stade n'a pas été observé pour cette année"
data-id-stade-observation="<?=$id_stade?>"
data-id-observation="<?=$id_observation?>"
data-id-individu="<?=$individu['id_individu']?>"
data-date-observation="<?= $observation['date'] ?>"
data-absence-observation="1"
id="individu_<?=$individu['id_individu']?>_evenement_<?=$id_stade?>_observation_<?=$id_observation?>">
<span class="date_observation">Absent</span>
<div class="conteneur_supprimer_observation">
<span title="Cliquez pour supprimer cette observation" class="icone supprimer_observation">&nbsp;</span>
</div>
</div>
<?php } ?>
<?php endforeach; ?>
<?php } ?>
<div class="ajouter_observation date_observation_individu element_cliquable"
<div class="ajouter_observation date_observation_individu element_cliquable <?= $stade_absent_cette_annee ? 'hide' : '' ?>"
data-id-stade-observation="<?=$id_stade?>"
data-id-individu="<?=$individu['id_individu']?>"
title="Cliquez pour ajouter une nouvelle observation de ce stade"
id="ajouter_observation_individu_<?=$individu['id_individu']?>_evenement_<?=$id_stade?>">
<span class="icone date_observation">&nbsp;</span>
<?php $pas_encore_stade_pour_annee = empty($individu['observations'][$annee][$nom_evenement][$stade]); ?>
<span title="Cliquez pour signaler l'absence de cet évènement pour cette année"
class="icone absence_observation <?= $pas_encore_stade_pour_annee ? '' : 'hide' ?>">&nbsp;</span>
<span class="datepicker_container"></span>
<div class="conteneur_supprimer_observation">
<span title="Cliquez pour supprimer cette observation" class="icone supprimer_observation">&nbsp;</span>
/trunk/applications/saisie/controleurs/Liens.php
15,56 → 15,56
class Liens extends aControleur {
 
public static function construireUrl($tableau_params, $conserver_parametres_actuels = false) {
 
if ($conserver_parametres_actuels) {
return '?'.http_build_query($tableau_params + $_GET);
}
return '?'.http_build_query($tableau_params);
}
 
public static function getUrlSquelette() {
$url_base = self::getUrlBaseComplete();
 
$url_base = self::getUrlBaseComplete();
$url_base_squelette = $url_base.Config::get('dossier_squelettes').DS;
 
return $url_base_squelette;
}
 
public static function getUrlStyle() {
$url_base_style = self::getUrlSquelette().'css'.DS;
 
return $url_base_style;
}
 
public static function getUrlScript() {
$url_base_script = self::getUrlSquelette().'js'.DS;
 
return $url_base_script;
}
 
public static function getUrlImage() {
$url_base_image = self::getUrlSquelette().'images'.DS;
 
return $url_base_image;
}
 
public static function getUrlImageEspece($nom_sci, $format = 'CXS') {
 
$nom_sci_formate = strtolower(str_replace(' ', '_', $nom_sci));
 
if(!file_exists(Config::get('dossier_images_especes').$format.'/'.$nom_sci_formate.'.jpg')) {
return Config::get('url_images_especes').$format.'/'.'vide.jpg';
}
 
return Config::get('url_images_especes').$format.'/'.$nom_sci_formate.'.jpg';
}
 
public static function getUrlFicheEspece($nom_sci) {
 
$nom_sci_formate = strtolower(str_replace(' ', '_', $nom_sci));
return Config::get('url_fiches_especes').$nom_sci_formate.'/';
}
 
public static function getUrlAdministrationEspeces() {
$params = array(
'module' => 'Administration',
72,11 → 72,11
);
return self::construireUrl($params);
}
 
public static function getCreditImageEspece($nom_sci) {
 
$nom_sci_formate = strtolower(str_replace(' ', '_', $nom_sci));
 
if(!file_exists(Config::get('dossier_images_especes').'/'.$nom_sci_formate.'.txt')) {
$credit = '';
} else {
83,56 → 83,56
$credit = file_get_contents(Config::get('dossier_images_especes').'/'.$nom_sci_formate.'.txt');
$credit = htmlentities($credit);
}
 
if(trim($credit) != '') {
$credit = 'Crédits : '.$credit;
}
 
return $credit;
}
 
public static function getUrlBaseReecrite() {
 
if(isset($_SERVER['REDIRECT_URL']) && $_SERVER['REDIRECT_URL'] != '') {
 
}
 
$base_url_reecrite = 'http://'.$_SERVER['SERVER_NAME'].$_SERVER['REDIRECT_URL'];
$base_url_reecrite .= '/';
 
return $base_url_reecrite;
}
 
public static function getUrlBase() {
 
$base_vrai_chemin = str_replace(realpath($_SERVER['DOCUMENT_ROOT']),'',realpath(Application::getChemin()));
$base_vrai_chemin .= '/';
 
return $base_vrai_chemin;
}
 
public static function getUrlBaseComplete() {
return 'http://'.$_SERVER['SERVER_NAME'].str_replace(realpath($_SERVER['DOCUMENT_ROOT']),'',realpath(Application::getChemin())).'/';
}
public static function getUrlDefaut() {
 
public static function getUrlDefaut() {
 
$params = array();
return self::construireUrl($params);
return self::construireUrl($params);
}
public static function getUrlConsultationFicheStation($id_station) {
 
public static function getUrlConsultationFicheStation($id_station) {
 
$params = array(
'module' => 'Station',
'action' => 'afficherInformationsStation',
'id_station' => $id_station
);
return self::construireUrl($params);
return self::construireUrl($params);
}
 
public static function getUrlFormulaireSaisieStation() {
 
$params = array(
'module' => 'Station',
'action' => 'afficherFormulaireSaisieStation',
140,7 → 140,7
);
return self::construireUrl($params);
}
 
public static function getUrlValidationFormulaireSaisieStation() {
$params = array(
'module' => 'Station',
148,7 → 148,7
);
return self::construireUrl($params);
}
 
public static function getUrlFormulaireModificationStation($id_station) {
$params = array(
'module' => 'Station',
157,7 → 157,7
);
return self::construireUrl($params);
}
 
public static function getUrlValidationFormulaireModificationStation($id_station) {
$params = array(
'module' => 'Station',
166,9 → 166,9
);
return self::construireUrl($params);
}
 
public static function getUrlFormulaireSuppressionStation() {
 
$params = array(
'module' => 'Station',
'action' => 'supprimerStation'
175,33 → 175,33
);
return self::construireUrl($params);
}
public static function getUrlFormulaireAjoutEspece($id_station) {
 
public static function getUrlFormulaireAjoutEspece($id_station) {
 
$params = array(
'module' => 'Espece',
'action' => 'afficherFormulaireSaisieEspece',
'id_station' => $id_station,
'id_espece' => 'saisie'
);
return self::construireUrl($params);
);
 
return self::construireUrl($params);
}
public static function getUrlValidationFormulaireSaisieEspece($id_station) {
 
public static function getUrlValidationFormulaireSaisieEspece($id_station) {
 
$params = array(
'module' => 'Espece',
'action' => 'validerFormulaireSaisieEspece',
'id_station' => $id_station,
'id_espece' => 'saisie'
);
return self::construireUrl($params);
);
 
return self::construireUrl($params);
}
public static function getUrlConsultationFicheIndividu($id_station, $id_espece, $id_individu) {
 
public static function getUrlConsultationFicheIndividu($id_station, $id_espece, $id_individu) {
 
$params = array(
'module' => 'Individu',
'action' => 'afficherInformationsIndividu',
210,11 → 210,11
'id_individu' => $id_individu
);
return self::construireUrl($params);
 
}
public static function getUrlFormulaireSaisieIndividu($id_station, $id_espece) {
 
public static function getUrlFormulaireSaisieIndividu($id_station, $id_espece) {
 
$params = array(
'module' => 'Individu',
'action' => 'afficherFormulaireSaisieIndividu',
221,11 → 221,11
'id_station' => $id_station,
'id_espece' => $id_espece
);
return self::construireUrl($params);
return self::construireUrl($params);
}
public static function getUrlValidationFormulaireSaisieIndividu($id_station, $id_espece) {
 
public static function getUrlValidationFormulaireSaisieIndividu($id_station, $id_espece) {
 
$params = array(
'module' => 'Individu',
'action' => 'validerFormulaireSaisieIndividu',
232,11 → 232,11
'id_station' => $id_station,
'id_espece' => $id_espece
);
return self::construireUrl($params);
return self::construireUrl($params);
}
public static function getUrlFormulaireModificationIndividu($id_station, $id_espece, $id_individu) {
 
public static function getUrlFormulaireModificationIndividu($id_station, $id_espece, $id_individu) {
 
$params = array(
'module' => 'Individu',
'action' => 'afficherFormulaireModificationIndividu',
244,11 → 244,11
'id_espece' => $id_espece,
'id_individu' => $id_individu
);
return self::construireUrl($params);
return self::construireUrl($params);
}
public static function getUrlValidationFormulaireModificationIndividu($id_station, $id_espece, $id_individu) {
 
public static function getUrlValidationFormulaireModificationIndividu($id_station, $id_espece, $id_individu) {
 
$params = array(
'module' => 'Individu',
'action' => 'validerFormulaireModificationIndividu',
256,25 → 256,25
'id_espece' => $id_espece,
'id_individu' => $id_individu
);
return self::construireUrl($params);
return self::construireUrl($params);
}
public static function getUrlSuppressionIndividu($id_station, $id_espece, $id_individu) {
 
public static function getUrlSuppressionIndividu($id_station, $id_espece, $id_individu) {
 
$params = array(
'module' => 'Individu',
'action' => 'supprimerIndividu',
'id_station' => $id_station
);
return self::construireUrl($params);
return self::construireUrl($params);
}
public static function getUrlConsultationEspeceStation($id_station, $id_espece, $annee = null) {
 
public static function getUrlConsultationEspeceStation($id_station, $id_espece, $annee = null) {
 
if($annee == null) {
$annee = date('Y');
}
 
$params = array(
'module' => 'Individu',
'action' => 'afficherListeIndividu',
281,17 → 281,17
'id_station' => $id_station,
'id_espece' => $id_espece,
'annee' => $annee
);
return self::construireUrl($params);
);
 
return self::construireUrl($params);
}
 
public static function getUrlFormulaireModificationObservation($id_station,$id_espece, $id_individu, $annee = null) {
 
if($annee == null) {
$annee = date('Y');
}
 
$params = array(
'module' => 'Observation',
'action' => 'afficherFormulaireModificationObservation',
299,17 → 299,17
'id_espece' => $id_espece,
'id_individu' => $id_individu,
'annee' => $annee
);
return self::construireUrl($params);
);
 
return self::construireUrl($params);
}
 
public static function getUrlValidationFormulaireModificationObservation($id_station,$id_espece, $id_individu, $annee = null) {
 
if($annee == null) {
$annee = date('Y');
}
 
$params = array(
'module' => 'Observation',
'action' => 'validerFormulaireModificationObservation',
317,28 → 317,28
'id_espece' => $id_espece,
'id_individu' => $id_individu,
'annee' => $annee
);
return self::construireUrl($params);
);
 
return self::construireUrl($params);
}
 
public static function getUrlExportDonneesObservations() {
return Config::get('url_jrest').'OdsExport/FichierExportObservationCSV/';
 
return Config::get('url_jrest').'OdsExport/FichierExportObservationCSV/';
}
 
public static function getUrlExportDonneesObservationsPourUtilisateur() {
 
$params = array(
'module' => 'Export',
'action' => 'envoyerFichierCSVExportObservation'
);
return self::construireUrl($params);
);
 
return self::construireUrl($params);
}
 
public static function getUrlFormulaireAjoutEspeceAdmin() {
 
$params = array(
'module' => 'Administration',
'action' => 'afficherFormulaireAjoutEspeceAdmin',
346,7 → 346,7
);
return self::construireUrl($params);
}
 
public static function getUrlValidationFormulaireAjoutEspeceAdmin() {
$params = array(
'module' => 'Administration',
355,9 → 355,9
);
return self::construireUrl($params);
}
 
public static function getUrlFormulaireModificationEspeceAdmin($id_espece) {
 
$params = array(
'module' => 'Administration',
'action' => 'afficherFormulaireModificationEspeceAdmin',
365,8 → 365,8
);
return self::construireUrl($params);
}
public static function getUrlValidationFormulaireModificationEspeceAdmin($id_espece) {
 
public static function getUrlValidationFormulaireModificationEspeceAdmin($id_espece) {
$params = array(
'module' => 'Administration',
'action' => 'validerFormulaireModificationEspeceAdmin',
374,7 → 374,7
);
return self::construireUrl($params);
}
 
public static function getUrlFormulaireAjoutImageEspeceAdmin($id_espece) {
$params = array(
'module' => 'Administration',
383,7 → 383,7
);
return self::construireUrl($params);
}
 
public static function getUrlValidationFormulaireAjoutImageEspeceAdmin($id_espece) {
$params = array(
'module' => 'Administration',
392,39 → 392,39
);
return self::construireUrl($params);
}
 
public static function renvoyerStylesInclus() {
 
$styles = '';
$styles .= '<link href="'.self::getUrlStyle().'saisie.css" rel="stylesheet" type="text/css"/>';
$styles .= '<link href="'.self::getUrlStyle().'saisie.css" rel="stylesheet" type="text/css"/>';
$styles .= '<link href="'.self::getUrlStyle().'jquery_ui/jquery-ui-1.8.6.custom.css" rel="stylesheet" type="text/css"/>';
$styles .= '<link href="'.self::getUrlStyle().'jquery_ui/jquery.ui.datepicker.css" rel="stylesheet" type="text/css"/>';
 
return $styles;
}
 
public static function renvoyerScriptsInclus() {
 
$scripts = '<script type="text/javascript">'.
' var urlBaseJrest = "'.Config::get('url_jrest').'"; '.
'</script>';
$scripts .= '<script type="text/javascript" src="http://maps.google.com/maps/api/js?sensor=false"></script>';
$scripts .= '<script type="text/javascript" src="http://maps.google.com/maps/api/js?sensor=false&key=AIzaSyC_HBnP1YDEX1ATgnvylxkW2HImJV485ZQ"></script>';
$scripts .= '<script type="text/javascript" src="'.self::getUrlScript().'jquery-1.4.4.min.js"></script>';
$scripts .= '<script type="text/javascript" src="'.self::getUrlScript().'jquery_ui/jquery-ui-1.8.6.custom.min.js"></script>';
$scripts .= '<script type="text/javascript" src="'.self::getUrlScript().'saisie.js"></script>';
 
if(AppControleur::getUtilisateur()->estAdmin()) {
$scripts .= '<script type="text/javascript" src="'.self::getUrlScript().'saisie_admin.js"></script>';
}
 
$scripts .= '<script type="text/javascript" src="'.self::getUrlScript().'jquery_ui/jquery.ui.datepicker.js"></script>';
$scripts .= '<script type="text/javascript" src="'.self::getUrlScript().'jquery_ui/jquery.ui.datepicker-fr.js"></script>';
 
return $scripts;
 
}
 
 
}
?>
?>
/trunk/applications/saisie/controleurs/Individu.php
41,7 → 41,7
 
public function getFormulaireSaisieIndividu($donnees = array()) {
 
if($donnees == array()) {
if($donnees == array()) {
$donnees['individu_nom'] = '';
}
 
57,12 → 57,12
return $this->getVue('formulaires/individu_saisie',$donnees);
}
 
public function afficherFormulaireModificationIndividu($donnees = array()) {
public function afficherFormulaireModificationIndividu($donnees = array()) {
 
$individu_dao = new IndividuDao();
 
$id_individu = $_GET['id_individu'];
$donnees['infos_individu'] = $individu_dao->getInformationsIndividu($id_individu);
$donnees['infos_individu'] = $individu_dao->getInformationsIndividu($id_individu);
$donnees['id_station'] = $_GET['id_station'];
$donnees['id_espece'] = $_GET['id_espece'];
 
70,7 → 70,7
$donnees['informations_espece'] = $espece_dao->getInformationsEspece($donnees['id_espece']);
 
$this->setSortie(self::RENDU_CORPS,$this->getVue('formulaires/individu_modification',$donnees));
}
}
 
public function afficherListeIndividu() {
 
174,6 → 174,7
$valeurs_verifiees['id_station'] = $_POST['station'];
$valeurs_verifiees['id_espece'] = $_POST['espece'];
$valeurs_verifiees['individu_nom'] = $_POST['individu_nom'];
$valeurs_verifiees['individu_commentaire'] = $_POST['individu_commentaire'];
 
return $valeurs_verifiees;
 
185,6 → 186,7
$valeurs_verifiees['id_espece'] = $_POST['id_espece'];
$valeurs_verifiees['individu_nom'] = $_POST['individu_nom'];
$valeurs_verifiees['id_individu'] = $_POST['id_individu'];
$valeurs_verifiees['individu_commentaire'] = $_POST['individu_commentaire'];
 
return $valeurs_verifiees;
 
195,7 → 197,7
$erreurs = array();
 
foreach($valeurs_a_verifier as $champ => $valeur) {
if(trim($valeur) == '') {
if(trim($valeur) == '' && $champ != 'individu_commentaire') {
$erreurs[$champ] .= ' Ce champ ne peut pas être vide';
}
}
210,11 → 212,9
public function validerFormulaireModificationIndividu() {
 
$valeurs_collectees = $this->collecterValeursFormulaireModificationIndividu();
 
$verification_ou_erreurs = $this->verifierValeursIndividu($valeurs_collectees);
 
if($verification_ou_erreurs !== true) {
 
$donnees = $valeurs_collectees;
 
$donnees['erreurs'] = $verification_ou_erreurs;
223,7 → 223,6
}
 
$valeurs_verifiees = $valeurs_collectees;
 
$id_individu = $valeurs_collectees['id_individu'];
 
$individu_dao = new IndividuDao();
/trunk/applications/saisie/controleurs/Observation.php
142,6 → 142,10
$valeurs_verifiees['id_observation'] = $_POST['id_observation'];
}
 
if(!empty($_POST['absence_observation'])) {
$valeurs_verifiees['absence_observation'] = $_POST['absence_observation'];
}
 
return $valeurs_verifiees;
}