Rev 302 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | RSS feed
function getUrlBaseJrest() {return urlBaseJrest;}/**************************************************************************************************************************************************************************************************Fonction permettant de transformer les élements de la classe pliage en accordéon**************************************************************************************************************************************************************************************************/function initialiserElementsPliables() {$('.pliage h4').addClass('lien_pliage');$('.pliage ul').hide();$('.pliage > ul:first-child').hide();$('.1er_element_date ul').show();$('.1er_element_date > ul:first-child').show();$('.lien_pliage').bind('click', function() {$(this).nextAll('ul').slideToggle();return false;});}$('.pliage').ready(function() {initialiserElementsPliables();});/**************************************************************************************************************************************************************************************************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:first").show();$("ul.liste_onglets li").click(function() {$("ul.liste_onglets li").removeClass("active");$(this).addClass("active");$(".contenu_onglet").hide();var activeTab = $(this).find("a").attr("href");$(activeTab).fadeIn();return false;});}$('.contenu_onglet').ready(function() {initialiserOnglets();});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() {agrandirZoneCLicBoutonsRadios();});/**************************************************************************************************************************************************************************************************Fonctions permettant de transformer les cases du tableau d'évenements en mini formulaire**************************************************************************************************************************************************************************************************/htmlEnCours = '';elementEnCours = null;ancienneValeurEnCours = null;id_formulaire = null;function initialiserLignesCliquables() {$('.conteneur_element_modifier').hide();$(".date_observation_individu").live("click", function(e) {e.preventDefault();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;}});$(".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/yyyyenvoyerRequeteAjaxSaisieObservation('', $(this).parent('.date_observation_individu'));}});// pour fermer le datepicker sur esc$(document).keyup(function(e) {if (e.keyCode === 27) {$('.element_clique').removeClass('element_clique');fermerDatePicker(); // esc}});}function afficherSaisieObservation($obs) {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);}$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) {validerSaisieObservation(dateText, $obs)},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]}});$obs.datepicker("show");$('.ui-datepicker').attr("title", "Appuyez sur échap pour annuler l'édition");}function validerSaisieObservation(dateStr, $obs) {if(estUneDateValide(dateStr)) {envoyerRequeteAjaxSaisieObservation(dateStr, $obs);}}function formaterDonneesObservationPourEnvoi(dateStr, $obs) {if(dateStr == null ) {return false ;}var anneeEnCours = getAnneeEnCoursDeConsultation();if(jQuery.trim(dateStr) == '') {dateStr = '00/00/'+anneeEnCours;}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 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') {// les obs ne sont jamais vraiment supprimées// mais seulement remplacées par des dates au format 00/00/yyyyif(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 estUneDateSuppressionObs(dateStr) {var date_vide_pattern = /^00\/00\/\d{4}$/;return dateStr == '' || date_vide_pattern.test(dateStr);}function fermerDatePicker() {if($(".hasDatepicker").length == 0) {return;}$(".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-datefunction 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();}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();});/**************************************************************************************************************************************************************************************************Fonctions concernant la carte permettant de pointer d'afficher l'emplacement des stations**************************************************************************************************************************************************************************************************/var map;var marker;var liste_localite_en_cours;var indice_commune_en_cours;var liste_auto_completion_a_le_focus;var timerRequeteAutocompletion;var timerAffichageAutocompletion;function cacherElementsRafraichissables() {$('.rafraichissable input').attr('disabled', 'disabled');$('.rafraichissable input[type="text"]').addClass("chargement");}function montrerElementsRafraichissables() {$('.rafraichissable input').removeAttr('disabled');$('.chargement').removeClass("chargement");}function ajouterAutoCompletionCommune() {$('input#station_commune').after('<div class="conteneur_suggestions"></div>');$('input#station_commune').parent().addClass('autocompletion');$('input#station_commune').attr('autocomplete','off');$('.conteneur_suggestions').hide();rendreListeAutoCompletionInteractive('input#station_commune');}function ajouterListenerFormulaireSaisieLatLon() {$('input#localiser_lat_lon').click(function() {verifierEtLocaliserCoordonnees();});}function carteEstEnSaisie() {return ($('#conteneur_form_liens_lat_lon').length > 0);}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);}function obtenirInformationsPourCoordonnees(lat, lon) {lat = jQuery.trim(lat);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) {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) {infos_localites = jQuery.parseJSON(data);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) {$('#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)) {reprogrammerTimerPourCacherListeAutoCompletion();reprogrammerTimerPourLancerRequeteCommune();}});$(selecteur).keydown(function(event) {reprogrammerTimerPourCacherListeAutoCompletion();// entreeif(event.which==13){selectionnerCommune(indice_commune_en_cours);event.preventDefault();}// hautif(event.which == 38){if(indice_commune_en_cours > 0) {mettreEnSurbrillanceCommune(indice_commune_en_cours - 1);}}// basif(event.which == 40){if(indice_commune_en_cours < liste_localite_en_cours.length - 1) {mettreEnSurbrillanceCommune(indice_commune_en_cours + 1);}}});$('.conteneur_suggestions').blur(function() {$('.conteneur_suggestions').hide();});}function reprogrammerTimerPourCacherListeAutoCompletion() {if(timerAffichageAutocompletion != null) {window.clearTimeout(timerAffichageAutocompletion);}timerAffichageAutocompletion = window.setTimeout(function() {$('.conteneur_suggestions').hide();}, 2000);}function reprogrammerTimerPourLancerRequeteCommune() {if(timerRequeteAutocompletion != null) {window.clearTimeout(timerRequeteAutocompletion);}timerRequeteAutocompletion = window.setTimeout(function() {obtenirInformationsPourCommune($('input#station_commune').val());}, 350);}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(',');lat = latlon[0].replace('(', '');lon = latlon[1].replace(')', '');$('#station_lat').val(latlon[0].replace('(', ''));$('#station_lon').val(latlon[1].replace(')', ''));obtenirInformationsPourCoordonnees(lat, lon);}function initialiserCarte() {if($('#map_canvas').length == 0) {return;}var latlng = new google.maps.LatLng(47.0504, 2.2347);var myOptions = {zoom: 6,center: latlng,mapTypeId: google.maps.MapTypeId.HYBRID};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) {mettreAJourValeursFormulaire(marker.getPosition());});$('#conteneur_form_liens_lat_lon').ready(function() {verifierEtLocaliserCoordonnees();ajouterListenerFormulaireSaisieLatLon();ajouterAutoCompletionCommune();});} else {marker.setDraggable(false);$('#conteneur_liens_lat_lon').ready(function() {verifierEtLocaliserCoordonnees();});}marker.setClickable(true);// To add the marker to the map, call setMap();marker.setMap(map);}$('#map_canvas').ready(function() {initialiserCarte();});/**************************************************************************************************************************************************************************************************Fonctions généralistes s'appliquant automatiquement à certaines classes css**************************************************************************************************************************************************************************************************/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'));});}function initialiserLiensSuppression() {$('.lien_suppression').click(function() {return window.confirm('Êtes vous sur de vouloir supprimer ?');});}$(document).ready(function() {initialiserLiensSuppression();initialiserLiensNouvelleFenetre();});/**************************************************************************************************************************************************************************************************Fonctions de debug permattant d'afficher les objets javascript à la manière de print_r**************************************************************************************************************************************************************************************************/function dump(arr,level) {var dumped_text = "";if(!level) level = 0;//The padding given at the beginning of the line.var level_padding = "";for(var j=0;j<level+1;j++) level_padding += " ";if(typeof(arr) == 'object') { //Array/Hashes/Objectsfor(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);} else {dumped_text += level_padding + "'" + item + "' => \"" + value + "\"\n";}}} else { //Stings/Chars/Numbers etc.dumped_text = "===>"+arr+"<===("+typeof(arr)+")";}return dumped_text;}