Subversion Repositories Sites.obs-saisons.fr

Compare Revisions

Regard whitespace Rev 323 → Rev 324

/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/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_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/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/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>';