Rev 2955 | Blame | Last modification | View Log | RSS feed
// Héritage
WidgetSaisieArbresRemarquables = function() {
this.serviceAltitudeUrl = null;
this.taxons = {};
}
WidgetSaisieArbresRemarquables.prototype = new WidgetSaisie();
WidgetSaisieArbresRemarquables.prototype.initEvts = function() {
// super()
WidgetSaisie.prototype.initEvts.call(this);
var lthis = this;
$('body').on('click', '.fermer', function(event) {
event.preventDefault();
lthis.basculerOuvertureFermetureCadre($(this).find('.icone'));
});
// multi cases à cocher dans un menu déroulant : clic confortable !
$('.btn-group.dropdown ul li input[type="checkbox"], .btn-group.dropdown ul li label').on('click', function(event) {
$(this).valid();
event.stopPropagation();
});
this.surChangementTaxonListe();// Vérif lors du chargement de la page
$('#taxon-liste').on('change', this.surChangementTaxonListe.bind(this));
this.surChangementSituation();// Vérif lors du chargement de la page
$('#situation-autre').on('change', this.surChangementSituation.bind(this));
this.surChangementEsthetique();// Vérif lors du chargement de la page
$('#esthetique-autre').on('change', this.surChangementEsthetique.bind(this));
this.surChangementRemarquable();// Vérif lors du chargement de la page
$('.cb-remarquable').on('change', this.surChangementRemarquable.bind(this));
// Gestion des obs
this.surChangementNbreObs();
};
WidgetSaisieArbresRemarquables.prototype.focusChampFormulaire = function() {
$("#carte-recherche").focus();
};
WidgetSaisieArbresRemarquables.prototype.mettreAJourMarkerPosition = function(latLng) {
this.trouverCommune(latLng);
this.trouverAltitude(latLng);
var lat = latLng.lat().toFixed(5),
lng = latLng.lng().toFixed(5);
this.remplirChampLatitude(lat);
this.remplirChampLongitude(lng);
this.remplirChampsLambert93(lat, lng);
};
proj4.defs([
['EPSG:4326', '+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs'],
['EPSG:2154', '+title=RGF93 / Lambert-93 +proj=lcc +lat_1=49 +lat_2=44 +lat_0=46.5 +lon_0=3 +x_0=700000 +y_0=6600000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs']
]);
WidgetSaisieArbresRemarquables.prototype.remplirChampsLambert93 = function(lat, lng) {
// Prendre en compte l'initialisation des projections
var coordinate = {x: lng,y: lat};
proj4(proj4.defs('EPSG:4326'), proj4.defs('EPSG:2154')).forward(coordinate);
$('#l93-x').val(coordinate.x.toFixed(0));
$('#l93-y').val(coordinate.y.toFixed(0));
};
WidgetSaisieArbresRemarquables.prototype.trouverAltitude = function(pos) {
var url_service = this.serviceAltitudeUrl,
urlAltFormatee = url_service.replace('{lat}', pos.lat()).replace('{lon}', pos.lng());
var lthis = this;
$.ajax({
url: urlAltFormatee,
type: 'GET',
dataType: 'jsonp',
beforeSend : function() {
$('#altitude').empty();
$('#dialogue-erreur .alert-txt').empty();
},
success : function(data, textStatus, jqXHR) {
$('#altitude').empty().append(data.altitude);
$('#marqueur-altitude').data('altitude', data.altitude);
},
statusCode : {
500 : function(jqXHR, textStatus, errorThrown) {
if (lthis.debug) {
$('#dialogue-erreur .alert-txt').append('<p id="msg">Un problème est survenu lors de l\'appel au service fournissant l\'altitude.</p>');
reponse = jQuery.parseJSON(jqXHR.responseText);
var erreurMsg = '';
if (reponse != null) {
$.each(reponse, function (cle, valeur) {
erreurMsg += valeur + '<br />';
});
}
$('#dialogue-erreur .alert-txt').append('<p class="msg-erreur">Erreur 500 : '+errorThrown+"<br />"+erreurMsg+'</p>');
}
}
},
error : function(jqXHR, textStatus, errorThrown) {
if (lthis.debug) {
$("#dialogue-erreur .alert-txt").append('<p class="msg">Une erreur Ajax est survenue lors de l\'appel au service fournissant l\'altitude.</p>');
reponse = jQuery.parseJSON(jqXHR.responseText);
var erreurMsg = '';
if (reponse != null) {
$.each(reponse, function (cle, valeur) {
erreurMsg += valeur + '<br />';
});
}
$('#dialogue-erreur .alert-txt').append('<p class="msg-erreur">Erreur Ajax : '+errorThrown+' (type : '+textStatus+') <br />'+erreurMsg+'</p>');
}
},
complete : function(jqXHR, textStatus) {
var debugMsg = extraireEnteteDebug(jqXHR);
if (debugMsg != '') {
if (lthis.debug) {
$('#dialogue-erreur .alert-txt').append('<pre class="msg-debug msg">Débogage : '+debugMsg+'</pre>');
}
}
if ($('#dialogue-erreur .msg').length > 0) {
$('#dialogue-erreur').show();
}
}
});
};
WidgetSaisieArbresRemarquables.prototype.surChangementTaxonListe = function() {
if ($('#taxon-liste').val() === '?') {
$('#taxon-input-groupe').removeClass('hidden');
$('#taxon').valid();
} else {
$('#taxon-input-groupe').addClass('hidden');
}
};
WidgetSaisieArbresRemarquables.prototype.surChangementEsthetique = function() {
var cochee = $('#esthetique-autre').prop("checked");
if (cochee) {
$('#autre-esthetique-id').removeClass('hidden');
} else {
$('#autre-esthetique-id').addClass('hidden');
}
};
WidgetSaisieArbresRemarquables.prototype.surChangementSituation = function() {
var cochee = $('#situation-autre').prop("checked");
if (cochee) {
$('#autre-situation-id').removeClass('hidden');
} else {
$('#autre-situation-id').addClass('hidden');
}
};
// Activation de la saisie si on clique sur un type de champ
WidgetSaisieArbresRemarquables.prototype.surChangementRemarquable = function() {
$('.cb-remarquable').each(function() {
var id = $(this).prop('id'),
cochee = $(this).prop("checked"),
idCommentaire = id + '-commentaire',
champCommentaire = $('#' + idCommentaire);
if (cochee) {
champCommentaire.removeClass('hidden');
} else {
champCommentaire.addClass('hidden');
}
});
};
WidgetSaisieArbresRemarquables.prototype.configurerFormValidator = function() {
$.validator.addMethod(
'dateCel',
function (value, element) {
return value == '' || (/^[0-9]{2}[-\/][0-9]{2}[-\/][0-9]{4}$/.test(value));
},
'Format : jj/mm/aaaa. Date incomplète, utiliser 0, exemple : 00/12/2011.');
$.validator.addMethod(
'autreSp',
function (value, element) {
var taxonListe = $('#taxon-liste').val();
return taxonListe !== '?' || (taxonListe === '?' && value != '');
},
"Veuillez sélectionner une espèce ou une indication sur la plante.");
// Modification des méthodes par défaut de Jquery Validation pour Boostrap 3
$.validator.setDefaults({
ignore: [],// Forcer Jquery Validate à examiner les éléments en "display:none;"
highlight: function(element) {
$(element).closest('.form-group').addClass('has-error');
},
unhighlight: function(element) {
$(element).closest('.form-group').removeClass('has-error');
},
success: function(element) {
$(element).closest('.form-group').removeClass('has-error').addClass('has-success');
if ($(element).attr('id') == 'taxon' && $('#taxon').val() != '') {
// Si le taxon n'est pas lié au référentiel, on vide le data associé
if ($('#taxon').data('value') != $('#taxon').val()) {
$('#taxon').data('numNomSel', '');
$('#taxon').data('nomRet', '');
$('#taxon').data('numNomRet', '');
$('#taxon').data('nt', '');
$('#taxon').data('famille', '');
}
}
},
errorElement: 'span',
errorClass: 'help-block',
errorPlacement: function(error, element) {
//console.log(element.attr('name') +'-'+ element.parent('.input-group').length);
if (element.parent('.input-group').length) {
error.insertAfter(element.parent());
} else {
error.insertAfter(element);
}
}
});
};
// surcharge fonction validerFormulaire()
WidgetSaisieArbresRemarquables.prototype.validerFormulaire = function() {
observateur = $("#form-observateur").valid();
situation = $("#form-situation").valid();
criteres = $("#form-criteres").valid();
remarquable = $("#form-remarquable").valid();
remarquabilite = $("#form-remarquabilite").valid();
station = $("#form-station").valid();
obs = $("#form-obs").valid();
return (observateur && station && obs && criteres && situation &&remarquable);
};
WidgetSaisieArbresRemarquables.prototype.definirReglesFormValidator = function() {
$('#form-observateur').validate({
rules: {
courriel : {
required : true,
email : true},
courriel_confirmation : {
required : true,
equalTo: '#courriel'}
}
});
$('#form-station').validate({
rules: {
date: {
required: true,
'dateCel' : true},
latitude : {
range: [-90, 90],
required: true},
longitude : {
range: [-180, 180],
required: true},
'l93-x': 'required',
'l93-y': 'required'
}
});
$('#form-obs').validate({
rules: {
'taxon-liste': {required: true},
taxon: {autreSp: true},
certitude: 'required',
arbreRemarquableClasseCirconference: 'required',
arbreRemarquableSante: 'required',
arbreRemarquablePresenceCavite: 'required'
}
});
$('#form-situation').validate({
rules: {
"situation-ch" : {
required : true,
minlength : 1
}
},
errorPlacement: function(error, element) {
error.insertBefore(element.parent());
error.insertAfter(element.closest('div.btn-group.dropdown'));
}
});
$('#form-remarquabilite').validate({
rules: {
arbreRemarquableRemarquabilite: 'required'
}
});
$('#form-remarquable').validate({
rules: {
"remarquable-ch" : {
required : true,
minlength : 1
}
},
errorPlacement: function(error, element) {
error.insertBefore(element.parent());
error.insertAfter(element.closest('div.control-group'));
}
});
};
WidgetSaisieArbresRemarquables.prototype.basculerOuvertureFermetureCadre = function(element) {
if (element.hasClass('glyphicon-plus-sign')) {
element.removeClass('glyphicon-plus-sign').addClass('glyphicon-minus-sign');
} else {
element.removeClass('glyphicon-minus-sign').addClass('glyphicon-plus-sign');
}
};
WidgetSaisieArbresRemarquables.prototype.basculerAffichageCoord = function() {
var textActuel = $(this).text(),
textARemplacer = $(this).data('toggle-text');
$(this).text(textARemplacer).data('toggle-text', textActuel);
if ($(this).hasClass('cacher-coord')) {
$(this).removeClass('cacher-coord').addClass('afficher-coord');
$('#coordonnees-geo').addClass('hidden');
} else {
$(this).removeClass('afficher-coord').addClass('cacher-coord');
$('#coordonnees-geo').removeClass('hidden');
}
return false;
};
WidgetSaisieArbresRemarquables.prototype.afficherObs = function() {
var numNomSel = ($('#taxon-liste').val() == '?') ? $('#taxon').data('numNomSel') : $('#taxon-liste').val(),
nomSpecial = $('#taxon-liste option:selected').hasClass('nom-special'),
taxon = ($('#taxon-liste').val() == '?') ? $('#taxon').val() : $('#taxon-liste option:selected').data('nom-a-sauver'),
referentiel = (numNomSel == undefined) ? '' : '['+ this.nomSciReferentiel +']',
commune = $('#commune-nom').text(),
codeInsee = $('#commune-code-insee').text(),
lat = $('input[name="latitude"]').val(),
lng = $('input[name="longitude"]').val(),
date = $('#date').val(),
certitude = $('#certitude').val(),
circonference = $('#circonference').val(),
circonferencer = $('#circonferencer').val(),
hauteur = $('#hauteurNbr').val(),
hauteurPrec = ($('#hauteurPrec').val() != "" ? ' (' + $('#hauteurPrec').val() + ')' : ''),
age = $('#age').val(),
sante = $('#sante').val(),
cavites = $('#cavites').val(),
historique = $('#historique').val(),
notes = (nomSpecial ? this.taxons[numNomSel]['nom_fr'] + ".<br />" : '') + $('#notes').val(),
remarquabilite= $('#remarquabilite').val();
var situation = [];
// récupération des cases à cocher multiples dans un tableau pour l'abondance
$('input[name="situation-ch"]:checked').each(function() {
situation.push(' '+$(this).val());
});
var remarquable = [];
// récupération des cases à cocher multiples dans un tableau pour l'abondance
$('input[name="remarquable-ch"]:checked').each(function() {
remarquable.push(' '+$(this).val());
});
var esthetique = [];
// récupération des cases à cocher multiples dans un tableau pour l'abondance
$('input[name="esthetique-ch"]:checked').each(function() {
esthetique.push(' '+$(this).val());
});
$('#liste-obs').prepend(
'<div id="obs'+this.obsNbre+'" class="obs obs'+this.obsNbre+'">'+
'<div class="well">'+
'<div class="obs-action pull-right has-tooltip" data-placement="bottom" '+
'title="Supprimer cette observation de la liste à transmettre">'+
'<button class="btn btn-danger supprimer-obs" value="'+this.obsNbre+'" title="'+this.obsNbre+'">'+
'<span class="glyphicon glyphicon-trash icon-white"></i>'+
'</button>'+
'</div> '+
'<div class="row">'+
'<div class="col-md-2 obs-miniatures">'+
this.ajouterImgMiniatureAuTransfert()+
'</div>'+
'<div class="col-md-8">'+
'<ul class="list-unstyled obs-entete">'+
'<li>'+
'<span class="nom-sci">' + taxon + '</span> ' +
this.formaterNumNomSel(numNomSel)+
'<span class="referentiel-obs">' + referentiel +' ('+certitude+') </span>' +
' observé à ' +
'<span class="commune">' + commune + '</span> ' +
'(' + codeInsee + ') [' + lat +' / ' + lng + ']' +
' le ' +
'<span class="date">' + date + '</span>' +
'</li>' +
'</ul>'+
'<ul class="list-unstyled obs-details">'+
'<li>' +
'<span>Circonférence :</span> ' + circonference + ' ; ' +
'<span>Circonférence réelle :</span> ' + circonferencer + ' m; ' +
'<span>Hauteur :</span> ' + hauteur + 'm'+ hauteurPrec+'; ' +
'<span>Âge :</span> ' + age + ' ; ' +
'<span>Santé :</span> ' + sante + ' ; ' +
'<span>Cavités :</span> ' + cavites + ' ; ' +
'<span>Situation :</span> ' + situation + ' ; ' +
'</li>' +
'<li>' +
'<span>Intérêt esthetique :</span> ' + esthetique + ' ' +
'<span>Intérêt historique :</span> ' + historique + ' ' +
'<span>Raison(s) remarquabilité :</span> ' + remarquable + ' ' +
'<span>Degré de remarquabilité :</span> ' + remarquabilite + ' ' +
'</li>' +
'<li>' +
'<span>Notes :</span> ' + notes +
'</li>'+
'</ul>'+
'</div>'+
'</div>'+
'</div>'+
'</div>');
};
WidgetSaisieArbresRemarquables.prototype.formaterNumNomSel = function(numNomSel) {
var nn = '';
if (numNomSel == undefined) {
nn = '<span class="alert-error">[non lié au référentiel]</span>';
} else {
nn = '<span class="nn">[nn'+numNomSel+']</span>';
}
return nn;
};
WidgetSaisieArbresRemarquables.prototype.getTextOptionSelectionne = function(id) {
return ($('#' + id).val() != undefined ? $('#' + id + ' option:selected').text() : '');
};
// @TODO harmoniser (altitude)
WidgetSaisieArbresRemarquables.prototype.stockerObsData = function() {
var nomHorsListe = $('#taxon-liste').val() == '?' ? true : false;
nomSpecial = $('#taxon-liste option:selected').hasClass('nom-special'),
numNomSel = nomHorsListe ? $('#taxon').data('numNomSel') : $('#taxon-liste').val(),
nomSel = nomHorsListe ? $('#taxon').val() : $('#taxon-liste option:selected').data('nom-a-sauver'),
nomRet = nomHorsListe ? $('#taxon').data('nomRet') : this.taxons[numNomSel]['nom_ret'],
numNomRet = nomHorsListe ? $('#taxon').data('numNomRet') : this.taxons[numNomSel]['num_nom_ret'],
numTaxon = nomHorsListe ? $('#taxon').data('nt') : this.taxons[numNomSel]['num_taxon'],
famille = nomHorsListe ? $('#taxon').data('famille') : this.taxons[numNomSel]['famille'],
referentiel = (numNomSel == undefined) ? '' : this.nomSciReferentiel;
$('#liste-obs').data('obsId'+this.obsNbre, {
'date' : $('#date').val(),
'notes' : $('#notes').val(),
'nom_sel': nomSel,
'num_nom_sel': numNomSel,
'nom_ret': nomRet,
'num_nom_ret': numNomRet,
'num_taxon': numTaxon,
'famille': famille,
'referentiel': referentiel,
'latitude' : $('#latitude').val(),
'longitude' : $('#longitude').val(),
'commune_nom' : $('#commune-nom').text(),
'commune_code_insee' : $('#commune-code-insee').text(),
'altitude': $('#altitude').text(),
'lieudit': $('#lieudit').val(),
'certitude': $('#certitude').val(),
//Ajout des champs images
'image_nom' :this. getNomsImgsOriginales(),
// Ajout des champs étendus de l'obs
'obs_etendue': this.getObsChpEtendus()
});
};
/**
* Redéfinition pour les champs complexes
*/
WidgetSaisieArbresRemarquables.prototype.getObsChpEtendus = function() {
var champs = [],
situation = [],
esthetique = [],
remarquable = [];
$('.obs-chp-etendu').each(function() {
var valeur = $(this).val(),
cle = $(this).attr('name'),
label = $(this).data('label');
if (valeur != '') {
var chpEtendu = {cle: cle, label: label, valeur: valeur};
champs.push(chpEtendu);
}
});
$('input.cb-situation:checked').each(function() {
var valeur = $(this).val();
if (valeur == 'Autre') {
if ($('#autre-situation').val() != '') {
situation.push(valeur+' :'+$('#autre-situation').val());
} else {
situation.push(valeur);
}
} else if (valeur != '') {
situation.push(valeur);
}
});
var chpEtendu = {cle: 'arbreRemarquableSituation', label: 'contexte/situation', valeur: situation.join('; ')};
champs.push(chpEtendu);
$('input.cb-remarquable:checked').each(function() {
var valeur = $(this).val(),
comm = $(this).attr('id')+'-commentaire',
commid = $('#'+comm).val();
if (commid != '' && typeof commid !== "undefined") {
remarquable.push(valeur+' :'+commid);
} else {
remarquable.push(valeur);
}
});
var chpEtendu = {cle: 'arbreRemarquableRemarquable', label: 'remarquable', valeur: remarquable.join('; ')};
champs.push(chpEtendu);
$('input.cb-esthetique:checked').each(function() {
var valeur = $(this).val();
if (valeur == 'Autre') {
if ($('#autre-esthetique').val() != '') {
esthetique.push(valeur+' :'+$('#autre-esthetique').val());
} else {
esthetique.push(valeur);
}
} else if (valeur != '') {
esthetique.push(valeur);
}
});
var chpEtendu = {cle: 'arbreRemarquableEsthetique', label: 'Intérêt esthétique', valeur: esthetique.join('; ')};
champs.push(chpEtendu);
return champs;
};