Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | RSS feed
/*** Constructeur WidgetsSaisiesASL par défaut* S'applique au squelette apa.tpl.html* Squelette de base d'apa streets et lg*/// ASL : APA, sTREETs, Lichen's Go!function WidgetsSaisiesASL( proprietes ) {if ( utils.valOk( proprietes ) ) {this.urlWidgets = proprietes.urlWidgets;this.projet = proprietes.projet;this.idProjet = proprietes.idProjet;this.tagsMotsCles = proprietes.tagsMotsCles;this.mode = proprietes.mode;this.langue = proprietes.langue;this.serviceObsImgs = proprietes.serviceObsImgs;this.serviceObsImgUrl = proprietes.serviceObsImgUrl;this.serviceAnnuaireIdUrl = proprietes.serviceAnnuaireIdUrl;this.serviceNomCommuneUrl = proprietes.serviceNomCommuneUrl;this.serviceNomCommuneUrlAlt = proprietes.serviceNomCommuneUrlAlt;this.debug = proprietes.debug;this.html5 = proprietes.html5;this.serviceSaisieUrl = proprietes.serviceSaisieUrl;this.serviceObsUrl = proprietes.serviceObsUrl;this.chargementImageIconeUrl = proprietes.chargementImageIconeUrl;this.pasDePhotoIconeUrl = proprietes.pasDePhotoIconeUrl;this.autocompletionElementsNbre = proprietes.autocompletionElementsNbre;this.serviceAutocompletionNomSciUrl = proprietes.serviceAutocompletionNomSciUrl;this.serviceAutocompletionNomSciUrlTpl = proprietes.serviceAutocompletionNomSciUrlTpl;this.dureeMessage = proprietes.dureeMessage;this.obsMaxNbre = proprietes.obsMaxNbre;this.msgs = utils.msgs;}this.urlRacine = window.location.origin;this.isASL = true;this.nbObsEnCours = 1;this.obsNbre = 0;this.totalObsATransmettre = 0;this.nbObsTransmises = 0;this.tagImg = null;this.tagObs = null;this.separationTagImg = null;this.separationTagObs = null;this.nomSciReferentiel = null;this.referentielImpose = null;this.releveDatas = null;this.urlBaseAuth = null;this.idUtilisateur = null;this.sujet = null;this.isTaxonListe = false;}WidgetsSaisiesASL.prototype = new WidgetsSaisiesCommun();/*** Initialise le formulaire, les validateurs, les listes de complétion...*/WidgetsSaisiesASL.prototype.initForm = function() {this.initFormConnection();};WidgetsSaisiesASL.prototype.initEvts = function() {const lthis = this;// initialisation des fonctions connexion utilisateurthis.initEvtsConnection();// chargement plantes ou lichensif ( this.valOk( $( '.charger-releve' ) ) ) {var btnChargementForm = this.determinerBtnsChargementForm( '.' );// #releve-data n'est pas modifié, bouton dans #releves-utilisateurthis.btnsChargerForm( btnChargementForm, false );}};WidgetsSaisiesASL.prototype.determinerBtnsChargementForm = function( typeSelecteur, ajouterBtnPoursuivre = false ) {var complement = '',selecteurDefault = '',separateur = ',';if ( '#' === typeSelecteur ) {if ( ajouterBtnPoursuivre ) {selecteurDefault = 'poursuivre';}typeSelecteur += 'bouton-';} else if ( '.' === typeSelecteur ) {selecteurDefault = 'charger-releve';complement = separateur + typeSelecteur;}switch( this.projet ) {case 'tb_streets':if ( !ajouterBtnPoursuivre ) {complement += 'saisir-plantes';}break;case 'tb_lichensgo':if ( !ajouterBtnPoursuivre ) {complement += 'saisir-lichens';}break;case 'tb_aupresdemonarbre':default:separateur += typeSelecteur;if ( ajouterBtnPoursuivre) {complement = separateur;}complement += 'saisir-plantes' + separateur + 'saisir-lichens';break;}return typeSelecteur + selecteurDefault + complement;};WidgetsSaisiesASL.prototype.btnsChargerForm = function( btn, modifierReleveData = true, dansRelevesUtilisateur = true ) {const lthis = this;var bloc = ( dansRelevesUtilisateur ) ? '#releves-utilisateur' : '#charger-form';$( btn, bloc ).off().on( 'click', function( event ) {event.preventDefault();var thisWidgetObs = ( lthis.valOk( $( '#' + lthis.projet + '-obs' ).val() ) ) ? $.parseJSON( $( '#' + lthis.projet + '-obs' ).val() ) : [];var nomSquelette = $( this ).data( 'load' ),releveDatas = '';$( '#charger-form' ).data( 'load', nomSquelette );if ( modifierReleveData ) {if ( '#bouton-nouveau-releve' !== btn ) {$( '#bouton-nouveau-releve' ).removeClass( 'hidden' );if ( lthis.valOk( thisWidgetObs ) ) {releveDatas = JSON.stringify( thisWidgetObs[ $( this ).data( 'releve' ) ] );}} else {$( btn ).addClass( 'hidden' );}$( '#releve-data' ).val( releveDatas );}lthis.chargerForm( nomSquelette, lthis );if ( lthis.valOk( thisWidgetObs ) ) {$( '#bouton-list-releves' ).removeClass( 'hidden' );}$( '#table-releves' ).addClass( 'hidden' );});};WidgetsSaisiesASL.prototype.chargerForm = function( nomSquelette, formObj ) {const lthis = this;var urlSquelette = this.urlWidgets + 'saisie?projet=' + this.projet + '&squelette=' + nomSquelette;$.ajax({url: urlSquelette,type: 'get',success: function( squelette ) {if ( lthis.valOk( squelette ) ) {formObj.chargerSquelette( squelette, nomSquelette );}},error: function() {$( '#charger-form' ).html( lthis.msgTraduction( 'erreur-formulaire' ) );}});};// Préchargement des infos-obs ************************************************//*** Callback dans le chargement du formulaire dans #charger-form*/WidgetsSaisiesASL.prototype.chargerSquelette = function( squelette , nomSquelette ) {// à compléter plus tard si nécessaire, pour le moment on charge "arbres"switch( nomSquelette ) {case 'plantes' :case 'lichens' :this.chargerFormPlantesOuLichens( squelette, nomSquelette );break;case 'arbres' :default :if ( this.valOk( this.sujet ) ) {this.reinitialiserWidget( squelette );} else {this.chargerObsUtilisateur( squelette );}break;}};WidgetsSaisiesASL.prototype.chargerFormPlantesOuLichens = function( squelette, nomSquelette ) {if ( this.valOk( $( '#releve-data' ).val() ) ) {$( '#charger-form' ).html( squelette );this.confirmerSortie();const releveDatas = $.parseJSON( $( '#releve-data' ).val() );const nbArbres = releveDatas.length -1;for ( var i = 1; i <= nbArbres ; i++ ) {$( '#choisir-arbre' ).append('<option value="' + i + '">'+this.msgTraduction( 'arbre' ) + ' ' + i +'</option>');}this.scrollFormTop( '#zone-' + nomSquelette );}};WidgetsSaisiesASL.prototype.reinitialiserWidget = function( squelette ) {$( '#charger-form' ).html( squelette );if ( this.valOk( $( '#releve-data' ).val() ) ) {this.rechargerFormulaire();}};/*** Infos des obs arbres de cet utilisateur*/WidgetsSaisiesASL.prototype.chargerObsUtilisateur = function( formReleve ) {const lthis = this;var tagsMotsCles = this.tagsMotsCles.split( ',' ),reprereAjoutTags = tagsMotsCles.length - 1,queryStringMotsCles = '';$.each( tagsMotsCles , function( i, tag ) {queryStringMotsCles += 'mots_cles=' + tagsMotsCles[i];if ( i < reprereAjoutTags ) {queryStringMotsCles += '&';}});const urlObs =$( 'body' ).data( 'obs-list' ) + '/'+$( '#id_utilisateur' ).val() + '?' + queryStringMotsCles;$.ajax({url: urlObs,type: 'GET',success: function( dataObs, textStatus, jqXHR ) {if ( !lthis.valOk( dataObs ) ) {dataObs = '';}lthis.preformaterDonneesObs( dataObs );},error: function( jqXHR, textStatus, errorThrown ) {lthis.activerModale( lthis.msgTraduction( 'erreur-chargement-obs-utilisateur' ) );}}).always( function() {$( '#charger-form' ).html( formReleve );});};/*** Préformater les données des obs d'un utilisateur*/WidgetsSaisiesASL.prototype.preformaterDonneesObs = function( dataObs ) {const lthis = this;if ( this.valOk( dataObs ) ) {var projetObs = [],datRuComun = [],obsArbres = [],projetObsE = {},count = 0,tagsMotsCles = this.tagsMotsCles.split( ',' );$.each( dataObs, function( i, obs ) {if (new RegExp( tagsMotsCles[0] ).test( obs.mots_cles_texte ) &&new RegExp( tagsMotsCles[1] ).test( obs.mots_cles_texte ) &&!/(:?plantes|lichens(?!go))/.test( obs.mots_cles_texte )) {if ( lthis.valOk( obs.obs_etendue ) ) {$.each( obs.obs_etendue, function( indice, obsE ) {projetObsE[obsE.cle] = obsE.valeur;});}obs.date_observation = $.trim( obs.date_observation.replace( /[0-9]{2}:[0-9]{2}:[0-9]{2}$/, '') );if ( -1 === datRuComun.indexOf( obs.date_observation + projetObsE.rue + obs.zone_geo ) ) {datRuComun.push( obs.date_observation + projetObsE.rue + obs.zone_geo );projetObs[count] = lthis.formaterReleveData( { 'obs':obs, 'obsE':projetObsE } );count++;}obsArbres.push( lthis.formaterArbreData( { 'obs':obs, 'obsE':projetObsE } ) );projetObsE = [];}});// on insert les arbres dans les relevés en fonction de la date et la rue d'observation// car les arbres pour un relevé (date/rue) n'ont pas forcément été enregistrés dans l'ordre ni le même jour$.each( obsArbres, function( indexArbre, arbre ) {for ( var indexReleve = 0; indexReleve < datRuComun.length; indexReleve++ ) {if ( arbre.date_rue_commune === datRuComun[indexReleve] ) {projetObs[indexReleve].push( arbre );}}});if ( this.valOk( projetObs ) ) {this.prechargerLesObs( projetObs );$( '#' + this.projet + '-obs' ).val( JSON.stringify( projetObs ) );$( '#bouton-list-releves' ).removeClass( 'hidden' );}$( '#dates-rues-communes' ).val( JSON.stringify( datRuComun ) );}};/*** Stocke en Json les valeurs du relevé dans en value d'un input hidden*/WidgetsSaisiesASL.prototype.formaterReleveData = function( releveDatas ) {var releve = [],obs = releveDatas.obs,obsE = releveDatas.obsE;releve[0] = {utilisateur : obs.ce_utilisateur,date : obs.date_observation,rue : obsE.rue,'commune-nom' : obs.zone_geo,'commune-insee' : obs.ce_zone_geo,pays : obs.pays,'geometry-releve' : obsE['geometry-releve'],'latitude-releve' : obsE['latitude-releve'],'longitude-releve' : obsE['longitude-releve'],'altitude-releve' : obsE['altitude-releve'],commentaires : obs.commentaire};if ( 'tb_lichensgo' !== this.projet ) {releve[0]['zone-pietonne'] = obsE['zone-pietonne'];releve[0]['pres-lampadaires'] = obsE['pres-lampadaires'];}return releve;};/*** Stocke en Json les valeurs d'une obs*/WidgetsSaisiesASL.prototype.formaterArbreData = function( arbresDatas ) {var retour = {},obs = arbresDatas.obs,obsE = arbresDatas.obsE,miniatureImg = [];if( this.valOk( obs['miniature-img'] ) ) {miniatureImg = obs['miniature-img'];} else if ( this.valOk( obsE['miniature-img'] ) ) {miniatureImg = $.parseJSON( obsE['miniature-img'] );}retour = {'date_rue_commune' : obs.date_observation + obsE.rue + obs.zone_geo,'num-arbre' : obsE.num_arbre,'id_observation' : obs.id_observation,'taxon' : {'numNomSel' : obs.nom_sel_nn,'value' : obs.nom_sel,'nomRet' : obs.nom_ret,'numNomRet' : obs.nom_ret_nn,'nt' : obs.nt,'famille' : obs.famille,},'miniature-img' : miniatureImg,'referentiel' : obs.nom_referentiel,'certitude' : obs.certitude,'rue-arbres' : obsE['rue-arbres'],'geometry-arbres' : obs['geometry'],'latitude-arbres' : obs['latitude'],'longitude-arbres' : obs['longitude'],'altitude-arbres' : obs['altitude'],'circonference' : obsE.circonference,'com-arbres' : obsE['com-arbres']};if ( 'tb_lichensgo' !== this.projet ) {retour['surface-pied'] = obsE['surface-pied'];retour['equipement-pied-arbre'] = obsE['equipement-pied-arbre'];retour['tassement'] = obsE.tassement;retour['dejections'] = obsE.dejections;}if ( 'tb_streets' !== this.projet ) {retour['face-ombre'] = obsE['face-ombre'];}return retour;};WidgetsSaisiesASL.prototype.prechargerLesObs = function( thisWidgetObs ) {const lthis = this;const $listReleve = $( '#list-releves' );const TEXT_ARBRE = ' ' + this.msgTraduction( 'arbre' ).toLowerCase();var nbArbres = '',texteArbre = '',releveHtml = '';$( '#bouton-list-releves' ).removeClass( 'hidden' ).on( 'click', function( event ) {event.preventDefault();$( '#table-releves' ).removeClass( 'hidden' );$( this ).addClass( 'hidden' );});function boutonsChargerReleve( lthis, squelette, indice ) {var boutonLichens ='<a href="" class="saisir-lichens btn btn-sm btn-info" data-releve="' + indice + '" data-load="lichens">'+'<i class="far fa-snowflake"></i> ' + lthis.msgTraduction( 'saisir-lichens' )+'</a> ',boutonPlantes ='<a href="" class="saisir-plantes btn btn-sm btn-info mb-1" data-releve="' + indice + '" data-load="plantes">'+'<i class="fas fa-seedling"></i> ' + lthis.msgTraduction( 'saisir-plantes' )+'</a> ';switch( squelette ) {case 'tb_streets':return boutonPlantes;case 'tb_lichensgo' :return boutonLichens;case 'tb_aupresdemonarbre' :default :return boutonPlantes + boutonLichens;}return '';}$.each( thisWidgetObs, function( i, releve ) {nbArbres = releve.length - 1;texteArbre = ( 1 < nbArbres ) ? ( TEXT_ARBRE + 's' ) : TEXT_ARBRE;releveHtml +='<tr class="table-light text-center">'+'<td>' +'<p>'+lthis.fournirDate( releve[0].date ) +'</p><p>'+releve[0].rue + ', ' + releve[0]['commune-nom'] +'</p><p>'+'(' + nbArbres + texteArbre + ')' +'</p>'+'</td>'+'<td class="d-flex flex-column">' +'<a href="" class="charger-releve btn btn-sm btn-info mb-1" data-releve="' + i + '" data-load="arbres">'+'<i class="fas fa-clone"></i> ' + lthis.msgTraduction( 'dupliquer' )+'</a> '+boutonsChargerReleve( lthis, lthis.projet, i ) +'</td>'+'</tr>';});$listReleve.append( releveHtml );$( '#nb-releves-bienvenue' ).removeClass( 'hidden' ).find( 'span.nb-releves' ).text( thisWidgetObs.length );};