//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/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/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"> </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"> </span> |
<span class="datepicker_container"></span> |
<div class="conteneur_supprimer_observation"> |
<span title="Cliquez pour supprimer cette observation" class="icone supprimer_observation"> </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/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 ''; |
} |
} |
} |
?> |
?> |
//trunk/applications/jrest/services/OdsExport.php |
---|
1,7 → 1,7 |
<?php |
class OdsExport extends OdsTriple { |
const PREFIXE = 'get'; |
const ABBR_LISTE_EVENEMENTS = 'evenement'; |
const ABBR_LISTE_ESPECES = 'espece'; |
8,19 → 8,19 |
const ABBR_LISTE_MILIEUX = 'environnement'; |
private $type_mime = 'text/html'; |
/** |
* Méthodes d'extractions d'informations |
*/ |
/** |
* Méthode appelée avec une requête de type GET. |
* |
*/ |
function getElement($param = array()) { |
$type = $param[0]; |
if ($type == '*' || is_numeric($type)) { |
$info = $this->getElementParDefaut($param); |
} else { |
35,40 → 35,40 |
$this->envoyer($info,$this->type_mime); |
} |
public function getExportStationJson() { |
$donnees = $this->getExportStation(); |
$donnees_formatees = $this->formaterListeStationPourExportJson($donnees); |
$this->type_mime = 'application/json'; |
return $donnees_formatees; |
} |
public function getExportStation($start = null,$limit = null, $order_by = 'oo_date') { |
$id_demo = $this->config['appli']['id_participant_demo']; |
$requete_selection_stations = 'SELECT * FROM ods_stations WHERE os_ce_participant != '.$this->proteger($id_demo); |
$requete_selection_stations = 'SELECT * FROM ods_stations WHERE os_ce_participant != '.$this->proteger($id_demo); |
$res_selection_stations = $this->executerRequete($requete_selection_stations); |
return $res_selection_stations; |
} |
public function getExportUtilisateurCsv() { |
$controle = new ControleUtilisateur($this->config); |
$controle->authentifierAdmin(); |
$gestionnaire_utilisateurs = new OdsUtilisateur($this->config); |
$utilisateurs = $gestionnaire_utilisateurs->getListeUtilisateurAvecInfosComplementairesFormateeId(); |
$utilisateurs_formates = array(); |
$premiere_annee = 2006; |
$nb_obs = $this->compterObservationsParUtilisateur(); |
$annees = array(); |
foreach ($utilisateurs as $id => $utilisateur) { |
$utilisateur_formate = array( |
'id' => isset($utilisateur['uid']) ? $utilisateur['uid'] : '', |
81,15 → 81,15 |
'type' => isset($utilisateur['profile_type']) ? $utilisateur['profile_type'] : '', |
'date inscription' => isset($utilisateur['created']) ? date('d/m/Y', $utilisateur['created']) : '', |
); |
for($i = $premiere_annee; $i <= date('Y'); $i++) { |
$annees['annee '.$i] += isset($nb_obs[$utilisateur['uid']]) && isset($nb_obs[$utilisateur['uid']][$i]) ? $nb_obs[$utilisateur['uid']][$i] : '0'; |
$utilisateur_formate['annee '.$i] = isset($nb_obs[$utilisateur['uid']]) && isset($nb_obs[$utilisateur['uid']][$i]) ? $nb_obs[$utilisateur['uid']][$i] : '0'; |
} |
$utilisateurs_formates[] = $utilisateur_formate; |
} |
$ligne_total_obs = array( |
'id' => '', |
'pseudo' => '', |
106,38 → 106,38 |
$csv = $this->convertirTableauAssocVersCSV($utilisateurs_formates); |
$this->envoyerFichier($csv, 'utilisateurs'); |
} |
private function compterObservationsParUtilisateur() { |
$requete = 'SELECT COUNT(*) as nb_obs, oo_ce_participant as participant, YEAR(oo_date) as annee '. |
'FROM `ods_observations` WHERE oo_date != "0000-00-00" GROUP BY oo_ce_participant, YEAR(oo_date)'; |
$res_selection_obs = $this->executerRequete($requete); |
$stats = array(); |
foreach ($res_selection_obs as $obs_nb) { |
$stats[$obs_nb['participant']][$obs_nb['annee']] = $obs_nb['nb_obs']; |
} |
return $stats; |
} |
public function formaterListeStationPourExportJson($tableau_stations_infos) { |
$gestionnaire_especes = new OdsEspece($this->config); |
$gestionnaire_communes = new OdsCommune($this->config); |
$gestionnaire_utilisateurs = new OdsUtilisateur($this->config); |
$especes = $gestionnaire_especes->getToutesEspeces(); |
$evenements = $this->obtenirValeursListeParAbreviation(self::ABBR_LISTE_EVENEMENTS); |
$milieux = $this->obtenirValeursListeParAbreviation(self::ABBR_LISTE_MILIEUX); |
$utilisateurs = $gestionnaire_utilisateurs->getListeUtilisateurAvecInfosComplementairesFormateeId(); |
$communes = $gestionnaire_communes->obtenirCommunesLieesAStationIndexeesCodeInsee(); |
$resultats_formates = array(); |
$stats = array('total' => count($tableau_stations_infos)); |
foreach($tableau_stations_infos as $stations_infos) { |
foreach($tableau_stations_infos as $stations_infos) { |
$commune = isset($communes[$stations_infos['os_ce_commune']]['oc_nom']) ? $communes[$stations_infos['os_ce_commune']]['oc_nom'] : ''; |
$id_station = $stations_infos['os_id_station']; |
$resultats_formates[$id_station]['nom'] = $stations_infos['os_nom']; |
$resultats_formates[$id_station]['code_commune'] = is_numeric($stations_infos['os_ce_commune']) ? substr($stations_infos['os_ce_commune'], 0, 2) : ''; |
146,7 → 146,7 |
$resultats_formates[$id_station]['longitude'] = $stations_infos['os_longitude']; |
$resultats_formates[$id_station]['altitude'] = $stations_infos['os_altitude']; |
$resultats_formates[$id_station]['type_participant'] = 'Particulier'; |
if(isset($utilisateurs[$stations_infos['os_ce_participant']])) { |
$participant = $utilisateurs[$stations_infos['os_ce_participant']]; |
$resultats_formates[$id_station]['participant']['id'] = $participant['uid']; |
163,14 → 163,14 |
$stats[$resultats_formates[$id_station]['type_participant']] = 1; |
} |
} |
$resultat = array('stats' => $stats, 'stations' => $resultats_formates); |
$resultat = array('stats' => $stats, 'stations' => $resultats_formates); |
return $resultat; |
} |
public function getExportObservation($start = null,$limit = null, $order_by = 'oo_date') { |
$requete_selection_observations = 'SELECT oo.*, oi.*, os.*, oc.* FROM ods_observations oo'. |
' LEFT JOIN ods_individus oi'. |
' LEFT JOIN ods_individus oi'. |
' ON oi_id_individu = oo_ce_individu'. |
' INNER JOIN ods_especes oe'. |
' ON oe.oe_espece_active = 1 '. |
187,7 → 187,7 |
return $res_selection_observations; |
} |
private function creerFiltreIdZoneGeo($valeurMasque) { |
$masque = ''; |
$dept = $valeurMasque; |
196,49 → 196,49 |
$masque = " oc_code_insee LIKE ".$this->proteger($dept); |
return $masque; |
} |
public function construireConditionRequete() { |
$condition = ' WHERE oo_date != "0000-00-00" AND DAY(oo_date) != "00" AND '; |
foreach($_GET as $cle => $valeur) { |
switch($cle) { |
case 'type_espece': |
$condition .= 'oi_ce_espece IN (SELECT oe_id_espece FROM ods_especes WHERE oe_ce_type = '.$this->proteger($valeur).')'; |
break; |
case 'annee': |
if($this->anneesMultiplesDemandees($valeur)) { |
$valeur = rtrim($valeur,','); |
$condition .= 'YEAR(oo_date) IN ('.$valeur.')'; |
$condition .= 'YEAR(oo_date) IN ('.$valeur.')'; |
} else { |
$condition .= 'YEAR(oo_date) '; |
$condition .= ' = '.$this->proteger($valeur); |
} |
break; |
case 'mois': |
$condition .= 'MONTH(oo_date) <= '.$this->proteger($valeur); |
break; |
case 'espece': |
$condition .= 'oi_ce_espece IN ('.$valeur.') '; |
break; |
case 'evenement': |
$condition .= 'oo_ce_evenement = '.$this->proteger($valeur); |
break; |
case 'utilisateur': |
$condition .= 'oo_ce_participant = '.$this->proteger($valeur); |
$condition .= 'oo_ce_participant = '.$this->proteger($valeur); |
break; |
case 'departement' : |
$condition .= $this->creerFiltreIdZoneGeo($valeur); |
break; |
case 'region' : |
$requete_association_region .= 'SELECT * FROM ods_triples WHERE ot_ce_parent = 36 AND ot_valeur = '.$valeur; |
$listeAssociationRegions = $this->executerRequete($requete_association_region); |
250,21 → 250,21 |
break; |
default: |
} |
$condition .= ' AND '; |
} |
$condition = rtrim($condition,'AND '); |
$id_demo = $this->config['appli']['id_participant_demo']; |
$id_admin = $this->config['appli']['id_participant_admin']; |
$condition .= ' AND oo_ce_participant != '.$id_demo; |
$condition .= ' AND oo_ce_participant != '.$id_admin; |
return $condition; |
} |
private function anneesMultiplesDemandees($annee) { |
// un ensemble d'identifiants est une suite d'identifiants séparés par des virgules |
// sans virgule terminale |
271,51 → 271,51 |
$reg_exp = "/^(([0-9])+,)*([0-9])+$/"; |
return preg_match($reg_exp, $annee); |
} |
public function getExportObservationPlat() { |
$donnees = $this->getExportObservation(); |
$donnees_formatees = $this->formaterListeObservationPourExportCSV($donnees); |
$donnees_formatees = $this->formaterListeObservationPourExportCSV($donnees); |
return $donnees_formatees ; |
} |
public function getExportObservationJson() { |
$donnees = $this->getExportObservation(); |
$donnees_formatees = $this->formaterListeObservationPourExportJson($donnees); |
$this->type_mime = 'application/json'; |
return $donnees_formatees; |
} |
public function formaterListeObservationPourExportJson($tableau_observations_infos) { |
$gestionnaire_especes = new OdsEspece($this->config); |
$gestionnaire_communes = new OdsCommune($this->config); |
$especes = $gestionnaire_especes->getToutesEspeces(); |
$evenements = $this->obtenirValeursListeParAbreviation(self::ABBR_LISTE_EVENEMENTS); |
$milieux = $this->obtenirValeursListeParAbreviation(self::ABBR_LISTE_MILIEUX); |
$resultats_formates = array(); |
foreach($tableau_observations_infos as $observations_infos) { |
$id_espece = $observations_infos['oi_ce_espece']; |
if($id_espece == 0) { |
continue; |
} |
$nom_espece = $especes[$id_espece]['nom_scientifique']; |
$id_evenement = $observations_infos['oo_ce_evenement']; |
$chaine_evenement = $evenements[$id_evenement]['ot_cle']; |
$infos_evenement = $this->renvoyerInformationStadeAPartirChaineTriple($chaine_evenement); |
$date_observation_formatee = date($this->config['appli']['format_date'], strtotime($observations_infos['oo_date'])); |
$id_observation = $observations_infos['oo_id_observation']; |
$infos_formatees = array( |
'date' => $date_observation_formatee, |
325,9 → 325,9 |
'id_espece' => $id_espece, |
'participant' => $observations_infos['os_ce_participant'] |
); |
$id_station = $observations_infos['oi_ce_station']; |
if(!isset($resultats_formates[$id_station])) { |
$resultats_formates[$id_station]['station'] = $observations_infos['os_nom']; |
$resultats_formates[$id_station]['code_commune'] = $observations_infos['os_ce_commune']; |
342,52 → 342,53 |
} |
$resultats_formates[$id_station]['participant'] = $observations_infos['os_ce_participant']; |
} |
$resultats_formates[$id_station]['obs'][$id_observation] = $infos_formatees; |
} |
return $resultats_formates; |
} |
public function getFichierExportObservationCsv() { |
$donnees = $this->getExportObservation(); |
$donnees_formatees = $this->formaterListeObservationPourExportCSV($donnees); |
$donnees_formatees = $this->formaterListeObservationPourExportCSV($donnees); |
$chaine_csv = $this->convertirTableauAssocVersCSV($donnees_formatees); |
$this->envoyerFichier($chaine_csv); |
} |
public function formaterListeObservationPourExportCSV($tableau_observations_infos) { |
$gestionnaire_especes = new OdsEspece($this->config); |
$gestionnaire_communes = new OdsCommune($this->config); |
$gestionnaire_utilisateurs = new OdsUtilisateur($this->config); |
$especes = $gestionnaire_especes->getToutesEspeces(); |
$evenements = $this->obtenirValeursListeParAbreviation(self::ABBR_LISTE_EVENEMENTS); |
$milieux = $this->obtenirValeursListeParAbreviation(self::ABBR_LISTE_MILIEUX); |
$codes_insee_communes = array(); |
$resultats_formates = array(); |
foreach($tableau_observations_infos as $observations_infos) { |
$id_espece = $observations_infos['oi_ce_espece']; |
$nom_espece = $especes[$id_espece]['nom_scientifique']; |
$id_evenement = $observations_infos['oo_ce_evenement']; |
$chaine_evenement = $evenements[$id_evenement]['ot_cle']; |
$infos_evenement = $this->renvoyerInformationStadeAPartirChaineTriple($chaine_evenement); |
$date_observation_formatee = date($this->config['appli']['format_date'], strtotime($observations_infos['oo_date'])); |
$id_observation = $observations_infos['oo_id_observation']; |
$milieu = isset($milieux[$observations_infos['os_ce_environnement']]['ot_valeur']) ? $milieux[$observations_infos['os_ce_environnement']]['ot_valeur'] : ''; |
$infos_formatees = array( |
'id_observation' => $id_observation, |
'id_individu' => $observations_infos['oo_ce_individu'], |
'date' => $date_observation_formatee, |
'evenenement' => $infos_evenement['nom'], |
'code_bbch' => $infos_evenement['numero'], |
403,9 → 404,9 |
'pseudo_participant' => '', |
'mail_participant' => '' |
); |
$resultats_formates[] = $infos_formatees; |
if(is_numeric($observations_infos['os_ce_commune'])) { |
$codes_insee_communes[] = $observations_infos['os_ce_commune']; |
} |
413,26 → 414,26 |
$correspondance_codes_insee_noms = $gestionnaire_communes->obtenirTableauNomsCommunesParTableauCodesInsee($codes_insee_communes); |
$correspondance_id_utilisateur = $gestionnaire_utilisateurs->getListeUtilisateurFormateeId(); |
foreach($resultats_formates as &$resultat) { |
if(isset($correspondance_codes_insee_noms[$resultat['code_commune']]) && trim($correspondance_codes_insee_noms[$resultat['code_commune']]) != '') { |
if(isset($correspondance_codes_insee_noms[$resultat['code_commune']]) && trim($correspondance_codes_insee_noms[$resultat['code_commune']]) != '') { |
$resultat['nom_commune'] = $correspondance_codes_insee_noms[$resultat['code_commune']]; |
} |
$resultat['pseudo_participant'] = isset($correspondance_id_utilisateur[$resultat['id_participant']]) ? $correspondance_id_utilisateur[$resultat['id_participant']]['name'] : ''; |
$resultat['mail_participant'] = isset($correspondance_id_utilisateur[$resultat['id_participant']]) ? $correspondance_id_utilisateur[$resultat['id_participant']]['mail'] : ''; |
} |
return $resultats_formates; |
} |
public function convertirTableauAssocVersCSV($tableau) { |
$csv = ''; |
$colonnes = array_keys($tableau[0]); |
$csv .= implode(';',$colonnes).";\n"; |
foreach($tableau as $elements) { |
$ligne = ""; |
// parcours des cases de chaque ligne nécessaire car si on utilise implode |
442,39 → 443,39 |
} |
$csv .= $ligne."\n"; |
} |
return $csv; |
} |
public function envoyerFichier($contenu, $nom = 'observations_export') { |
$nom_fichier = $nom.".csv"; |
$chemin_fichier = $this->config['appli']['chemin_fichiers_temp'].'/'.$nom_fichier; |
file_put_contents($chemin_fichier, $contenu); |
file_put_contents($chemin_fichier, $contenu); |
$contenu = file_get_contents($chemin_fichier); |
$taille_fichier = filesize($chemin_fichier); |
unlink($chemin_fichier); |
ini_set('zlib.output_compression','Off'); |
header('Pragma: public'); |
header('Last-Modified: '.gmdate('D, d M Y H:i:s').' GMT'); |
header('Cache-Control: must-revalidate, pre-check=0, post-check=0, max-age=0'); |
header('Content-Tranfer-Encoding: none'); |
header('Content-Type: application/octetstream; name="'.$nom_fichier.'"'); |
header('Content-Disposition: attachement; filename="'.$nom_fichier.'"'); |
header('Content-Length: '.$taille_fichier); |
echo $contenu; |
exit(); |
} |
private function formaterInformationPourEnvoi($tableauinfos) { |
} |
//trunk/applications/jrest/services/OdsObservation.php |
---|
4,20 → 4,20 |
const PREFIXE = 'get'; |
const ABBR_LISTE_EVENEMENTS = 'evenement'; |
/** |
* Méthodes d'extractions d'informations |
*/ |
/** |
* Méthode appelée avec une requête de type GET. |
* |
*/ |
function getElement($param = array()) { |
$type = $param[0]; |
if ($type == '*' || is_numeric($type)) { |
$info = $this->getElementParDefaut($param); |
} else { |
32,138 → 32,149 |
$this->envoyer($info); |
} |
private function getElementParDefaut($params) { |
} |
private function getObservationsPourStation($params) { |
$id_station = isset($params[0]) ? $params[0] : ''; |
$annee = isset($params[1]) ? $params[1] : ''; |
return ; |
} |
private function getObservationsPourIndividu($params) { |
$id_individu = isset($params[0]) ? $params[0] : ''; |
$annee = isset($params[1]) ? $params[1] : ''; |
$requete_liste_observation_individu = 'SELECT * FROM ods_observations '. |
'WHERE oo_ce_individu ='.$this->proteger($id_individu).' '. |
'AND DAY(oo_date) != "00" '. |
'ORDER BY YEAR(oo_date) DESC, MONTH(oo_date) ASC, DAY(oo_date) ASC '; |
'ORDER BY YEAR(oo_date) DESC, MONTH(oo_date) ASC, DAY(oo_date) ASC '; |
$liste_observation_individu = $this->executerRequete($requete_liste_observation_individu); |
$liste_observation_individu_formatees = array(); |
foreach($liste_observation_individu as $observation_individu) { |
$annee_obs = date("Y",strtotime($observation_individu['oo_date'])); |
$stade_observation_complet = $this->getInformationEvenementParId($observation_individu['oo_ce_evenement']); |
$abbr_stade_observation = $stade_observation_complet['ot_cle']; |
$infos_stades = $this->renvoyerInformationStadeAPartirChaineTriple($abbr_stade_observation); |
$titre_stade = $infos_stades['nom']; |
$numero_stade = $infos_stades['numero']; |
$abreviation_stade = $infos_stades['abreviation']; |
$tableau_date = date_parse($observation_individu['oo_date']); |
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] = $date_observation_formatee; |
$liste_observation_individu_formatees[$annee_obs][$titre_stade][$numero_stade] = $date_observation_formatee; |
$liste_observation_individu_formatees[$annee_obs][$titre_stade][$numero_stade][$observation_individu['oo_id_observation']] = $date_observation_formatee; |
} |
} |
krsort($liste_observation_individu_formatees); |
return $liste_observation_individu_formatees; |
} |
/** |
* Méthodes de création et modification d'informations |
*/ |
*/ |
/** |
* Méthode appelée pour mettre à jour un élément |
*/ |
public function updateElement($uid, $params) { |
$elements_requis = array('id_participant','id_individu'); |
$elements_requis = array('id_participant','id_individu', 'id_evenement', 'date_evenement'); |
$erreurs = array(); |
foreach($elements_requis as $requis) { |
if(!isset($params[$requis])) { |
$erreurs[$requis] = 'erreur '; |
} |
} |
if(!isset($params['annee_en_cours'])) { |
$annee_en_cours = date('Y'); |
} else { |
$annee_en_cours = $params['annee_en_cours']; |
} |
if(!empty($erreurs)) { |
$this->envoyer($erreurs); |
exit; |
} |
$id_participant = $params['id_participant']; |
unset($params['id_participant']); |
$id_individu = $params['id_individu']; |
unset($params['id_individu']); |
$requete_obs_deja_saisies_cette_annee = 'SELECT * FROM ods_observations WHERE oo_ce_individu = '.$this->proteger($id_individu).' '. |
'AND oo_ce_participant = '.$this->proteger($id_participant).' '. |
'AND YEAR(oo_date) = '.$this->proteger($annee_en_cours); |
$obs_deja_saisies_cette_annee = $this->executerRequete($requete_obs_deja_saisies_cette_annee); |
foreach($params as $cle => $valeur) { |
if($est_une_valeur_obs = $this->renvoyerIdEvenementSiChampDeFormulaireObservation($cle)) { |
$valeur = $this->formaterDateObservationPourBdd($valeur); |
$obs_a_traiter = array('date_evenement' => $valeur, |
'id_evenement' => $est_une_valeur_obs, |
'id_individu' => $id_individu, |
'commentaire' => ''); |
if($a_modifier_ou_inserer = $this->renvoyerIdObservationSiEvenementDejaObserveCetteAnnee($est_une_valeur_obs,$obs_deja_saisies_cette_annee)) { |
$obs_a_traiter['id_observation'] = $a_modifier_ou_inserer; |
$this->modifierObservation($id_participant, $obs_a_traiter); |
} else { |
$this->insererObservation($id_participant, $obs_a_traiter); |
} |
} |
$a_modifier_ou_inserer = !empty($params['id_observation']) ? $params['id_observation'] : false; |
$retour = array(); |
$date_evenement = $this->formaterDateObservationPourBdd($params['date_evenement']); |
// dans le cas des ajouts ou modifications on vérifie que l'on insère pas une date |
// déjà existante, car ça n'a pas de sens pour un même individu et stade |
if (strpos($date_evenement, '00-00') === false) { |
$requete_existe_avec_cette_date = 'SELECT * FROM ods_observations '. |
'WHERE oo_ce_participant = '.$this->proteger($id_participant).' AND '. |
'oo_ce_individu = '.$this->proteger($id_individu).' AND '. |
'oo_ce_evenement = '.$this->proteger($params['id_evenement']).' AND '. |
'oo_date = '.$this->proteger($date_evenement); |
$resultat_requete_existe_avec_cette_date = $this->executerRequete($requete_existe_avec_cette_date); |
if(!empty($resultat_requete_existe_avec_cette_date)) { |
$this->envoyer([ |
'erreurs' => [ |
'date' => 'Une observation à cette date existe déjà pour ce stade et cet individu' |
] |
]); |
exit; |
} |
} |
$obs_a_traiter = array( |
'date_evenement' => $date_evenement, |
'id_evenement' => $params['id_evenement'], |
'id_individu' => $params['id_individu'], |
'commentaire' => ''); |
if($a_modifier_ou_inserer) { |
$obs_a_traiter['id_observation'] = $a_modifier_ou_inserer; |
$this->modifierObservation($id_participant, $obs_a_traiter); |
} else { |
$retour = ['id_observation' => $this->insererObservation($id_participant, $obs_a_traiter)]; |
} |
$this->envoyer(); |
$this->envoyer($retour); |
} |
private function insererObservation($id_participant, $donnees_obs_a_inserer) { |
$nouvel_ordre = 1; |
$requete_max_ordre = 'SELECT MAX(oo_ordre) as max_ordre FROM ods_observations WHERE '. |
'oo_ce_participant = '.$this->proteger($id_participant); |
$resultat_requete_ordre = $this->executerRequete($requete_max_ordre); |
if(count($resultat_requete_ordre) > 0) { |
$nouvel_ordre = $resultat_requete_ordre[0]['max_ordre'] + 1; |
$nouvel_ordre = $resultat_requete_ordre[0]['max_ordre'] + 1; |
} |
$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) '. |
'VALUES '. |
176,88 → 187,84 |
'"",'. |
'NOW(),'. |
'NOW()'. |
')'; |
return $this->executerRequeteSimple($requete_nouvelle_observation); |
')'; |
$this->executerRequeteSimple($requete_nouvelle_observation); |
return $this->renvoyerDernierIdInsere(); |
} |
private function modifierObservation($id_participant, $donnees_obs_a_inserer) { |
$requete_modification_observation = 'UPDATE ods_observations '. |
'SET '. |
'oo_date = '.$this->proteger($donnees_obs_a_inserer['date_evenement']).', '. |
'oo_commentaire = '.$this->proteger($donnees_obs_a_inserer['commentaire']).', '. |
'oo_date = '.$this->proteger($donnees_obs_a_inserer['date_evenement']).', '. |
'oo_commentaire = '.$this->proteger($donnees_obs_a_inserer['commentaire']).', '. |
'oo_date_modification = NOW() '. |
'WHERE oo_id_observation = '.$donnees_obs_a_inserer['id_observation'].' '. |
'AND oo_ce_participant = '.$this->proteger($id_participant); |
return $this->executerRequeteSimple($requete_modification_observation); |
} |
private function renvoyerIdObservationSiEvenementDejaObserveCetteAnnee($id_evenement, $tableau_observations_cette_annee) { |
foreach($tableau_observations_cette_annee as $observation_cette_annee) { |
if($id_evenement == $observation_cette_annee['oo_ce_evenement']) { |
return $observation_cette_annee['oo_id_observation']; |
} |
} |
return false; |
} |
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; |
} |
private function formaterDateObservationPourBdd($date) { |
$format = $this->config['appli']['format_date']; |
if(!isset($format)) { |
$format = 'd/m/Y'; |
} |
$recherche = array('d','m','Y'); |
$remplacement = array('([0-9]{1,2})','([0-9]{1,2})','([0-9]{4})'); |
$pattern_date_simple = str_replace($recherche, $remplacement, $format); |
$date_tab = explode('/', $date); |
$time = mktime(0,0,0,$date_tab[1],$date_tab[0],$date_tab[2]); |
if($this->estUneDateInvalide($date_tab[1],$date_tab[0],$date_tab[2])) { |
$date_a_renvoyer = $date_tab[2].'-'.$date_tab[1].'-'.$date_tab[0]; |
} else { |
if(!ereg($pattern_date_simple, $date)) { |
$time = strtotime($date); |
} |
$date_a_renvoyer = date('Y-m-d h:i:s', $time); |
} |
$date_a_renvoyer = date('Y-m-d', $time); |
} |
return $date_a_renvoyer; |
} |
} |
private function estUneDateInvalide($jour, $mois, $annee) { |
return ($jour == '00' || $mois == '00' || $annee == '0000'); |
} |
/** |
* Méthode appelée pour supprimer un élément |
*/ |
public function deleteElement($uid) { |
// Envoie sur la sortie standard |
$this->envoyer(); |
} |
} |
?> |
?> |