Subversion Repositories Sites.obs-saisons.fr

Compare Revisions

Regard whitespace Rev 323 → Rev 324

/trunk/applications/jrest/services/OdsIndividu.php
37,6 → 37,7
foreach($elements_requis as $requis) {
if(!isset($params[$requis])) {
//TODO: pourquoi est-ce que c'est commenté ça ?
//$erreurs[$requis] = 'erreur ';
}
}
45,12 → 46,18
$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']).')';
$this->proteger($params['individu_nom']).','.
$this->proteger($commentaire).')';
$creation_individu = $this->executerRequeteSimple($requete_creation_individu);
74,10 → 81,19
return;
}
// 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']).' '.
'WHERE oi_id_individu = '.$this->proteger($id_individu);
'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();
182,9 → 198,10
'id_individu' => $individu['oi_id_individu'],
'id_espece' => $individu['oi_ce_espece'],
'id_station' => $individu['oi_ce_station'],
'nom' => $individu['oi_nom']
'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,6 → 207,36
 
private function modifierObservation($id_participant, $donnees_obs_a_inserer) {
 
$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);
 
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']).', '.
203,9 → 245,12
'WHERE oo_id_observation = '.$donnees_obs_a_inserer['id_observation'].' '.
'AND oo_ce_participant = '.$this->proteger($id_participant);
 
return $this->executerRequeteSimple($requete_modification_observation);
$resultat = $this->executerRequeteSimple($requete_modification_observation);
}
 
return $resultat;
}
 
private function renvoyerIdObservationSiEvenementDejaObserveCetteAnnee($id_evenement, $tableau_observations_cette_annee) {
 
foreach($tableau_observations_cette_annee as $observation_cette_annee) {
/trunk/applications/jrest/services/OdsSyndicationObservation.php
460,5 → 460,4
return $url_service;
}
}
 
?>
?>
/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>
<?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">
49,29 → 50,51
</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">
<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) : ?>
<?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="<?=$date_observation?>"
data-date-observation="<?= $observation['date'] ?>"
id="individu_<?=$individu['id_individu']?>_evenement_<?=$id_stade?>_observation_<?=$id_observation?>">
<span class="date_observation"><?= $date_observation ?></span>
<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>
<?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/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
12,6 → 12,18
<?= 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') ?>" />
25,4 → 37,4
<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
12,6 → 12,18
<?= 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') ?>" />
/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,11 → 278,48
// 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;
}
 
if(!!obj_retour.data.id_observation) {
donnees_obs['id_observation'] = obj_retour.data.id_observation;
}
 
// 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');
fermerDatePicker();
}
});
}
 
function afficherObservation(dateStr, $obs, $conteneurAjout, donnees_obs, est_obs_existante) {
$obs.find('.date_observation').text(dateStr);
$obs.data('date-observation', dateStr);
 
259,20 → 326,40
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);
$obs.data('id-observation', donnees_obs['id_observation']);
 
var id_conteneur_observation = 'individu_'+donnees_obs['id_individu']+'_evenement_'+donnees_obs['id_evenement']+'_observation_'+obj_retour.data.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);
}
}
 
$('.element_clique').removeClass('element_clique');
fermerDatePicker();
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/controleurs/Individu.php
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;
}
 
/trunk/applications/saisie/controleurs/Liens.php
409,7 → 409,7
$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>';