Subversion Repositories eFlore/Applications.cel

Rev

Rev 3425 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
3425 idir 1
/**
2
 * Constructeur PlantesEtLichensASL par défaut
3
 * S'applique au squelette apaforms.tpl.html
4
 * Qui se charge dans apa.tpl.php
5
 * Lors de la saisie des plantes ou des lichens
6
 */
7
// ASL : APA, sTREETs, Lichen's Go!
8
function PlantesEtLichensASL( proprietes, widgetProp ) {
9
	if  ( utils.valOk( proprietes ) && utils.valOk( widgetProp ) ) {
10
		this.sujet             = proprietes.sujet;
11
		this.tagImg            = proprietes.tagImg;
12
		this.separationTagImg  = proprietes.separationTagImg;
13
		this.tagImg            = proprietes.tagImg;
14
		this.tagObs            = proprietes.tagObs;
15
		this.separationTagObs  = proprietes.separationTagObs;
16
		this.nomSciReferentiel = proprietes.nomSciReferentiel;
17
		this.referentielImpose = proprietes.referentielImpose;
18
		this.widgetProp        = widgetProp;
19
		this.urlWidgets        = widgetProp.urlWidgets;
3532 idir 20
		this.projet            = widgetProp.projet;
21
		this.tagsMotsCles      = widgetProp.tagsMotsCles + ',' + this.sujet;
3425 idir 22
	}
23
	this.isTaxonListe = false;
24
	this.numArbre     = 0;
25
}
26
PlantesEtLichensASL.prototype = new WidgetsSaisiesASL( this.widgetProp );
27
 
28
/**
29
 * Initialise le formulaire, les validateurs, les listes de complétion...
30
 */
31
PlantesEtLichensASL.prototype.initForm = function() {
32
	const lthis = this;
33
 
34
	$('[type="date"]').prop('max', function(){
35
		return new Date().toJSON().split('T')[0];
36
	});
37
	this.initFormTaxonListe();
38
	this.configurerFormValidator();
39
	this.definirReglesFormValidator();
40
};
41
 
42
/**
43
 * Initialise les écouteurs d'événements
44
 */
45
PlantesEtLichensASL.prototype.initEvts = function() {
46
	const lthis = this;
47
	var releveDatas   = [],
48
		idUtilisateur = $( '#id_utilisateur' ).val();
49
 
50
	if( this.valOk( idUtilisateur ) ) {
51
		// #releve-data est modifié, bouton dans #releves-utilisateur
52
		this.btnsChargerForm( '#bouton-nouveau-releve' );
53
		if( this.valOk( $( '#releve-data' ).val() ) ) {
54
			this.releveDatas = $.parseJSON( $( '#releve-data' ).val() );
55
			if ( this.valOk( this.releveDatas[0].utilisateur, true, idUtilisateur ) ) {
56
				// Sur téléchargement image
57
				this.initEvtsFichier();
58
				// Création / Suppression / Transmission des obs
59
				// Défilement des miniatures dans le résumé obs
60
				this.initEvtsObs();
61
				// chargement plantes ou lichens, ajout du bouton #poursuivre
62
				var btnChargementForm = this.determinerBtnsChargementForm( '#', true );
63
				// #releve-data n'est pas modifié, bouton dans #charger-form
64
				this.btnsChargerForm( btnChargementForm, false, false );
65
				// Alertes et aides
66
				this.initEvtsAlertes();
67
			}
68
		}
69
	}
70
};
71
 
72
// Ajouter Obs ****************************************************************/
73
PlantesEtLichensASL.prototype.reinitialiserForm = function() {
74
	this.supprimerMiniatures();
75
	$( '#taxon,#taxon-autre,#commentaire' ).val( '' );
76
	$( '#taxon' ).removeData([
77
		'value',
78
		'numNomSel',
79
		'nomRet',
80
		'numNomRet',
81
		'nt',
82
		'famille'
83
	]);
84
	$( '#taxon-liste,#certitude' ).find( 'option' ).each( function() {
85
		if ( $( this ).hasClass( 'choisir' ) ) {
86
			$( this ).attr( 'selected', true );
87
		} else {
88
			$( this ).attr( 'selected', false );
89
		}
90
	});
91
	$( '#taxon-input-groupe' ).addClass( 'hidden' );
92
	if ( 'lichens' === this.sujet ) {
93
		$( 'input[name=lichens-tronc]:checked' ).each( function() {
94
			$( this ).prop( 'checked', false );
95
		});
96
	}
97
};
98
 
99
/**
100
 * Retourne un Array contenant les valeurs des champs
101
 * dont les données seront transmises dans la table cel-obs-etendues
102
 */
103
PlantesEtLichensASL.prototype.getObsChpSpecifiques = function( numArbre ) {
104
	var retour = [
105
		{ cle : 'num-arbre', valeur : numArbre },
106
		{ cle : 'id_obs_arbre', valeur : this.releveDatas[numArbre]['id_observation'] },
107
		{ cle : 'rue' , valeur : this.releveDatas[0].rue  }
108
	];
109
 
110
	if ( 'lichens' === this.sujet ) {
111
		var valeursLT  = '';
112
		const $lichensTronc = $( 'input[name=lichens-tronc]:checked' );
113
		const LTLenght = $lichensTronc.length;
114
 
115
		$( 'input[name=lichens-tronc]:checked' ).each( function( i, value ) {
116
			valeursLT += $(value).val();
117
			if( i < LTLenght ) {
118
				valeursLT += ';';
119
			}
120
		});
121
		retour.push({ cle : 'loc-sur-tronc', valeur : valeursLT });
122
	}
123
 
124
	return retour;
125
};
126
 
127
// Form Validator *************************************************************/
128
PlantesEtLichensASL.prototype.definirReglesFormValidator = function() {
129
	const lthis = this;
130
 
131
	$( 'input[type=date]' ).on( 'input', function() {
132
		$( this ).valid();
133
	});
134
	// Validation Taxon si pas de miniature
135
	$( '#taxon' ).on( 'change', function() {
136
		var images = lthis.valOk( $( '#miniatures .miniature' ) );
137
		lthis.validerTaxonImage( lthis.valOk( $( this ).val() ), images );
138
	});
139
 
140
	// // Validation miniatures avec MutationObserver
141
	// this.surPresenceAbsenceMiniature();
142
 
143
	$( '#form-' + this.sujet ).validate({
144
		rules : {
145
			'choisir-arbre' : {
146
				required : true,
147
				minlength : 1
148
			},
149
			'obs-date' : {
150
				required : true,
151
				'dateCel' : true
152
			},
153
			certitude : {
154
				required : true,
155
				minlength : 1
156
			}
157
		}
158
	});
159
	$( '#form-observateur' ).validate({
160
		rules : {
161
			courriel : {
162
				required : true,
163
				minlength : 1,
164
				email : true,
165
				'userEmailOk' : true
166
			},
167
			mdp : {
168
				required : true,
169
				minlength : 1
170
			}
171
		}
172
	});
173
	$( '#connexion,#inscription,#oublie' ).on( 'click', function() {
174
		$( '#tb-observateur .control-group' ).removeClass( 'error' );
175
	});
176
};
177
 
178
PlantesEtLichensASL.prototype.validerTaxonImage = function( taxon = false, images = false ) {
179
	var taxonOuImage = ( images || taxon );
180
	if ( images || taxon ) {
181
		this.masquerPanneau( '#dialogue-taxon-or-image' );
182
		$( '#bloc-taxon' ).removeClass( 'error' )
183
			.find( 'span.error' ).hide();
184
		$( '#fichier' ).parent( 'label.label-file' ).removeClass( 'error' );
185
		$( '#photos-conteneur').removeClass( 'error' ).find( 'span.error' ).hide();
186
		// faire passer la certitude à 'à déterminer' si on a une image et pas de taxon
187
		if( !taxon ) {
188
			$( '#certitude' ).find( 'option' ).each( function() {
189
				if ( $( this ).hasClass( 'aDeterminer' ) ) {
190
					$( this ).attr( 'selected', true );
191
				} else {
192
					$( this ).attr( 'selected', false );
193
				}
194
			});
195
		}
196
	} else {
197
		this.afficherPanneau( '#dialogue-taxon-or-image' );
198
		$( '#bloc-taxon' ).addClass( 'error' )
199
			.find( 'span.error' ).show();
200
		$( '#fichier' ).parent( 'label.label-file' ).addClass( 'error' );
201
		$( '#photos-conteneur').addClass( 'error' ).find( 'span.error' ).show();
202
	}
203
	return ( images || taxon );
204
};
205
 
206
/**
207
 * Valide le formulaire au click sur un bouton "suivant"
208
 */
209
PlantesEtLichensASL.prototype.validerForm = function() {
210
	const images       = this.valOk( $( '#miniatures .miniature' ) );
211
	const taxon        = this.valOk( $( '#taxon' ).val() );
212
	const taxonOuImage = this.validerTaxonImage( taxon, images );
213
	const observateur  = ( $( '#form-observateur' ).valid() && $( '#courriel' ).valid() )
214
	const obs          = $( '#form-' + this.sujet ).valid();
215
 
216
	// panneau observateur
217
	if ( observateur ) {
218
		this.masquerPanneau( '#dialogue-utilisateur-non-identifie' );
219
		$( '#tb-observateur .control-group' ).removeClass( 'error' );
220
	} else {
221
		this.afficherPanneau( '#dialogue-utilisateur-non-identifie' );
222
		$( '#tb-observateur .control-group' ).addClass( 'error' );
223
	}
224
 
225
	return ( observateur && obs && taxonOuImage );
226
};