Subversion Repositories Sites.obs-saisons.fr

Compare Revisions

Ignore whitespace Rev 319 → Rev 320

/trunk/applications/saisie/bibliotheque/dao/ObservationDao.php
13,10 → 13,10
*
*/
class ObservationDao extends Dao {
 
const SERVICE_OBSERVATION = 'OdsObservation';
const METHODE_OBSERVATION_INDIVIDU= 'ObservationsPourIndividu';
 
/**
* Retourne l'ensemble des observations d'une station.
*
24,55 → 24,49
* @return array un tableau contenant les informations sur les observations de cette station.
*/
public function getListeObservationsPourStation($id_station) {
 
$url = $this->url_jrest.self::SERVICE_OBSERVATION."/*/";
$json = $this->envoyerRequeteConsultation($url);
$donnees = json_decode($json, true);
return $donnees;
}
 
public function getListeObservationsPourIndividu($id_individu, $annee = null) {
 
if (is_numeric($id_individu)) {
$url = $this->url_jrest.self::SERVICE_OBSERVATION.'/'.self::METHODE_OBSERVATION_INDIVIDU.'/'.$id_individu;
$json = $this->envoyerRequeteConsultation($url);
$donnees = json_decode($json, true);
 
return $donnees;
}
}
 
public function ajouterObservation($valeurs_observation_verifiees) {
 
$donnees = $valeurs_individu_verifiees;
$donnees['id_participant'] = AppControleur::getIdUtilisateur();
 
$url = $this->url_jrest.self::SERVICE_OBSERVATION."/";
$json = $this->envoyerRequeteAjout($url, $donnees);
$donnees = json_decode($json, true);
if (true) {
//TODO: verifier ajout
}
 
return true;
}
 
public function modifierObservation($id_individu, $valeurs_observation_verifiees) {
 
$donnees = $valeurs_observation_verifiees;
$donnees['id_participant'] = AppControleur::getIdUtilisateur();
 
if (is_numeric($id_individu)) {
$url = $this->url_jrest.self::SERVICE_OBSERVATION."/$id_individu/";
$json = $this->envoyerRequeteModif($url, $donnees);
 
$donnees = json_decode($json, true);
if (true) {
//TODO: verifier modification
}
}
return true;
 
return $donnees;
}
}
?>
?>
/trunk/applications/saisie/squelettes/fiches/individu_fiche.tpl.html
2,7 → 2,7
<div id="fiche_individu">
<h2 class="titre_fiche"> <?= $infos_individu['nom'] ?></h2>
<hr class="separation_section" />
 
<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($infos_espece['nom_scientifique'],'M') ?>" />
11,9 → 11,9
</div>
 
<p class="intitule_fiche description_espece" > <?= $infos_espece['description'] ?></p>
 
<hr class="separation_section" />
 
<h3 class="titre_section_fiche" > Observations réalisées </h3>
<? $premier_element_date = true; ?>
<?php foreach ($annees_observations as $annee => $observations) : ?>
26,9 → 26,9
<div class="pliage stade_<?= aControleur::formaterChaineVersClasseCss($stade);?>">
<h4><?= $stade ?></h4>
<ul>
<?php foreach($observation as $num_stade => $date) : ?>
<?php foreach($observation as $num_stade => $dates) : ?>
<li>
<?= ' stade '.$num_stade.' : '.$date ?>
<?= ' stade '.$num_stade.' : '.implode(', ', $dates) ?>
</li>
<?php endforeach; ?>
</ul>
41,24 → 41,24
<?php if(empty($annees_observations)) { ?>
<div class="informations"> Aucune observation enregistrée pour cet individu</div>
<?php } ?>
 
<hr class="separation_section" />
 
<form class="bouton_formulaire_modification" method="post" action="<?= Liens::getUrlFormulaireModificationIndividu($infos_individu['id_station'], $infos_individu['id_espece'], $infos_individu['id_individu']); ?>" id="form_afficher_modification">
<input class=" droite gros_bouton_validation" type="submit" value="Modifier" />
<input class=" droite gros_bouton_validation" type="submit" value="Modifier" />
</form>
 
<hr class="separation_invisible" />
 
<?php if(empty($annees_observations)) { ?>
<form class="bouton_formulaire_suppression formulaire_suppression_individu droite" method="post" action="<?= Liens::getUrlSuppressionIndividu($infos_individu['id_station'], $infos_individu['id_espece'], $infos_individu['id_individu']); ?>" id="form_supprimer_individu">
<input type="hidden" id="id_individu_a_supprimer" name="id_individu_a_supprimer" value="<?= $infos_individu['id_individu']; ?>" />
<input class="gauche gros_bouton_validation lien_suppression" type="submit" value="Supprimer" />
<input class="gauche gros_bouton_validation lien_suppression" type="submit" value="Supprimer" />
</form>
<?php } ?>
 
<?php if(isset($donnees['erreurs'])) { ?>
<p class="attention"> <?= $donnees['erreurs']; ?> </p>
<?php } ?>
</div>
<!-- ODS_SAISIE - FIN FICHE INDIVIDU -->
<!-- ODS_SAISIE - FIN FICHE INDIVIDU -->
/trunk/applications/saisie/squelettes/listes/evenement_liste.tpl.html
1,9 → 1,9
<!-- ODS_SAISIE - DEBUT LISTE EVENEMENTS -->
<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,
pour la supprimer, effacez la date, cliquez en dehors de la case et confirmez.
 
<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>
 
<ul class="liste_annees_observations">
20,7 → 20,7
</ul>
<table id="saisie_liste_evenements">
<tr>
<th></th>
<th></th>
<?php foreach($evenements as $evenement) : ?>
<th class="stade_<?= $evenement['abreviation']; ?>" colspan="<?=count($evenement['stades']) ?>">
<div class="evenement"><?= $evenement['nom'] ?></div>
28,18 → 28,17
<?php endforeach; ?>
<th></th>
</tr>
 
<tr>
<th> stades </th>
<th> stades </th>
<?php foreach($evenements as $evenement) : ?>
<?php foreach($evenement['stades'] as $id_stade => $stade) : ?>
<th title="<?= $evenement['description'][$id_stade]; ?>" class="stade_evenement">
<?= $stade ?>
<th title="<?= $evenement['description'][$id_stade]; ?>" class="stade_evenement">
<?= $stade ?>
</th>
<?php endforeach; ?>
<?php endforeach; ?>
</tr>
 
<?php foreach ($individus as $individu) : ?>
<tr class="liste_observations_individu" id="observations_individu_<?= $individu['id_individu'] ?>">
50,14 → 49,33
</td>
<?php foreach($evenements as $nom_evenement => $evenement) : ?>
<?php foreach($evenement['stades'] as $id_stade => $stade) : ?>
<td class="date_observation_individu element_cliquable" title="Cliquez sur la cellule pour modifier la date de cette observation">
<span id="individu_<?=$individu['id_individu']?>_evenement_<?=$id_stade?>">
<?php if (isset($individu['observations'][$annee][$nom_evenement][$stade])) { ?>
<?= $individu['observations'][$annee][$nom_evenement][$stade]; ?>
<?php } else { ?>
-
<?php } ?>
</span>
<td class="conteneur_date_observation" title="Cliquez pour modifier la date de cette observation">
<?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>
</div>
</div>
<?php endforeach; ?>
<?php } ?>
<div class="ajouter_observation date_observation_individu element_cliquable"
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>
<span class="datepicker_container"></span>
<div class="conteneur_supprimer_observation">
<span title="Cliquez pour supprimer cette observation" class="icone supprimer_observation">&nbsp;</span>
</div>
</td>
<?php endforeach; ?>
<?php endforeach; ?>
72,4 → 90,4
 
<a id="lien_ajout_individu" href="<?= Liens::getUrlFormulaireSaisieIndividu($id_station,$id_espece); ?>"> Nouvel individu </a>
</div>
<!-- ODS_SAISIE - FIN LISTE EVENEMENTS -->
<!-- ODS_SAISIE - FIN LISTE EVENEMENTS -->
/trunk/applications/saisie/squelettes/css/saisie.css
1,8 → 1,8
/* =========================== Balises ============================
/* =========================== Balises ============================
 
 
 
/* =========================== Style général ============================ */
/* =========================== Style général ============================ */
 
#wrapper #container {
max-width:1650px;
9,15 → 9,15
}
 
.gauche {
float:left;
float:left;
}
 
.droite {
float:right;
float:right;
}
 
.information {
 
padding-left:40px;
border:1px solid #FF420F;
max-width:600px;
34,22 → 34,22
}
 
span.erreur {
color: red;
color: red;
}
 
input.erreur {
border: 1px solid red;
border: 1px solid red;
}
 
#center {
width: 720px;
width: 720px;
}
 
 
/* =========================== Titres ============================ */
/* =========================== Titres ============================ */
 
.titre_saisie {
padding-bottom: 10px;
padding-bottom: 10px;
}
 
.etape {
70,7 → 70,7
}
 
.item_menu_station > a {
padding: 5px;
padding: 5px;
}
 
#saisie_menu ul li.item_menu_espece {
78,7 → 78,7
}
 
.item_menu_espece > a {
padding: 5px
padding: 5px
}
 
#saisie_menu ul li.station_ajout {
86,7 → 86,7
}
 
li.station_en_cours {
padding-top: 10px;
padding-top: 10px;
}
 
li.station_en_cours > a {
94,9 → 94,9
font-weight: bold;
border: solid 1px #FFFFFF;
background-color: #BF3600;
-moz-border-radius: 0.9em;
-webkit-border-radius: 0.9em;
border-radius: 0.9em;
-moz-border-radius: 0.9em;
-webkit-border-radius: 0.9em;
border-radius: 0.9em;
}
 
#retour_au_site {
112,8 → 112,8
font-weight: bold;
border: solid 1px #FFFFFF;
background-color: #9AC343;
-moz-border-radius: 0.9em;
-webkit-border-radius: 0.9em;
-moz-border-radius: 0.9em;
-webkit-border-radius: 0.9em;
border-radius: 0.9em;
}
 
124,12 → 124,12
.liste_annees_observations li {
display: inline;
list-style: none;
background: none;
background: none;
}
 
#annee_en_cours {
font-size: 1.6em;
color: #9AC343;
color: #9AC343;
}
 
#retour_au_site ul li {
146,29 → 146,29
/* =========================== Formulaires d'inscription et d'identification ============================ */
 
#conteneur_formulaire_identification, #conteneur_formulaire_inscription {
 
width:650px;
border: 1px solid grey;
margin-top: 10px;
padding: 10px;
text-align: left !important;
-moz-border-radius: 0.9em;
-webkit-border-radius: 0.9em;
-moz-border-radius: 0.9em;
-webkit-border-radius: 0.9em;
border-radius: 0.9em;
}
 
#conteneur_formulaire_identification form {
text-align: left !important;
text-align: left !important;
}
 
#conteneur_formulaire_identification input {
text-align: left !important;
width: 300px;
width: 300px;
}
 
#conteneur_formulaire_inscription input {
text-align: left !important;
width: 300px;
width: 300px;
}
 
.message_identification {
175,7 → 175,7
font-weight: bold;
padding-top: 5px;
color: #435F06;
font-size: 1.5em;
font-size: 1.5em;
}
 
 
182,16 → 182,16
/* =========================== Formulaires de l'application ============================ */
 
#saisie_station {
width: 700px;
width: 700px;
}
 
.element_formulaire label {
font-weight: bold;
width:150px;
width:150px;
}
 
.element_formulaire_en_ligne {
padding-right: 10px;
padding-right: 10px;
}
 
.element_formulaire, #conteneur_liens_lat_lon, #conteneur_form_liens_lat_lon {
212,7 → 212,7
}
 
#localiser_lat_lon {
background: url("../images/localiser.png") no-repeat scroll 2px transparent;
background: url("../images/localiser.png") no-repeat scroll 2px transparent;
}
 
#saisie_liste_evenements {
221,12 → 221,12
}
 
#saisie_modif_evenements tr, #saisie_liste_evenements tr {
height: 40px;
/*height: 40px;*/
}
 
.icone_s {
height: 30px;
width: 30px;
width: 30px;
}
 
.formulaire_en_ligne {
251,19 → 251,19
 
#form_saisie_espece {
margin-right: auto;
margin-left: auto;
margin-left: auto;
}
 
.formulaire_informations_espece_mini {
text-align: center;
height:50px;
height:50px;
width: 500px;
border: solid 1px #999999;
background-color: #CFCFCF;
padding: 10px;
margin-bottom: 10px;
-moz-border-radius: 0.9em;
-webkit-border-radius: 0.9em;
-moz-border-radius: 0.9em;
-webkit-border-radius: 0.9em;
border-radius: 0.9em;
}
 
280,8 → 280,8
}
 
.formulaire_suppression_station {
margin-top: 10px;
margin-left: 2px;
margin-top: 10px;
margin-left: 2px;
}
 
.formulaire_suppression_individu {
289,7 → 289,7
margin-top: 10px;
}
 
/* =========================== Fiches ============================== */
/* =========================== Fiches ============================== */
 
.element_fiche {
padding-bottom : 5px;
296,11 → 296,11
}
 
.intitule_fiche {
 
}
 
.valeur_fiche {
font-weight: bold;
font-weight: bold;
}
 
.titre_section_fiche {
309,20 → 309,20
}
 
.titre_fiche {
 
}
 
hr.separation_section {
margin-top: 25px;
margin-top: 25px;
}
 
.informations_espece img {
margin-top:-35px;
margin-top:-35px;
padding: 15px;
}
 
.annee_observation {
padding-left: 10px;
padding-left: 10px;
}
 
.observations_individu {
344,8 → 344,8
}
 
.observations_individu li div {
-moz-border-radius: 0.9em;
-webkit-border-radius: 0.9em;
-moz-border-radius: 0.9em;
-webkit-border-radius: 0.9em;
border-radius: 0.9em;
}
 
354,12 → 354,63
color: black;
}
 
.ajouter_observation .date_observation {
background: url("../images/ajout.png") no-repeat center center transparent;
width: 20px;
}
 
.conteneur_supprimer_observation {
position: absolute;
right: 0px;
top: 0px;
width: 20px;
height: 100%;
display: flex;
align-items: center;
justify-content: center;
}
 
.supprimer_observation {
background: url("../images/suppression.png") no-repeat center center transparent;
width: 20px;
display: none;
}
 
.date_observation_individu:not(.ajouter_observation):hover .supprimer_observation {
display: block;
}
 
.conteneur_date_observation {
padding: 0;
position: relative;
vertical-align: top;
}
 
.date_observation_individu {
height: 100%;
width: 100%;
display: flex;
align-items: center;
justify-content: center;
flex: 1;
padding-top: 5px;
padding-bottom: 5px;
position: relative;
}
 
.date_observation_individu .ui-datepicker {
position: absolute;
top: 100%;
left: 0%;
z-index: 1;
}
 
.icone:hover {
filter: grayscale(100%);
}
 
.calendrier {
 
}
 
#fiche_individu {
369,14 → 420,14
}
 
 
/* =========================== Tableaux d'évenements ============================ */
/* =========================== Tableaux d'évenements ============================ */
 
#saisie_liste_evenements, #saisie_modif_evenements {
text-align: center;
text-align: center;
}
 
#saisie_liste_evenements .information_individu, #saisie_modif_evenements.information_individu {
text-align: left;
text-align: left;
}
 
tr:nth-child(odd) {
391,7 → 442,7
background-color: #FFFFFF ;
}
 
div.evenement {
div.evenement {
text-align: center;
}
 
400,7 → 451,7
}
 
 
/* =========================== Styles des différents stades ============================ */
/* =========================== Styles des différents stades ============================ */
 
.stade_feuillaison {
background-color: #ACC700;
407,7 → 458,7
}
 
.stade_floraison {
background-color: #B549B9;
background-color: #B549B9;
}
 
.stade_fructification {
434,7 → 485,7
}
 
#form_changement_identite {
width: 330px;
width: 330px;
display: inline;
}
 
493,7 → 544,7
}
 
.erreur_valeur {
background-color: red;
background-color: red;
}
 
.conteneur_type {
503,7 → 554,7
}
 
h4.lien_pliage {
text-decoration: underline;
text-decoration: underline;
display: inline;
}
 
516,7 → 567,7
}
 
.element_cliquable {
cursor: pointer;
cursor: pointer;
}
 
.element_cliquable:hover {
524,7 → 575,7
}
 
.element_clique {
background: #9AC343;
background: #9AC343;
}
 
#saisie_espece ul.liste_onglets {
535,6 → 586,8
height: 32px; /*--Set height of tabs--*/
border-bottom: 1px solid #999;
border-left: 1px solid #999;
border-top-left-radius: 10px;
border-top-right-radius: 10px;
}
 
#saisie_espece ul.liste_onglets li {
587,7 → 640,10
float: left;
background: #fff;
position: relative;
width:565px;
width: 100%;
display: flex;
justify-content: center;
margin-left: 10px;
}
 
#saisie_espece .contenu_onglet {
597,7 → 653,7
 
 
.autocompletion {
position:relative;
position:relative;
}
 
.conteneur_suggestions, .conteneur_suggestions_utilisateur {
614,14 → 670,14
}
 
.conteneur_suggestions_utilisateur {
left: 188px;
left: 188px;
}
 
.liste_suggestions {
margin: 0px;
padding: 0px;
}
 
.liste_suggestions li {
margin: 0px 0px 3px 0px;
padding: 3px;
629,12 → 685,12
}
 
.liste_suggestions li {
list-style-type: none;
list-style-type: none;
margin-left: 5px;
margin-right: 5px;
}
 
 
.liste_suggestions .element_selectionne {
background-color: #659CD8;
}
642,5 → 698,5
/* ============ Styles crées spécifiquement pour compenser les faiblesses de certains navigateurs ===== */
 
.clearer {
clear:both;
}
clear:both;
}
/trunk/applications/saisie/squelettes/formulaires/evenement_modification.tpl.html
4,7 → 4,7
<form id="form_modif_observation" name="form_modif_observation" method="post" action="<?= Liens::getUrlValidationFormulaireModificationObservation($id_station,$id_espece, $id_individu_a_modifier_observation, $annee) ?>" >
<table id="saisie_modif_evenements">
<tr>
<th></th>
<th></th>
<?php foreach($evenements as $evenement) : ?>
<th class="stade_<?=$evenement['abreviation'] ?>" colspan="<?=count($evenement['stades']) ?>">
<div class="evenement"><?= $evenement['nom'] ?></div>
12,18 → 12,18
<?php endforeach; ?>
<th></th>
</tr>
 
<tr>
<th> stades </th>
<th> stades </th>
<?php foreach($evenements as $evenement) : ?>
<?php foreach($evenement['stades'] as $stade) : ?>
<th class="stade_evenement">
<?= $stade ?>
<th class="stade_evenement">
<?= $stade ?>
</th>
<?php endforeach; ?>
<?php endforeach; ?>
</tr>
 
<?php foreach ($individus as $individu) : ?>
<tr class="modification_observations_individu" id="modification_observations_individu_<?= $individu['id_individu'] ?>">
<td>
40,7 → 40,7
<?php if (isset($individu['observations'][$annee][$nom_evenement][$stade])) { ?>
<?= $individu['observations'][$annee][$nom_evenement][$stade]; ?>
<?php } else { ?>
-
-
<?php } ?>
<?php }?>
</div>
49,7 → 49,7
<?php endforeach; ?>
<td>
<?php if ($individu['id_individu'] == $id_individu_a_modifier_observation) { ?>
<input type="submit" class="valider_formulaire icone_s" value="OK" title="valider" />
<input type="submit" class="valider_formulaire icone_s" value="OK" title="valider" />
<?php } ?>
</td>
</tr>
59,4 → 59,4
<input type="hidden" id="annee_en_cours" name="annee_en_cours" value="<?= $annee ?>" />
</form>
</div>
<!-- ODS_SAISIE - FIN MODIFICATION EVENEMENTS -->
<!-- ODS_SAISIE - FIN MODIFICATION EVENEMENTS -->
/trunk/applications/saisie/squelettes/js/saisie.js
2,15 → 2,15
return urlBaseJrest;
}
 
/**
/**
************************************************************************************************
************************************************************************************************
 
Fonction permettant de transformer les élements de la classe pliage en accordéon
 
************************************************************************************************
************************************************************************************************
**/
**/
function initialiserElementsPliables() {
 
$('.pliage h4').addClass('lien_pliage');
22,7 → 22,7
$('.1er_element_date > ul:first-child').show();
 
$('.lien_pliage').bind('click', function() {
 
$(this).nextAll('ul').slideToggle();
return false;
});
33,27 → 33,27
});
 
 
/**
/**
************************************************************************************************
************************************************************************************************
 
Fonctions de gestion des onglets du formulaire de saisie d'espèce
 
************************************************************************************************
************************************************************************************************
**/
**/
function initialiserOnglets() {
$(".contenu_onglet").hide();
$("ul.liste_onglets li:first").addClass("active").show();
$(".contenu_onglet").hide();
$("ul.liste_onglets li:first").addClass("active").show();
$(".contenu_onglet:first").show();
 
$("ul.liste_onglets li").click(function() {
 
$("ul.liste_onglets li").removeClass("active");
$(this).addClass("active");
$("ul.liste_onglets li").removeClass("active");
$(this).addClass("active");
$(".contenu_onglet").hide();
 
var activeTab = $(this).find("a").attr("href");
var activeTab = $(this).find("a").attr("href");
$(activeTab).fadeIn();
return false;
});
64,20 → 64,20
});
 
function agrandirZoneCLicBoutonsRadios() {
 
$('.formulaire_informations_espece_mini').addClass("element_cliquable");
 
$('#form_saisie_espece').children('input[type="submit"]').hide();
$('.formulaire_informations_espece_mini').children('input[type="radio"]').hide();
$('.titre_type').hide();
 
$('.formulaire_informations_espece_mini').bind('click',function() {
$(this).children('input[type="radio"]').attr('checked','checked');
$('.formulaire_informations_espece_mini').removeClass('element_clique');
$(this).addClass('element_clique');
 
$('#form_saisie_espece').submit();
});
});
}
 
$('#form_saisie_espece').ready(function() {
87,12 → 87,12
 
 
 
/**
/**
************************************************************************************************
************************************************************************************************
 
Fonctions permettant de transformer les cases du tableau d'évenements en mini formulaire
 
************************************************************************************************
************************************************************************************************
**/
100,216 → 100,250
htmlEnCours = '';
elementEnCours = null;
ancienneValeurEnCours = null;
id_formulaire = null;
 
function initialiserLignesCliquables() {
 
$('.conteneur_element_modifier').hide();
$(".date_observation_individu").each(function() {
$(this).bind('click', function() {
if($(this).hasClass('element_clique')) {
return false;
} else {
conteneur_obs = $(this).children('span');
id_formulaire = conteneur_obs.attr('id');
remplacerElementDateParFormulaireAjax(id_formulaire, $(this));
return false;
}
});
});
}
 
function initialiserCalendrierFormulaire() {
dateMin = getDateMinCalendrier();
dateMax = getDateMaxCalendrier();
$(".calendrier").each(function() {
$(this).find("input").datepicker({
disabled: true,
altFormat: 'dd/mm/yyyy',
minDate: dateMin,
maxDate: dateMax
});
});
}
$(".date_observation_individu").live("click", function(e) {
e.preventDefault();
 
$(document).ready(function() {
initialiserCalendrierFormulaire();
if($(e.target).hasClass('conteneur_supprimer_observation') || $(e.target).hasClass('supprimer_observation')) {
return;
}
 
});
$('.element_clique').removeClass('element_clique');
if($(this).hasClass('element_clique')) {
fermerDatePicker();
return false;
} else {
$(this).addClass('element_clique');
afficherSaisieObservation($(this));
return false;
}
});
 
function estUneDateValide(peutEtreUneDate) {
var reg= new RegExp("^[0-3][0-9][/]{1}[0-1][0-2][/]{1}[0-9]{4}$","g");
return reg.test(peutEtreUneDate);
}
$(".date_observation_individu .conteneur_supprimer_observation").live("click", function(e) {
e.preventDefault();
if(window.confirm('Êtes-vous sûr 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'));
}
});
 
function getAnneeEnCoursDeConsultation() {
anneeEnCours = jQuery.trim($("#annee_en_cours").html());
if(typeof(anneeEnCours)=='undefined'){
dateCourante = new Date();
anneeEnCours = dateCourante.getFullYear();
}
return anneeEnCours;
// pour fermer le datepicker sur esc
$(document).keyup(function(e) {
if (e.keyCode === 27) {
$('.element_clique').removeClass('element_clique');
fermerDatePicker(); // esc
}
});
}
 
function getDateMinCalendrier() {
anneeEnCours = getAnneeEnCoursDeConsultation();
dateMin = '01/01/'+anneeEnCours;
return dateMin;
}
function afficherSaisieObservation($obs) {
 
function getDateMaxCalendrier() {
anneeEnCours = getAnneeEnCoursDeConsultation();
dateMax = '31/12/'+anneeEnCours;
dateCourante = new Date();
if(anneeEnCours == dateCourante.getFullYear()) {
dateMax = dateCourante.getDate()+'/'+(dateCourante.getMonth()+ 1)+'/'+anneeEnCours;
fermerDatePicker();
 
var dateMin = getDateMinCalendrier();
var dateMax = getDateMaxCalendrier();
 
var dateCouranteStr = $obs.data('date-observation');
var dateCourante = new Date();
if(!!dateCouranteStr && dateCouranteStr != '' && dateCouranteStr != '+') {
var jour = parseInt(dateCouranteStr.substring(0,2));
var mois = parseInt(dateCouranteStr.substring(3,5));
var annee = parseInt(dateCouranteStr.substring(6,10));
dateCourante = new Date(annee, mois-1, jour);
}
return dateMax;
}
 
/** Fonctions de manipulation des éléments du tableau pour les transformer en élements cliquables et calendriers **/
function initialiserMiniCalendrierFormulaire(id_element) {
dateMin = getDateMinCalendrier();
dateMax = getDateMaxCalendrier();
$('#'+id_element)
.datepicker({
$obs.find('.datepicker_container').datepicker({
disabled: true,
constrainInput: true,
altFormat: 'dd/mm/yyyy',
minDate: dateMin,
maxDate: dateMax,
changeMonth: true,
defaultDate: dateCourante,
onSelect: function(dateText, inst) {
$('#'+id_element).val(dateText);
donnees_obs = collecterDonneesMiniFormulaire(id_formulaire);
envoyerRequeteAjaxValidationMiniFormulaire(donnees_obs, id_formulaire);
validerSaisieObservation(dateText, $obs)
},
onClose: function(dateText, inst) {
gererFermetureMiniCalendrier(dateText,id_formulaire);
}
beforeShowDay: function(date) {
var dates_a_exclure = getDatesSaisiesPourStadeEtIndividu($obs.data('id-individu'), $obs.data('id-stade-observation'));
var string = jQuery.datepicker.formatDate('dd/mm/yy', date);
return [dates_a_exclure.indexOf(string) == -1]
}
});
 
$('#'+id_element).datepicker( "show" );
$obs.datepicker("show");
$('.ui-datepicker').attr("title", "Appuyez sur échap pour annuler l'édition");
}
 
function gererFermetureMiniCalendrier(dateText, id_formulaire) {
ancienne_valeur_date = jQuery.trim(ancienneValeurEnCours);
nouvelle_valeur_date = jQuery.trim(dateText);
if(nouvelle_valeur_date == '' && ancienne_valeur_date != '-' && ancienne_valeur_date != nouvelle_valeur_date) {
if(window.confirm("Voulez vous supprimer cette observation ?")) {
$('#'+id_formulaire).val(nouvelle_valeur_date);
donnees_obs = collecterDonneesMiniFormulaire(id_formulaire);
envoyerRequeteAjaxValidationMiniFormulaire(donnees_obs, id_formulaire);
} else {
$('#'+id_formulaire).val(ancienne_valeur_date);
remplacerMiniFormulaireParElementDate(id_formulaire);
}
function validerSaisieObservation(dateStr, $obs) {
 
if(estUneDateValide(dateStr)) {
envoyerRequeteAjaxSaisieObservation(dateStr, $obs);
}
}
 
function remplacerElementDateParFormulaireAjax(id_element, conteneur_selectionne) {
if(elementEnCours != null) {
elementEnCours.removeClass('element_clique');
elementEnCours.html(htmlEnCours);
ancienneValeurEnCours = null;
function formaterDonneesObservationPourEnvoi(dateStr, $obs) {
 
if(dateStr == null ) {
return false ;
}
ancienneValeurEnCours = conteneur_selectionne.children('span').html()
elementEnCours = conteneur_selectionne;
htmlEnCours = conteneur_selectionne.html();
conteneur_obs = $('#'+id_element);
valeur_date = conteneur_obs.html();
valeur_date = valeur_date.replace('-','');
conteneur_selectionne.addClass('element_clique');
conteneur_selectionne.html('<span class="calendrier"><input type="text" value="'+jQuery.trim(valeur_date)+'" class="calendrier" id="'+id_formulaire+'" size="7" maxlenght="10" /></div>');
initialiserMiniCalendrierFormulaire(id_formulaire);
}
 
function remplacerMiniFormulaireParElementDate(id_element) {
valeur_date_pour_stade = $('#'+id_element).val();
if(jQuery.trim(valeur_date_pour_stade) == '') {
valeur_date_pour_stade = '-';
var anneeEnCours = getAnneeEnCoursDeConsultation();
if(jQuery.trim(dateStr) == '') {
dateStr = '00/00/'+anneeEnCours;
}
elementEnCours.html('<span id="'+id_element+'">'+valeur_date_pour_stade+' </span>');
elementEnCours.removeClass('element_clique');
elementEnCours = null;
ancienneValeurEnCours = null;
 
donnees_obs = {
"id_individu": $obs.data('id-individu'),
"id_evenement": $obs.data('id-stade-observation'),
"date_evenement": dateStr,
"annee_en_cours": anneeEnCours
};
 
if(!!$obs.data('id-observation')) {
donnees_obs.id_observation = $obs.data('id-observation');
}
 
return donnees_obs;
}
 
 
/** Fonctions d'envoi et de récupération des élements du formulaire ajax **/
function envoyerRequeteAjaxValidationMiniFormulaire(donnees_obs, id_formulaire) {
function envoyerRequeteAjaxSaisieObservation(dateStr, $obs) {
 
var est_obs_existante = !!$obs.data('id-observation');
var donnees_obs = formaterDonneesObservationPourEnvoi(dateStr, $obs);
 
url_page_courante = document.URL;
url_page_courante = url_page_courante.replace('module=Individu','module=Observation');
url_page_courante = url_page_courante.replace('action=afficherListeIndividu','action=validerFormulaireModificationObservationAjax');
url_ajax = url_page_courante.replace('action=validerFormulaireSaisieIndividu','action=validerFormulaireModificationObservationAjax');
 
$conteneurAjout = null;
if(!est_obs_existante) {
var id_conteneur_ajout = 'ajouter_observation_individu_'+donnees_obs['id_individu']+'_evenement_'+donnees_obs['id_evenement'];
var $conteneurAjout = $('#'+id_conteneur_ajout).clone();
}
 
var donnees_obs = formaterDonneesObservationPourEnvoi(dateStr, $obs);
$.post(url_ajax, donnees_obs, function(obj_retour) {
 
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))
message += '- '+obj_retour.data.erreurs[key]+"\n";
}
window.alert(message);
return;
}
 
if(obj_retour.reponse === 'OK') {
remplacerMiniFormulaireParElementDate(id_formulaire);
 
// les obs ne sont jamais vraiment supprimées
// mais seulement remplacées par des dates au format 00/00/yyyy
if(estUneDateSuppressionObs(dateStr)) {
$obs.remove();
delete $obs;
return;
}
 
$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', 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);
}
 
$('.element_clique').removeClass('element_clique');
fermerDatePicker();
}
});
}
 
function collecterDonneesMiniFormulaire(id_formulaire) {
valeur_date_pour_stade = $('#'+id_formulaire).val();
if(valeur_date_pour_stade == null ) {
return false ;
function estUneDateSuppressionObs(dateStr) {
var date_vide_pattern = /^00\/00\/\d{4}$/;
return dateStr == '' || date_vide_pattern.test(dateStr);
}
 
function fermerDatePicker() {
if($(".hasDatepicker").length == 0) {
return;
}
if(jQuery.trim(valeur_date_pour_stade) == '') {
valeur_date_pour_stade = '00/00/'+anneeEnCours;
 
$(".hasDatepicker").each(function() {
$(this).datepicker("destroy");
$(this).removeClass(".hasDatepicker").removeAttr('id');
});
}
 
function obtenirAttributsData(el) {
return [].filter.call(el.attributes, function(at) { return /^data-/.test(at.name); });
}
 
// vérifie qu'une date est au format d/m/y
// merci stacky https://stackoverflow.com/questions/5812220/how-to-validate-a-date
function estUneDateValide(s) {
var bits = s.split('/');
var d = new Date(bits[2], bits[1] - 1, bits[0]);
return d && (d.getMonth() + 1) == bits[1];
}
 
function getDatesSaisiesPourStadeEtIndividu(id_individu, id_stade) {
var selecteur_data = '[data-id-individu="'+id_individu+'"]'+
'[data-id-stade-observation="'+id_stade+'"]';
 
return $('.date_observation_individu'+selecteur_data).map(function() {
return $(this).data("date-observation");
}).get();
}
 
function getAnneeEnCoursDeConsultation() {
 
anneeEnCours = jQuery.trim($("#annee_en_cours").html());
 
if(typeof(anneeEnCours)=='undefined'){
dateCourante = new Date();
anneeEnCours = dateCourante.getFullYear();
}
id_individu_stade_obs = id_formulaire.split('_');
stade_obs = 'observation_'+id_individu_stade_obs[3];
date_annee_en_cours = jQuery.trim($("#annee_en_cours").html());
donnees_obs = { "id_individu": id_individu_stade_obs[1],
"annee_en_cours": date_annee_en_cours
};
identifiant_observation = 'observation_'+id_individu_stade_obs[3];
donnees_obs[identifiant_observation] = valeur_date_pour_stade;
return donnees_obs;
 
return anneeEnCours;
}
 
function getDateMinCalendrier() {
anneeEnCours = getAnneeEnCoursDeConsultation();
dateMin = '01/01/'+anneeEnCours;
 
return dateMin;
}
 
function getDateMaxCalendrier() {
 
anneeEnCours = getAnneeEnCoursDeConsultation();
 
dateMax = '31/12/'+anneeEnCours;
 
dateCourante = new Date();
 
if(anneeEnCours == dateCourante.getFullYear()) {
dateMax = dateCourante.getDate()+'/'+(dateCourante.getMonth()+ 1)+'/'+anneeEnCours;
}
 
return dateMax;
}
 
$('#saisie_liste_evenements').ready(function() {
initialiserLignesCliquables();
});
317,15 → 351,15
 
 
 
/**
/**
************************************************************************************************
************************************************************************************************
 
Fonctions concernant la carte permettant de pointer d'afficher l'emplacement des stations
 
************************************************************************************************
************************************************************************************************
**/
**/
var map;
var marker;
var liste_localite_en_cours;
346,7 → 380,7
}
 
function ajouterAutoCompletionCommune() {
 
$('input#station_commune').after('<div class="conteneur_suggestions"></div>');
$('input#station_commune').parent().addClass('autocompletion');
$('input#station_commune').attr('autocomplete','off');
355,7 → 389,7
}
 
function ajouterListenerFormulaireSaisieLatLon() {
 
$('input#localiser_lat_lon').click(function() {
verifierEtLocaliserCoordonnees();
});
366,32 → 400,32
}
 
function verifierEtLocaliserCoordonnees() {
 
lat ;
lon;
 
if(carteEstEnSaisie()) {
lat = $('#station_lat').val();
lon = $('#station_lon').val();
 
obtenirInformationsPourCoordonnees(lat, lon);
} else {
var lat = jQuery.trim($('#station_lat').html());
var lon = jQuery.trim($('#station_lon').html());
}
 
if(jQuery.trim(lat) == '' || jQuery.trim(lon) == '') {
return;
}
 
if(!isNaN(lat) && lat.length > 0 && !isNaN(lon) && lon.length > 0) {
 
} else {
window.alert("coordonnées invalides");
}
 
var positionMarker = new google.maps.LatLng(lat, lon);
 
marker.setPosition(positionMarker);
map.setCenter(positionMarker);
map.setZoom(12);
398,123 → 432,123
}
 
function obtenirInformationsPourCoordonnees(lat, lon) {
 
lat = jQuery.trim(lat);
lon = jQuery.trim(lon);
lon = jQuery.trim(lon);
 
if(isNaN(lat) || lat.length <= 0 || isNaN(lon) || lon.length <= 0) {
return;
}
 
cacherElementsRafraichissables();
 
$.get(urlBaseJrest+'OdsCommune/informationsPourCoordonnees/?lat='+lat+'&lon='+lon, function(data) {
$.get(urlBaseJrest+'OdsCommune/informationsPourCoordonnees/?lat='+lat+'&lon='+lon, function(data) {
 
infos_localites = jQuery.parseJSON(data);
$('#station_alt').val(infos_localites.alt);
 
if(infos_localites.commune != null && infos_localites.commune != '') {
$('#station_commune').val(infos_localites.commune);
$('#station_code_insee').val(infos_localites.code_insee);
}
 
montrerElementsRafraichissables();
 
});
 
}
 
function obtenirInformationsPourCommune(nom_commune) {
 
if(jQuery.trim(nom_commune) == '') {
$('.conteneur_suggestions').hide();
return;
}
$.get(urlBaseJrest+'OdsCommune/informationsPourCommune/?commune='+nom_commune, function(data) {
 
$.get(urlBaseJrest+'OdsCommune/informationsPourCommune/?commune='+nom_commune, function(data) {
 
infos_localites = jQuery.parseJSON(data);
afficherListeAutoCompletion(infos_localites);
afficherListeAutoCompletion(infos_localites);
});
}
 
function afficherListeAutoCompletion(tableau_localites) {
 
liste_localite_en_cours = tableau_localites;
 
html_liste_localite = '<ul class="liste_suggestions">';
 
for(i = 0; i< tableau_localites.length; i++) {
html_liste_localite += '<li id="commune_'+i+'" class="element_auto_completion_commune">'+tableau_localites[i]['commune']+' ('+tableau_localites[i]['dpt']+')</li>';
}
 
html_liste_localite += '</ul>';
 
$('.conteneur_suggestions').html(html_liste_localite);
 
$('.element_auto_completion_commune').hover(function() {
indice = $(this).attr('id').split('_')[1];
mettreEnSurbrillanceCommune(indice);
});
 
$('.element_auto_completion_commune').click(function() {
indice = $(this).attr('id').split('_')[1];
selectionnerCommune(indice);
});
 
if(tableau_localites.length > 0) {
$('.conteneur_suggestions').show();
 
mettreEnSurbrillanceCommune(0);
}
}
 
function mettreEnSurbrillanceCommune(indice) {
if(indice_commune_en_cours != null) {
 
if(indice_commune_en_cours != null) {
$('#commune_'+indice_commune_en_cours).removeClass('element_selectionne');
}
$('#commune_'+indice).addClass('element_selectionne');
indice_commune_en_cours = indice;
 
reprogrammerTimerPourCacherListeAutoCompletion();
}
 
function rendreListeAutoCompletionInteractive(selecteur) {
 
$(selecteur).keyup(function(event) {
if(event.which == 8 || (event.which >= 48 && event.which <= 90)) {
if(event.which == 8 || (event.which >= 48 && event.which <= 90)) {
 
reprogrammerTimerPourCacherListeAutoCompletion();
reprogrammerTimerPourLancerRequeteCommune();
}
});
 
$(selecteur).keydown(function(event) {
 
reprogrammerTimerPourCacherListeAutoCompletion();
 
// entree
if(event.which==13){
selectionnerCommune(indice_commune_en_cours);
event.preventDefault();
}
 
// haut
if(event.which == 38){
if(indice_commune_en_cours > 0) {
if(indice_commune_en_cours > 0) {
mettreEnSurbrillanceCommune(indice_commune_en_cours - 1);
}
}
 
// bas
if(event.which == 40){
if(indice_commune_en_cours < liste_localite_en_cours.length - 1) {
if(indice_commune_en_cours < liste_localite_en_cours.length - 1) {
mettreEnSurbrillanceCommune(indice_commune_en_cours + 1);
}
}
});
 
$('.conteneur_suggestions').blur(function() {
$('.conteneur_suggestions').hide();
});
521,11 → 555,11
}
 
function reprogrammerTimerPourCacherListeAutoCompletion() {
 
if(timerAffichageAutocompletion != null) {
window.clearTimeout(timerAffichageAutocompletion);
}
 
timerAffichageAutocompletion = window.setTimeout(function() {
$('.conteneur_suggestions').hide();
}, 2000);
532,11 → 566,11
}
 
function reprogrammerTimerPourLancerRequeteCommune() {
 
if(timerRequeteAutocompletion != null) {
window.clearTimeout(timerRequeteAutocompletion);
}
 
timerRequeteAutocompletion = window.setTimeout(function() {
obtenirInformationsPourCommune($('input#station_commune').val());
}, 350);
543,29 → 577,29
}
 
function selectionnerCommune(indice) {
 
infos_commune = liste_localite_en_cours[indice];
 
$('input#station_commune').val(infos_commune['commune']);
$('input#station_lat').val(infos_commune['lat']);
$('input#station_lon').val(infos_commune['lon']);
$('input#station_code_insee').val(infos_commune['code_insee']);
 
verifierEtLocaliserCoordonnees();
 
$('.conteneur_suggestions').hide();
}
 
function mettreAJourValeursFormulaire(latlon) {
 
latlon = latlon.toString().split(',');
latlon = latlon.toString().split(',');
 
lat = latlon[0].replace('(', '');
lon = latlon[1].replace(')', '');
 
$('#station_lat').val(latlon[0].replace('(', ''));
$('#station_lon').val(latlon[1].replace(')', ''));
 
obtenirInformationsPourCoordonnees(lat, lon);
}
 
584,17 → 618,17
 
map = new google.maps.Map(document.getElementById("map_canvas"),
myOptions);
 
marker = new google.maps.Marker({
position: latlng,
title:""
});
 
if (carteEstEnSaisie()) {
 
marker.setDraggable(true);
google.maps.event.addListener(marker, 'dragend', function(event) {
 
google.maps.event.addListener(marker, 'dragend', function(event) {
mettreAJourValeursFormulaire(marker.getPosition());
});
$('#conteneur_form_liens_lat_lon').ready(function() {
608,11 → 642,11
verifierEtLocaliserCoordonnees();
});
}
 
marker.setClickable(true);
 
// To add the marker to the map, call setMap();
marker.setMap(map);
marker.setMap(map);
}
 
$('#map_canvas').ready(function() {
619,7 → 653,7
initialiserCarte();
});
 
/**
/**
************************************************************************************************
************************************************************************************************
 
627,15 → 661,15
 
************************************************************************************************
************************************************************************************************
**/
**/
 
function initialiserLiensNouvelleFenetre() {
 
$('a.lien_nouvelle_fenetre').each(function() {
var titre = $(this).attr("title");
$(this).attr("title", titre+" (s'ouvre dans une nouvelle fenêtre)");
});
 
$('a.lien_nouvelle_fenetre').click(function(event) {
event.preventDefault();
window.open($(this).attr('href'));
655,7 → 689,7
 
 
 
/**
/**
************************************************************************************************
************************************************************************************************
 
663,7 → 697,7
 
************************************************************************************************
************************************************************************************************
**/
**/
 
function dump(arr,level) {
var dumped_text = "";
676,7 → 710,7
if(typeof(arr) == 'object') { //Array/Hashes/Objects
for(var item in arr) {
var value = arr[item];
 
if(typeof(value) == 'object') { //If it is an array,
dumped_text += level_padding + "'" + item + "' ...\n";
dumped_text += dump(value,level+1);
688,4 → 722,4
dumped_text = "===>"+arr+"<===("+typeof(arr)+")";
}
return dumped_text;
}
}
/trunk/applications/saisie/controleurs/Individu.php
12,98 → 12,98
* @version SVN: $Id: Fiche.php 152 2010-09-06 16:19:12Z jpm $
*/
class Individu extends aControleur {
 
private $id_individu_en_cours = null;
 
public function __construct() {
 
parent::__construct();
$this->initialiser();
}
 
public function initialiser() {
 
if(isset($_GET['id_individu'])) {
$this->id_individu_en_cours = $_GET['id_individu'];
}
$this->setNavigation();
}
 
public function executerActionParDefaut() {
return $this->afficherFormulaireSaisieIndividu();
}
 
public function afficherFormulaireSaisieIndividu($donnees = array()) {
 
$formulaire = $this->getFormulaireSaisieIndividu($donnees);
$this->setSortie(self::RENDU_CORPS, $formulaire);
$this->setSortie(self::RENDU_CORPS, $formulaire);
}
 
public function getFormulaireSaisieIndividu($donnees = array()) {
 
if($donnees == array()) {
$donnees['individu_nom'] = '';
}
 
$donnees['id_station'] = $_GET['id_station'];
 
if(!isset($donnees['id_espece'])) {
$donnees['id_espece'] = $_GET['id_espece'];
}
 
$espece_dao = new EspeceDao();
 
$donnees['informations_espece'] = $espece_dao->getInformationsEspece($donnees['id_espece']);
return $this->getVue('formulaires/individu_saisie',$donnees);
}
 
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'];
 
$espece_dao = new EspeceDao();
$donnees['informations_espece'] = $espece_dao->getInformationsEspece($donnees['id_espece']);
 
$this->setSortie(self::RENDU_CORPS,$this->getVue('formulaires/individu_modification',$donnees));
}
 
public function afficherListeIndividu() {
 
$this->setSortie(self::RENDU_CORPS, $this->getListeIndividu());
}
public function getListeIndividu() {
 
public function getListeIndividu() {
 
$id_utilisateur = AppControleur::getUtilisateur()->getIdentifiantNumerique();
 
$id_station = $_GET['id_station'];
$id_espece = $_GET['id_espece'];
 
if(isset($_GET['annee'])) {
$donnees['annee'] = $_GET['annee'];
} else {
$donnees['annee'] = date('Y');
}
 
$espece = new Espece();
$evenements = $espece->getListeEvenementPourEspece($id_espece);
 
$individus = $this->getListeIndividus($id_station, $id_espece);
 
foreach($individus as &$individu) {
 
$observation = new Observation();
 
if(trim($individu['nom']) == '') {
$individu['nom'] = 'Individu sans nom';
}
$individu['observations'] = $observation->getListeObservationsPourIndividu($individu['id_individu']);
 
$individu['observations'] = $observation->getListeObservationsPourIndividu($individu['id_individu']);
$individu['url'] = Liens::getUrlConsultationFicheIndividu($id_station, $id_espece, $individu['id_individu']);
}
 
114,178 → 114,178
 
return $this->getVue('listes/evenement_liste', $donnees);
}
 
public function afficherInformationsIndividu($donnees = array()) {
 
$id_individu = $_GET['id_individu'];
$id_espece = $_GET['id_espece'];
 
$donnees['infos_individu'] = $this->getInformationsIndividu($id_individu);
$donnees['annees_observations'] = $this->getObservationsPourIndividu($id_individu);
 
$espece_dao = new EspeceDao();
$donnees['infos_espece'] = $espece_dao->getInformationsEspece($id_espece);
$donnees['infos_espece'] = $espece_dao->getInformationsEspece($id_espece);
 
$this->setSortie(self::RENDU_CORPS, $this->getVue('fiches/individu_fiche', $donnees));
 
}
 
// +---------------------------------------------------------------------------------------------------------------+
// METHODES DE VALIDATION DE FORMULAIRE
// METHODES DE VALIDATION DE FORMULAIRE
public function validerFormulaireSaisieIndividu() {
 
$valeurs_collectees = $this->collecterValeursFormulaireSaisieIndividu();
 
$verification_ou_erreurs = $this->verifierValeursIndividu($valeurs_collectees);
 
if($verification_ou_erreurs !== true) {
 
$donnees = $valeurs_collectees;
 
$donnees['erreurs'] = $verification_ou_erreurs;
$this->afficherFormulaireSaisieIndividu($donnees);
return;
}
 
$valeurs_verifiees = $valeurs_collectees;
 
$individu_dao = new IndividuDao();
$retour_ajout_individu = $individu_dao->ajouterIndividu($valeurs_verifiees);
 
if($id_nouvel_individu = $this->renvoyerIdSiAjoutIndividuEffectue($retour_ajout_individu)) {
$this->afficherListeIndividu();
$this->setNavigation();
} else {
} else {
$this->afficherFormulaireSaisieIndividu($donnees);
}
}
 
private function renvoyerIdSiAjoutIndividuEffectue($donnees_retour_dao) {
 
if(isset($donnees_retour_dao['id_nouvel_individu'])) {
return $donnees_retour_dao['id_nouvel_individu'];
}
 
return false;
}
 
private function collecterValeursFormulaireSaisieIndividu() {
 
$valeurs_verifiees['id_station'] = $_POST['station'];
$valeurs_verifiees['id_espece'] = $_POST['espece'];
$valeurs_verifiees['individu_nom'] = $_POST['individu_nom'];
 
return $valeurs_verifiees;
 
}
 
private function collecterValeursFormulaireModificationIndividu() {
 
$valeurs_verifiees['id_station'] = $_POST['id_station'];
$valeurs_verifiees['id_espece'] = $_POST['id_espece'];
$valeurs_verifiees['individu_nom'] = $_POST['individu_nom'];
$valeurs_verifiees['id_individu'] = $_POST['id_individu'];
 
return $valeurs_verifiees;
 
}
 
private function verifierValeursIndividu($valeurs_a_verifier) {
 
$erreurs = array();
 
foreach($valeurs_a_verifier as $champ => $valeur) {
if(trim($valeur) == '') {
$erreurs[$champ] .= ' Ce champ ne peut pas être vide';
$erreurs[$champ] .= ' Ce champ ne peut pas être vide';
}
}
 
if(!empty($erreurs)) {
return $erreurs;
}
 
return true;
}
 
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;
$this->afficherFormulaireModificationIndividu($donnees);
return;
}
 
$valeurs_verifiees = $valeurs_collectees;
 
$id_individu = $valeurs_collectees['id_individu'];
 
$individu_dao = new IndividuDao();
$retour_modification_individu = $individu_dao->modifierIndividu($id_individu, $valeurs_verifiees);
 
$this->afficherInformationsIndividu();
}
 
public function supprimerIndividu() {
 
$id_individu_a_supprimer = $_POST['id_individu_a_supprimer'];
 
$observations_individu = $this->getObservationsPourIndividu($id_individu_a_supprimer);
 
if(count($observations_individu) > 0) {
$donnees = array();
$donnees['erreurs'] = 'Impossible de supprimer un individu pour lequel on a saisi des données';
 
$this->id_individu_en_cours = $id_individu_a_supprimer;
$this->afficherInformationsIndividu($donnees);
$this->afficherInformationsIndividu($donnees);
 
} else {
 
$individu_dao = new IndividuDao();
$individu_dao->supprimerIndividu($id_individu_a_supprimer);
 
$gestion_station = new Station();
$_GET['id_station'] = $_POST['id_station'];
 
$this->setSortie(self::RENDU_CORPS, $gestion_station->getFicheInformationsStation());
}
 
}
 
// +---------------------------------------------------------------------------------------------------------------+
// METHODES POUR FABRIQUER LE MENU
// METHODES POUR FABRIQUER LE MENU
public function setNavigation() {
 
$station = new Station();
$this->setSortie(self::RENDU_NAVIGATION, $station->construireMenuNavigation());
}
 
protected function getListeIndividus($id_station, $id_espece) {
 
$individu_dao = new IndividuDao();
return $individu_dao->getListeIndividusPourStationPourEspece($id_station,$id_espece);
 
}
 
private function getInformationsIndividu($id_individu) {
 
$individu_dao = new IndividuDao();
$infos_individu = $individu_dao->getInformationsIndividu($id_individu);
 
return $infos_individu;
}
 
private function getObservationsPourIndividu($id_individu) {
$observation_dao = new ObservationDao();
$liste_observation_pour_individu = $observation_dao->getListeObservationsPourIndividu($id_individu);
 
return $liste_observation_pour_individu;
}
}
?>
?>
/trunk/applications/saisie/controleurs/Observation.php
12,193 → 12,177
* @version SVN: $Id: Fiche.php 152 2010-09-06 16:19:12Z jpm $
*/
class Observation extends aControleur {
 
private $id_observation_en_cours = null;
 
public function __construct() {
 
parent::__construct();
$this->initialiser();
}
 
public function initialiser() {
 
if(isset($_GET['$id_observation'])) {
$this->id_observation_en_cours = $_GET['id_observation'];
}
$this->setNavigation();
}
 
public function executerActionParDefaut() {
return $this->afficherFormulaireAjoutIndividu();
}
 
 
public function afficherFormulaireAjoutObservation($id_individu) {
$donnees = array();
$formulaire = $this->getVue('formulaires/observation_saisie',$donnees);
$this->setSortie(self::RENDU_CORPS, $formulaire);
$this->setSortie(self::RENDU_CORPS, $formulaire);
}
 
public function afficherFormulaireModificationObservation() {
 
$id_individu_a_modifier_observation = $_GET['id_individu'];
 
$id_espece = $_GET['id_espece'];
$id_station = $_GET['id_station'];
 
$id_utilisateur = AppControleur::getUtilisateur()->getIdentifiantNumerique();
 
$espece = new Espece();
$evenements = $espece->getListeEvenementPourEspece($id_espece);
 
$station = new Station();
 
$individus = $station->getIndividusStationPourEspece($id_station,$id_espece);
foreach($individus as &$individu) {
 
$observation = new Observation();
$individu['observations'] = $observation->getListeObservationsPourIndividu($individu['id_individu']);
$individu['url'] = Liens::getUrlConsultationFicheIndividu($id_station,$id_espece, $individu['id_individu']);
 
}
 
$donnees['evenements'] = $evenements;
$donnees['stades'] = $this->aplatirListeEvenementHierachiseeEnListeParStades($evenements);
$donnees['individus'] = $individus;
$donnees['id_station'] = $_GET['id_station'];
$donnees['id_espece'] = $_GET['id_espece'];
 
if(isset($_GET['annee'])) {
$donnees['annee'] = $_GET['annee'];
} else {
$donnees['annee'] = date('Y');
}
 
$donnees['id_individu_a_modifier_observation'] = $id_individu_a_modifier_observation;
 
$this->setSortie(self::RENDU_CORPS, $this->getVue('formulaires/evenement_modification', $donnees));
}
 
// +---------------------------------------------------------------------------------------------------------------+
// METHODES POUR FABRIQUER LE MENU
// METHODES POUR FABRIQUER LE MENU
public function setNavigation() {
 
$station = new Station();
$this->setSortie(self::RENDU_NAVIGATION, $station->construireMenuNavigation());
}
 
// +---------------------------------------------------------------------------------------------------------------+
// METHODES APPELEES LORS DE LA VALIDATION D'UN FORMULAIRE
public function validerFormulaireAjoutObservation() {
 
$valeurs_formulaires = $_POST;
 
$valeurs_verifiees = array();
 
$observation_dao = new ObservationDao();
$observation_dao->ajouterObservation($valeurs_verifiees);
 
}
 
public function validerFormulaireModificationObservation() {
 
$valeurs_verifiees = $this->collecterValeursFormulaireModificationObservation();
 
$observation_dao = new ObservationDao();
$observation_dao->modifierObservation($valeurs_verifiees['id_individu'], $valeurs_verifiees);
 
$individu = new Individu();
 
$this->setSortie(self::RENDU_CORPS, $individu->getListeIndividu());
 
}
 
public function validerFormulaireModificationObservationAjax() {
 
$valeurs_verifiees = $this->collecterValeursFormulaireModificationObservation();
 
$observation_dao = new ObservationDao();
$observation_dao->modifierObservation($valeurs_verifiees['id_individu'],$valeurs_verifiees);
$retour = array('reponse' => 'OK');
$data = $observation_dao->modifierObservation($valeurs_verifiees['id_individu'],$valeurs_verifiees);
 
$retour = array('reponse' => 'OK', 'data' => $data);
 
header('Content-type: text/json');
echo json_encode($retour);
exit;
}
 
private function collecterValeursFormulaireModificationObservation() {
$valeurs_verifiees = array();
foreach($_POST as $nom_champ => $valeur) {
$id_si_est_champ_observation = $this->renvoyerIdEvenementSiChampDeFormulaireObservation($nom_champ);
if($id_si_est_champ_observation && trim($valeur) != '') {
$valeurs_verifiees[$nom_champ] = $valeur;
}
}
 
$valeurs_verifiees = array();
 
$valeurs_verifiees['id_individu'] = $_POST['id_individu'];
$valeurs_verifiees['annee_en_cours'] = $_POST['annee_en_cours'];
//TODO: verifier valeurs plus complètement
 
$valeurs_verifiees['id_evenement'] = $_POST['id_evenement'];
$valeurs_verifiees['date_evenement'] = $_POST['date_evenement'];
 
if(!empty($_POST['id_observation'])) {
$valeurs_verifiees['id_observation'] = $_POST['id_observation'];
}
 
return $valeurs_verifiees;
}
private function renvoyerIdEvenementSiChampDeFormulaireObservation($champ) {
$tab_champ = explode('observation_',$champ);
if(count($tab_champ) > 1 && is_numeric($tab_champ[1])) {
return $tab_champ[1];
}
return false;
}
 
// +---------------------------------------------------------------------------------------------------------------+
// METHODES DE RECHERCHE DE DONNEES
// METHODES DE RECHERCHE DE DONNEES
public function getListeObservationsPourIndividu($id_individu, $annee = null) {
 
$observation_dao = new ObservationDao();
$observations_pour_individu = $observation_dao->getListeObservationsPourIndividu($id_individu, $annee);
 
return $observations_pour_individu;
}
 
 
private function aplatirListeEvenementHierachiseeEnListeParStades($liste_evenements_hierarchisee) {
 
$liste_evenements_plate_par_stade = array();
 
foreach($liste_evenements_hierarchisee as $evenement_hierarchise) {
foreach($evenement_hierarchise['stades'] as $id_stade => $stade) {
$liste_evenements_plate_par_stade[$id_stade] = $stade;
}
}
 
return $liste_evenements_plate_par_stade;
}
 
// +---------------------------------------------------------------------------------------------------------------+
// METHODES UTILITAIRES STATIQUES (UTILES POUR LES FORMULAIRES)
public static function individuAObservationValidePourStade($individu, $annee, $evenement, $id_stade) {
 
return (isset($individu['observations'][$annee][$evenement][$id_stade]) && trim($individu['observations'][$annee][$evenement][$id_stade]) != '');
}
 
public static function renvoyerObservationStadePourIndividu($individu, $annee, $evenement, $id_stade) {
 
if(self::individuAObservationValidePourStade($individu, $annee, $evenement, $id_stade)) {
return $individu['observations'][$annee][$evenement][$id_stade];
}
 
return '';
}
}
}
?>
?>