Subversion Repositories eFlore/Applications.cel

Rev

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