Rev 3313 | Blame | Compare with Previous | Last modification | View Log | RSS feed
function WidgetApa() {this.utils = new UtilsApa();this.mode = null;this.urlRacine = window.location.origin;this.urlBaseAuth = null;this.idUtilisateur = null;this.infosUtilisateur = null;}WidgetApa.prototype.init = function() {const lthis = this;this.urlBaseAuth = this.urlRacine + '/service:annuaire:auth';$( '#mdp' ).val('');$( '#inscription' ).attr( 'href', this.urlSiteTb() + 'inscription' );$( '#inscription' ).attr( 'href', this.urlSiteTb() + 'wp-login.php?action=lostpassword' );this.chargerStatutSSO();this.connexionDprodownMenu()$( '#deconnexion a' ).click( function( event ) {event.preventDefault();lthis.deconnecterUtilisateur();});$( '#formulaire' ).on( 'click', '.saisir-plantes,.saisir-lichens', function() {var nomSquelette = $( this ).data( 'load' );$( '#charger-form' ).data( 'load', nomSquelette );lthis.utils.chargerForm( nomSquelette, lthis );$( '#bouton-list-releves' ).removeClass( 'hidden' );$( '#table-releves' ).addClass( 'hidden' );});};/*** Interroge le SSO pour connaître le statut de l'utilisateur, et change le menu* à droite de la barre en fonction*/WidgetApa.prototype.chargerStatutSSO = function() {const lthis = this;var urlAuth = this.urlBaseAuth + '/identite';if( 'local' !== this.mode ) {this.connexion( urlAuth, true );$( '#connexion' ).click( function( event ) {event.preventDefault();if( $( '#utilisateur-connecte' ).hasClass( 'hidden' ) || !lthis.utils.valOk( $( '#nom-complet' ).text() ) ) {var login = $( '#courriel' ).val(),mdp = $( '#mdp' ).val();if ( lthis.utils.valOk( login ) && lthis.utils.valOk( mdp ) ) {urlAuth = lthis.urlBaseAuth + '/connexion?login=' + login + '&password=' + mdp;lthis.connexion( urlAuth, true );} else {alert( lthis.utils.msgTraduction( 'non-connexion' ) );}}});} else {urlAuth = this.urlRacine + '/widget:cel:modules/apa/test-token.json';// $( '#connexion' ).click( function( event ) {// event.preventDefault();// lthis.connexion( urlAuth, true );this.connexion( urlAuth, true );// });}};/*** Déconnecte l'utilisateur du SSO*/WidgetApa.prototype.deconnecterUtilisateur = function() {var urlAuth = this.urlBaseAuth + '/deconnexion';if( 'local' === this.mode ) {this.definirUtilisateur();window.location.reload();return;}this.connexion( urlAuth, false );};WidgetApa.prototype.connexion = function( urlAuth, connexionOnOff ) {const lthis = this;$.ajax({url: urlAuth,type: "GET",dataType: 'json',xhrFields: {withCredentials: true}}).done( function( data ) {if( connexionOnOff ) {// connectélthis.definirUtilisateur( data.token );} else {lthis.definirUtilisateur();window.location.reload();}}).fail( function( error ) {// @TODO gérer l'affichage de l'erreur, mais pas facile à placer// dans l'interface actuelle sans que ce soit moche//afficherErreurServeur();});};WidgetApa.prototype.definirUtilisateur = function( jeton ) {const thisObj = this;var nomComplet = '',courriel = '',pseudo = '',prenom = '',nom = '';// affichageif ( undefined !== jeton ) {// décodage jetonthis.infosUtilisateur = this.decoderJeton( jeton );// console.log(jetonDecode);idUtilisateur = this.infosUtilisateur.id;nomComplet = this.infosUtilisateur.intitule;courriel = this.infosUtilisateur.sub;pseudo = this.infosUtilisateur.pseudo;prenom = this.infosUtilisateur.prenom;nom = this.infosUtilisateur.nom;$( '#courriel' ).attr( 'disabled', 'disabled' );$( '#bloc-connexion' ).addClass( 'hidden' );$( '#utilisateur-connecte, #anonyme' ).removeClass( 'hidden' );}$( '#id_utilisateur' ).val( idUtilisateur );$( '#prenom' ).val( prenom );$( '#nom' ).val( nom );$( '#nom-complet' ).html( nomComplet );$( '#courriel' ).val( courriel );$( '#profil-utilisateur a' ).attr( 'href', this.urlSiteTb() + 'membres/' + pseudo.toLowerCase().replace( ' ', '-' ) );if ( this.utils.valOk( idUtilisateur ) ) {var nomSquelette = $( '#charger-form' ).data( 'load' ) || 'arbres';this.utils.chargerForm( nomSquelette, thisObj );}};/*** Décodage à l'arrache d'un jeton JWT, ATTENTION CONSIDERE QUE LE* JETON EST VALIDE, ne pas décoder n'importe quoi - pas trouvé de lib simple*/WidgetApa.prototype.decoderJeton = function( jeton ) {var parts = jeton.split( '.' ),payload = parts[1];payload = this.b64d( payload );payload = JSON.parse( payload, true );return payload;};/*** Décodage "url-safe" des chaînes base64 retournées par le SSO (lib jwt)*/WidgetApa.prototype.b64d = function( input ) {var remainder = input.length % 4;if ( 0 !== remainder ) {var padlen = 4 - remainder;for ( var i = 0; i < padlen; i++ ) {input += '=';}}input = input.replace( '-', '+' );input = input.replace( '_', '/' );return atob( input );};WidgetApa.prototype.urlSiteTb = function() {var urlPart = ( 'test' === this.mode ) ? '/test/' : '/';return this.urlRacine + urlPart;};// Volet de profil/déconnexionWidgetApa.prototype.connexionDprodownMenu = function() {$( '#utilisateur-connecte .volet-toggle, #profil-utilisateur a, #deconnexion a' ).click( function( event ) {if( $( this ).hasClass( 'volet-toggle' ) ) {event.preventDefault();}$( '#utilisateur-connecte .volet-menu' ).toggleClass( 'hidden' );});}// Préchargement des infos-obs ************************************************//*** Callback dans le chargement du formulaire dans #charger-form*/WidgetApa.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.utils.chargerFormPlantesOuLichens( squelette, nomSquelette );break;case 'arbres' :default :this.chargerObsUtilisateur( squelette );break;}};/*** Infos des obs arbres de cet utilisateur*/WidgetApa.prototype.chargerObsUtilisateur = function( formReleve ) {const lthis = this;const urlObs = $( 'body' ).data( 'obs-list' ) + '/' + this.infosUtilisateur.id;$( '#bouton-nouveau-releve' ).removeClass( 'hidden' );$.ajax({url: urlObs,type: 'GET',success: function( dataObs, textStatus, jqXHR ) {if ( !lthis.utils.valOk( dataObs ) ) {dataObs = '';}lthis.preformaterDonneesObs( dataObs );},error: function( jqXHR, textStatus, errorThrown ) {alert( lthis.utils.msgTraduction( 'erreur-chargement-obs-utilisateur' ) );}}).always( function() {$( '#charger-form' ).html( formReleve );});};/*** Préformater les données des obs d'un utilisateur*/WidgetApa.prototype.preformaterDonneesObs = function( dataObs ) {const lthis = this;if ( this.utils.valOk( dataObs ) ) {var apaObs = [],datRuComun = [],obsArbres = [],apaObsE = {},count = 0;$.each( dataObs, function( i, obs ) {if( /WidgetApa/.test( obs.mots_cles_texte ) && !/(:?plantes|lichens)/.test( obs.mots_cles_texte ) ) {if ( lthis.utils.valOk( obs.obs_etendue ) ) {$.each( obs.obs_etendue, function( indice, obsE ) {apaObsE[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 + apaObsE.rue + obs.zone_geo ) ) {datRuComun.push( obs.date_observation + apaObsE.rue + obs.zone_geo );apaObs[count] = lthis.utils.formaterReleveData( { 'obs':obs, 'obsE':apaObsE } );count++;}obsArbres.push( lthis.utils.formaterArbreData( { 'obs':obs, 'obsE':apaObsE } ) );apaObsE = [];}});// 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] ) {apaObs[indexReleve].push( arbre );}}});if ( this.utils.valOk( apaObs ) ) {this.prechargerLesObs( apaObs );$( '#apa-obs' ).val( JSON.stringify( apaObs ) );$( '#bouton-list-releves' ).removeClass( 'hidden' );}$( '#dates-rues-communes' ).val( JSON.stringify( datRuComun ) );}};WidgetApa.prototype.prechargerLesObs = function( apaObs ) {const lthis = this;const $listReleve = $( '#list-releves' );const TEXT_ARBRE = ' ' + this.utils.msgTraduction( 'arbre' ).toLowerCase();var nbArbres = '',texteArbre = '';var releveHtml = '';$( '#bouton-list-releves' ).removeClass( 'hidden' ).click( function() {$( '#table-releves' ).removeClass( 'hidden' );$( this ).addClass( 'hidden' );});$.each( apaObs, 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.utils.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">' +'<div class="charger-releve btn btn-sm btn-info mb-1" data-releve="' + i + '" data-load="arbres">'+'<i class="fas fa-clone"></i> ' + lthis.utils.msgTraduction( 'dupliquer' )+'</div> '+'<div class="saisir-plantes btn btn-sm btn-info mb-1" data-releve="' + i + '" data-load="plantes">'+'<i class="fas fa-seedling"></i> ' + lthis.utils.msgTraduction( 'saisir-plantes' )+'</div> '+'<div class="saisir-lichens btn btn-sm btn-info" data-releve="' + i + '" data-load="lichens">'+// '<i class="fas fa-certificate"></i> ' + lthis.utils.msgTraduction( 'saisir-lichens' )+'<i class="far fa-snowflake"></i> ' + lthis.utils.msgTraduction( 'saisir-lichens' )+'</div> '+'</td>'+'</tr>';});$listReleve.append( releveHtml );$( '#nb-releves-bienvenue' ).removeClass( 'hidden' ).find( 'span.nb-releves' ).text( apaObs.length );};