New file |
0,0 → 1,1013 |
/** |
* Constructeur ReleveASL par défaut |
* S'applique au squelette apaforms.tpl.html |
* Qui se charge dans apa.tpl.php |
* Lors de la saisie du relevé et des arbres |
*/ |
// ASL : APA, sTREETs, Lichen's Go! |
function ReleveASL( proprietes, widgetProp ) { |
if ( utils.valOk( proprietes ) && utils.valOk( widgetProp ) ) { |
this.sujet = proprietes.sujet; |
this.tagImg = proprietes.tagImg; |
this.separationTagImg = proprietes.separationTagImg; |
this.tagImg = proprietes.tagImg; |
this.tagObs = proprietes.tagObs; |
this.separationTagObs = proprietes.separationTagObs; |
this.tagObs = proprietes.tagObs; |
this.nomSciReferentiel = proprietes.nomSciReferentiel; |
this.referentielImpose = proprietes.referentielImpose; |
this.widgetProp = widgetProp; |
this.urlWidgets = widgetProp.urlWidgets; |
this.module = widgetProp.nomSquelette; |
} |
this.isTaxonListe = false; |
this.numArbre = 0; |
} |
ReleveASL.prototype = new WidgetsSaisiesASL( this.widgetProp ); |
|
/** |
* Initialise le formulaire, les validateurs, les listes de complétion... |
*/ |
ReleveASL.prototype.initForm = function() { |
const lthis = this; |
|
var idUtilisateur = $( '#id_utilisateur' ).val(); |
|
$('[type="date"]').prop('max', function(){ |
return new Date().toJSON().split('T')[0]; |
}); |
if( this.valOk( idUtilisateur ) ) { |
if ( this.valOk( $( '#releve-data' ).val() ) ) { |
const datRuComun = $.parseJSON( $( '#dates-rues-communes' ).val() ); |
|
var releveDatas = $.parseJSON( $( '#releve-data' ).val() ); |
if ( !this.valOk( releveDatas[1] ) || -1 === datRuComun.indexOf( releveDatas[1]['date_rue_commune'] ) ) { |
this.releveDatas = releveDatas; |
if ( this.valOk( this.releveDatas[0].utilisateur, true, idUtilisateur ) ) { |
$( '#releve-date' ).val( this.releveDatas[0].date ); |
this.rechargerFormulaire(); |
this.saisirArbres(); |
$( '#bouton-list-releves' ) |
.removeClass( 'hidden' ) |
.on( 'click', function(event) { |
$( '#table-releves' ).removeClass( 'hidden' ); |
$( this ).addClass( 'hidden' ); |
}); |
} |
} |
} |
if ( this.valOk( $( '.charger-releve' ) ) ) { |
var btnChargementForm = this.determinerBtnsChargementForm( '.' ); |
// #releve-data est modifié, bouton dans #releves-utilisateur |
this.btnsChargerForm( btnChargementForm ); |
} |
} |
this.ajouterAutocompletionNoms(); |
this.configurerFormValidator(); |
this.definirReglesFormValidator(); |
}; |
|
/** |
* Initialise les écouteurs d'événements |
*/ |
ReleveASL.prototype.initEvts = function() { |
const lthis = this; |
|
// comportement du bouton nouveau releve |
if ( this.valOk( $( '#id_utilisateur' ).val() ) ) { |
// #releve-data est modifié, bouton dans #releves-utilisateur |
this.btnsChargerForm( '#bouton-nouveau-releve' ); |
} |
// on location, initialisation de la géoloc |
this.initEvtsGeoloc(); |
// Sur téléchargement image |
this.initEvtsFichier(); |
|
if ( 'tb_streets' !== this.module ) { |
// Gérer une option "aucune" sur plusieurs checkboxes |
$( '#face-ombre input' ).on( 'click', function () { |
if ( 'aucune' === $( this ).val() ) { |
$( '#face-ombre input' ).not( '#aucune' ).prop( 'checked' , false ); |
} else { |
$( '#aucune' ).prop( 'checked' , false ); |
} |
}); |
} |
$( '#soumettre-releve' ).on( 'click', function( event ) { |
event.preventDefault(); |
lthis.saisirArbres(); |
}); |
// Création / Suppression / Transmission des obs |
// Défilement des miniatures dans le résumé obs |
this.initEvtsObs(); |
|
$( '#bloc-info-arbres' ).on( 'click', '.arbre-info', function ( event ) { |
event.preventDefault(); |
$( this ).addClass( 'disabled' ); |
$( '.arbre-info' ).not( $( this ) ).removeClass( 'disabled' ); |
lthis.scrollFormTop( '#zone-arbres' ); |
|
var numArbre = $( this ).data( 'arbre-info' ); |
|
lthis.chargerInfosArbre( numArbre ); |
}); |
// après avoir visualisé les champs d'un arbre, retour à la saisie |
$( '#retour' ).on( 'click', function( event ) { |
event.preventDefault(); |
|
var numArbre = lthis.numArbre + 1; |
|
lthis.scrollFormTop( '#zone-arbres' ); |
// activation des champs et retour à la saisie |
lthis.modeArbresBasculerActivation( false, numArbre ); |
$( '#taxon' ) |
.val('') |
.removeData([ |
'value', |
'numNomSel', |
'nomRet', |
'numNomRet', |
'nt', |
'famille' |
]); |
}); |
// chargement plantes ou lichens |
var btnChargementForm = this.determinerBtnsChargementForm( '#' ); |
// #releve-data n'est pas modifié, bouton dans #charger-form |
this.btnsChargerForm( btnChargementForm, false, false ); |
// Alertes et aides |
this.initEvtsAlertes(); |
}; |
|
/** |
* Recharge le formulaire relevé (étape 1) à partir des infos |
* présentes dans l'input hidden '#releve-data' |
*/ |
ReleveASL.prototype.rechargerFormulaire = function() { |
const lthis = this; |
|
this.releveDatas = $.parseJSON( $( '#releve-data' ).val() ); |
$.each( this.releveDatas[0], function( cle , valeur ) { |
if ( 'zone-pietonne' === cle || 'pres-lampadaires' === cle ) { |
$( 'input[name=' + cle + '][value=' + valeur + ']' , '#zone-observation' ).prop( 'checked', true ); |
} else if ( lthis.valOk( $( '#' + cle ) ) ) { |
$( '#' + cle ).val( valeur ); |
} |
}); |
|
this.scrollFormTop( '#zone-observation', '#releve-date' ) |
if ( |
this.valOk( $( '#latitude-releve' ).val() ) && |
this.valOk( $( '#longitude-releve' ).val() ) && |
this.valOk( $( '#rue' ).val() ) && |
this.valOk( $( '#commune-nom' ).val() ) |
) { |
$( '#geoloc' ).addClass( 'hidden' ); |
$( '#geoloc-datas' ).removeClass( 'hidden' ); |
} |
}; |
|
/** |
* Recharge le formulaire étape arbres à partir des infos |
* présentes dans l'input hidden '#releve-data' |
*/ |
ReleveASL.prototype.chargerArbres = function() { |
this.releveDatas = $.parseJSON( $( '#releve-data' ).val() ); |
this.obsNbre = this.releveDatas.length - 1; |
this.numArbre = parseInt( this.releveDatas[ this.obsNbre ]['num-arbre'] ) || this.obsNbre; |
$( '.obs-nbre' ).text( this.obsNbre ); |
$( '.obs-nbre' ).triggerHandler( 'changement' ); |
$( '#arbre-nb' ).text( this.numArbre + 1 ); |
|
var infosArbre = { |
releve : this.releveDatas[0], |
obsNum : 0, |
sujet : {} |
}; |
|
for( var i = 1; i <= this.obsNbre; i ++ ) { |
infosArbre.obsNum = i; |
infosArbre.sujet = this.releveDatas[i]; |
this.lienArbreInfo( infosArbre.sujet['num-arbre'] ); |
this.afficherObs( infosArbre ); |
this.stockerObsData( infosArbre, true ); |
} |
}; |
|
ReleveASL.prototype.lienArbreInfo = function( numArbre ) { |
if ( numArbre == 1 ) { |
$( '#bloc-info-arbres-title' ).removeClass( 'hidden' ); |
} |
$( '#bloc-info-arbres' ).append( |
'<div'+ |
' id="arbre-info-' + numArbre + '"'+ |
' class="col-sm-8"'+ |
'>'+ |
'<a'+ |
' id="arbre-info-lien-' + numArbre + '"'+ |
' href=""'+ |
' class="arbre-info btn btn-outline-info btn-block mb-3"'+ |
' data-arbre-info="' + numArbre + '"'+ |
'>'+ |
'<i class="fas fa-info-circle"></i>'+ |
' Arbre ' + numArbre + |
'</a>'+ |
'</div>' |
); |
}; |
|
// Ajouter Obs ****************************************************************/ |
/** |
* Etape formulaire avec transfert carto |
*/ |
ReleveASL.prototype.saisirArbres = function() { |
const lthis = this; |
|
if ( this.validerReleve() ) { |
$( '#soumettre-releve' ) |
.addClass( 'disabled' ) |
.attr( 'aria-disabled', true ) |
.off(); |
$( '#form-observation' ).find( 'input, textarea' ).prop( 'disabled', true ); |
$( '#zone-arbres,#geoloc-datas,#bouton-nouveau-releve' ).removeClass( 'hidden' ); |
this.scrollFormTop( '#zone-arbres' ); |
this.confirmerSortie(); |
if ( !this.valOk( $( '#releve-data' ).val() ) ) { |
var releveDatasTmp = { |
obs : { |
ce_utilisateur : $( '#id_utilisateur' ).val(), |
date_observation : $( '#releve-date' ).val(), |
zone_geo : $( '#commune-nom' ).val(), |
ce_zone_geo : $( '#commune-insee' ).val(), |
pays : $( '#pays' ).val(), |
commentaire : $( '#commentaires' ).val().trim() |
}, |
obsE : { |
rue : $( '#rue' ).val(), |
'latitude-releve' : $( '#latitude-releve' ).val(), |
'longitude-releve' : $( '#longitude-releve' ).val(), |
'altitude-releve' : $( '#altitude-releve' ).val() |
} |
}; |
if ( 'tb_lichensgo' !== this.module ) { |
releveDatasTmp.obsE['zone-pietonne'] = $( '#zone-pietonne input:checked' ).val(); |
releveDatasTmp.obsE['pres-lampadaires'] = $( '#pres-lampadaires input:checked' ).val(); |
} |
this.releveDatas = this.formaterReleveData(releveDatasTmp); |
$( '#releve-data' ).val( JSON.stringify( this.releveDatas ) ); |
this.numArbre = this.releveDatas.length - 1; |
} else { |
this.releveDatas = $.parseJSON( $( '#releve-data' ).val() ); |
this.releveDatas[0].date = $( '#releve-date' ).val(); |
if ( 'tb_lichensgo' !== this.module ) { |
this.releveDatas[0]['zone-pietonne'] = $( '#zone-pietonne input:checked' ).val(); |
this.releveDatas[0]['pres-lampadaires'] = $( '#pres-lampadaires input:checked' ).val(); |
} |
this.releveDatas[0].commentaires = $( '#commentaires' ).val().trim(); |
for ( var i = 1 ; i < this.releveDatas.length; i++ ) { |
this.releveDatas[i]['date_rue_commune'] = ( |
this.releveDatas[0].date + |
this.releveDatas[0].rue + |
this.releveDatas[0]['commune-nom'] |
); |
} |
$( '#releve-data' ).val( JSON.stringify( this.releveDatas ) ); |
//charger les images |
this.chargerImgEnregistrees(); |
this.numArbre = $.parseJSON( $( '#releve-data' ).val() ).length - 1; |
} |
// transfert carto |
// $cartoRemplacee = $( '#tb-geolocation' ), |
// layer = 'osm', |
// zoomInit = 18 |
var donnesResetCarto = { |
latitude : $( '#latitude-releve' ).val(), |
longitude : $( '#longitude-releve' ).val(), |
suffixe : 'arbres', |
layer : 'google hybrid' |
}; |
|
this.transfererCarto( donnesResetCarto ); |
} |
}; |
|
ReleveASL.prototype.chargerImgEnregistrees = function() { |
const releveL = this.releveDatas.length; |
var idArbre = 0, |
last = false; |
|
for ( var i = 1; i < releveL; i++ ) { |
idArbre = this.releveDatas[i]['id_observation']; |
|
var urlImgObs = this.serviceObsImgs + idArbre, |
imgDatas = { |
'indice' : i, |
'idArbre' : idArbre, |
'numArbre' : this.releveDatas[i]['num-arbre'], |
'nomRet' : this.releveDatas[i].taxon.nomRet.replace( /\s/, '_' ), |
'releveDatas' : this.releveDatas |
}; |
|
if ( ( releveL - 1) === i ) { |
last = true; |
} |
this.chargerImgArbre( urlImgObs, imgDatas, last ); |
} |
}; |
|
ReleveASL.prototype.chargerImgArbre = function( urlImgObs, imgDatas, last ) { |
const lthis = this; |
|
$.ajax({ |
url: urlImgObs, |
type: 'GET', |
success: function( idsImg, textStatus, jqXHR ) { |
if ( lthis.valOk( idsImg ) ) { |
var urlImg = '', |
images = []; |
|
idsImg = idsImg[parseInt( imgDatas.idArbre )]; |
$.each( idsImg, function( i, idImg ) { |
urlImg = lthis.serviceObsImgUrl.replace( '{id}', '000' + idImg ); |
images[i] = { |
nom : imgDatas.nomRet + '_arbre'+ imgDatas.numArbre +'_image' + ( i + 1 ), |
src : urlImg, |
b64 :[], |
id : idImg |
}; |
}); |
imgDatas.releveDatas[imgDatas.indice]['miniature-img'] = images; |
$( '#releve-data' ).val( JSON.stringify( imgDatas.releveDatas ) ); |
} else { |
console.dir( lthis.msgTraduction( 'erreur-image' ) + ' : ' + lthis.msgTraduction( 'arbre' ) + ' ' + imgDatas.idArbre ); |
} |
}, |
error: function( jqXHR, textStatus, errorThrown ) { |
console.dir( lthis.msgTraduction( 'erreur-image' ) ); |
} |
}) |
.always( function() { |
if (last) { |
lthis.chargerArbres(); |
} |
}); |
}; |
|
/** |
* Retourne un Array contenant les valeurs des champs |
* dont les données seront transmises dans la table cel-obs-etendues |
*/ |
ReleveASL.prototype.getObsChpSpecifiques = function( datasArbres ) { |
const lthis = this; |
|
var retour = [], |
champs = [ |
'rue', |
'latitude-releve', |
'longitude-releve', |
'altitude-releve' |
]; |
|
if ( 'tb_lichensgo' !== this.module ) { |
champs.push( |
'zone-pietonne', |
'pres-lampadaires', |
'surface-pied', |
'equipement-pied-arbre', |
'tassement', |
'dejections', |
'com-arbres' |
); |
} |
champs.push( |
'rue-arbres', |
'circonference' |
); |
|
var cleValeur = ''; |
|
$.each( champs, function( i , value ) { |
cleValeur = ( 4 > i ) || ( 6 > i && 'tb_lichensgo' !== lthis.module ) ? 'releve' : 'sujet'; |
if ( lthis.valOk( datasArbres[cleValeur][value] ) ) { |
retour.push({ cle : value, valeur : datasArbres[cleValeur][value] }); |
} |
}); |
if ( 'tb_streets' !== this.module ) { |
var faceOmbre = '', |
faceOmbreLength = datasArbres.sujet['face-ombre'].length; |
|
if ( 'string' === typeof datasArbres.sujet['face-ombre'] ) { |
faceOmbre = datasArbres.sujet['face-ombre']; |
} else { |
$.each( datasArbres.sujet['face-ombre'], function( i ,value ) { |
faceOmbre += value |
if ( faceOmbreLength > ( i + 1 ) ) { |
faceOmbre += ';'; |
} |
}); |
} |
retour.push({ cle : 'face-ombre', valeur : faceOmbre }); |
} |
retour.push({ cle : 'num_arbre' , valeur : datasArbres.obsNum }); |
|
var stockerImg = this.valOk( datasArbres.sujet['miniature-img'] ); |
|
if( stockerImg ) { |
$.each( datasArbres.sujet['miniature-img'], function( i, paramsImg ) { |
if( !paramsImg.hasOwnProperty( 'id' ) ) { |
stockerImg = false; |
} |
return stockerImg; |
}); |
} |
if( stockerImg ) { |
retour.push({ cle : 'miniature-img' , valeur : JSON.stringify( datasArbres.sujet['miniature-img'] ) }); |
} |
return retour; |
}; |
|
ReleveASL.prototype.chargerInfosArbre = function( numArbre ) { |
const lthis = this; |
|
var desactiverForm = ( parseInt( numArbre ) !== ( this.numArbre + 1 ) ); |
|
if ( desactiverForm ) { |
var releveDatas = $.parseJSON( $( '#releve-data' ).val() ), |
arbreDatas = releveDatas[numArbre], |
taxon = {item:{}}, |
imgHtml = ''; |
|
$( '#arbre-nb' ).text( numArbre + ' (visualisation)' ); |
taxon.item = arbreDatas.taxon; |
this.surAutocompletionTaxon( {}, taxon ); |
|
var selects = [ 'certitude' ]; |
|
if ( 'tb_lichensgo' !== this.module ) { |
selects.push( 'equipement-pied-arbre', 'tassement' ); |
} |
$.each( selects, function( i, value ) { |
if( !lthis.valOk( arbreDatas[value] ) ) { |
arbreDatas[value] = ''; |
} |
if ( $( this ).hasClass( 'other' ) && lthis.valOk( $( this ).val() ) ) { |
$( this ).text( $( this ).val() ); |
} |
$( '#' + value + ' option' ).each( function() { |
if ( arbreDatas[value] === $( this ).val() ) { |
$( this ).prop( 'selected', true ); |
} else { |
$( this ).prop( 'selected', false ); |
} |
}); |
}); |
$( '#rue-arbres' ).val( arbreDatas['rue-arbres'] ); |
$( '#latitude-arbres' ).val( arbreDatas['latitude-arbres'] ); |
$( '#longitude-arbres' ).val( arbreDatas['longitude-arbres'] ); |
$( '#altitude-arbres' ).val( arbreDatas['altitude-arbres'] ); |
// image |
this.supprimerMiniatures(); |
$.each( arbreDatas['miniature-img'], function( i, value ) { |
imgHtml += |
'<div class="miniature mb-3 mr-3">'+ |
'<img class="miniature-img" class="miniature img-rounded" alt="' + value.nom + '" src="' + value.src + '"/>'+ |
'</div>'; |
}); |
$( '#miniatures' ).append( imgHtml ); |
$( '#circonference' ).val( arbreDatas.circonference ); |
$( '#com-arbres' ).val( arbreDatas['com-arbres'] ); |
if ( 'tb_lichensgo' !== this.module ) { |
$( '#surface-pied' ).val( arbreDatas['surface-pied'] ); |
if ( undefined != arbreDatas.dejections ) { |
$( '#dejections-oui' ).prop( 'checked', arbreDatas.dejections ); |
$( '#dejections-non' ).prop( 'checked', !arbreDatas.dejections ); |
} |
} |
if ( 'tb_streets' !== this.module ) { |
$( '#face-ombre input' ).each( function() { |
if ( -1 < arbreDatas['face-ombre'].indexOf( $( this ).val() ) ) { |
$( this ).prop( 'checked', true ); |
} else { |
$( this ).prop( 'checked', false ); |
} |
}); |
} |
} |
this.modeArbresBasculerActivation( desactiverForm, numArbre ); |
}; |
|
ReleveASL.prototype.modeArbresBasculerActivation = function( desactiver, numArbre = 0 ) { |
var selecteurs = |
'#taxon,'+ |
'#certitude,'+ |
'#latitude-arbres,'+ |
'#longitude-arbres,'+ |
'#rue-arbres,'+ |
'#fichier,'+ |
'#circonference,'+ |
'#com-arbres,'+ |
'#ajouter-obs'; |
|
if ( 'tb_lichensgo' !== this.module ) { |
selecteurs += |
',#equipement-pied-arbre,'+ |
'#tassement,'+ |
'#surface-pied'; |
$( '#dejections' ).find( 'input' ).prop( 'disabled', desactiver ); |
} |
$( selecteurs ).prop( 'disabled', desactiver ); |
if ( 'tb_streets' !== this.module ) { |
$( '#face-ombre' ).find( 'input' ).prop( 'disabled', desactiver ); |
} |
if ( desactiver ) { |
$( '#geoloc-arbres,#bouton-fichier,#miniature-info' ).addClass( 'hidden' ); |
$( '#geoloc-datas-arbres,#retour' ).removeClass( 'hidden' ); |
} else { |
// quand on change ou qu'on revient à la normale : |
$( '#geoloc-arbres,#bouton-fichier,#miniature-info' ).removeClass( 'hidden' ); |
$( '#geoloc-datas-arbres,#retour' ).addClass( 'hidden' ); |
// reset carto |
// typeLocalisation = 'point', |
// zoomInit = 18 |
var donnesResetCarto = { |
cartoRemplacee : $( '#tb-geolocation-arbres' ), |
latitude : $( '#latitude-releve' ).val(), |
longitude : $( '#longitude-releve' ).val(), |
suffixe : 'arbres', |
layer : 'google hybrid' |
}; |
this.transfererCarto( donnesResetCarto ); |
// retour aux valeurs par defaut |
selecteurs = '#certitude option'; |
if ( 'tb_lichensgo' !== this.module ) { |
selecteurs += ',#equipement-pied-arbre option,#tassement option'; |
$( '#equipement-pied-arbre .other' ).text( 'Autre' ).val( 'other' ); |
$( '#collect-other-equipement-pied-arbre' ).closest( '.control-group' ).remove(); |
$( '#dejections' ).find( 'input' ).prop( 'checked', false ); |
} |
if ( 'tb_streets' !== this.module ) { |
$( '#face-ombre' ).find( 'input' ).prop( 'checked', false ); |
} |
$( selecteurs ).each( function() { |
if ( $( this ).hasClass( 'choisir' ) ) { |
$( this ).prop( 'selected', true ); |
} else { |
$( this ).prop( 'selected', false ); |
} |
}); |
this.supprimerMiniatures(); |
selecteurs = |
'#circonference,'+ |
'#com-arbres,'+ |
'#rue-arbres,'+ |
'#latitude-arbres,'+ |
'#longitude-arbres,'+ |
'#certitude'; |
if ( 'tb_lichensgo' !== this.module ) { |
selecteurs += |
',#equipement-pied-arbre,'+ |
'#tassement,'+ |
'#surface-pied'; |
} |
$( selecteurs ).val( '' ); |
if( 0 < numArbre ) { |
$( '#arbre-nb' ).text( numArbre ); |
$( '#arbre-info-lien-' + numArbre ).addClass( 'disabled' ); |
$( '.arbre-info' ).not( '#arbre-info-lien-' + numArbre ).removeClass( 'disabled' ); |
} |
} |
}; |
|
/* |
* Actualise l'id_observation ( id de l'obs en bdd ) |
* à partir des données renvoyées par le service après transfert |
*/ |
ReleveASL.prototype.actualiserReleveDataIdObs = function( obsId, id_observation ) { |
this.releveData = $.parseJSON( $( '#releve-data' ).val() ); |
this.releveData[obsId ]['id_observation'] = id_observation; |
$( '#releve-data' ).val( JSON.stringify( this.releveData ) ); |
}; |
|
// Géolocalisation *************************************************************/ |
/** |
* Fonction handler de l'évenement location du module tb-geoloc |
*/ |
ReleveASL.prototype.locationHandler = function( location ) { |
const lthis = this; |
var isGeolocArbres = ( 'tb-geolocation-arbres' === location.target.id ), |
locDatas = location.originalEvent.detail; |
|
if ( this.valOk( locDatas ) ) { |
console.dir( locDatas ); |
|
var rue = ( this.valOk( locDatas.osmRoad ) ) ? locDatas.osmRoad : ''; |
var altitude = ( this.valOk( locDatas.elevation ) ) ? locDatas.elevation : ''; |
var pays = ( this.valOk( locDatas.osmCountryCode ) ) ? locDatas.osmCountryCode.toUpperCase() : 'FR'; |
var latitude = ''; |
var longitude = ''; |
var nomCommune = ''; |
var communeInsee = ''; |
|
if ( this.valOk( locDatas.geometry.coordinates ) ) { |
if ( 'Point' === locDatas.geometry.type ) { |
if ( this.valOk( locDatas.geometry.coordinates[0] ) ) { |
longitude = locDatas.geometry.coordinates[0]; |
} |
if ( this.valOk( locDatas.geometry.coordinates[1] ) ) { |
latitude = locDatas.geometry.coordinates[1]; |
} |
} else if ( 'LineString' === locDatas.geometry.type ) {// on a besoin que d'un point de la rue |
if ( this.valOk( locDatas.geometry.coordinates[0][0] ) ) { |
longitude = locDatas.geometry.coordinates[0][0]; |
} |
if ( this.valOk( locDatas.geometry.coordinates[0][1] ) ){ |
latitude = locDatas.geometry.coordinates[0][1]; |
} |
} |
} |
if ( !isGeolocArbres ) { |
if ( this.valOk( locDatas.inseeData ) ) { |
nomCommune = locDatas.inseeData.nom; |
communeInsee = ( this.valOk( locDatas.inseeData.code ) ) ? locDatas.inseeData.code : ''; |
} else if ( this.valOk( locDatas.locality ) ) { |
nomCommune = locDatas.locality; |
} else if ( this.valOk( locDatas.osmCounty ) ) { |
nomCommune = locDatas.osmCounty; |
} |
$( '#rue' ).val( rue ); |
$( '#latitude-releve' ).val( latitude ); |
$( '#longitude-releve' ).val( longitude ); |
$( '#commune-nom' ).val( nomCommune ); |
$( '#commune-insee' ).val( communeInsee ); |
$( '#altitude-releve' ).val( altitude ); |
$( '#pays' ).val( pays ); |
if ( this.valOk( $( '#rue' ).val() ) && this.valOk( $( '#commune-nom' ).val() ) ) { |
$( '#geoloc-error' ).addClass( 'hidden' ); |
$( '#geoloc-datas' ).closest( '.control-group' ).removeClass( 'error' ); |
} else { |
$( '#rue,#commune-nom' ).prop( 'disabled', false ); |
$( '#geoloc-datas' ) |
.removeClass( 'hidden' ) |
.closest( '.control-group' ) |
.addClass( 'error' ); |
$( '#geoloc-error' ).removeClass( 'hidden' ); |
$( '#releve-date' ) |
.removeClass( 'erreur' ) |
.closest( '.control-group' ) |
.removeClass( 'error' ) |
.find( '#error-drc' ) |
.remove(); |
} |
$( '#rue,#commune-nom' ).change( function() { |
if ( lthis.valOk( $( '#rue' ).val() ) && lthis.valOk( $( '#commune-nom' ).val() ) ) { |
$( '#geoloc-error' ).addClass( 'hidden' ); |
} else { |
$( '#geoloc-error' ).removeClass( 'hidden' ); |
} |
}); |
} else { |
$( '#rue-arbres' ).val( rue ); |
$( '#latitude-arbres' ).val( latitude ); |
$( '#longitude-arbres' ).val( longitude ); |
$( '#altitude-arbres' ).val( altitude ); |
if ( this.valOk( $( '#latitude-arbres' ).val() ) && this.valOk( $( '#longitude-arbres' ).val() ) ) { |
$( '#geoloc-arbres' ).closest( '.control-group' ).removeClass( 'error' ); |
} else { |
$( '#geoloc-arbres' ).closest( '.control-group' ).addClass( 'error' ); |
} |
} |
} else { |
console.dir( 'Error location' ); |
} |
}; |
|
// Form Validator *************************************************************/ |
ReleveASL.prototype.validerMinMax = function( element ) { |
var mMCond = new Boolean(), |
minCond = parseFloat( element.value ) >= parseFloat( element.min ), |
maxCond = parseFloat( element.value ) <= parseFloat( element.max ), |
messageMnMx = 'La valeur entrée doit être', |
returnMnMx = { cond : true , message : '' }; |
|
if ( |
( this.valOk( element.type, true, 'number' ) || this.valOk( element.type, true, 'range' ) ) && |
( this.valOk( element.min ) || this.valOk( element.max ) ) |
) { |
|
if ( element.min && element.max ) { |
messageMnMx += ' comprise entre ' + element.min + ' et ' + element.max; |
mnMxCond = ( minCond && maxCond ); |
} else if ( element.min ) { |
messageMnMx += ' supérieure à ' + element.min; |
mnMxCond = minCond; |
} else { |
messageMnMx += ' inférieure à ' + element.max; |
mnMxCond = maxCond; |
} |
returnMnMx.cond = mnMxCond; |
returnMnMx.message = messageMnMx; |
} |
|
return returnMnMx; |
}; |
|
/** |
* Valider date/rue/commune par rapport aux relevés précédents |
*/ |
ReleveASL.prototype.validerDateRueCommune = function( valeurDate, valeurRue, valeurCmn ) { |
var valide = true; |
|
if ( |
this.valOk( $( '#dates-rues-communes' ).val() ) && |
this.valOk( valeurDate ) && |
this.valOk( valeurRue ) && |
this.valOk( valeurCmn ) |
) { |
var valsEltDRC = $.parseJSON( $( '#dates-rues-communes' ).val() ), |
valeurDRC = valeurDate + valeurRue + valeurCmn; |
valide = ( -1 === valsEltDRC.indexOf( valeurDRC ) ); |
|
} |
return valide; |
}; |
|
/** |
* FormValidator pour les champs date/rue/Commune |
*/ |
ReleveASL.prototype.dateRueCommuneFormValidator = function() { |
var dateValid = ( /^(?:[0-9]{4}-[0-9]{2}-[0-9]{2})|(?:[0-9]{2}\/[0-9]{2}\/[0-9]{4})$/.test( $( '#releve-date' ).val() ) ), |
geolocValid = ( this.valOk( $( '#commune-nom' ).val() ) && this.valOk( $( '#rue' ).val() ) ); |
const errorDateRue = |
'<span id="error-drc" class="error">'+ |
this.msgTraduction( 'date-rue' )+ |
'</span> '; |
|
if( this.validerDateRueCommune( $( '#releve-date' ).val(), $( '#rue' ).val(), $( '#commune-nom' ).val() ) ) { |
$( '#releve-date' ) |
.removeClass( 'erreur' ) |
.closest( '.control-group' ) |
.removeClass( 'error' ) |
.find( '#error-drc' ) |
.remove(); |
if ( geolocValid ) { |
$( '#geoloc' ) |
.closest( '.control-group' ) |
.removeClass( 'error' ); |
} |
} else { |
$( '#releve-date' ) |
.addClass( 'erreur' ) |
.closest( '.control-group' ) |
.addClass( 'error' ); |
if ( !this.valOk( $( '#releve-date' ).closest( '.control-group' ).find( '#error-drc' ) ) ) { |
$( '#releve-date' ).after( errorDateRue ); |
} |
$( '#geoloc' ).closest( '.control-group' ).addClass( 'error' ); |
} |
if ( dateValid ) { |
$( '#releve-date' ).closest( '.control-group span.error' ).not( '#error-drc' ).remove(); |
} |
}; |
|
ReleveASL.prototype.definirReglesFormValidator = function() { |
const lthis = this; |
|
$( '#form-observation' ).validate({ |
rules : { |
'zone-pietonne' : { |
required : function() { |
return( 'tb_lichensgo' !== this.module ); |
}, |
minlength : 1 |
}, |
'latitude-releve' : { |
required : true, |
minlength : 1, |
range : [-90, 90] |
}, |
'longitude-releve' : { |
required : true, |
minlength : 1, |
range : [-180, 180] |
} |
} |
}); |
$( 'input[type=date]' ).not( '#releve-date' ).on( 'input', function() { |
$( this ).valid(); |
}); |
// validation date/rue/commune au démarage |
this.dateRueCommuneFormValidator(); |
// validation date/rue/commune sur event |
$( '#releve-date,#rue,#commune-nom' ).on( 'change input focusout', this.dateRueCommuneFormValidator.bind( this ) ); |
$( '#form-arbres' ).validate({ |
rules : { |
taxon : { |
required : true, |
minlength : 1 |
}, |
certitude : { |
required : true, |
minlength : 1 |
}, |
'latitude-arbres' : { |
required : true, |
minlength : 1, |
range : [-90, 90] |
}, |
'longitude-arbres' : { |
required : true, |
minlength : 1, |
range : [-180, 180] |
} |
} |
}); |
$( '#form-arbre-fs' ).validate({ |
onkeyup : false, |
onclick : false, |
rules : { |
circonference : { |
required : true, |
minlength : 1 |
}, |
'surface-pied' : { |
required : function() { |
return( 'tb_lichensgo' !== this.module ); |
}, |
minlength : 1, |
'minMaxOk' : true |
}, |
'equipement-pied-arbre' : { |
required : function() { |
return( 'tb_lichensgo' !== this.module ); |
}, |
minlength : 1 |
}, |
'face-ombre' : { |
required : function() { |
return( 'tb_streets' !== this.module ); |
}, |
minlength : 1 |
} |
} |
}); |
$( '#form-observateur' ).validate({ |
rules : { |
courriel : { |
required : true, |
minlength : 1, |
email : true, |
'userEmailOk' : true |
}, |
mdp : { |
required : true, |
minlength : 1 |
} |
} |
}); |
if ( 'tb_lichensgo' !== this.module ) { |
$( '#equipement-pied-arbre' ).change( function() { |
if ( lthis.valOk( $( this ).val(), false, 'other' ) ) { |
$( this ) |
.closest( '.control-group' ) |
.removeClass( 'error' ) |
.find( 'span.error' ) |
.addClass( 'hidden' ); |
} |
}); |
} |
if ( 'tb_streets' !== this.module ) { |
$( '#face-ombre input' ).on( 'click', function() { |
var oneIsChecked = false; |
$( '#face-ombre input' ).each( function() { |
if ( $( this ).is( ':checked' ) ) { |
oneIsChecked = true; |
return false; |
} |
}); |
if ( oneIsChecked ) { |
$( '#face-ombre.control-group' ) |
.removeClass( 'error' ) |
.find( 'span.error' ) |
.addClass( 'hidden' ); |
} else { |
$( '#face-ombre.control-group' ) |
.addClass( 'error' ) |
.find( 'span.error' ) |
.removeClass( 'hidden' ); |
} |
}); |
} |
$( '#connexion,#inscription,#oublie' ).on( 'click', function() { |
$( '#tb-observateur .control-group' ).removeClass( 'error' ); |
}); |
}; |
|
/** |
* Valide le formulaire Relevé (= étape 1) au click sur un bouton "enregistrer" |
*/ |
ReleveASL.prototype.validerReleve = function() { |
const observateur = ( $( '#form-observateur' ).valid() && $( '#courriel' ).valid() ) |
const obs = $( '#form-observation' ).valid(); |
const geoloc = ( |
this.valOk( $( '#latitude-releve' ).val() ) && |
this.valOk( $( '#longitude-releve' ).val() ) && |
this.valOk( $( '#rue' ).val() ) && |
this.valOk( $( '#commune-nom' ).val() ) |
) ; |
var dateRue = true; |
if ( this.valOk( $( '#dates-rues-communes' ).val() ) ) { |
dateRue = ( |
this.valOk( $( '#releve-date' ).val() ) && |
this.valOk( $( '#rue' ).val() ) && |
this.validerDateRueCommune( $( '#releve-date' ).val(), $( '#rue' ).val(), $( '#commune-nom' ).val() ) |
); |
} |
if ( !obs ) { |
this.scrollFormTop( '#zone-observation' ); |
} |
// panneau observateur |
if ( observateur ) { |
this.masquerPanneau( '#dialogue-utilisateur-non-identifie' ); |
$( '#tb-observateur .control-group' ).removeClass( 'error' ); |
} else { |
this.afficherPanneau( '#dialogue-utilisateur-non-identifie' ); |
$( '#tb-observateur .control-group' ).addClass( 'error' ); |
} |
if ( dateRue && geoloc ) { |
this.masquerPanneau( '#dialogue-date-rue-ko' ); |
$( '#geoloc-datas' ).closest( '.control-group' ).removeClass( 'error' ); |
} else { |
if ( |
this.valOk( $( '#releve-date' ).val() ) && |
this.valOk( $( '#rue' ).val() ) && |
this.valOk( $( '#dates-rues-communes' ).val() ) |
) { |
this.afficherPanneau( '#dialogue-date-rue-ko' ); |
} |
$( '#geoloc-datas' ).closest( '.control-group' ).addClass( 'error' ); |
} |
if ( |
!this.valOk( $( '#releve-date' ).val() ) || |
!this.valOk( $( '#rue' ).val() ) || |
!this.valOk( $( '#dates-rues-communes' ).val() ) |
) { |
this.masquerPanneau( '#dialogue-date-rue-ko' ); |
} |
if ( geoloc ) { |
this.masquerPanneau( '#dialogue-geoloc-ko' ); |
if ( dateRue ) { |
$( '#geoloc' ).closest( '.control-group' ).removeClass( 'error' ); |
} |
} else { |
this.afficherPanneau( '#dialogue-geoloc-ko' ); |
$( '#geoloc' ).closest( '.control-group' ).addClass( 'error' ); |
} |
|
return (observateur && obs && geoloc && dateRue); |
}; |
|
/** |
* Valide le formulaire Arbres (= étape 2) au click sur un bouton "suivant" |
*/ |
ReleveASL.prototype.validerForm = function() { |
const validerReleve = this.validerReleve(); |
const geoloc = ( |
this.valOk( $( '#latitude-arbres' ).val() ) && |
this.valOk( $( '#longitude-arbres' ).val() ) |
); |
const taxon = this.valOk( $( '#taxon' ).val() ); |
var piedArbre = true; |
|
if ( 'tb_lichensgo' !== this.module ) { |
piedArbre = this.valOk( $( '#equipement-pied-arbre' ).val(), false, 'other' ); |
if ( piedArbre ) { |
$( '#equipement-pied-arbre' ) |
.closest( '.control-group' ) |
.removeClass( 'error' ) |
.find( 'span.error' ) |
.addClass( 'hidden' ); |
} else { |
$( '#equipement-pied-arbre' ) |
.closest( '.control-group' ) |
.addClass( 'error' ) |
.find( 'span.error' ) |
.removeClass( 'hidden' ); |
} |
} |
|
const obs = ( |
$( '#form-arbres' ).valid() && |
$( '#form-arbre-fs' ).valid() && |
piedArbre |
); |
|
if ( geoloc ) { |
this.masquerPanneau( '#dialogue-geoloc-ko' ); |
$( '#geoloc-arbres' ).closest( '.control-group' ).removeClass( 'error' ); |
} else { |
this.afficherPanneau( '#dialogue-geoloc-ko' ); |
$( '#geoloc-arbres' ).closest( '.control-group' ).addClass( 'error' ); |
} |
|
return ( validerReleve && obs && geoloc && taxon ); |
}; |