Subversion Repositories eFlore/Applications.cel

Rev

Rev 2944 | Go to most recent revision | Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
2943 delphine 1
// Héritage
2
WidgetSaisieArbresRemarquables = function() {
3
	this.serviceAltitudeUrl = null;
4
	this.taxons = {};
5
}
6
WidgetSaisieArbresRemarquables.prototype = new WidgetSaisie();
7
 
8
WidgetSaisieArbresRemarquables.prototype.initEvts = function() {
9
	// super()
10
	WidgetSaisie.prototype.initEvts.call(this);
11
 
12
	var lthis = this;
13
	$('body').on('click', '.fermer', function(event) {
14
			event.preventDefault();
15
			lthis.basculerOuvertureFermetureCadre($(this).find('.icone'));
16
	});
17
 
18
	this.surChangementTaxonListe();// Vérif lors du chargement de la page
19
	$('#taxon-liste').on('change', this.surChangementTaxonListe.bind(this));
20
	this.surChangementSituation();// Vérif lors du chargement de la page
21
	$('#situation').on('change', this.surChangementSituation.bind(this));
22
	this.surChangementEsthetique();// Vérif lors du chargement de la page
23
	$('#esthetique').on('change', this.surChangementEsthetique.bind(this));
24
 
25
	// Gestion des obs
26
	this.surChangementNbreObs();
27
};
28
 
29
WidgetSaisieArbresRemarquables.prototype.focusChampFormulaire = function() {
30
	$("#carte-recherche").focus();
31
};
32
 
33
WidgetSaisieArbresRemarquables.prototype.mettreAJourMarkerPosition = function(latLng) {
34
	this.trouverCommune(latLng);
35
	this.trouverAltitude(latLng);
36
 
37
	var lat = latLng.lat().toFixed(5),
38
		lng = latLng.lng().toFixed(5);
39
	this.remplirChampLatitude(lat);
40
	this.remplirChampLongitude(lng);
41
	this.remplirChampsLambert93(lat, lng);
42
};
43
 
44
proj4.defs([
45
	['EPSG:4326', '+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs'],
46
	['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']
47
]);
48
WidgetSaisieArbresRemarquables.prototype.remplirChampsLambert93 = function(lat, lng) {
49
	// Prendre en compte l'initialisation des projections
50
	var coordinate = {x: lng,y: lat};
51
	proj4(proj4.defs('EPSG:4326'), proj4.defs('EPSG:2154')).forward(coordinate);
52
	$('#l93-x').val(coordinate.x.toFixed(0));
53
	$('#l93-y').val(coordinate.y.toFixed(0));
54
};
55
 
56
WidgetSaisieArbresRemarquables.prototype.trouverAltitude = function(pos) {
57
	var url_service = this.serviceAltitudeUrl,
58
		urlAltFormatee = url_service.replace('{lat}', pos.lat()).replace('{lon}', pos.lng());
59
	var lthis = this;
60
	$.ajax({
61
		url: urlAltFormatee,
62
		type: 'GET',
63
		dataType: 'jsonp',
64
		beforeSend : function() {
65
			$('#altitude').empty();
66
			$('#dialogue-erreur .alert-txt').empty();
67
		},
68
		success : function(data, textStatus, jqXHR) {
69
			$('#altitude').empty().append(data.altitude);
70
			$('#marqueur-altitude').data('altitude', data.altitude);
71
		},
72
		statusCode : {
73
		    500 : function(jqXHR, textStatus, errorThrown) {
74
				if (lthis.debug) {
75
					$('#dialogue-erreur .alert-txt').append('<p id="msg">Un problème est survenu lors de l\'appel au service fournissant l\'altitude.</p>');
76
					reponse = jQuery.parseJSON(jqXHR.responseText);
77
					var erreurMsg = '';
78
					if (reponse != null) {
79
						$.each(reponse, function (cle, valeur) {
80
							erreurMsg += valeur + '<br />';
81
						});
82
					}
83
 
84
					$('#dialogue-erreur .alert-txt').append('<p class="msg-erreur">Erreur 500 : '+errorThrown+"<br />"+erreurMsg+'</p>');
85
				}
86
		    }
87
		},
88
		error : function(jqXHR, textStatus, errorThrown) {
89
			if (lthis.debug) {
90
				$("#dialogue-erreur .alert-txt").append('<p class="msg">Une erreur Ajax est survenue lors de l\'appel au service fournissant l\'altitude.</p>');
91
				reponse = jQuery.parseJSON(jqXHR.responseText);
92
				var erreurMsg = '';
93
				if (reponse != null) {
94
					$.each(reponse, function (cle, valeur) {
95
						erreurMsg += valeur + '<br />';
96
					});
97
				}
98
 
99
				$('#dialogue-erreur .alert-txt').append('<p class="msg-erreur">Erreur Ajax : '+errorThrown+' (type : '+textStatus+') <br />'+erreurMsg+'</p>');
100
			}
101
		},
102
		complete : function(jqXHR, textStatus) {
103
			var debugMsg = extraireEnteteDebug(jqXHR);
104
			if (debugMsg != '') {
105
				if (lthis.debug) {
106
					$('#dialogue-erreur .alert-txt').append('<pre class="msg-debug msg">Débogage : '+debugMsg+'</pre>');
107
				}
108
			}
109
			if ($('#dialogue-erreur .msg').length > 0) {
110
				$('#dialogue-erreur').show();
111
			}
112
		}
113
	});
114
};
115
 
116
WidgetSaisieArbresRemarquables.prototype.surChangementTaxonListe = function() {
117
	if ($('#taxon-liste').val() === '?') {
118
		$('#taxon-input-groupe').removeClass('hidden');
119
		$('#taxon').valid();
120
	} else {
121
		$('#taxon-input-groupe').addClass('hidden');
122
	}
123
};
124
 
125
WidgetSaisieArbresRemarquables.prototype.surChangementEsthetique = function() {
126
	if ($('#esthetique').val() === 'autre') {
127
		$('#esthetique-autre').removeClass('hidden');
128
	} else {
129
		$('#esthetique-autre').addClass('hidden');
130
	}
131
};
132
 
133
WidgetSaisieArbresRemarquables.prototype.surChangementSituation = function() {
134
	if ($('#situation').val() === 'Autre') {
135
		$('#autre-situation-id').removeClass('hidden');
136
	} else {
137
		$('#autre-situation-id').addClass('hidden');
138
	}
139
};
140
 
141
WidgetSaisieArbresRemarquables.prototype.configurerFormValidator = function() {
142
	$.validator.addMethod(
143
		'dateCel',
144
		function (value, element) {
145
			return value == '' || (/^[0-9]{2}[-\/][0-9]{2}[-\/][0-9]{4}$/.test(value));
146
		},
147
		'Format : jj/mm/aaaa. Date incomplète, utiliser 0, exemple : 00/12/2011.');
148
 
149
	$.validator.addMethod(
150
		'aligneNbre',
151
		function (value, element) {
152
			var ok = true;
153
			if ($('#formation').val() === 'alignement') {
154
				ok = (value != '' && /^[0-9]+$/.test(value) && value > 1);
155
			}
156
			return ok;
157
		},
158
		"Veuillez indiquer le nombre d'arbres d'alignement.");
159
 
160
	$.validator.addMethod(
161
		'autreSp',
162
		function (value, element) {
163
			var taxonListe = $('#taxon-liste').val();
164
			return taxonListe !== '?' || (taxonListe === '?' && value != '');
165
		},
166
		"Veuillez sélectionner une espèce ou une indication sur la plante.");
167
 
168
	// Modification des méthodes par défaut de Jquery Validation pour Boostrap 3
169
	$.validator.setDefaults({
170
		ignore: [],// Forcer Jquery Validate à examiner les éléments en "display:none;"
171
		highlight: function(element) {
172
			$(element).closest('.form-group').addClass('has-error');
173
		},
174
		unhighlight: function(element) {
175
			$(element).closest('.form-group').removeClass('has-error');
176
		},
177
		success: function(element) {
178
			$(element).closest('.form-group').removeClass('has-error').addClass('has-success');
179
 
180
			if ($(element).attr('id') == 'taxon' && $('#taxon').val() != '') {
181
				// Si le taxon n'est pas lié au référentiel, on vide le data associé
182
				if ($('#taxon').data('value') != $('#taxon').val()) {
183
					$('#taxon').data('numNomSel', '');
184
					$('#taxon').data('nomRet', '');
185
					$('#taxon').data('numNomRet', '');
186
					$('#taxon').data('nt', '');
187
					$('#taxon').data('famille', '');
188
				}
189
			}
190
		},
191
		errorElement: 'span',
192
		errorClass: 'help-block',
193
		errorPlacement: function(error, element) {
194
			//console.log(element.attr('name') +'-'+ element.parent('.input-group').length);
195
			if (element.parent('.input-group').length) {
196
				error.insertAfter(element.parent());
197
			} else {
198
				error.insertAfter(element);
199
			}
200
		}
201
	});
202
};
203
 
204
WidgetSaisieArbresRemarquables.prototype.definirReglesFormValidator = function() {
205
	$('#form-observateur').validate({
206
		rules: {
207
			courriel : {
208
				required : true,
209
				email : true},
210
			courriel_confirmation : {
211
				required : true,
212
				equalTo: '#courriel'}
213
		}
214
	});
215
	$('#form-station').validate({
216
		rules: {
217
			latitude : {
218
				range: [-90, 90],
219
				required: true},
220
			longitude : {
221
				range: [-180, 180],
222
				required: true},
223
			'l93-x': 'required',
224
			'l93-y': 'required'
225
		}
226
	});
227
	$('#form-obs').validate({
228
		rules: {
229
			date: {
230
				required: true,
231
				'dateCel' : true},
232
			'taxon-liste': {required: true},
233
			taxon: {autreSp: true},
234
			certitude: 'required',
235
			arbreTetardFormation: 'required',
236
			arbreTetardAligneNbre: {aligneNbre: true}
237
		}
238
	});
239
};
240
 
241
 
242
 
243
WidgetSaisieArbresRemarquables.prototype.basculerOuvertureFermetureCadre = function(element) {
244
	if (element.hasClass('glyphicon-plus-sign')) {
245
		element.removeClass('glyphicon-plus-sign').addClass('glyphicon-minus-sign');
246
	} else {
247
		element.removeClass('glyphicon-minus-sign').addClass('glyphicon-plus-sign');
248
	}
249
};
250
 
251
WidgetSaisieArbresRemarquables.prototype.basculerAffichageCoord = function() {
252
	var textActuel = $(this).text(),
253
			textARemplacer = $(this).data('toggle-text');
254
	$(this).text(textARemplacer).data('toggle-text', textActuel);
255
 
256
	if ($(this).hasClass('cacher-coord')) {
257
		$(this).removeClass('cacher-coord').addClass('afficher-coord');
258
		$('#coordonnees-geo').addClass('hidden');
259
	} else {
260
		$(this).removeClass('afficher-coord').addClass('cacher-coord');
261
		$('#coordonnees-geo').removeClass('hidden');
262
	}
263
 
264
	return false;
265
};
266
 
267
WidgetSaisieArbresRemarquables.prototype.afficherObs = function() {
268
	var numNomSel = ($('#taxon-liste').val() == '?') ? $('#taxon').data('numNomSel') : $('#taxon-liste').val(),
269
		nomSpecial = $('#taxon-liste option:selected').hasClass('nom-special'),
270
		taxon = ($('#taxon-liste').val() == '?') ? $('#taxon').val() : $('#taxon-liste option:selected').data('nom-a-sauver'),
271
		referentiel = (numNomSel == undefined) ? '' : '['+ this.nomSciReferentiel +']',
272
		commune = $('#commune-nom').text(),
273
		codeInsee = $('#commune-code-insee').text(),
274
		lat = $('input[name="latitude"]').val(),
275
		lng = $('input[name="longitude"]').val(),
276
		date = $('#date').val(),
277
		formation = this.getTextOptionSelectionne('formation'),
278
		nbreAligne = ($('#aligne-nbre').val() != undefined ? ' (' + $('#aligne-nbre').val() + ')' : ''),
279
		cavites = this.getTextOptionSelectionne('cavites'),
280
		circonference = this.getTextOptionSelectionne('circonference'),
281
		hauteurTete = this.getTextOptionSelectionne('hauteur-tete'),
282
		presenceSp = $('#presence-sp').val(),
283
		taille = this.getTextOptionSelectionne('taille-type'),
284
		entretien = this.getTextOptionSelectionne('entretien'),
285
		etatSanitaire = this.getTextOptionSelectionne('etat-sanitaire'),
286
		milieux = this.getMilieux(),
287
		notes = (nomSpecial ? this.taxons[numNomSel]['nom_fr'] + ".<br />" : '') + $('#notes').val();
288
 
289
	var culture = ($('input[name=type-culture]').is(':checked') ? $('input[name=type-culture]:checked').data('titre') : "?");
290
	var cultureDetails = ($('input[name=type-culture]').is(':checked') ? $('input[name=type-culture]:checked').parent().find('input[type=text]').val() : '?');
291
 
292
 
293
	$('#liste-obs').prepend(
294
		'<div id="obs'+this.obsNbre+'" class="obs obs'+this.obsNbre+'">'+
295
				'<div class="well">'+
296
					'<div class="obs-action pull-right has-tooltip" data-placement="bottom" '+
297
						'title="Supprimer cette observation de la liste à transmettre">'+
298
						'<button class="btn btn-danger supprimer-obs" value="'+this.obsNbre+'" title="'+this.obsNbre+'">'+
299
							'<span class="glyphicon glyphicon-trash icon-white"></i>'+
300
						'</button>'+
301
					'</div> '+
302
					'<div class="row">'+
303
						'<div class="col-md-2 obs-miniatures">'+
304
							this.ajouterImgMiniatureAuTransfert()+
305
						'</div>'+
306
						'<div class="col-md-8">'+
307
							'<ul class="list-unstyled obs-entete">'+
308
								'<li>'+
309
									'<span class="nom-sci">' + taxon + '</span> ' +
310
									this.formaterNumNomSel(numNomSel)+
311
									'<span class="referentiel-obs">' + referentiel + '</span>' +
312
									' observé à ' +
313
									'<span class="commune">' + commune + '</span> ' +
314
									'(' + codeInsee + ') [' + lat +' / ' + lng + ']' +
315
									' le ' +
316
									'<span class="date">' + date + '</span>' +
317
								'</li>' +
318
							'</ul>'+
319
							'<ul class="list-unstyled obs-details">'+
320
								'<li>' +
321
									'<span>Situation(s) :</span> ' + milieux + ' ; ' +
322
									'<span>Formation :</span> ' + formation + nbreAligne + ' ; ' +
323
									'<span>Cavités :</span> ' + cavites + ' ; ' +
324
									'<span>Circonférence :</span> ' + circonference + ' ; ' +
325
									'<span>Hauteur de la tête :</span> ' + hauteurTete + ' ; ' +
326
								'</li>' +
327
								'<li>' +
328
									'<span>Présences sur l\'arbre :</span> ' + presenceSp + ' ' +
329
								'</li>' +
330
								'<li>' +
331
									'<span>Type taille :</span> ' + taille + ' ; ' +
332
									'<span>Entretien :</span> ' + entretien + ' ; ' +
333
									'<span class="span4">Culture de <span class="gras">'+cultureDetails+'</span> de type <span class="gras">'+culture+'</span></span>'+
334
									'<span>État sanitaire :</span> ' + etatSanitaire + ' ; ' +
335
								'</li>' +
336
								'<li>' +
337
									'<span>Commentaires :</span> ' + notes +
338
								'</li>'+
339
							'</ul>'+
340
						'</div>'+
341
					'</div>'+
342
				'</div>'+
343
		'</div>');
344
};
345
 
346
WidgetSaisieArbresRemarquables.prototype.formaterNumNomSel = function(numNomSel) {
347
	var nn = '';
348
	if (numNomSel == undefined) {
349
		nn = '<span class="alert-error">[non lié au référentiel]</span>';
350
	} else {
351
		nn = '<span class="nn">[nn'+numNomSel+']</span>';
352
	}
353
	return nn;
354
};
355
 
356
WidgetSaisieArbresRemarquables.prototype.getMilieux = function() {
357
	var milieuxStr = '',
358
		milieux = [];
359
	$('.cb-milieux:checked').each(function() {
360
		milieux.push($(this).val());
361
	});
362
 
363
	milieuxStr = Array.prototype.slice.call(milieux).join(', ');
364
	return milieuxStr;
365
};
366
 
367
WidgetSaisieArbresRemarquables.prototype.getTextOptionSelectionne = function(id) {
368
	return ($('#' + id).val() != undefined ? $('#' + id + ' option:selected').text()  : '');
369
};
370
 
371
// @TODO harmoniser (altitude)
372
WidgetSaisieArbresRemarquables.prototype.stockerObsData = function() {
373
	var nomHorsListe = $('#taxon-liste').val() == '?' ? true : false;
374
		nomSpecial = $('#taxon-liste option:selected').hasClass('nom-special'),
375
		numNomSel = nomHorsListe ? $('#taxon').data('numNomSel') : $('#taxon-liste').val(),
376
		nomSel = nomHorsListe ? $('#taxon').val() : $('#taxon-liste option:selected').data('nom-a-sauver'),
377
		nomRet = nomHorsListe ? $('#taxon').data('nomRet') : this.taxons[numNomSel]['nom_ret'],
378
		numNomRet = nomHorsListe ? $('#taxon').data('numNomRet') : this.taxons[numNomSel]['num_nom_ret'],
379
		numTaxon = nomHorsListe ? $('#taxon').data('nt') : this.taxons[numNomSel]['num_taxon'],
380
		famille = nomHorsListe ? $('#taxon').data('famille') : this.taxons[numNomSel]['famille'],
381
		referentiel = (numNomSel == undefined) ? '' : this.nomSciReferentiel;
382
 
383
	$('#liste-obs').data('obsId'+this.obsNbre, {
384
		'date' : $('#date').val(),
385
		'notes' : $('#notes').val(),
386
 
387
		'nom_sel': nomSel,
388
		'num_nom_sel': numNomSel,
389
		'nom_ret': nomRet,
390
		'num_nom_ret': numNomRet,
391
		'num_taxon': numTaxon,
392
		'famille': famille,
393
		'referentiel': referentiel,
394
 
395
		'latitude' : $('#latitude').val(),
396
		'longitude' : $('#longitude').val(),
397
		'commune_nom' : $('#commune-nom').text(),
398
		'commune_code_insee' : $('#commune-code-insee').text(),
399
		'altitude': $('#altitude').text(),
400
		'lieudit': $('#lieudit').val(),
401
		'milieu': this.getMilieux(),
402
		'certitude': $('#certitude').val(),
403
 
404
		//Ajout des champs images
405
		'image_nom' :this. getNomsImgsOriginales(),
406
 
407
		// Ajout des champs étendus de l'obs
408
		'obs_etendue': this.getObsChpEtendus()
409
	});
410
};
411
 
412
/* jQuery en vrac */
413
$(document).ready(function() {
414
 
415
    // Activation de la saisie si on clique sur un type de champ
416
    function gererAffichageChampCulture(){
417
    	$('.culture input[type=text]').hide();
418
    	var radio = $('.culture input[type=radio]:checked');
419
    	var input = radio.parent().find('input[type=text]');
420
   		(radio.is(':checked')) ? input.show() && input.focus() : input.hide();
421
   	}
422
   	$('.culture').change(gererAffichageChampCulture);
423
   	// ... et aussi au chargement du widget, si la sélection est restée sur un champ
424
	gererAffichageChampCulture();
425
});