3638 |
delphine |
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;
|
|
|
20 |
this.projet = widgetProp.projet;
|
|
|
21 |
this.tagsMotsCles = widgetProp.tagsMotsCles + ',' + this.sujet;
|
|
|
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 |
if ( 'lichens' === this.sujet ) {
|
|
|
66 |
this.checkboxToutesLesFaces();
|
|
|
67 |
}
|
|
|
68 |
// Alertes et aides
|
|
|
69 |
this.initEvtsAlertes();
|
|
|
70 |
}
|
|
|
71 |
}
|
|
|
72 |
}
|
|
|
73 |
};
|
|
|
74 |
|
|
|
75 |
// Ajouter Obs ****************************************************************/
|
|
|
76 |
PlantesEtLichensASL.prototype.reinitialiserForm = function() {
|
|
|
77 |
this.supprimerMiniatures();
|
|
|
78 |
$( '#taxon,#taxon-autre,#commentaire' ).val( '' );
|
|
|
79 |
$( '#taxon' ).removeData([
|
|
|
80 |
'value',
|
|
|
81 |
'numNomSel',
|
|
|
82 |
'nomRet',
|
|
|
83 |
'numNomRet',
|
|
|
84 |
'nt',
|
|
|
85 |
'famille'
|
|
|
86 |
]);
|
|
|
87 |
$( '#taxon-liste,#certitude' ).find( 'option' ).each( function() {
|
|
|
88 |
if ( $( this ).hasClass( 'choisir' ) ) {
|
|
|
89 |
$( this ).attr( 'selected', true );
|
|
|
90 |
} else {
|
|
|
91 |
$( this ).attr( 'selected', false );
|
|
|
92 |
}
|
|
|
93 |
});
|
|
|
94 |
$( '#taxon-input-groupe' ).addClass( 'hidden' );
|
|
|
95 |
if ( 'lichens' === this.sujet ) {
|
|
|
96 |
$( 'input[name=lichens-tronc]:checked' ).each( function() {
|
|
|
97 |
$( this ).prop( 'checked', false );
|
|
|
98 |
});
|
|
|
99 |
}
|
|
|
100 |
};
|
|
|
101 |
|
|
|
102 |
PlantesEtLichensASL.prototype.checkboxToutesLesFaces = function() {
|
|
|
103 |
$('input[name=lichens-tronc]').on( 'click', function( event ) {
|
|
|
104 |
var face = $( this ).data( 'face' );
|
|
|
105 |
|
|
|
106 |
if ( $( this ).is( ':checked' ) ) {
|
|
|
107 |
console.log('hello');
|
|
|
108 |
if( $( this ).hasClass( 'lichens-tronc-all' ) ) {
|
|
|
109 |
for ( i = 1; i <= 5 ; i++ ) {
|
|
|
110 |
$( '#lichens-tronc-' + face + i ).prop( 'checked', false );
|
|
|
111 |
}
|
|
|
112 |
} else {
|
|
|
113 |
$( '#lichens-tronc-all-' + face ).prop( 'checked', false );
|
|
|
114 |
}
|
|
|
115 |
}
|
|
|
116 |
|
|
|
117 |
});
|
|
|
118 |
};
|
|
|
119 |
|
|
|
120 |
/**
|
|
|
121 |
* Retourne un Array contenant les valeurs des champs
|
|
|
122 |
* dont les données seront transmises dans la table cel-obs-etendues
|
|
|
123 |
*/
|
|
|
124 |
PlantesEtLichensASL.prototype.getObsChpSpecifiques = function( numArbre ) {
|
|
|
125 |
var retour = [
|
|
|
126 |
{ cle : 'num-arbre', valeur : numArbre },
|
|
|
127 |
{ cle : 'id_obs_arbre', valeur : this.releveDatas[numArbre]['id_observation'] },
|
|
|
128 |
{ cle : 'rue' , valeur : this.releveDatas[0].rue }
|
|
|
129 |
];
|
|
|
130 |
|
|
|
131 |
if ( 'lichens' === this.sujet ) {
|
|
|
132 |
var valeursLT = '';
|
|
|
133 |
const $lichensTronc = $( 'input[name=lichens-tronc]:checked' );
|
|
|
134 |
const LTLenght = $lichensTronc.length;
|
|
|
135 |
|
|
|
136 |
$( 'input[name=lichens-tronc]:checked' ).each( function( i, value ) {
|
|
|
137 |
valeursLT += $(value).val();
|
|
|
138 |
if( i < LTLenght ) {
|
|
|
139 |
valeursLT += ';';
|
|
|
140 |
}
|
|
|
141 |
});
|
|
|
142 |
retour.push({ cle : 'loc-sur-tronc', valeur : valeursLT });
|
|
|
143 |
}
|
|
|
144 |
|
|
|
145 |
return retour;
|
|
|
146 |
};
|
|
|
147 |
|
|
|
148 |
// Form Validator *************************************************************/
|
|
|
149 |
PlantesEtLichensASL.prototype.definirReglesFormValidator = function() {
|
|
|
150 |
const lthis = this;
|
|
|
151 |
|
|
|
152 |
$( 'input[type=date]' ).on( 'input', function() {
|
|
|
153 |
$( this ).valid();
|
|
|
154 |
});
|
|
|
155 |
// Validation Taxon si pas de miniature
|
|
|
156 |
$( '#taxon' ).on( 'change', function() {
|
|
|
157 |
var images = lthis.valOk( $( '#miniatures .miniature' ) );
|
|
|
158 |
lthis.validerTaxonImage( lthis.valOk( $( this ).val() ), images );
|
|
|
159 |
});
|
|
|
160 |
|
|
|
161 |
// // Validation miniatures avec MutationObserver
|
|
|
162 |
// this.surPresenceAbsenceMiniature();
|
|
|
163 |
|
|
|
164 |
$( '#form-' + this.sujet ).validate({
|
|
|
165 |
rules : {
|
|
|
166 |
'choisir-arbre' : {
|
|
|
167 |
required : true,
|
|
|
168 |
minlength : 1
|
|
|
169 |
},
|
|
|
170 |
'obs-date' : {
|
|
|
171 |
required : true,
|
|
|
172 |
'dateCel' : true
|
|
|
173 |
},
|
|
|
174 |
certitude : {
|
|
|
175 |
required : true,
|
|
|
176 |
minlength : 1
|
|
|
177 |
}
|
|
|
178 |
}
|
|
|
179 |
});
|
|
|
180 |
$( '#form-observateur' ).validate({
|
|
|
181 |
rules : {
|
|
|
182 |
courriel : {
|
|
|
183 |
required : true,
|
|
|
184 |
minlength : 1,
|
|
|
185 |
email : true,
|
|
|
186 |
'userEmailOk' : true
|
|
|
187 |
},
|
|
|
188 |
mdp : {
|
|
|
189 |
required : true,
|
|
|
190 |
minlength : 1
|
|
|
191 |
}
|
|
|
192 |
}
|
|
|
193 |
});
|
|
|
194 |
$( '#connexion,#inscription,#oublie' ).on( 'click', function() {
|
|
|
195 |
$( '#tb-observateur .control-group' ).removeClass( 'error' );
|
|
|
196 |
});
|
|
|
197 |
};
|
|
|
198 |
|
|
|
199 |
PlantesEtLichensASL.prototype.validerTaxonImage = function( taxon = false, images = false ) {
|
|
|
200 |
var taxonOuImage = ( images || taxon );
|
|
|
201 |
if ( images || taxon ) {
|
|
|
202 |
this.masquerPanneau( '#dialogue-taxon-or-image' );
|
|
|
203 |
$( '#bloc-taxon' ).removeClass( 'error' )
|
|
|
204 |
.find( 'span.error' ).hide();
|
|
|
205 |
$( '#fichier' ).parent( 'label.label-file' ).removeClass( 'error' );
|
|
|
206 |
$( '#photos-conteneur').removeClass( 'error' ).find( 'span.error' ).hide();
|
|
|
207 |
// faire passer la certitude à 'à déterminer' si on a une image et pas de taxon
|
|
|
208 |
if( !taxon ) {
|
|
|
209 |
$( '#certitude' ).find( 'option' ).each( function() {
|
|
|
210 |
if ( $( this ).hasClass( 'aDeterminer' ) ) {
|
|
|
211 |
$( this ).attr( 'selected', true );
|
|
|
212 |
} else {
|
|
|
213 |
$( this ).attr( 'selected', false );
|
|
|
214 |
}
|
|
|
215 |
});
|
|
|
216 |
}
|
|
|
217 |
} else {
|
|
|
218 |
this.afficherPanneau( '#dialogue-taxon-or-image' );
|
|
|
219 |
$( '#bloc-taxon' ).addClass( 'error' )
|
|
|
220 |
.find( 'span.error' ).show();
|
|
|
221 |
$( '#fichier' ).parent( 'label.label-file' ).addClass( 'error' );
|
|
|
222 |
$( '#photos-conteneur').addClass( 'error' ).find( 'span.error' ).show();
|
|
|
223 |
}
|
|
|
224 |
return ( images || taxon );
|
|
|
225 |
};
|
|
|
226 |
|
|
|
227 |
/**
|
|
|
228 |
* Valide le formulaire au click sur un bouton "suivant"
|
|
|
229 |
*/
|
|
|
230 |
PlantesEtLichensASL.prototype.validerForm = function() {
|
|
|
231 |
const images = this.valOk( $( '#miniatures .miniature' ) );
|
|
|
232 |
const taxon = this.valOk( $( '#taxon' ).val() );
|
|
|
233 |
const taxonOuImage = this.validerTaxonImage( taxon, images );
|
|
|
234 |
const observateur = ( $( '#form-observateur' ).valid() && $( '#courriel' ).valid() )
|
|
|
235 |
const obs = $( '#form-' + this.sujet ).valid();
|
|
|
236 |
|
|
|
237 |
// panneau observateur
|
|
|
238 |
if ( observateur ) {
|
|
|
239 |
this.masquerPanneau( '#dialogue-utilisateur-non-identifie' );
|
|
|
240 |
$( '#tb-observateur .control-group' ).removeClass( 'error' );
|
|
|
241 |
} else {
|
|
|
242 |
this.afficherPanneau( '#dialogue-utilisateur-non-identifie' );
|
|
|
243 |
$( '#tb-observateur .control-group' ).addClass( 'error' );
|
|
|
244 |
}
|
|
|
245 |
|
|
|
246 |
return ( observateur && obs && taxonOuImage );
|
|
|
247 |
};
|