Rev 2890 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | RSS feed
/* Héritage */
function WidgetSaisieMessicoles()
{
this.taxons = {};
}
WidgetSaisieMessicoles.prototype = new WidgetSaisie();
/* Surcharge des fonctions */
// Surcharge ajouterObs
WidgetSaisieMessicoles.prototype.ajouterObs = function() {
// Fermeture automatique des dialogue de transmission de données
// @WARNING TEST
$('#dialogue-obs-transaction-ko').hide();
$('#dialogue-obs-transaction-ok').hide();
// vérification : si la détermination est incertaine, obligation
// de fournir au moins une image
var certitude = $('#identification-liste').val(),
nbImages = $('#miniatures img').length,
imagesOK = true;
if (certitude != "certaine" && nbImages == 0) {
imagesOK = false;
$('#image-obligatoire').show();
} else {
$('#image-obligatoire').hide();
}
if ((this.validerFormulaire() == true) && imagesOK) {
this.masquerPanneau('#dialogue-form-invalide');
//return false;
// suite des opérations
this.obsNbre = this.obsNbre + 1;
$(".obs-nbre").text(this.obsNbre);
$(".obs-nbre").triggerHandler('changement');
this.afficherObs();
this.stockerObsData();
this.supprimerMiniatures();
if(! this.especeImposee) {
$("#taxon").val("");
$("#taxon").data("numNomSel",undefined);
}
$('#form-obs').each(function(){
this.reset();
});
$('#barre-progression-upload').attr('aria-valuemax', this.obsNbre);
$('#barre-progression-upload .sr-only').text('0/'+this.obsNbre+" observations transmises");
} else {
this.afficherPanneau('#dialogue-form-invalide');
}
};
// surcharge fonction definirReglesFormValidator()
WidgetSaisieMessicoles.prototype.definirReglesFormValidator = function() {
// WidgetSaisie.definirReglesFormValidator();
$("#form-observateur").validate({
rules: {
courriel : {
required : true,
email : true},
courriel_confirmation : {
required : true,
equalTo: "#courriel"}
}
});
$("#form-releve").validate({
rules: {
date : {
required : true,
'dateCel' : true
},
"type-culture" : "required"
},
errorPlacement: function(error, element) {
error.insertBefore(element.parent());
}
});
$("#form-station").validate({
ignore: ':hidden:not("#latitude, #longitude")', // validation des champs cachés...
errorPlacement: function(error, element) { // ...mais erreur visible
error.insertBefore("#coordonnees-geo");
},
groups: {
latLon: "latitude longitude"
},
rules: {
latitude : {
required: true,
range: [-90, 90]
},
longitude : {
required: true,
range: [-180, 180]
}
},
messages: {
// astuce pour simuler un message personnalisé pour le groupe "latLon"
latitude: "Veuillez géolocaliser votre observation en déplaçant le curseur sur la carte",
longitude: "Veuillez géolocaliser votre observation en déplaçant le curseur sur la carte"
}
});
$("#form-obs").validate({
rules: {
"taxon-liste" : "required",
"abondance-liste" : "required",
"zone-champ[]" : {
required : true,
minlength : 1
}
},
errorPlacement: function(error, element) {
error.insertBefore(element.parent());
}
});
};
// surcharge fonction validerFormulaire()
WidgetSaisieMessicoles.prototype.validerFormulaire = function() {
observateur = $("#form-observateur").valid();
releve = $("#form-releve").valid();
station = $("#form-station").valid();
obs = $("#form-obs").valid();
return (observateur && station && obs && releve);
};
// surcharge fonction stockerObsData()
WidgetSaisieMessicoles.prototype.stockerObsData = function() {
var lthis = this;
var nomHorsListe = $('#taxon-liste').val() == '?' ? true : false;
numNomSel = nomHorsListe ? $('#taxon').data('numNomSel') : $('#taxon-liste').val();
var 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,
notes = $('#notes').val();
// champs spécifques aux messicoles
var abondance = $('#abondance-liste').val(),
certitude = $('#identification-liste').val();
$('#liste-obs').data('obsId'+this.obsNbre, {
'date': $('#date').val(),
'notes': notes,
'latitude': $('#latitude').val(),
'longitude': $('#longitude').val(),
'commune_nom': $('#commune-nom').text(),
'commune_code_insee': $('#commune-code-insee').text(),
'lieudit' : $("#lieudit").val(),
'station' : $("#station").val(),
'milieu' : $("#milieu").val(),
'nom_sel': nomSel,
'num_nom_sel': numNomSel,
'nom_ret': nomRet,
'num_nom_ret': numNomRet,
'num_taxon': numTaxon,
'famille': famille,
'referentiel': referentiel,
'certitude': certitude,
'abondance': abondance,
// Ajout des champs images
'image_nom' : lthis.getNomsImgsOriginales(),
'image_b64' : lthis.getB64ImgsOriginales(),
// Ajout des champs étendus de l'obs
'obs_etendue': lthis.getObsChpEtendus()
});
if (this.debug) {
console.log($('#liste-obs').data('obsId'+this.obsNbre));
}
};
/**
* Affiche une observation dans la liste des observations à transmettre
*/
WidgetSaisieMessicoles.prototype.afficherObs = function() {
console.log(this.taxons);
var nomHorsListe = $('#taxon-liste').val() == '?' ? true : false,
numNomSel = nomHorsListe ? $('#taxon').data('numNomSel') : $('#taxon-liste').val();
var nomSel = nomHorsListe ? $('#taxon').val() : $('#taxon-liste option:selected').data('nom-a-sauver'),
//famille = nomHorsListe ? $('#taxon').data('famille') : this.taxons[numNomSel]['famille'],
referentiel = (numNomSel == undefined) ? '' : this.nomSciReferentiel;
var commune = $("#commune-nom").text();
commune = commune.trim() != "" ? commune : $("#carte-recherche").val();
var code_insee = $('#commune-code-insee').text();
code_insee = code_insee.trim() != "" ? "("+code_insee+")" : "";
var latitude = $("#latitude").val();
var longitude = $("#longitude").val();
var lieudit = ($('#lieudit').val() != "" ? $('#lieudit').val() : "aucun lieu-dit saisi");
var station = ($('#station').val() != "" ? $('#station').val() : "aucune station saisie");
var milieu = ($('#milieu').val() != "" ? $('#milieu').val() : "aucun milieu saisi");
var notes = ($('#notes').val() != "" ? $('#notes').val() : "<b>aucunes notes saisies</b>");
var date = $("#date").val();
// champs spécifques aux messicoles
var culture = ($('input[name=type-culture]').is(':checked') ? $('input[name=type-culture]:checked').data('titre') : "?");
var cultureDetails = ($('input[name=type-culture]').is(':checked') ? $('input[name=type-culture]:checked').parent().find('input[type=text]').val() : '?');
var identification = $('#identification-liste option:selected').data('titre');
var abondance = $('#abondance-liste option:selected').data('titre');
var zoneChamp = [];
// récupération des cases à cocher multiples dans un tableau pour l'abondance
$('input[name="zone-champ[]"]:checked').each(function() {
zoneChamp.push(' '+$(this).data('titre'));
});
// affichage des données de l'observation à transmettre
$("#liste-obs").prepend(
'<div id="obs'+this.obsNbre+'" class="row-fluid obs obs'+this.obsNbre+'">'+
'<div class="span12">'+
'<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+'">'+
'<i class="icon-trash icon-white"></i>'+
'</button>'+
'</div> '+
'<div class="row-fluid">'+
'<div class="thumbnail span2">'+
this.ajouterImgMiniatureAuTransfert()+
'</div>'+
'<div class="span9">'+
'<ul class="unstyled">'+
'<li>'+
'<span class="nom-sci gras">'+nomSel+'</span> '+
this.ajouterNumNomSel(numNomSel, referentiel)+
' observé à <span class="gras">'+commune+' '+code_insee+'</span> ['+latitude+' / '+longitude+']'+' le <span class="gras">'+' '+date+'</span>'+
'</li>'+
'<li>'+
'<div class="row-fluid">'+
'<span class="span4">Lieu-dit : <span class="gras">'+lieudit+'</span></span>'+
'<span class="span4">Station : <span class="gras">'+station+'</span></span>'+
'<span class="span4">Milieu : <span class="gras">'+milieu+'</span></span>'+
'</div>'+
'</li>'+
'<li>'+
'<div class="row-fluid">'+
'<span class="span4">Culture de <span class="gras">'+cultureDetails+'</span> de type <span class="gras">'+culture+'</span></span>'+
'<span class="span4">Identification <span class="gras">'+identification+'</span></span>'+
'<span class="span4">Abondance de <span class="gras">'+abondance+'</span></span>'+
'</div>'+
'</li>'+
'<li>'+
'Espèce située en <span class="gras">'+zoneChamp+'</span> du champ'+
'</li>'+
'<li>'+
'Notes : <span class="discretion">'+notes+'</span>'+
'</li>'+
'</ul>'+
'</div>'+
'</div>'+
'</div>'+
'</div>'+
'</div>');
$('#zone-liste-obs').removeClass("hidden").show();
};
WidgetSaisieMessicoles.prototype.surAutocompletionTaxon = function(event, ui) {
$("#taxon").data(ui.item);
if (ui.item.retenu == true) {
$("#taxon").addClass('ns-retenu');
} else {
$("#taxon").removeClass('ns-retenu');
}
// détection de si c'est un(e?) messicole ou pas
var panneauAvertissementNonMessicole = $('#avertissement-non-messicole');
panneauAvertissementNonMessicole.hide();
if (nnr_messicoles.indexOf(parseInt(ui.item.numNomRet)) == -1) {
panneauAvertissementNonMessicole.show();
}
};
WidgetSaisieMessicoles.prototype.ajouterNumNomSel = function(numNom, referentiel) {
var nn = '';
if (numNom == '' || numNom == undefined) {
nn = '<span class="alert-error">[non lié au référentiel]</span>';
} else {
nn = '<span class="nn">[nn'+numNom+']</span>'
+ '<span class="referentiel-obs"> '
+ referentiel+'</span>';
}
return nn;
};
// surcharge, abadon du mécanisme générique et bidouillage en dur (plus facile
// car champs radio / checkboxes)
WidgetSaisieMessicoles.prototype.getObsChpEtendus = function() {
var champs = [];
var zoneChamp = [];
$('input[name="zone-champ[]"]:checked').each(function() {
zoneChamp.push($(this).val());
});
//console.log("zc:", zoneChamp);
// obligatoire donc jamais vide (on croise les doigts)
champs.push({
cle: "zoneDuChamp",
label: "Zone du champ",
valeur: zoneChamp.join()
});
var typeCulture = $('input[name=type-culture]:checked').data('titre');
//console.log("tc:", typeCulture);
if (typeCulture != '') {
champs.push({
cle: "typeDeCulture",
label: "Type de culture",
valeur: (typeCulture == undefined ? "" : typeCulture)
});
}
var typeCultureDetails = $('input[name=type-culture]:checked').parent().find('input[type=text]').val();
//console.log("tcd:", typeCultureDetails);
if (typeCultureDetails != '') {
champs.push({
cle: "typeDeCultureDetails",
label: "Details de la culture",
valeur: typeCultureDetails
});
}
return champs;
}
/* jQuery en vrac */
$(document).ready(function() {
// super popover qui va chercher son contenu dans un div à côté (pour les
// boutons d'aide des types de champs, etc.)
$('[data-toggle="popover"]').popover({
html : true,
content: function() {
var parentFor = $(this).parent().attr("for");
var popoverHtmlContentDiv = $('.popover-html-content[data-for="' + parentFor + '"]');
return popoverHtmlContentDiv.html();
}
});
// Activation de la saisie si on clique sur un type de champ
function gererAffichageChampCulture(){
$('.culture input[type=text]').hide();
var radio = $('.culture input[type=radio]:checked');
var input = radio.parent().find('input[type=text]');
(radio.is(':checked')) ? input.show() && input.focus() : input.hide();
}
$('.culture').change(gererAffichageChampCulture);
// ... et aussi au chargement du widget, si la sélection est restée sur un champ
gererAffichageChampCulture();
// Affichage de l'espèce liée au référentiel sélectionné lors de la sélection 'Autres' (espèce)
function gererAffichageChampAutreEspece() {
var option = $('#taxon-liste').val();
var taxonCompletion = $('#taxon-input-groupe');
if (option == '?') {
taxonCompletion.show();
$('#taxon').focus();
}
else {
taxonCompletion.hide();
}
}
$('#taxon-liste').change(gererAffichageChampAutreEspece);
// ... et aussi au chargement du widget, si la sélection est restée sur "Autre espèce"
gererAffichageChampAutreEspece();
// On masque l'option par défaut pour l'abondance puisque le choix est obligatoire
$('#abondance-liste').click(masquerTitreListe('abondance'));
function masquerTitreListe(element) {
$('#' + element + '-liste .a-masquer').hide();
}
});