New file |
0,0 → 1,329 |
function WidgetLg() { |
this.utils = new UtilsLg(); |
this.mode = null; |
this.urlRacine = window.location.origin; |
this.urlBaseAuth = null; |
this.idUtilisateur = null; |
this.infosUtilisateur = null; |
} |
|
WidgetLg.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-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 |
*/ |
WidgetLg.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/lg/test-token.json'; |
// $( '#connexion' ).click( function( event ) { |
// event.preventDefault(); |
// lthis.connexion( urlAuth, true ); |
this.connexion( urlAuth, true ); |
// }); |
} |
}; |
|
/** |
* Déconnecte l'utilisateur du SSO |
*/ |
WidgetLg.prototype.deconnecterUtilisateur = function() { |
var urlAuth = this.urlBaseAuth + '/deconnexion'; |
|
if( 'local' === this.mode ) { |
this.definirUtilisateur(); |
window.location.reload(); |
return; |
} |
this.connexion( urlAuth, false ); |
}; |
|
WidgetLg.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(); |
}); |
}; |
|
|
WidgetLg.prototype.definirUtilisateur = function( jeton ) { |
const thisObj = this; |
var nomComplet = '', |
courriel = '', |
pseudo = '', |
prenom = '', |
nom = ''; |
|
// affichage |
if ( undefined !== jeton ) { |
// décodage jeton |
this.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 |
*/ |
WidgetLg.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) |
*/ |
WidgetLg.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 ); |
}; |
|
WidgetLg.prototype.urlSiteTb = function() { |
var urlPart = ( 'test' === this.mode ) ? '/test/' : '/'; |
|
return this.urlRacine + urlPart; |
}; |
|
// Volet de profil/déconnexion |
WidgetLg.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 |
*/ |
WidgetLg.prototype.chargerSquelette = function( squelette , nomSquelette ) { |
// à compléter plus tard si nécessaire, pour le moment on charge "arbres" |
switch( nomSquelette ) { |
case 'lichens' : |
this.utils.chargerFormLichens( squelette, nomSquelette ); |
break; |
case 'arbres' : |
default : |
this.chargerObsUtilisateur( squelette ); |
break; |
} |
}; |
|
/** |
* Infos des obs arbres de cet utilisateur |
*/ |
WidgetLg.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 |
*/ |
WidgetLg.prototype.preformaterDonneesObs = function( dataObs ) { |
const lthis = this; |
if ( this.utils.valOk( dataObs ) ) { |
var lgObs = [], |
datRuComun = [], |
obsArbres = [], |
lgObsE = {}, |
count = 0; |
|
$.each( dataObs, function( i, obs ) { |
if( /WidgetLg/.test( obs.mots_cles_texte ) && !/(:?lichens)/.test( obs.mots_cles_texte ) ) { |
if ( lthis.utils.valOk( obs.obs_etendue ) ) { |
$.each( obs.obs_etendue, function( indice, obsE ) { |
lgObsE[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 + lgObsE.rue + obs.zone_geo ) ) { |
datRuComun.push( obs.date_observation + lgObsE.rue + obs.zone_geo ); |
lgObs[count] = lthis.utils.formaterReleveData( { 'obs':obs, 'obsE':lgObsE } ); |
count++; |
} |
obsArbres.push( lthis.utils.formaterArbreData( { 'obs':obs, 'obsE':lgObsE } ) ); |
lgObsE = []; |
} |
}); |
// 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] ) { |
lgObs[indexReleve].push( arbre ); |
} |
} |
}); |
if ( this.utils.valOk( lgObs ) ) { |
this.prechargerLesObs( lgObs ); |
$( '#lg-obs' ).val( JSON.stringify( lgObs ) ); |
$( '#bouton-list-releves' ).removeClass( 'hidden' ); |
} |
$( '#dates-rues-communes' ).val( JSON.stringify( datRuComun ) ); |
} |
}; |
|
WidgetLg.prototype.prechargerLesObs = function( lgObs ) { |
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( lgObs, 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-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( lgObs.length ); |
}; |