2020-08-07 12:23:59 +02:00
/******/ ( function ( modules ) { // webpackBootstrap
/******/ // The module cache
/******/ var installedModules = { } ;
/******/
/******/ // The require function
/******/ function _ _webpack _require _ _ ( moduleId ) {
/******/
/******/ // Check if module is in cache
/******/ if ( installedModules [ moduleId ] ) {
/******/ return installedModules [ moduleId ] . exports ;
/******/ }
/******/ // Create a new module (and put it into the cache)
/******/ var module = installedModules [ moduleId ] = {
/******/ i : moduleId ,
/******/ l : false ,
/******/ exports : { }
/******/ } ;
/******/
/******/ // Execute the module function
/******/ modules [ moduleId ] . call ( module . exports , module , module . exports , _ _webpack _require _ _ ) ;
/******/
/******/ // Flag the module as loaded
/******/ module . l = true ;
/******/
/******/ // Return the exports of the module
/******/ return module . exports ;
/******/ }
/******/
/******/
/******/ // expose the modules object (__webpack_modules__)
/******/ _ _webpack _require _ _ . m = modules ;
/******/
/******/ // expose the module cache
/******/ _ _webpack _require _ _ . c = installedModules ;
/******/
/******/ // define getter function for harmony exports
/******/ _ _webpack _require _ _ . d = function ( exports , name , getter ) {
/******/ if ( ! _ _webpack _require _ _ . o ( exports , name ) ) {
/******/ Object . defineProperty ( exports , name , { enumerable : true , get : getter } ) ;
/******/ }
/******/ } ;
/******/
/******/ // define __esModule on exports
/******/ _ _webpack _require _ _ . r = function ( exports ) {
/******/ if ( typeof Symbol !== 'undefined' && Symbol . toStringTag ) {
/******/ Object . defineProperty ( exports , Symbol . toStringTag , { value : 'Module' } ) ;
/******/ }
/******/ Object . defineProperty ( exports , '__esModule' , { value : true } ) ;
/******/ } ;
/******/
/******/ // create a fake namespace object
/******/ // mode & 1: value is a module id, require it
/******/ // mode & 2: merge all properties of value into the ns
/******/ // mode & 4: return value when already ns object
/******/ // mode & 8|1: behave like require
/******/ _ _webpack _require _ _ . t = function ( value , mode ) {
/******/ if ( mode & 1 ) value = _ _webpack _require _ _ ( value ) ;
/******/ if ( mode & 8 ) return value ;
/******/ if ( ( mode & 4 ) && typeof value === 'object' && value && value . _ _esModule ) return value ;
/******/ var ns = Object . create ( null ) ;
/******/ _ _webpack _require _ _ . r ( ns ) ;
/******/ Object . defineProperty ( ns , 'default' , { enumerable : true , value : value } ) ;
/******/ if ( mode & 2 && typeof value != 'string' ) for ( var key in value ) _ _webpack _require _ _ . d ( ns , key , function ( key ) { return value [ key ] ; } . bind ( null , key ) ) ;
/******/ return ns ;
/******/ } ;
/******/
/******/ // getDefaultExport function for compatibility with non-harmony modules
/******/ _ _webpack _require _ _ . n = function ( module ) {
/******/ var getter = module && module . _ _esModule ?
/******/ function getDefault ( ) { return module [ 'default' ] ; } :
/******/ function getModuleExports ( ) { return module ; } ;
/******/ _ _webpack _require _ _ . d ( getter , 'a' , getter ) ;
/******/ return getter ;
/******/ } ;
/******/
/******/ // Object.prototype.hasOwnProperty.call
/******/ _ _webpack _require _ _ . o = function ( object , property ) { return Object . prototype . hasOwnProperty . call ( object , property ) ; } ;
/******/
/******/ // __webpack_public_path__
/******/ _ _webpack _require _ _ . p = "" ;
/******/
/******/
/******/ // Load entry module and return exports
/******/ return _ _webpack _require _ _ ( _ _webpack _require _ _ . s = "./src/manageUsers.js" ) ;
/******/ } )
/************************************************************************/
/******/ ( {
/***/ "../config/instance.js" :
/ * ! * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ! * \
! * * * . . / config / instance . js * * * !
\ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * /
/*! no static exports found */
/***/ ( function ( module , exports , _ _webpack _require _ _ ) {
var _module$exports ;
function _defineProperty ( obj , key , value ) { if ( key in obj ) { Object . defineProperty ( obj , key , { value : value , enumerable : true , configurable : true , writable : true } ) ; } else { obj [ key ] = value ; } return obj ; }
var users = _ _webpack _require _ _ ( /*! ./users */ "../config/users.js" ) ;
var questionnaires = _ _webpack _require _ _ ( /*! ./questionnaires */ "../config/questionnaires.js" ) ;
module . exports = ( _module$exports = {
apiUrl : "http://localhost:3000/api" ,
siteUrl : "http://localhost:8080" ,
adminName : "Fabrice" ,
adminEmail : "dev@wikilerni.com" ,
2020-08-07 12:38:19 +02:00
senderName : "WikiLerni (local)" ,
2020-08-07 12:23:59 +02:00
senderEmail : "bonjour@wikilerni.com" ,
adminLang : "fr" ,
2020-08-07 12:38:19 +02:00
theme : "wikilerni" ,
2020-08-07 12:23:59 +02:00
// le thème utilisé (dans /views) pour générer les pages HTML. Contient ses propres fichiers de configuration.
availableLangs : [ "fr" ] ,
// Languages in which the site is available. The first one is the default one.
2020-08-07 12:38:19 +02:00
siteName : "WikiLerni (local)" ,
beginCodeGodfather : "WL" ,
2020-08-07 12:23:59 +02:00
// case-sensitive and can't contain "@" !
cronTimingAlertInSeconde : 120 ,
// for logs
responseTimingAlertInSeconde : 3 ,
// idem
tokenSignupValidationTimeInHours : "48h" ,
// https://github.com/zeit/ms
tokenLoginLinkTimeInHours : "1h" ,
tokenConnexionMinTimeInHours : "24h" ,
tokenConnexionMaxTimeInDays : "180 days" ,
tokenLoginChangingTimeInHours : "1h" ,
// for email & password changing
tokenDeleteUserTimeInHours : "1h" ,
tokenUnsubscribeLinkTimeInDays : "7 days" ,
// token send with subscription's emails
freeAccountTimingInDays : 10 ,
freeAccountExpirationNotificationInDays : 5 ,
accountExpirationFirstNotificationInDays : 14 ,
accountExpirationSecondNotificationInDays : 5 ,
inactiveAccountTimeToDeleteInDays : 180 ,
// Questionnaires:
nbQuestionsMin : 1 ,
// minimum number of questions for the questionnaire to be publishable
2020-08-07 12:38:19 +02:00
nbQuestionsMax : 2 ,
2020-08-07 12:23:59 +02:00
// if 0 = not maximum
nbChoicesMax : 10 ,
nbNewQuestionnaires : 10 ,
// for RSS, etc.
hourGiveNewQuestionnaireBegin : 1 ,
// in user local time
hourGiveNewQuestionnaireEnd : 24 ,
// idem
numberNewQuestionnaireAtSameTime : 50 ,
// for mass mailing
minSearchQuestionnaires : 3 ,
// Illustrations:
nbIllustrationsMin : 0 ,
nbIllustrationsMax : 1 ,
maxIllustrationSizeinOctet : 1000000 ,
// pas contrôlé pour l'instant. À revoir.
mimeTypesForIllustration : [ "image/jpg" , "image/jpeg" , "image/png" , "image/gif" , "image/png" ] ,
// -- Upload and resize:
illustrationsWidthMaxInPx : 400 ,
illustrationsMiniaturesWidthMaxInPx : 200 ,
// Links:
nbLinksMin : 1 ,
nbLinksMax : 1
} , _defineProperty ( _module$exports , "nbQuestionsMin" , questionnaires . nbQuestionsMin ) , _defineProperty ( _module$exports , "nbQuestionsMax" , questionnaires . nbQuestionsMax ) , _defineProperty ( _module$exports , "nbChoicesMax" , questionnaires . nbChoicesMax ) , _defineProperty ( _module$exports , "passwordMinLength" , users . password . minlength ) , _defineProperty ( _module$exports , "dirCacheUsers" , users . dirCacheUsers ) , _defineProperty ( _module$exports , "dirCacheUsersAnswers" , users . dirCacheUsersAnswers ) , _defineProperty ( _module$exports , "dirCacheQuestionnaires" , questionnaires . dirCacheQuestionnaires ) , _defineProperty ( _module$exports , "dirCacheQuestions" , questionnaires . dirCacheQuestions ) , _defineProperty ( _module$exports , "dirCacheUsersQuestionnaires" , questionnaires . dirCacheUsersQuestionnaires ) , _defineProperty ( _module$exports , "dirHTMLQuestionnaire" , questionnaires . dirHTMLQuestionnaire ) , _defineProperty ( _module$exports , "dirWebQuestionnaire" , questionnaires . dirWebQuestionnaire ) , _module$exports ) ;
/***/ } ) ,
/***/ "../config/questionnaires.js" :
/ * ! * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ! * \
! * * * . . / config / questionnaires . js * * * !
\ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * /
/*! no static exports found */
/***/ ( function ( module , exports ) {
module . exports = {
// API'routes (after "apiUrl" defined in instance.js)
questionnaireRoutes : "/questionnaire" ,
getQuestionnaireRoutes : "/get" ,
previewQuestionnaireRoutes : "/preview" ,
publishedQuestionnaireRoutes : "/quiz/" ,
saveAnswersRoute : "/answer/" ,
getStatsQuestionnaires : "/stats/" ,
searchQuestionnairesRoute : "/search" ,
2020-08-07 12:38:19 +02:00
getRandomQuestionnairesRoute : "/getrandom" ,
2020-08-07 12:23:59 +02:00
searchAdminQuestionnairesRoute : "/searchadmin" ,
getListNextQuestionnaires : "/getlistnextquestionnaires/" ,
2020-08-07 12:38:19 +02:00
regenerateHTML : "/htmlregenerated" ,
2020-08-07 12:23:59 +02:00
// -- questions & choices :
questionsRoute : "/question/" ,
// -- tags :
tagsSearchRoute : "/tags/search/" ,
// -- answers :
getQuestionnairesWithoutAnswer : "/withoutanswer/user/" ,
getPreviousAnswers : "/user/answers/" ,
getStatsAnswers : "/user/anwswers/stats/" ,
getAdminStats : "/getadminstats/" ,
// forms : à compléter avec valeurs par défaut, etc. cf modèle
Questionnaire : {
title : {
maxlength : 255 ,
required : true
} ,
slug : {
maxlength : 150
} ,
// champ requis mais calculé à partir du titre qd vide
introduction : {
required : true
}
} ,
searchQuestionnaires : {
minlength : 3 ,
required : true
} ,
Question : {
text : {
maxlength : 255 ,
required : true
} ,
rank : {
required : true ,
min : 1 ,
defaultValue : 1
}
} ,
Choice : {
text : {
maxlength : 255 ,
required : true
}
} ,
nbQuestionsMin : 1 ,
2020-08-07 12:38:19 +02:00
nbQuestionsMax : 0 ,
2020-08-07 12:23:59 +02:00
nbChoicesMax : 10 ,
nbTagsMin : 0 ,
nbTagsMax : 0 ,
// 0 = not max
// JSON and HTML dir
dirCacheQuestionnaires : "datas/questionnaires" ,
dirCacheQuestions : "datas/questionnaires/questions" ,
dirCacheUsersQuestionnaires : "datas/users/questionnaires" ,
dirCacheTags : "datas/questionnaires/tags" ,
dirHTMLQuestionnaire : "front/public/quiz" ,
dirHTMLTags : "front/public/quizs" ,
dirWebQuestionnaire : "quiz" ,
//pour url page
2020-08-07 12:38:19 +02:00
dirWebTags : "quizs" ,
// idem
nbRandomResults : 3 // limite les résultat du moteur de recherche quand demande de résultats au hasard
2020-08-07 12:23:59 +02:00
} ;
/***/ } ) ,
/***/ "../config/users.js" :
/ * ! * * * * * * * * * * * * * * * * * * * * * * * * * * ! * \
! * * * . . / config / users . js * * * !
\ * * * * * * * * * * * * * * * * * * * * * * * * * * /
/*! no static exports found */
/***/ ( function ( module , exports ) {
module . exports = {
// API'routes (after "apiUrl" defined in instance.js)
userRoutes : "/user" ,
subscribeRoute : "/signup" ,
getGodfatherRoute : "/getgodfatherid" ,
checkIfIsEmailfreeRoute : "/isemailfree" ,
checkSubscribeTokenRoute : "/validation/" ,
checkLoginRoute : "/checklogin/" ,
connectionRoute : "/login" ,
getLoginLinkRoute : "/getloginlink" ,
connectionWithLinkRoute : "/checkloginlink" ,
getUserInfos : "/get/" ,
createUserRoute : "/create" ,
validateUserRoute : "/validate/" ,
updateUserInfos : "/modify/" ,
searchUserRoute : "/search/" ,
getGodChilds : "/getgodchilds/" ,
checkNewLoginLinkRoute : "/confirmnewlogin/" ,
checkDeleteLinkRoute : "/confirmdelete/" ,
getPayments : "/payment/getforoneuser/" ,
unsubscribeRoute : "/subscription/stop/" ,
getAdminStats : "/getadminstats/" ,
// forms : à compléter avec valeurs par défaut, etc. cf modèle
name : {
maxlength : 70 ,
required : true
} ,
email : {
maxlength : 255 ,
required : true
} ,
password : {
minlength : 8 ,
maxlength : 72 ,
required : true
} ,
// https://www.npmjs.com/package/bcrypt#security-issues-and-concerns
newPassword : {
minlength : 8 ,
maxlength : 72
} ,
codeGodfather : {
maxlength : 255
} ,
cguOk : {
value : "true" ,
required : true
} ,
timeDifferenceMin : - 720 ,
timeDifferenceMax : 840 ,
// JSON dir
dirCacheUsers : "datas/users" ,
dirCacheUsersAnswers : "datas/users/questionnaires/answers"
} ;
/***/ } ) ,
/***/ "../lang sync recursive ^\\.\\/.*\\/general$" :
/ * ! * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ! * \
! * * * . . / lang sync ^ \ . \ / . * \ / general$ * * * !
\ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * /
/*! no static exports found */
/***/ ( function ( module , exports , _ _webpack _require _ _ ) {
var map = {
"./fr/general" : "../lang/fr/general.js"
} ;
function webpackContext ( req ) {
var id = webpackContextResolve ( req ) ;
return _ _webpack _require _ _ ( id ) ;
}
function webpackContextResolve ( req ) {
if ( ! _ _webpack _require _ _ . o ( map , req ) ) {
var e = new Error ( "Cannot find module '" + req + "'" ) ;
e . code = 'MODULE_NOT_FOUND' ;
throw e ;
}
return map [ req ] ;
}
webpackContext . keys = function webpackContextKeys ( ) {
return Object . keys ( map ) ;
} ;
webpackContext . resolve = webpackContextResolve ;
module . exports = webpackContext ;
webpackContext . id = "../lang sync recursive ^\\.\\/.*\\/general$" ;
/***/ } ) ,
/***/ "../lang sync recursive ^\\.\\/.*\\/subscription$" :
/ * ! * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ! * \
! * * * . . / lang sync ^ \ . \ / . * \ / subscription$ * * * !
\ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * /
/*! no static exports found */
/***/ ( function ( module , exports , _ _webpack _require _ _ ) {
var map = {
"./fr/subscription" : "../lang/fr/subscription.js"
} ;
function webpackContext ( req ) {
var id = webpackContextResolve ( req ) ;
return _ _webpack _require _ _ ( id ) ;
}
function webpackContextResolve ( req ) {
if ( ! _ _webpack _require _ _ . o ( map , req ) ) {
var e = new Error ( "Cannot find module '" + req + "'" ) ;
e . code = 'MODULE_NOT_FOUND' ;
throw e ;
}
return map [ req ] ;
}
webpackContext . keys = function webpackContextKeys ( ) {
return Object . keys ( map ) ;
} ;
webpackContext . resolve = webpackContextResolve ;
module . exports = webpackContext ;
webpackContext . id = "../lang sync recursive ^\\.\\/.*\\/subscription$" ;
/***/ } ) ,
/***/ "../lang sync recursive ^\\.\\/.*\\/user$" :
/ * ! * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ! * \
! * * * . . / lang sync ^ \ . \ / . * \ / user$ * * * !
\ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * /
/*! no static exports found */
/***/ ( function ( module , exports , _ _webpack _require _ _ ) {
var map = {
"./fr/user" : "../lang/fr/user.js"
} ;
function webpackContext ( req ) {
var id = webpackContextResolve ( req ) ;
return _ _webpack _require _ _ ( id ) ;
}
function webpackContextResolve ( req ) {
if ( ! _ _webpack _require _ _ . o ( map , req ) ) {
var e = new Error ( "Cannot find module '" + req + "'" ) ;
e . code = 'MODULE_NOT_FOUND' ;
throw e ;
}
return map [ req ] ;
}
webpackContext . keys = function webpackContextKeys ( ) {
return Object . keys ( map ) ;
} ;
webpackContext . resolve = webpackContextResolve ;
module . exports = webpackContext ;
webpackContext . id = "../lang sync recursive ^\\.\\/.*\\/user$" ;
/***/ } ) ,
/***/ "../lang/fr/general.js" :
/ * ! * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ! * \
! * * * . . / lang / fr / general . js * * * !
\ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * /
/*! no static exports found */
/***/ ( function ( module , exports ) {
module . exports = {
2020-08-07 12:38:19 +02:00
siteHTMLTitle : "WikiLerni : Wikipédia en questions" ,
siteMetaDescription : "Avec WikiLerni, recevez chaque jour de nouveaux quizs pour tester vos connaissances et apprendre de nouvelles choses." ,
2020-08-07 12:23:59 +02:00
scriptTimingInfo : "Durée de la réponse : SCRIPT_TIMING millisecondes, route : SCRIPT_URL" ,
scriptTimingAlert : "*** Script lent : SCRIPT_TIMING millisecondes, route : SCRIPT_URL" ,
serverError : "Désolé. Une erreur imprévue est survenue. Si cela persiste, n'hésitez à prévenir l'administrateur du site." ,
serverErrorAdmin : "Bug de l'application :" ,
neededParams : "Des paramètres nécessaires manquants sont manquants." ,
badUrl : "Tentative d'accès à une page n'existant pas :" ,
notValidFormat : "Format non valide." ,
notAllowed : "Vous n'avez pas les droits nécessaires pour cette action." ,
notRequired : "Facultatif." ,
updateBtnTxt : "Modifier" ,
addBtnTxt : "Ajouter" ,
deleteBtnTxt : "Supprimer" ,
addOkMessage : "Les données ont bien été enregistrées." ,
updateOkMessage : "La mise à jour à jour a bien été enregistrée." ,
deleteOkMessage : "La suppression a bien été enregistrée." ,
failAuth : "Erreur d'authentification." ,
failAuthHeader : "Absence de header Authorization." ,
failAuthToken : "Token invalide ou utilisateur non trouvé." ,
failAuthId : "Identifiant non valide : " ,
failAuthCron : "Tentative de lancement d'un cron sans le bon token." ,
previousPage : "Page précédente" ,
nextPage : "Page suivante" ,
2020-08-07 12:38:19 +02:00
alertNewWindow : "nouvelle fenêtre" ,
2020-08-07 12:23:59 +02:00
btnLinkToQuestionnaire : "Aller au quiz !" ,
statsAdmin : "Durant les dernières 24h : NB_USERS_24H comptes ont été créés, NB_SUBSCRIPTIONS_24H validés et NB_USERS_DELETED_24H supprimés. NB_ANSWERS_24H réponses aux quizs ont été enregistrées.<br>En tout, il y a : NB_USERS_TOT comptes, dont NB_SUBSCRIPTIONS_TOT validés et NB_SUBSCRIPTIONS_PREMIUM comptes prémium. NB_ANSWERS_TOT réponses aux quizs ont été enregistrées.<br>Parmi les NB_USERS_DELETED_TOT comptes supprimés, NB_USERS_DELETED_VALIDED avaient validé leur compte et NB_USERS_DELETED_PREMIUM avaient souscrit un compte prémium."
} ;
/***/ } ) ,
/***/ "../lang/fr/subscription.js" :
/ * ! * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ! * \
! * * * . . / lang / fr / subscription . js * * * !
\ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * /
/*! no static exports found */
/***/ ( function ( module , exports ) {
module . exports = {
needNumberOfDays : "Il faut un nombre de jours pour l'abonnement." ,
needIntegerNumberOfDays : "Le nombre de jours de l'abonnement doit être un nombre entier." ,
needMinNumberOfDays : "Le nombre de jours de l'abonnement ne peut être négatif !" ,
needNotTooLongDaysList : "La liste de jours sélectionnés n'a pas le bon format (trop longue)." ,
needValidDaysList : "La liste de jours sélectionnés n'a pas le bon format. Caractère non valide : " ,
needUniqueDaysList : "La liste de jours sélectionnés n'a pas le bon format. Doublon : " ,
needKnowIfNoticeOk : "Il manque l'information sur l'acceptation ou non de recevoir des notifications." ,
unsubscriptionOk : "Votre demande a bien été prise en compte. Vous ne recevrez plus de messages venant du site, sauf pour vous signaler la fin de votre abonnement.<br>N'hésitez pas <a href='/#URL'>à accéder à votre compte</a> pour de nouveau autoriser certains envois." ,
unsubscriptionFail : "Si vous voyez ce message, c'est que votre lien de désabonnement ne fonctionne pas.<br>Vous pouvez <a href='/#URL'>accéder à votre compte</a> pour désactiver les envois manuellement." ,
allSubscriptionProcessed : "Tous les abonnés ont été traités pour le moment." ,
2020-08-07 12:38:19 +02:00
mailStopMailLinkTxt : "Stopper les envois." ,
mailNewQuestionnaireBodyTxt : "Bonjour USER_NAME,\n\nUn nouveau quiz vient de vous être proposé :\n\nQUESTIONNAIRE_URL\n\nBonne lecture !\n\nStopper les envois ?\nUNSUBSCRIBE_URL" ,
2020-08-07 12:23:59 +02:00
noNewQuestionnaireForUser : "Aucun nouveau questionnaire trouvé pour un abonné : " ,
mailEndFreeTimeSubject : "Votre abonnement gratuit va expirer" ,
2020-08-07 12:38:19 +02:00
mailEndFreeTimeLinkTxt : "M'abonner." ,
mailEndFreeTimeBodyTxt : "Bonjour USER_NAME,\n\nVotre abonnement gratuit à SITE_NAME va expirer d'ici quelques jours.\n\nPour continuer à utiliser le site, vous pouvez sans attendre souscrire à un abonnement :\nLINK_URL" ,
mailEndFreeTimeBodyHTML : "<h3>Bonjour USER_NAME,</h3><p>Votre abonnement gratuit à SITE_NAME va expirer d'ici quelques jours.<br><br>Pour continuer à utiliser le site, vous pouvez souscrire à un abonnement sans tarder en cliquant sur le lien ci-dessous.</p>" ,
2020-08-07 12:23:59 +02:00
mailEndFreeTimeMessage : " relances envoyées." ,
mailExpirationSubject : "Votre abonnement va bientôt expirer" ,
2020-08-07 12:38:19 +02:00
mailExpirationLinkTxt : "Prolonger mon abonnement." ,
mailExpirationBodyTxt : "Bonjour USER_NAME,\n\nVotre abonnement à SITE_NAME va expirer d'ici quelques jours.\n\nPour continuer à utiliser le site, vous pouvez le prolonger dès aujourd'hui :\nLINK_URL" ,
mailExpirationBodyHTML : "<h3>Bonjour USER_NAME,</h3><p>Votre abonnement à SITE_NAME va expirer d'ici quelques jours.<br><br>Pour continuer à utiliser SITE_NAME, vous pouvez le prolonger dès aujourd'hui en cliquant sur le lien ci-dessous.</p>" ,
2020-08-07 12:23:59 +02:00
mailExpirationMessage : "FIRST premières et SECOND deuxièmes relances envoyées pour des abonnements expirant d'ici peu." ,
infosNbDays : "Votre abonnement est encore valable <b>pendant NB_DAYS jours</b>.<br>Vous pouvez à tout moment prolonger votre abonnement en suivant les indications ci-dessous :" ,
infosExpirated : "Votre abonnement a expiré, mais il vous reste encore quelques jours avant que votre compte et vos données ne soient complètement supprimées.<br>Pour ce faire, suivez sans tarder les indications ci-dessous :" ,
infosNbDaysAdmin : "Cet abonnement est encore valable <b>pendant NB_DAYS jours</b>." ,
infosExpiratedAdmin : "Cet abonnement a expiré." ,
isNotValided : "Cet utilisateur n'a pas encore validé son compte.<br>Vous pouvez le faire à sa place <a href='#validationOk'>en cochant la case indiquée</a> et enregistrant." ,
infosPaymentsAdmin : "DATE_PAYMENT : paiement de AMOUNT € au nom de CLIENT_NAME."
} ;
/***/ } ) ,
/***/ "../lang/fr/user.js" :
/ * ! * * * * * * * * * * * * * * * * * * * * * * * * * * ! * \
! * * * . . / lang / fr / user . js * * * !
\ * * * * * * * * * * * * * * * * * * * * * * * * * * /
/*! no static exports found */
/***/ ( function ( module , exports ) {
module . exports = {
notFound : "L'utilisateur n'a pas été trouvé." ,
needName : "Merci de choisir un nom d'utilisateur." ,
needNotTooLongName : "Merci de choisir un nom d'utilisateur ne comptant pas plus de 70 caractères." ,
needEmail : "Merci de saisir votre adresse e-mail." ,
2020-08-14 17:15:06 +02:00
needUniqueEmail : "L'adresse e-mail que vous avez saisie est déjà utilisée pour un compte utilisateur. Si vous avez déjà un compte, <a href='/#URL'>cliquez-ici pour vous connecter</a>." ,
2020-08-07 12:23:59 +02:00
needNotTooLongEmail : "Merci de saisir une adresse e-mail ne comptant pas plus de 255 caractères." ,
needPassWord : "Merci de fournir un mot de passe." ,
needLongPassWord : "Merci de fournir un mot de passe d'au moins MIN_LENGTH caractères." ,
2020-08-14 17:15:06 +02:00
passwordCopied : "Le mot de passe généré a été copié dans le presse-papier de votre ordinateur (ou mobile). Vous pouvez le \"coller\" où vous le souhaitez." ,
2020-08-07 12:23:59 +02:00
needStatus : "Il manque le statut." ,
needLanguage : "Il manque le code langue." ,
needValidLastConnectionDate : "La date de dernière connexion n'est pas valide." ,
needSMTP : "Il manque le serveur SMTP." ,
2020-08-14 17:15:06 +02:00
needSMTPNotFound : "Il manque un serveur SMTP valide." ,
2020-08-07 12:23:59 +02:00
needKnowNewsletterOk : "Il faut savoir si l'utilisateur accepte ou refuse de recevoir la newsletter." ,
needTimeDifference : "Il faut connaître le nombre de minutes du décalage horaire." ,
needMinTimeDifference : "Il faut fournir un nombre de minutes à enlever à l'heure GMT ne dépassant pas 720." ,
needMaxTimeDifference : "Il faut fournir un nombre de minutes à ajouter à l'heure GMT ne dépassant pas 840." ,
2020-08-14 17:15:06 +02:00
needUGCOk : "Merci d'accepter les CGU pour créer votre compte." ,
godfatherNotFound : "Désolé mais aucun utilisateur n'a été trouvé pour ce code/e-mail parrain :(" ,
godfatherFound : "Votre \"parrain\" a bien été trouvé :)" ,
mailValidationMessage : "Votre inscription est bien enregistrée.\nPour la finaliser, merci de cliquer dans les 24 H sur le lien de confirmation qui vient de vous être envoyé par e-mail." ,
2020-08-07 12:38:19 +02:00
mailValidationLinkSubject : "Merci de valider votre inscription" ,
mailValidationLinkTxt : "Valider mon compte." ,
mailValidationLinkSBodyTxt : "Bonjour USER_NAME,\n\nPour valider votre inscription, merci de cliquer sur le lien suivant dans les 24h :\nLINK_URL" ,
mailValidationLinkSBodyHTML : "<h3>Bonjour USER_NAME,</h3><p>Pour valider votre inscription, merci de cliquer sur le lien ci-dessous dans les 24h.</p>" ,
2020-08-14 17:15:06 +02:00
validationMessage : "Votre compte vient bien d'être validé. Merci et bienvenue !<br>Vous pouvez sans tarder vous connecter ci-dessous pour accéder à votre espace WikiLerni." ,
2020-08-07 12:23:59 +02:00
validationMessageAdmin : "Le compte a bien été validé." ,
validationAlreadyMessage : "Il semble que vous ayez déjà validé votre compte." ,
validationAlreadyMessageAdmin : "Ce compte a déjà été validé." ,
mailWelcomeSubject : "Bienvenue !" ,
2020-08-07 12:38:19 +02:00
mailWelcomeLinkTxt : "Me connecter à mon compte." ,
2020-08-14 17:15:06 +02:00
mailWelcomeBodyTxt : "Bonjour USER_NAME,\n\nVous venez de valider votre inscription à NOM_SITE. Merci et bienvenue !\n\nSi vous avez la moindre question ou suggestion concernant NOM_SITE, n'hésitez pas à me contacter en écrivant à EMAIL.\n\nJe vous conseille d'ailleurs d'ajouter EMAIL à votre carnet d'adresses pour éviter que les prochains envois du site n'arrivent en \"spam\".\n\nPar ailleurs, pour gérer votre abonnement, accéder à vos informations ou encore chercher plus facilement parmi les quizs du site, vous pouvez à tout moment vous connecter à votre compte utilisateur.\n\nPour ce faire, utilisez le lien suivant : LINK_URL\n\nÀ bientôt sur NOM_SITE." ,
mailWelcomeBodyHTML : "<h3>Bonjour USER_NAME,</h3><p>Vous venez de valider votre inscription à NOM_SITE. Merci et bienvenue !<br><br>Si vous avez la moindre question ou suggestion concernant NOM_SITE, n'hésitez pas à me contacter en écrivant à <b>EMAIL</b>.<br><br>Je vous conseille d'ailleurs d'ajouter <b>EMAIL</b> à votre carnet d'adresses pour éviter que les prochains envois du site n'arrivent en <i>spam</i>.<br><br>Par ailleurs, pour gérer votre abonnement, accéder à vos informations ou encore chercher plus facilement parmi les quizs du site, vous pouvez à tout moment vous connecter à votre compte utilisateur.<br><br>Pour ce faire, utilisez le lien ci-dessous.<br><br>À bientôt sur NOM_SITE." ,
2020-08-07 12:23:59 +02:00
mailThankGodfatherSubject : "Merci !" ,
2020-08-07 12:38:19 +02:00
mailThankGodfatherLinkTxt : "Me connecter à mon compte." ,
2020-08-14 17:15:06 +02:00
mailThankGodfatherBodyTxt : "Bonjour USER_NAME,\nGrâce à vous, un nouvel utilisateur (EMAIL) vient de s'inscrire sur NOM_SITE.\nSi dans l'avenir cette personne souscrit un abonnement prémium, votre propre abonnement sera prolongé de 30 jours.\nEncore merci et à bientôt !" ,
mailThankGodfatherBodyHTML : "<h3>Bonjour USER_NAME,</h3><p>Grâce à vous, un nouvel utilisateur (EMAIL) vient de s'inscrire sur NOM_SITE.<br>Si dans l'avenir cette personne souscrit un abonnement prémium, votre propre abonnement sera prolongé de 30 jours.</p><p>Encore merci et à bientôt !</p>" ,
2020-08-07 12:23:59 +02:00
badLinkValidationMessage : "Votre lien de confirmation ne semble pas valide ou bien il a expiré. Vous pouvez en recevoir un nouveau <a href='#URL'>en cliquant ici</a>." ,
2020-08-14 17:15:06 +02:00
emailNotFound : "Aucun compte utilisateur n'a été trouvé pour cette adresse e-mail." ,
alreadyConnected : "Vous êtes déjà connecté au site !" ,
needBeConnected : "Vous devez être connecté pour accéder à cette page." ,
2020-08-07 12:23:59 +02:00
connectionOk : "Connexion réussie." ,
needChooseLoginWay : "Vous devez soit saisir votre mot de passe, soit cocher la case vous permettant de recevoir un lien de connexion par e-mail." ,
2020-08-14 17:15:06 +02:00
needValidationToLogin : "Vous devez d'abord valider votre compte avant de pouvoir vous connecter. Pour ce faire, un nouveau lien vient de vous être envoyé par e-mail." ,
tooManyLoginFails : "Désolé mais il y a eu trop de tentatives de connexion infructueuses pour cette adresse e-mail. Vous devez attendre MINUTES minutes pour essayer de nouveau." ,
badPassword : "Aucun compte utilisateur ne correspond aux informations saisies." ,
2020-08-07 12:23:59 +02:00
mailLoginLinkSubject : "Votre lien de connexion." ,
2020-08-07 12:38:19 +02:00
mailLoginLinkTxt : "Me connecter." ,
mailLoginLinkBodyTxt : "Bonjour USER_NAME,\n\nPour vous connecter à votre compte, cliquez sur le lien suivant sans tarder :\nLINK_URL" ,
mailLoginLinkBodyHTML : "<h3>Bonjour USER_NAME,</h3><p>Pour vous connecter à votre compte, cliquez sur le lien suivant sans tarder :</p>" ,
2020-08-14 17:15:06 +02:00
mailLoginLinkMessage : "Un lien de connexion vient de vous être envoyé sur votre adresse e-mail. Ne tardez pas à l'utiliser, car il n'est valable que durant *TIMING* !" ,
2020-08-07 12:23:59 +02:00
updatedOkMessage : "Vos informations ont bien été mises à jour." ,
2020-08-14 17:15:06 +02:00
updatedNeedGoodEmail : "Mais la nouvelle adresse e-mail n'a pu être enregistrée, car elle n'a pas un format correct." ,
2020-08-07 12:23:59 +02:00
updatedNeedUniqueEmail : "Mais la nouvelle adresse e-mail saisie (NEW_EMAIL) n'a pu être enregistrée, car elle est déjà utilisée pour un autre compte." ,
mailUpdateLoginSubject : "Merci de valider vos nouveaux identifiants." ,
2020-08-07 12:38:19 +02:00
mailUpdateLoginLinkTxt : "Valider." ,
mailUpdateLoginBodyTxt : "Bonjour USER_NAME,\n\nPour valider vos nouveaux identifiants de connexion, cliquez sur le lien suivant sans tarder :\nLINK_URL" ,
mailUpdateLoginBodyHTML : "<h3>Bonjour USER_NAME,</h3><p>Pour valider vos nouveaux identifiants de connexion, cliquez sur le lien ci-dessous sans tarder.</p>" ,
2020-08-14 17:15:06 +02:00
mailUpdateLoginLinkMessage : "Cependant, vous avez modifié au moins un de vos identifiants de connexion (e-mail et/ou mot de passe) et <b>vous devez cliquer sur le lien qui vient de vous êtres envoyé sur votre adresse (NEW_EMAIL) pour valider ce changement</b>.<br>En attendant, merci de continuer à utiliser vos anciens identifiants." ,
updatedNeedValidatedUser : "L'utilisateur que vous souhaitez modifier n'existe pas/plus ou n'a pas encore validé son compte." ,
2020-08-07 12:23:59 +02:00
updatedNeedGoodGodfather : "Mais le nouveau code parrain n'a pu être retenu, car il ne correspond à aucun compte utilisateur ou à l'utilisateur lui-même." ,
mailUpdateLoginOkMessage : "La mise à jour de vos identifiants a bien été enregistrée." ,
updatedFailedGodfatherNotFound : "L'identifiant fourni pour le parrain ne correspond à aucun utilisateur." ,
creationOkMessage : "Le nouvel utilisateur a bien été enregistré." ,
mailDeleteSubject : "Confirmer la suppression de votre compte." ,
2020-08-07 12:38:19 +02:00
mailDeleteLinkTxt : "Confirmer." ,
mailDeleteBodyTxt : "Bonjour USER_NAME,\n\nPour confirmer la suppression de votre compte, cliquez sur le lien suivant sans tarder :\nLINK_URL" ,
mailDeleteBodyHTML : "<h3>Bonjour USER_NAME,</h3><p>Pour confirmer la suppression de votre compte, cliquez sur le lien ci-dessous sans tarder.</p>" ,
2020-08-07 12:23:59 +02:00
mailDeleteLinkMessage : "Votre demande de suppression a bien été enregistrée. Merci de cliquer sans tarder sur le lien qui vient de vous être envoyé par e-mail pour confirmer." ,
deleteOkMessage : "L'utilisateur a bien été supprimé." ,
deleteFailMessage : "Tentative de suppression d'un utilisateur inexistant : " ,
mailDeleteLinkOkMessage : "Votre compte a bien été supprimé. Merci d'avoir utilisé nos services." ,
mailDeleteLinkAlreadyMessage : "Il semble que vous ayez déjà validé la suppression de votre compte." ,
2020-08-14 17:15:06 +02:00
mailDeleteLinkFailMessage : "Votre lien de suppression n'est pas valide ou alors il a expiré." ,
2020-08-07 12:23:59 +02:00
cronDeleteUnvalidedUsersMessage : " comptes utilisateurs non validés ont été supprimés." ,
deleteInactiveUsersMessage : " comptes utilisateurs inactifs ont été supprimés." ,
welcomeMessage : "Bienvenue #NAME !" ,
byebyeMessage : "Si vous voyez ce message, c'est que votre déconnexion s'est bien déroulée.<br>À bientôt !" ,
infosUserForAdmin : "Cet utilisateur (id: ID_USER) a <b>créé son compte le DATE_CREA</b>, la dernière mise à jour datant du DATE_UPDATE.<br><b>Date de sa dernière connexion : DATE_CONNECTION.</b>" ,
infosAdminGodfather : "Cet utilisateur a été parrainé par " ,
infosAdminNbGodChilds : "Ses #NB filleuils : "
} ;
/***/ } ) ,
/***/ "../tools/main.js" :
/ * ! * * * * * * * * * * * * * * * * * * * * * * * * ! * \
! * * * . . / tools / main . js * * * !
\ * * * * * * * * * * * * * * * * * * * * * * * * /
/*! no static exports found */
/***/ ( function ( module , exports ) {
function _classCallCheck ( instance , Constructor ) { if ( ! ( instance instanceof Constructor ) ) { throw new TypeError ( "Cannot call a class as a function" ) ; } }
function _defineProperties ( target , props ) { for ( var i = 0 ; i < props . length ; i ++ ) { var descriptor = props [ i ] ; descriptor . enumerable = descriptor . enumerable || false ; descriptor . configurable = true ; if ( "value" in descriptor ) descriptor . writable = true ; Object . defineProperty ( target , descriptor . key , descriptor ) ; } }
function _createClass ( Constructor , protoProps , staticProps ) { if ( protoProps ) _defineProperties ( Constructor . prototype , protoProps ) ; if ( staticProps ) _defineProperties ( Constructor , staticProps ) ; return Constructor ; }
// Quelques fonctions utiles pour les chaînes
var Tool = /*#__PURE__*/ function ( ) {
function Tool ( ) {
_classCallCheck ( this , Tool ) ;
}
_createClass ( Tool , null , [ {
key : "isEmpty" ,
value : function isEmpty ( myVar ) {
if ( myVar === undefined || myVar === null ) return true ; else {
myVar += "" ; // si autre chose qu'une chaîne envoyé...
myVar = myVar . trim ( ) ;
if ( myVar === "" ) return true ; else return false ;
}
}
} , {
key : "trimIfNotNull" ,
value : function trimIfNotNull ( myString ) {
if ( Tool . isEmpty ( myString ) ) myString = null ; else {
myString += "" ; // si autre chose qu'une chaîne envoyé...
myString = myString . trim ( ) ;
}
return myString ;
}
} , {
key : "shortenIfLongerThan" ,
value : function shortenIfLongerThan ( myString , max ) {
myString += "" ; // au cas où cela ne serait pas une chaîne...
if ( myString . length > max ) myString = myString . substring ( 0 , max - 3 ) + "..." ;
return myString ;
} // source : https://stackoverflow.com/questions/15604140/replace-multiple-strings-with-multiple-other-strings
} , {
key : "replaceAll" ,
value : function replaceAll ( myString , mapObj ) {
var replaceElts = new RegExp ( Object . keys ( mapObj ) . join ( "|" ) , "gi" ) ;
return myString . replace ( replaceElts , function ( matched ) {
return mapObj [ matched ] ;
} ) ;
} // source : https://developer.mozilla.org/fr/docs/Web/JavaScript/Reference/Objets_globaux/Math/random
} , {
key : "getRandomInt" ,
value : function getRandomInt ( min , max ) {
min = Math . ceil ( min ) ;
max = Math . floor ( max ) ;
return Math . floor ( Math . random ( ) * ( max - min ) ) + min ;
} // à compléter : https://en.wikipedia.org/wiki/Date_format_by_country
} , {
key : "dateFormat" ,
value : function dateFormat ( dateString ) {
var lang = arguments . length > 1 && arguments [ 1 ] !== undefined ? arguments [ 1 ] : "fr" ;
if ( Tool . isEmpty ( dateString ) ) return "" ;
var myDate = new Date ( dateString ) ;
var myDay = myDate . getDate ( ) + "" ;
if ( myDay . length === 1 ) myDay = "0" + myDay ;
var myMounth = myDate . getMonth ( ) + 1 + "" ;
if ( myMounth . length === 1 ) myMounth = "0" + myMounth ;
var myYear = myDate . getFullYear ( ) ;
if ( lang === "fr" ) return myDay + "/" + myMounth + "/" + myYear ; else if ( lang === "form" ) // 2014-02-09
return myYear + "-" + myMounth + "-" + myDay ; else return myMounth + "/" + myDay + "/" + myYear ;
}
} ] ) ;
return Tool ;
} ( ) ;
module . exports = Tool ;
/***/ } ) ,
/***/ "../views sync recursive ^\\.\\/.*\\.js$" :
/ * ! * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ! * \
! * * * . . / views sync ^ \ . \ / . * \ . js$ * * * !
\ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * /
/*! no static exports found */
/***/ ( function ( module , exports , _ _webpack _require _ _ ) {
var map = {
2020-08-07 12:38:19 +02:00
"./default/config/fr.js" : "../views/default/config/fr.js" ,
"./wikilerni/config/fr.js" : "../views/wikilerni/config/fr.js"
2020-08-07 12:23:59 +02:00
} ;
function webpackContext ( req ) {
var id = webpackContextResolve ( req ) ;
return _ _webpack _require _ _ ( id ) ;
}
function webpackContextResolve ( req ) {
if ( ! _ _webpack _require _ _ . o ( map , req ) ) {
var e = new Error ( "Cannot find module '" + req + "'" ) ;
e . code = 'MODULE_NOT_FOUND' ;
throw e ;
}
return map [ req ] ;
}
webpackContext . keys = function webpackContextKeys ( ) {
return Object . keys ( map ) ;
} ;
webpackContext . resolve = webpackContextResolve ;
module . exports = webpackContext ;
webpackContext . id = "../views sync recursive ^\\.\\/.*\\.js$" ;
/***/ } ) ,
/***/ "../views/default/config/fr.js" :
/ * ! * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ! * \
! * * * . . / views / default / c o n f i g / f r . j s * * * !
\ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * /
/*! no static exports found */
/***/ ( function ( module , exports ) {
module . exports = {
headLinks : [ {
anchor : "Accueil" ,
attributes : {
href : "/"
}
} , {
anchor : "Mon compte" ,
attributes : {
2020-08-07 12:38:19 +02:00
href : "/connexion.html" ,
2020-08-07 12:23:59 +02:00
id : "accountHeadLink"
}
} , {
anchor : "À propos" ,
attributes : {
href : "/a-propos.html"
}
} , {
anchor : "Contact" ,
attributes : {
href : "/contact.html"
}
} ] ,
footLinks : [ {
anchor : "Crédits" ,
attributes : {
href : "/credits.html"
}
} , {
anchor : "Mentions légales" ,
attributes : {
href : "/mentions-legales.html" ,
rel : "nofollow"
}
} , {
anchor : "Données personnelles" ,
attributes : {
href : "/donnees.html"
}
} , {
anchor : "C.G.U." ,
attributes : {
href : "/cgu.html" ,
rel : "nofollow"
}
} , {
anchor : "C.G.V." ,
attributes : {
href : "/cgv.html" ,
rel : "nofollow"
}
} ] ,
maxQuestionnairesByPage : 10 ,
userHomePage : "accueil.html" ,
adminHomePage : "admin.html" ,
managerHomePage : "gestion.html" ,
subscribePage : "inscription.html" ,
connectionPage : "connexion.html" ,
accountPage : "compte.html" ,
questionnairesManagementPage : "gestion-quizs.html" ,
usersManagementPage : "gestion-utilisateurs.html" ,
nbQuestionnairesUserHomePage : 10 ,
illustrationDir : "/img/quizs/" ,
siteSlogan : "Cultivons notre jardin !" ,
homeTitle1 : "De nature curieuse ?" ,
homeP1 : "Avec WikiLerni vous apprenez chaque jour de nouvelles choses.<br>Des articles de Wikipédia sont sélectionnés pour vous et sont suivis d'un quiz vous permettant de tester ce que vous en avez retenu.<br>De jour en jour de nouvelles graines de savoir sont ainsi semées dans votre \"jardin\"." ,
homeTitle2 : "La culture en liberté" ,
homeP2 : "Tout comme sur Wikipédia (*), le logiciel et le contenu partagé sur WikiLerni sont libres.<br>Vous pouvez les utiliser, les modifier et les diffuser selon votre souhait.<br>Sur WikiLerni, pas de publicité, ni de commercialisation de vos données personnelles.<br>Vous pouvez venir y \"cultiver votre jardin\" en toute tranquillité.<br><br><small><em>(*) Bien que partageant ses valeurs, WikiLerni est un projet indépendant de la fondation Wikipédia.</em></small>" ,
newQuestionnairesTitle : "Les derniers quizs publiés sur WikiLerni" ,
newQuestionnairesIntro : "Liste des derniers quizs publiés sur WikiLerni." ,
explanationTitle : "Vous découvrez WikiLerni ?" ,
explanationTxt : "Le principe est simple : vous commencez par lire l'article Wikipédia dont le lien vous est proposé.<br>Puis vous afficher le quiz pour vérifier ce que vous en avez retenu de votre lecture. Vous obtenez alors votre résultat immédiatement.<br><br>Toutes les réponses se trouvent dans l'article proposé à la lecture. <b>Vous êtes ici pour apprendre de nouvelles choses</b>, mais libre à vous d'essayer d'y répondre immédiatement.<br><br>Quand le sujet s'y prête, ne vous étonnez pas si certaines des réponses proposées peuvent être un peu décalées, absurdes... On peut apprendre avec le sourire, non ? :-)<br><br>Une fois votre résultat obtenu, il vous sera proposé de créer un compte pour le sauvegarder.<br>Ce compte vous permettra de tester de nouveau ce quiz pour vérifier ce que vous en avez retenu plusieurs jours, semaines, mois... Et de recevoir régulièrement de nouvelles suggestions de lectures.<br><br>Mais <b>la création de ce compte est facultative</b> et <a href='/quizs/' title='Les derniers quizs publiés'>vous pouvez parcourir WikiLerni librement</a>." ,
2020-08-07 12:38:19 +02:00
noJSNotification : "Désolé, mais pour l'instant, l'utilisation de WikiLerni nécessite l'activation du JavaScript." ,
tagsListTxt : "Parcourir les rubriques :"
} ;
/***/ } ) ,
/***/ "../views/wikilerni/config/fr.js" :
/ * ! * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ! * \
! * * * . . / views / wikilerni / config / fr . js * * * !
\ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * /
/*! no static exports found */
/***/ ( function ( module , exports ) {
module . exports = {
headLinks : [ {
anchor : "Contact" ,
attributes : {
href : "/contact.html" ,
rel : "nofollow"
}
} , {
anchor : "Parcourir" ,
attributes : {
href : "/quizs/" ,
id : "indexHeadLink" ,
title : "Les derniers quizs"
}
} , {
anchor : "Mon compte" ,
attributes : {
href : "/connexion.html" ,
id : "accountHeadLink"
}
} , {
anchor : "À propos" ,
attributes : {
href : "/a-propos.html"
}
} ] ,
footLinks : [ {
anchor : "Blog" ,
attributes : {
href : "https://framasphere.org/people/7e54b7a0b53201389eef2a0000053625" ,
title : "Blog WikiLerni sur diaspora*"
}
} , {
anchor : "Crédits" ,
attributes : {
href : "/credits.html"
}
} , {
anchor : "Mentions légales" ,
attributes : {
href : "/mentions-legales.html" ,
rel : "nofollow"
}
} , {
anchor : "Données personnelles" ,
attributes : {
href : "/donnees.html"
}
} , {
anchor : "CGV & CGU" ,
attributes : {
href : "/CGV-CGU.html" ,
rel : "nofollow"
}
} ] ,
maxQuestionnairesSiteHomePage : 3 ,
maxQuestionnairesByPage : 9 ,
nbQuestionnairesUserHomePage : 3 ,
userHomePage : "accueil.html" ,
adminHomePage : "admin.html" ,
managerHomePage : "gestion.html" ,
subscribePage : "inscription.html" ,
connectionPage : "connexion.html" ,
validationLinkPage : "validation.html?t=" ,
loginLinkPage : "login.html?t=" ,
newLoginLinkPage : "newlogin.html?t=" ,
deleteLinkPage : "aurevoir.html?t=" ,
stopMailPage : "stop-mail.html?t=" ,
accountPage : "compte.html" ,
updateAccountPage : "mon-compte.html" ,
questionnairesManagementPage : "gestion-quizs.html" ,
usersManagementPage : "gestion-utilisateurs.html" ,
aboutPage : "a-propos.html" ,
illustrationDir : "/img/quizs/" ,
siteSlogan : "Cultivons notre jardin !" ,
homePageTxt : "Page d'accueil" ,
homeTitle1 : "De nature curieuse ?" ,
homeP1 : "Avec WikiLerni, vous apprenez chaque jour de nouvelles choses.<br>Des articles de Wikipédia sont sélectionnés pour vous et sont suivis d'un quiz vous permettant de tester ce que vous en avez retenu.<br>De jour en jour de nouvelles graines de savoir sont ainsi semées dans votre \"jardin\"." ,
homeTitle2 : "La culture en liberté" ,
2020-08-14 17:15:06 +02:00
homeP2 : "Tout comme sur Wikipédia <span class='postscriptum'>(*)</span>, le logiciel et le contenu partagé sur WikiLerni <a href=\"/credits.html\" title=\"En savoir plus\">sont libres</a>.<br>Sur WikiLerni, pas de publicité, ni de commercialisation de vos données personnelles.<br>Vous pouvez venir y \"cultiver votre jardin\" en toute tranquillité.<br><br><span class='postscriptum'>(*) Bien que partageant ses valeurs, WikiLerni est un projet indépendant de la fondation Wikipédia.</span>" ,
homeBtnAboutTxt : "En savoir plus sur WikiLerni ?" ,
2020-08-07 12:38:19 +02:00
homeBtnSubscribeTxt : "Tester WikiLerni gratuitement." ,
newQuestionnairesTitle : "Les derniers quizs publiés sur WikiLerni" ,
newQuestionnairesIntro : "Liste des derniers quizs publiés sur WikiLerni." ,
explanationTitle : "Vous découvrez WikiLerni ?" ,
explanationTxt : "Le principe est simple : vous commencez par lire l'article Wikipédia dont le lien vous est proposé.<br>Puis vous afficher le quiz pour vérifier ce que vous avez retenu de votre lecture. Vous obtenez alors votre résultat immédiatement.<br><br>Suivant les questions, une ou plusieurs réponses peuvent être correctes et doivent donc être cochées. <b>C'est toujours le contenu de l'article Wikipédia qui fait foi concernant les \"bonnes\" réponses</b>. Mais les articles de Wikipédia peuvent évoluer, donc n'hésitez pas <a href='/contact.html'>à me signaler une erreur</a>.<br><br>Toutes les réponses se trouvent dans l'article proposé à la lecture. <b>Vous êtes ici pour apprendre de nouvelles choses, mais libre à vous d'essayer d'y répondre immédiatement</b>.<br><br>Quand le sujet s'y prête, ne vous étonnez pas si certaines des réponses proposées peuvent être un peu décalées, absurdes... On peut apprendre avec le sourire, non ? :-)<br><br>Une fois votre résultat obtenu, il vous sera proposé de créer un compte pour le sauvegarder. Ce compte vous permettra de <b>tester de nouveau ce quiz</b> pour vérifier ce que vous en avez retenu plusieurs jours, semaines, mois... Grâce à ce compte, vous pourrez aussi <b>recevoir régulièrement de nouveaux quizs</b> pour continuer à \"cultiver votre jardin\".<br><br>Mais <b>la création de ce compte est facultative</b> et <a href='/quizs/' title='Les derniers quizs publiés'>vous pouvez parcourir WikiLerni librement</a>." ,
noJSNotification : "Désolé, mais pour l'instant, l'utilisation de WikiLerni nécessite l'activation du JavaScript." ,
newsListTitle : "Les dernières graines de savoir" ,
tagsListTxt : "Parcourir les rubriques" ,
mailRecipientTxt : "Message envoyé à :"
2020-08-07 12:23:59 +02:00
} ;
/***/ } ) ,
/***/ "./src/manageUsers.js" :
/ * ! * * * * * * * * * * * * * * * * * * * * * * * * * * * * ! * \
! * * * . / src / manageUsers . js * * * !
\ * * * * * * * * * * * * * * * * * * * * * * * * * * * * /
/*! no exports provided */
/***/ ( function ( module , _ _webpack _exports _ _ , _ _webpack _require _ _ ) {
"use strict" ;
_ _webpack _require _ _ . r ( _ _webpack _exports _ _ ) ;
/* harmony import */ var _config _instance _js _ _WEBPACK _IMPORTED _MODULE _0 _ _ = _ _webpack _require _ _ ( /*! ../../config/instance.js */ "../config/instance.js" ) ;
/* harmony import */ var _config _instance _js _ _WEBPACK _IMPORTED _MODULE _0 _ _ _default = /*#__PURE__*/ _ _webpack _require _ _ . n ( _config _instance _js _ _WEBPACK _IMPORTED _MODULE _0 _ _ ) ;
/* harmony import */ var _tools _clientstorage _js _ _WEBPACK _IMPORTED _MODULE _1 _ _ = _ _webpack _require _ _ ( /*! ./tools/clientstorage.js */ "./src/tools/clientstorage.js" ) ;
/* harmony import */ var _tools _dom _js _ _WEBPACK _IMPORTED _MODULE _2 _ _ = _ _webpack _require _ _ ( /*! ./tools/dom.js */ "./src/tools/dom.js" ) ;
/* harmony import */ var _tools _everywhere _js _ _WEBPACK _IMPORTED _MODULE _3 _ _ = _ _webpack _require _ _ ( /*! ./tools/everywhere.js */ "./src/tools/everywhere.js" ) ;
/* harmony import */ var _tools _forms _js _ _WEBPACK _IMPORTED _MODULE _4 _ _ = _ _webpack _require _ _ ( /*! ./tools/forms.js */ "./src/tools/forms.js" ) ;
/* harmony import */ var _tools _main _ _WEBPACK _IMPORTED _MODULE _5 _ _ = _ _webpack _require _ _ ( /*! ../../tools/main */ "../tools/main.js" ) ;
/* harmony import */ var _tools _main _ _WEBPACK _IMPORTED _MODULE _5 _ _ _default = /*#__PURE__*/ _ _webpack _require _ _ . n ( _tools _main _ _WEBPACK _IMPORTED _MODULE _5 _ _ ) ;
/* harmony import */ var _tools _url _js _ _WEBPACK _IMPORTED _MODULE _6 _ _ = _ _webpack _require _ _ ( /*! ./tools/url.js */ "./src/tools/url.js" ) ;
/* harmony import */ var _tools _users _js _ _WEBPACK _IMPORTED _MODULE _7 _ _ = _ _webpack _require _ _ ( /*! ./tools/users.js */ "./src/tools/users.js" ) ;
function asyncGeneratorStep ( gen , resolve , reject , _next , _throw , key , arg ) { try { var info = gen [ key ] ( arg ) ; var value = info . value ; } catch ( error ) { reject ( error ) ; return ; } if ( info . done ) { resolve ( value ) ; } else { Promise . resolve ( value ) . then ( _next , _throw ) ; } }
function _asyncToGenerator ( fn ) { return function ( ) { var self = this , args = arguments ; return new Promise ( function ( resolve , reject ) { var gen = fn . apply ( self , args ) ; function _next ( value ) { asyncGeneratorStep ( gen , resolve , reject , _next , _throw , "next" , value ) ; } function _throw ( err ) { asyncGeneratorStep ( gen , resolve , reject , _next , _throw , "throw" , err ) ; } _next ( undefined ) ; } ) ; } ; }
// -- GESTION DU FORMULAIRE PERMETTANT DE SAISIR / ÉDITER LES INFOS DES UTILISATEURS ET DE LEUR ABONNEMENT
/// Vérifie que l'utilisateur est bien connecté, a le bon statut et le redirige vers le formulaire d'inscription si ce n'est pas le cas.
/// Si c'est ok, propose un moteur de recherche permettant de chercher un utilisateur
/// Si un id est passé par l'url on affiche les informations de l'utilisateur dans un formulaire permettant de l'éditer/supprimer.
/// Si pas d'id passé par l'url, on affiche un formulaire vide permettant d'en saisir un nouvel utilisateur
/// À ajouter :
/// - importation liste de comptes utilisateur à créer
/// - attribution d'un parrain à un utilisateur (via un moteur de recherche). Prévu par le contrôleur.
// Fichier de configuration côté client :
var lang = _config _instance _js _ _WEBPACK _IMPORTED _MODULE _0 _ _ [ "availableLangs" ] [ 0 ] ;
var configFrontEnd = _ _webpack _require _ _ ( "../views sync recursive ^\\.\\/.*\\.js$" ) ( "./" + _config _instance _js _ _WEBPACK _IMPORTED _MODULE _0 _ _ [ "theme" ] + "/config/" + lang + ".js" ) ; // Fonctions utiles au script : !! revoir quand le reste sera fini pour vérifier si tout est utile
// Dictionnaires :
var txt = _ _webpack _require _ _ ( "../lang sync recursive ^\\.\\/.*\\/general$" ) ( "./" + lang + "/general" ) ;
var txtUsers = _ _webpack _require _ _ ( "../lang sync recursive ^\\.\\/.*\\/user$" ) ( "./" + lang + "/user" ) ;
var txtSubscriptions = _ _webpack _require _ _ ( "../lang sync recursive ^\\.\\/.*\\/subscription$" ) ( "./" + lang + "/subscription" ) ;
Object ( _tools _everywhere _js _ _WEBPACK _IMPORTED _MODULE _3 _ _ [ "helloDev" ] ) ( ) ; // Principaux éléments du DOM manipulés :
var divMain = document . getElementById ( "main-content" ) ;
var divMessage = document . getElementById ( "message" ) ;
var divResponse = document . getElementById ( "response" ) ;
var divSubscribeIntro = document . getElementById ( "subscribeIntro" ) ;
var divPaymentsInfos = document . getElementById ( "infosPayments" ) ;
var divGodchildsInfos = document . getElementById ( "infosGodchilds" ) ;
var formUser = document . getElementById ( "users" ) ;
var deleteCheckBox = document . getElementById ( "deleteOkLabel" ) ;
var validationCheckBox = document . getElementById ( "validationOkLabel" ) ;
var btnNewUser = document . getElementById ( "wantNewUser" ) ;
var newPassword = document . getElementById ( "newPassword" ) ;
var timeDifference = document . getElementById ( "timeDifference" ) ;
var formSearch = document . getElementById ( "search" ) ;
var divSearchResult = document . getElementById ( "searchResult" ) ;
var initialise = /*#__PURE__*/ function ( ) {
var _ref = _asyncToGenerator ( /*#__PURE__*/ regeneratorRuntime . mark ( function _callee ( ) {
var config , isConnected , user , emptyUserForm , showFormUserInfos , urlDatas ;
return regeneratorRuntime . wrap ( function _callee$ ( _context ) {
while ( 1 ) {
switch ( _context . prev = _context . next ) {
case 0 :
_context . prev = 0 ;
_context . next = 3 ;
return Object ( _tools _users _js _ _WEBPACK _IMPORTED _MODULE _7 _ _ [ "getConfig" ] ) ( ) ;
case 3 :
config = _context . sent ;
if ( config ) {
_context . next = 8 ;
break ;
}
Object ( _tools _dom _js _ _WEBPACK _IMPORTED _MODULE _2 _ _ [ "addElement" ] ) ( divMessage , "p" , txt . serverError , "" , [ "error" ] ) ;
_context . next = 12 ;
break ;
case 8 :
_context . next = 10 ;
return Object ( _tools _users _js _ _WEBPACK _IMPORTED _MODULE _7 _ _ [ "checkSession" ] ) ( [ "manager" , "admin" ] , "/" + configFrontEnd . connectionPage , {
message : txtUsers . needBeConnected ,
color : "error"
} , window . location ) ;
case 10 :
isConnected = _context . sent ;
if ( isConnected ) {
user = Object ( _tools _clientstorage _js _ _WEBPACK _IMPORTED _MODULE _1 _ _ [ "getLocaly" ] ) ( "user" , true ) ;
Object ( _tools _everywhere _js _ _WEBPACK _IMPORTED _MODULE _3 _ _ [ "updateAccountLink" ] ) ( user . status , configFrontEnd ) ;
divMain . style . display = "block" ;
if ( ! Object ( _tools _main _ _WEBPACK _IMPORTED _MODULE _5 _ _ [ "isEmpty" ] ) ( Object ( _tools _clientstorage _js _ _WEBPACK _IMPORTED _MODULE _1 _ _ [ "getLocaly" ] ) ( "message" ) ) ) {
Object ( _tools _dom _js _ _WEBPACK _IMPORTED _MODULE _2 _ _ [ "addElement" ] ) ( divMessage , "p" , Object ( _tools _clientstorage _js _ _WEBPACK _IMPORTED _MODULE _1 _ _ [ "getLocaly" ] ) ( "message" , true ) . message , "" , [ Object ( _tools _clientstorage _js _ _WEBPACK _IMPORTED _MODULE _1 _ _ [ "getLocaly" ] ) ( "message" , true ) . color ] , "" , false ) ;
Object ( _tools _clientstorage _js _ _WEBPACK _IMPORTED _MODULE _1 _ _ [ "removeLocaly" ] ) ( "message" ) ;
} // Initialisation du formulaire de recherche :
Object ( _tools _forms _js _ _WEBPACK _IMPORTED _MODULE _4 _ _ [ "setAttributesToInputs" ] ) ( config , formSearch ) ; // Fonction utile pour vider le formulaire, y compris les champs hidden, etc.
// Cache aussi certains champs en mode création
emptyUserForm = function emptyUserForm ( ) {
Object ( _tools _forms _js _ _WEBPACK _IMPORTED _MODULE _4 _ _ [ "empyForm" ] ) ( formUser ) ; // Case de suppression cachée par défaut, car inutile pour formulaire de création
deleteCheckBox . style . display = "none" ; // Case de validation cachée par défaut, car utile que dans certains cas
validationCheckBox . style . display = "none" ;
divSubscribeIntro . innerHTML = "" ;
divPaymentsInfos . innerHTML = "" ;
divGodchildsInfos . innerHTML = "" ; // Certains navigateurs ont tendance à remplir tout seul les champs password
newPassword . value = "" ; // En mode création, pas de champ pour changer le mot de passe
newPassword . parentNode . style . display = "none" ; // Inutile en mode création
timeDifference . parentNode . style . display = "none" ;
} ;
emptyUserForm ( ) ; // Initialise les contraintes du formulaire :
Object ( _tools _forms _js _ _WEBPACK _IMPORTED _MODULE _4 _ _ [ "setAttributesToInputs" ] ) ( config , formUser ) ; // Fonction affichant les infos connues concernant un utilisateur et son abonnement
showFormUserInfos = function showFormUserInfos ( id ) {
// on commence par tout vider, des fois que... :
emptyUserForm ( ) ;
var xhrGetInfos = new XMLHttpRequest ( ) ;
xhrGetInfos . open ( "GET" , _config _instance _js _ _WEBPACK _IMPORTED _MODULE _0 _ _ [ "apiUrl" ] + config . userRoutes + config . getUserInfos + id ) ;
xhrGetInfos . onreadystatechange = function ( ) {
if ( this . readyState == XMLHttpRequest . DONE ) {
var response = JSON . parse ( this . responseText ) ;
if ( this . status === 200 && response . User != undefined ) {
newPassword . parentNode . style . display = "block" ;
timeDifference . parentNode . style . display = "block" ;
var mapText = {
ID _USER : response . User . id ,
DATE _CREA : Object ( _tools _main _ _WEBPACK _IMPORTED _MODULE _5 _ _ [ "dateFormat" ] ) ( response . User . createdAt ) ,
DATE _UPDATE : Object ( _tools _main _ _WEBPACK _IMPORTED _MODULE _5 _ _ [ "dateFormat" ] ) ( response . User . updatedAt ) ,
DATE _CONNECTION : Object ( _tools _main _ _WEBPACK _IMPORTED _MODULE _5 _ _ [ "dateFormat" ] ) ( response . User . connectedAt )
} ;
var subscribeIntro = Object ( _tools _main _ _WEBPACK _IMPORTED _MODULE _5 _ _ [ "replaceAll" ] ) ( txtUsers . infosUserForAdmin , mapText ) ;
for ( var data in response . User ) {
if ( formUser . elements [ data ] !== undefined ) {
if ( response . User [ data ] !== true && response . User [ data ] !== false ) // booléen = case à cocher !
formUser . elements [ data ] . value = response . User [ data ] ; else if ( response . User [ data ] == true ) // si false, on ne fait rien
formUser . elements [ "" + data ] . checked = "checked" ;
}
}
if ( response . Subscription != undefined ) {
// nombre de jours de l'abonnement
formUser . elements [ "numberOfDays" ] . value = response . Subscription [ "numberOfDays" ] ; // infos de l'abonnement
if ( response . Subscription . noticeOk == true ) formUser . elements [ "noticeOk" ] . checked = "checked" ; // jours de réception
for ( var i in response . Subscription . receiptDays ) {
formUser . elements [ "d" + response . Subscription . receiptDays [ i ] ] . checked = "checked" ;
}
var beginSubTS = new Date ( response . Subscription . createdAt ) . getTime ( ) ;
var nbDaysOk = response . Subscription . numberOfDays - Math . round ( ( Date . now ( ) - beginSubTS ) / 1000 / 3600 / 24 ) ;
if ( nbDaysOk > 0 ) subscribeIntro += "<br>" + txtSubscriptions . infosNbDaysAdmin . replace ( "NB_DAYS" , nbDaysOk ) ; else subscribeIntro += "<br>" + txtSubscriptions . infosExpiratedAdmin ;
Object ( _tools _dom _js _ _WEBPACK _IMPORTED _MODULE _2 _ _ [ "addElement" ] ) ( divSubscribeIntro , "p" , subscribeIntro , "" , [ "information" ] , "" , false ) ;
} else {
Object ( _tools _dom _js _ _WEBPACK _IMPORTED _MODULE _2 _ _ [ "addElement" ] ) ( divSubscribeIntro , "p" , txtSubscriptions . isNotValided , "" , [ "error" ] ) ;
validationCheckBox . style . display = "block" ;
}
deleteCheckBox . style . display = "block" ; // Infos de paiements via API WP
var xhrGetPaymentsInfos = new XMLHttpRequest ( ) ;
xhrGetPaymentsInfos . open ( "GET" , _config _instance _js _ _WEBPACK _IMPORTED _MODULE _0 _ _ [ "apiUrl" ] + config . getPayments + response . User . id ) ;
xhrGetPaymentsInfos . onreadystatechange = function ( ) {
if ( this . readyState == XMLHttpRequest . DONE ) {
var responsePay = JSON . parse ( this . responseText ) ;
if ( this . status === 200 ) {
if ( responsePay . length !== 0 ) {
var txtPayments = "" ;
for ( var _i in responsePay ) {
var _mapText = {
DATE _PAYMENT : Object ( _tools _main _ _WEBPACK _IMPORTED _MODULE _5 _ _ [ "dateFormat" ] ) ( responsePay [ _i ] . createdAt , "fr" ) ,
AMOUNT : responsePay [ _i ] . amount ,
CLIENT _NAME : responsePay [ _i ] . clientName
} ;
txtPayments += "<li>" + Object ( _tools _main _ _WEBPACK _IMPORTED _MODULE _5 _ _ [ "replaceAll" ] ) ( txtSubscriptions . infosPaymentsAdmin , _mapText ) + "</li>" ;
}
Object ( _tools _dom _js _ _WEBPACK _IMPORTED _MODULE _2 _ _ [ "addElement" ] ) ( divPaymentsInfos , "ul" , txtPayments , "" , [ "information" ] , "" , false ) ;
divPaymentsInfos . style . display = "block" ;
}
}
}
} ;
xhrGetPaymentsInfos . setRequestHeader ( "Authorization" , "Bearer " + user . token ) ;
xhrGetPaymentsInfos . send ( ) ; // Un parrain ou deux par deux ?
var txtGodchilds = "" ;
if ( ! Object ( _tools _main _ _WEBPACK _IMPORTED _MODULE _5 _ _ [ "isEmpty" ] ) ( response . User . GodfatherId ) ) {
var xhrGetGodFatherInfos = new XMLHttpRequest ( ) ;
xhrGetGodFatherInfos . open ( "GET" , _config _instance _js _ _WEBPACK _IMPORTED _MODULE _0 _ _ [ "apiUrl" ] + config . userRoutes + config . getUserInfos + response . User . GodfatherId ) ;
xhrGetGodFatherInfos . onreadystatechange = function ( ) {
if ( this . readyState == XMLHttpRequest . DONE ) {
var responseGF = JSON . parse ( this . responseText ) ;
if ( this . status === 200 && responseGF . User != undefined ) txtGodchilds += txtUsers . infosAdminGodfather + "<a href='/" + configFrontEnd . usersManagementPage + "?id=" + responseGF . User . id + "' target='_blank'>" + responseGF . User . name + "</a>" + ".<br>" ;
}
} ;
xhrGetGodFatherInfos . setRequestHeader ( "Authorization" , "Bearer " + user . token ) ;
xhrGetGodFatherInfos . send ( ) ;
} // Des filleuls ?
var xhrGetGodchilds = new XMLHttpRequest ( ) ;
xhrGetGodchilds . open ( "GET" , _config _instance _js _ _WEBPACK _IMPORTED _MODULE _0 _ _ [ "apiUrl" ] + config . userRoutes + config . getGodChilds + id ) ;
xhrGetGodchilds . onreadystatechange = function ( ) {
if ( this . readyState == XMLHttpRequest . DONE ) {
var responseGS = JSON . parse ( this . responseText ) ;
if ( this . status === 200 ) {
if ( responseGS . length !== 0 ) {
txtGodchilds += txtUsers . infosAdminNbGodChilds . replace ( "#NB" , responseGS . length ) ;
for ( var _i2 in responseGS ) {
txtGodchilds += "<a href='/" + configFrontEnd . usersManagementPage + "?id=" + responseGS [ _i2 ] . id + "' target='_blank'>" + responseGS [ _i2 ] . name + "</a>" ;
}
}
}
}
} ;
xhrGetGodchilds . setRequestHeader ( "Authorization" , "Bearer " + user . token ) ;
xhrGetGodchilds . send ( ) ;
if ( txtGodchilds !== "" ) {
Object ( _tools _dom _js _ _WEBPACK _IMPORTED _MODULE _2 _ _ [ "addElement" ] ) ( divGodchildsInfos , "p" , txtGodchilds + "." , "" , [ "information" ] , "" , false ) ;
divGodchildsInfos . style . display = "block" ;
}
}
}
} ;
xhrGetInfos . setRequestHeader ( "Authorization" , "Bearer " + user . token ) ;
xhrGetInfos . send ( ) ;
} ; // Si un id est passé par l'url, on essaye d'afficher l'utilisateur :
urlDatas = Object ( _tools _url _js _ _WEBPACK _IMPORTED _MODULE _6 _ _ [ "getUrlParams" ] ) ( ) ;
if ( urlDatas && urlDatas . id !== undefined ) showFormUserInfos ( urlDatas . id ) ; // Besoin d'un coup de Kärcher ?
btnNewUser . addEventListener ( "click" , function ( e ) {
emptyUserForm ( ) ;
} ) ; // Envoi du formulaire des infos de l'utilisateur
formUser . addEventListener ( "submit" , function ( e ) {
e . preventDefault ( ) ;
divResponse . innerHTML = "" ;
var datas = Object ( _tools _forms _js _ _WEBPACK _IMPORTED _MODULE _4 _ _ [ "getDatasFromInputs" ] ) ( formUser ) ; // recomposition des jours valables pour l'abonnement :
datas . receiptDays = "" ;
for ( var i = 1 ; i <= 7 ; i ++ ) {
if ( datas [ "d" + i ] !== undefined ) datas . receiptDays += "" + i ;
}
if ( datas . noticeOk === undefined ) datas . noticeOk = "false" ;
if ( datas . newsletterOk === undefined ) datas . newsletterOk = "false" ;
var xhrUserDatas = new XMLHttpRequest ( ) ;
if ( ! Object ( _tools _main _ _WEBPACK _IMPORTED _MODULE _5 _ _ [ "isEmpty" ] ) ( datas . id ) && datas . deleteOk !== undefined ) xhrUserDatas . open ( "DELETE" , _config _instance _js _ _WEBPACK _IMPORTED _MODULE _0 _ _ [ "apiUrl" ] + config . userRoutes + "/" + datas . id ) ; else if ( ! Object ( _tools _main _ _WEBPACK _IMPORTED _MODULE _5 _ _ [ "isEmpty" ] ) ( datas . id ) && datas . validationOk !== undefined ) xhrUserDatas . open ( "POST" , _config _instance _js _ _WEBPACK _IMPORTED _MODULE _0 _ _ [ "apiUrl" ] + config . userRoutes + config . validateUserRoute + datas . id ) ; else if ( ! Object ( _tools _main _ _WEBPACK _IMPORTED _MODULE _5 _ _ [ "isEmpty" ] ) ( datas . id ) ) xhrUserDatas . open ( "PUT" , _config _instance _js _ _WEBPACK _IMPORTED _MODULE _0 _ _ [ "apiUrl" ] + config . userRoutes + config . updateUserInfos + datas . id ) ; else {
datas . password = Object ( _tools _users _js _ _WEBPACK _IMPORTED _MODULE _7 _ _ [ "getPassword" ] ) ( config . password . minlength , config . password . minlength + 2 ) ; // mot de passe temporaire
xhrUserDatas . open ( "POST" , _config _instance _js _ _WEBPACK _IMPORTED _MODULE _0 _ _ [ "apiUrl" ] + config . userRoutes + config . createUserRoute ) ;
}
xhrUserDatas . onreadystatechange = function ( ) {
if ( this . readyState == XMLHttpRequest . DONE ) {
var response = JSON . parse ( this . responseText ) ;
if ( this . status === 201 && response . id != undefined ) {
Object ( _tools _dom _js _ _WEBPACK _IMPORTED _MODULE _2 _ _ [ "addElement" ] ) ( divResponse , "p" , txt . addOkMessage , "" , [ "success" ] ) ;
datas . id = response . id ;
} else if ( this . status === 200 && response . message != undefined ) {
if ( Array . isArray ( response . message ) ) response . message = response . message . join ( "<br>" ) ; else response . message = response . message ;
Object ( _tools _dom _js _ _WEBPACK _IMPORTED _MODULE _2 _ _ [ "addElement" ] ) ( divResponse , "p" , response . message , "" , [ "success" ] ) ;
} else if ( response . errors ) {
if ( Array . isArray ( response . errors ) ) response . errors = response . errors . join ( "<br>" ) ; else response . errors = txt . serverError ;
Object ( _tools _dom _js _ _WEBPACK _IMPORTED _MODULE _2 _ _ [ "addElement" ] ) ( divResponse , "p" , response . errors , "" , [ "error" ] ) ;
} else Object ( _tools _dom _js _ _WEBPACK _IMPORTED _MODULE _2 _ _ [ "addElement" ] ) ( divResponse , "p" , txt . serverError , "" , [ "error" ] ) ;
if ( Object ( _tools _main _ _WEBPACK _IMPORTED _MODULE _5 _ _ [ "isEmpty" ] ) ( response . errors ) ) {
if ( datas . deleteOk === undefined ) showFormUserInfos ( datas . id ) ; // peut avoir évolué suivant ce qui s'est passé
else emptyUserForm ( ) ;
}
}
} ;
xhrUserDatas . setRequestHeader ( "Content-Type" , "application/json" ) ;
xhrUserDatas . setRequestHeader ( "Authorization" , "Bearer " + user . token ) ;
if ( datas ) xhrUserDatas . send ( JSON . stringify ( datas ) ) ;
} ) ; // Traitement du lancement d'une recherche
formSearch . addEventListener ( "submit" , function ( e ) {
e . preventDefault ( ) ;
var datas = Object ( _tools _forms _js _ _WEBPACK _IMPORTED _MODULE _4 _ _ [ "getDatasFromInputs" ] ) ( formSearch ) ;
var xhrSearch = new XMLHttpRequest ( ) ;
xhrSearch . open ( "POST" , _config _instance _js _ _WEBPACK _IMPORTED _MODULE _0 _ _ [ "apiUrl" ] + config . userRoutes + config . searchUserRoute ) ;
xhrSearch . onreadystatechange = function ( ) {
if ( this . readyState == XMLHttpRequest . DONE ) {
var response = JSON . parse ( this . responseText ) ;
if ( this . status === 200 && Array . isArray ( response ) ) {
if ( response . length === 0 ) Object ( _tools _dom _js _ _WEBPACK _IMPORTED _MODULE _2 _ _ [ "addElement" ] ) ( divSearchResult , "p" , txtUsers . notFound , "" , [ "information" ] ) ; else {
var selectHTML = "<option value=''></option>" ;
for ( var i in response ) {
selectHTML += "<option value='" + response [ i ] . id + "'>" + response [ i ] . name + " (" + response [ i ] . email + ")</option>" ;
}
Object ( _tools _dom _js _ _WEBPACK _IMPORTED _MODULE _2 _ _ [ "addElement" ] ) ( divSearchResult , "select" , selectHTML , "selectSearch" ) ;
var searchSelect = document . getElementById ( "selectSearch" ) ;
searchSelect . addEventListener ( "change" , function ( ) {
if ( searchSelect . value !== "" ) showFormUserInfos ( searchSelect . value ) ;
} ) ;
}
} else Object ( _tools _dom _js _ _WEBPACK _IMPORTED _MODULE _2 _ _ [ "addElement" ] ) ( divSearchResult , "p" , txt . serverError , "" , [ "error" ] ) ;
}
} ;
xhrSearch . setRequestHeader ( "Content-Type" , "application/json" ) ;
xhrSearch . setRequestHeader ( "Authorization" , "Bearer " + user . token ) ;
if ( datas ) xhrSearch . send ( JSON . stringify ( datas ) ) ;
} ) ;
}
case 12 :
_context . next = 18 ;
break ;
case 14 :
_context . prev = 14 ;
_context . t0 = _context [ "catch" ] ( 0 ) ;
console . error ( _context . t0 ) ;
Object ( _tools _dom _js _ _WEBPACK _IMPORTED _MODULE _2 _ _ [ "addElement" ] ) ( divMessage , "p" , txt . serverError , "" , [ "error" ] ) ;
case 18 :
case "end" :
return _context . stop ( ) ;
}
}
} , _callee , null , [ [ 0 , 14 ] ] ) ;
} ) ) ;
return function initialise ( ) {
return _ref . apply ( this , arguments ) ;
} ;
} ( ) ;
initialise ( ) ;
/***/ } ) ,
/***/ "./src/tools/clientstorage.js" :
/ * ! * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ! * \
! * * * . / src / tools / clientstorage . js * * * !
\ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * /
/*! exports provided: saveLocaly, getLocaly, removeLocaly */
/***/ ( function ( module , _ _webpack _exports _ _ , _ _webpack _require _ _ ) {
"use strict" ;
_ _webpack _require _ _ . r ( _ _webpack _exports _ _ ) ;
/* harmony export (binding) */ _ _webpack _require _ _ . d ( _ _webpack _exports _ _ , "saveLocaly" , function ( ) { return saveLocaly ; } ) ;
/* harmony export (binding) */ _ _webpack _require _ _ . d ( _ _webpack _exports _ _ , "getLocaly" , function ( ) { return getLocaly ; } ) ;
/* harmony export (binding) */ _ _webpack _require _ _ . d ( _ _webpack _exports _ _ , "removeLocaly" , function ( ) { return removeLocaly ; } ) ;
// FONCTIONS UTILES AU STOCKAGE LOCAL (SESSION, COOKIES, INDEXDB, ETC.)
// Revenir pour gérer le cas où local.storage n'est pas connu pour utiliser cookie
var saveLocaly = function saveLocaly ( name , data ) {
localStorage . setItem ( name , JSON . stringify ( data ) ) ;
} ;
var getLocaly = function getLocaly ( name ) {
var json = arguments . length > 1 && arguments [ 1 ] !== undefined ? arguments [ 1 ] : false ;
if ( json ) return JSON . parse ( localStorage . getItem ( name ) ) ; else return localStorage . getItem ( name ) ;
} ;
var removeLocaly = function removeLocaly ( name ) {
localStorage . removeItem ( name ) ;
} ;
/***/ } ) ,
/***/ "./src/tools/dom.js" :
/ * ! * * * * * * * * * * * * * * * * * * * * * * * * * * ! * \
! * * * . / src / tools / dom . js * * * !
\ * * * * * * * * * * * * * * * * * * * * * * * * * * /
/*! exports provided: addElement */
/***/ ( function ( module , _ _webpack _exports _ _ , _ _webpack _require _ _ ) {
"use strict" ;
_ _webpack _require _ _ . r ( _ _webpack _exports _ _ ) ;
/* harmony export (binding) */ _ _webpack _require _ _ . d ( _ _webpack _exports _ _ , "addElement" , function ( ) { return addElement ; } ) ;
/* harmony import */ var _tools _main _ _WEBPACK _IMPORTED _MODULE _0 _ _ = _ _webpack _require _ _ ( /*! ../../../tools/main */ "../tools/main.js" ) ;
/* harmony import */ var _tools _main _ _WEBPACK _IMPORTED _MODULE _0 _ _ _default = /*#__PURE__*/ _ _webpack _require _ _ . n ( _tools _main _ _WEBPACK _IMPORTED _MODULE _0 _ _ ) ;
function _typeof ( obj ) { "@babel/helpers - typeof" ; if ( typeof Symbol === "function" && typeof Symbol . iterator === "symbol" ) { _typeof = function _typeof ( obj ) { return typeof obj ; } ; } else { _typeof = function _typeof ( obj ) { return obj && typeof Symbol === "function" && obj . constructor === Symbol && obj !== Symbol . prototype ? "symbol" : typeof obj ; } ; } return _typeof ( obj ) ; }
// Fonction associant les attributs fournis à un champ de formulaire
var addElement = function addElement ( eltParent , eltType ) {
var eltContent = arguments . length > 2 && arguments [ 2 ] !== undefined ? arguments [ 2 ] : "" ;
var eltId = arguments . length > 3 && arguments [ 3 ] !== undefined ? arguments [ 3 ] : "" ;
var eltClass = arguments . length > 4 && arguments [ 4 ] !== undefined ? arguments [ 4 ] : [ ] ;
var eltAttributes = arguments . length > 5 && arguments [ 5 ] !== undefined ? arguments [ 5 ] : { } ;
var replace = arguments . length > 6 && arguments [ 6 ] !== undefined ? arguments [ 6 ] : true ;
if ( Object ( _tools _main _ _WEBPACK _IMPORTED _MODULE _0 _ _ [ "isEmpty" ] ) ( eltType ) || Object ( _tools _main _ _WEBPACK _IMPORTED _MODULE _0 _ _ [ "isEmpty" ] ) ( eltParent ) ) return false ; else {
var newElement = document . createElement ( eltType ) ;
if ( ! Object ( _tools _main _ _WEBPACK _IMPORTED _MODULE _0 _ _ [ "isEmpty" ] ) ( eltId ) ) // tester si l'id n'est pas déjà utilisé dans le DOM ?
newElement . id = eltId ;
if ( Array . isArray ( eltClass ) && eltClass . length != 0 ) {
for ( var i in eltClass ) {
newElement . classList . add ( eltClass [ i ] ) ;
}
}
if ( _typeof ( eltAttributes ) === "object" ) // !! tous les objets ne sont pas ok
{
for ( var attributName in eltAttributes ) {
newElement . setAttribute ( attributName , eltAttributes [ attributName ] ) ;
}
}
if ( ! Object ( _tools _main _ _WEBPACK _IMPORTED _MODULE _0 _ _ [ "isEmpty" ] ) ( eltContent ) ) newElement . innerHTML = eltContent . replace ( /\n/g , "<br>" ) ; // innerHTML permet d'ajouter du texte ayant lui-même des balises, etc.
if ( replace ) eltParent . innerHTML = "" ;
eltParent . appendChild ( newElement ) ;
}
} ;
/***/ } ) ,
/***/ "./src/tools/everywhere.js" :
/ * ! * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ! * \
! * * * . / src / tools / everywhere . js * * * !
\ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * /
/*! exports provided: helloDev, updateAccountLink */
/***/ ( function ( module , _ _webpack _exports _ _ , _ _webpack _require _ _ ) {
"use strict" ;
_ _webpack _require _ _ . r ( _ _webpack _exports _ _ ) ;
/* harmony export (binding) */ _ _webpack _require _ _ . d ( _ _webpack _exports _ _ , "helloDev" , function ( ) { return helloDev ; } ) ;
/* harmony export (binding) */ _ _webpack _require _ _ . d ( _ _webpack _exports _ _ , "updateAccountLink" , function ( ) { return updateAccountLink ; } ) ;
// Ce script fournit des fonctions utilisées sur toutes les pages du site
var helloDev = function helloDev ( ) {
2020-08-10 16:58:03 +02:00
console . log ( "**** Hello ami développeur :-)\n\nLe code de WikiLerni est libre et vous pouvez le trouver si Gitlab :\nhttps://gitlab.com/lefablab/wikilerni\n\nPour les suggestions d'amélioration ou questions : dev@wililerni.com ****" ) ;
2020-08-07 12:23:59 +02:00
return true ;
} ;
var updateAccountLink = function updateAccountLink ( status , configTemplate ) {
var link = document . getElementById ( "accountHeadLink" ) ;
var homePage = status + "HomePage" ;
link . href = "/" + configTemplate [ homePage ] ;
} ;
/***/ } ) ,
/***/ "./src/tools/forms.js" :
/ * ! * * * * * * * * * * * * * * * * * * * * * * * * * * * * ! * \
! * * * . / src / tools / forms . js * * * !
\ * * * * * * * * * * * * * * * * * * * * * * * * * * * * /
/*! exports provided: setAttributesToInputs, getDatasFromInputs, empyForm, empyAndHideForm */
/***/ ( function ( module , _ _webpack _exports _ _ , _ _webpack _require _ _ ) {
"use strict" ;
_ _webpack _require _ _ . r ( _ _webpack _exports _ _ ) ;
/* harmony export (binding) */ _ _webpack _require _ _ . d ( _ _webpack _exports _ _ , "setAttributesToInputs" , function ( ) { return setAttributesToInputs ; } ) ;
/* harmony export (binding) */ _ _webpack _require _ _ . d ( _ _webpack _exports _ _ , "getDatasFromInputs" , function ( ) { return getDatasFromInputs ; } ) ;
/* harmony export (binding) */ _ _webpack _require _ _ . d ( _ _webpack _exports _ _ , "empyForm" , function ( ) { return empyForm ; } ) ;
/* harmony export (binding) */ _ _webpack _require _ _ . d ( _ _webpack _exports _ _ , "empyAndHideForm" , function ( ) { return empyAndHideForm ; } ) ;
/* harmony import */ var _tools _main _ _WEBPACK _IMPORTED _MODULE _0 _ _ = _ _webpack _require _ _ ( /*! ../../../tools/main */ "../tools/main.js" ) ;
/* harmony import */ var _tools _main _ _WEBPACK _IMPORTED _MODULE _0 _ _ _default = /*#__PURE__*/ _ _webpack _require _ _ . n ( _tools _main _ _WEBPACK _IMPORTED _MODULE _0 _ _ ) ;
function _createForOfIteratorHelper ( o , allowArrayLike ) { var it ; if ( typeof Symbol === "undefined" || o [ Symbol . iterator ] == null ) { if ( Array . isArray ( o ) || ( it = _unsupportedIterableToArray ( o ) ) || allowArrayLike && o && typeof o . length === "number" ) { if ( it ) o = it ; var i = 0 ; var F = function F ( ) { } ; return { s : F , n : function n ( ) { if ( i >= o . length ) return { done : true } ; return { done : false , value : o [ i ++ ] } ; } , e : function e ( _e ) { throw _e ; } , f : F } ; } throw new TypeError ( "Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method." ) ; } var normalCompletion = true , didErr = false , err ; return { s : function s ( ) { it = o [ Symbol . iterator ] ( ) ; } , n : function n ( ) { var step = it . next ( ) ; normalCompletion = step . done ; return step ; } , e : function e ( _e2 ) { didErr = true ; err = _e2 ; } , f : function f ( ) { try { if ( ! normalCompletion && it . return != null ) it . return ( ) ; } finally { if ( didErr ) throw err ; } } } ; }
function _unsupportedIterableToArray ( o , minLen ) { if ( ! o ) return ; if ( typeof o === "string" ) return _arrayLikeToArray ( o , minLen ) ; var n = Object . prototype . toString . call ( o ) . slice ( 8 , - 1 ) ; if ( n === "Object" && o . constructor ) n = o . constructor . name ; if ( n === "Map" || n === "Set" ) return Array . from ( o ) ; if ( n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/ . test ( n ) ) return _arrayLikeToArray ( o , minLen ) ; }
function _arrayLikeToArray ( arr , len ) { if ( len == null || len > arr . length ) len = arr . length ; for ( var i = 0 , arr2 = new Array ( len ) ; i < len ; i ++ ) { arr2 [ i ] = arr [ i ] ; } return arr2 ; }
// Fonction associant les attributs fournis à un champ de formulaire
var setAttributesToInputs = function setAttributesToInputs ( inputsConf , myForm ) {
for ( var i in myForm . elements ) {
if ( ! Object ( _tools _main _ _WEBPACK _IMPORTED _MODULE _0 _ _ [ "isEmpty" ] ) ( myForm . elements [ i ] . id ) ) {
var idInput = myForm . elements [ i ] . id ;
if ( inputsConf [ idInput ] !== undefined ) {
var inputHTML = document . getElementById ( idInput ) ;
for ( var attribute in inputsConf [ idInput ] ) {
inputHTML . setAttribute ( attribute , inputsConf [ idInput ] [ attribute ] ) ;
}
}
}
}
return true ;
} ; // Récupère toutes les valeurs de champs en omettant les checkbox non cochées, etc.
var getDatasFromInputs = function getDatasFromInputs ( myForm ) {
var datas = { } ;
var formData = new FormData ( myForm ) ;
var _iterator = _createForOfIteratorHelper ( formData . entries ( ) ) ,
_step ;
try {
for ( _iterator . s ( ) ; ! ( _step = _iterator . n ( ) ) . done ; ) {
var entrie = _step . value ;
datas [ entrie [ 0 ] ] = entrie [ 1 ] ;
}
} catch ( err ) {
_iterator . e ( err ) ;
} finally {
_iterator . f ( ) ;
}
return datas ;
} ; // Vide tous les champs d'un formulaire, y compris hidden, checkbox, etc.
// Revoir pour les select
var empyForm = function empyForm ( myForm ) {
var formData = new FormData ( myForm ) ;
var _iterator2 = _createForOfIteratorHelper ( formData . entries ( ) ) ,
_step2 ;
try {
for ( _iterator2 . s ( ) ; ! ( _step2 = _iterator2 . n ( ) ) . done ; ) {
var entrie = _step2 . value ;
if ( myForm . elements [ entrie [ 0 ] ] . type == "checkbox" || myForm . elements [ entrie [ 0 ] ] . type == "radio" ) myForm . elements [ entrie [ 0 ] ] . checked = false ; else myForm . elements [ entrie [ 0 ] ] . value = "" ;
}
} catch ( err ) {
_iterator2 . e ( err ) ;
} finally {
_iterator2 . f ( ) ;
}
return true ;
} ; // Vide et cache le formulaire
var empyAndHideForm = function empyAndHideForm ( myForm ) {
empyForm ( myForm ) ;
myForm . style . display = "none" ;
} ;
/***/ } ) ,
/***/ "./src/tools/url.js" :
/ * ! * * * * * * * * * * * * * * * * * * * * * * * * * * ! * \
! * * * . / src / tools / url . js * * * !
\ * * * * * * * * * * * * * * * * * * * * * * * * * * /
/*! exports provided: getUrlParams */
/***/ ( function ( module , _ _webpack _exports _ _ , _ _webpack _require _ _ ) {
"use strict" ;
_ _webpack _require _ _ . r ( _ _webpack _exports _ _ ) ;
/* harmony export (binding) */ _ _webpack _require _ _ . d ( _ _webpack _exports _ _ , "getUrlParams" , function ( ) { return getUrlParams ; } ) ;
/* harmony import */ var _tools _main _ _WEBPACK _IMPORTED _MODULE _0 _ _ = _ _webpack _require _ _ ( /*! ../../../tools/main */ "../tools/main.js" ) ;
/* harmony import */ var _tools _main _ _WEBPACK _IMPORTED _MODULE _0 _ _ _default = /*#__PURE__*/ _ _webpack _require _ _ . n ( _tools _main _ _WEBPACK _IMPORTED _MODULE _0 _ _ ) ;
// Fonction récupérant les paramètres passés par l'url
var getUrlParams = function getUrlParams ( ) {
if ( Object ( _tools _main _ _WEBPACK _IMPORTED _MODULE _0 _ _ [ "isEmpty" ] ) ( location . search ) ) return false ;
var parameters = location . search . substring ( 1 ) . split ( "&" ) ;
if ( ! Array . isArray ( parameters ) || parameters . length === 0 ) return false ;
var param ,
datas = { } ;
for ( var i in parameters ) {
param = parameters [ i ] . split ( "=" ) ;
if ( param . length === 2 ) datas [ param [ 0 ] ] = decodeURI ( param [ 1 ] ) ;
}
return datas ;
} ;
/***/ } ) ,
/***/ "./src/tools/users.js" :
/ * ! * * * * * * * * * * * * * * * * * * * * * * * * * * * * ! * \
! * * * . / src / tools / users . js * * * !
\ * * * * * * * * * * * * * * * * * * * * * * * * * * * * /
/*! exports provided: getConfig, getTimeDifference, getPassword, setSession, checkAnswerDatas, checkSession */
/***/ ( function ( module , _ _webpack _exports _ _ , _ _webpack _require _ _ ) {
"use strict" ;
_ _webpack _require _ _ . r ( _ _webpack _exports _ _ ) ;
/* harmony export (binding) */ _ _webpack _require _ _ . d ( _ _webpack _exports _ _ , "getConfig" , function ( ) { return getConfig ; } ) ;
/* harmony export (binding) */ _ _webpack _require _ _ . d ( _ _webpack _exports _ _ , "getTimeDifference" , function ( ) { return getTimeDifference ; } ) ;
/* harmony export (binding) */ _ _webpack _require _ _ . d ( _ _webpack _exports _ _ , "getPassword" , function ( ) { return getPassword ; } ) ;
/* harmony export (binding) */ _ _webpack _require _ _ . d ( _ _webpack _exports _ _ , "setSession" , function ( ) { return setSession ; } ) ;
/* harmony export (binding) */ _ _webpack _require _ _ . d ( _ _webpack _exports _ _ , "checkAnswerDatas" , function ( ) { return checkAnswerDatas ; } ) ;
/* harmony export (binding) */ _ _webpack _require _ _ . d ( _ _webpack _exports _ _ , "checkSession" , function ( ) { return checkSession ; } ) ;
/* harmony import */ var _config _instance _js _ _WEBPACK _IMPORTED _MODULE _0 _ _ = _ _webpack _require _ _ ( /*! ../../../config/instance.js */ "../config/instance.js" ) ;
/* harmony import */ var _config _instance _js _ _WEBPACK _IMPORTED _MODULE _0 _ _ _default = /*#__PURE__*/ _ _webpack _require _ _ . n ( _config _instance _js _ _WEBPACK _IMPORTED _MODULE _0 _ _ ) ;
/* harmony import */ var _config _users _js _ _WEBPACK _IMPORTED _MODULE _1 _ _ = _ _webpack _require _ _ ( /*! ../../../config/users.js */ "../config/users.js" ) ;
/* harmony import */ var _config _users _js _ _WEBPACK _IMPORTED _MODULE _1 _ _ _default = /*#__PURE__*/ _ _webpack _require _ _ . n ( _config _users _js _ _WEBPACK _IMPORTED _MODULE _1 _ _ ) ;
/* harmony import */ var _clientstorage _js _ _WEBPACK _IMPORTED _MODULE _2 _ _ = _ _webpack _require _ _ ( /*! ./clientstorage.js */ "./src/tools/clientstorage.js" ) ;
/* harmony import */ var _tools _main _ _WEBPACK _IMPORTED _MODULE _3 _ _ = _ _webpack _require _ _ ( /*! ../../../tools/main */ "../tools/main.js" ) ;
/* harmony import */ var _tools _main _ _WEBPACK _IMPORTED _MODULE _3 _ _ _default = /*#__PURE__*/ _ _webpack _require _ _ . n ( _tools _main _ _WEBPACK _IMPORTED _MODULE _3 _ _ ) ;
function asyncGeneratorStep ( gen , resolve , reject , _next , _throw , key , arg ) { try { var info = gen [ key ] ( arg ) ; var value = info . value ; } catch ( error ) { reject ( error ) ; return ; } if ( info . done ) { resolve ( value ) ; } else { Promise . resolve ( value ) . then ( _next , _throw ) ; } }
function _asyncToGenerator ( fn ) { return function ( ) { var self = this , args = arguments ; return new Promise ( function ( resolve , reject ) { var gen = fn . apply ( self , args ) ; function _next ( value ) { asyncGeneratorStep ( gen , resolve , reject , _next , _throw , "next" , value ) ; } function _throw ( err ) { asyncGeneratorStep ( gen , resolve , reject , _next , _throw , "throw" , err ) ; } _next ( undefined ) ; } ) ; } ; }
var lang = _config _instance _js _ _WEBPACK _IMPORTED _MODULE _0 _ _ [ "availableLangs" ] [ 0 ] ;
var configTemplate = _ _webpack _require _ _ ( "../views sync recursive ^\\.\\/.*\\.js$" ) ( "./" + _config _instance _js _ _WEBPACK _IMPORTED _MODULE _0 _ _ [ "theme" ] + "/config/" + lang + ".js" ) ;
// Récupère les données de configuration des utilisateurs
// À terme, un fichier statique importable comme module devrait éviter une requête ajax
var getConfig = /*#__PURE__*/ function ( ) {
var _ref = _asyncToGenerator ( /*#__PURE__*/ regeneratorRuntime . mark ( function _callee ( ) {
return regeneratorRuntime . wrap ( function _callee$ ( _context ) {
while ( 1 ) {
switch ( _context . prev = _context . next ) {
case 0 :
return _context . abrupt ( "return" , new Promise ( function ( resolve , reject ) {
var xhr = new XMLHttpRequest ( ) ;
xhr . open ( "GET" , _config _instance _js _ _WEBPACK _IMPORTED _MODULE _0 _ _ [ "apiUrl" ] + "/user/getconfig" ) ;
xhr . onload = function ( ) {
return resolve ( JSON . parse ( xhr . responseText ) ) ;
} ;
xhr . onerror = function ( ) {
return reject ( xhr . statusText ) ;
} ;
xhr . send ( ) ;
} ) ) ;
case 1 :
case "end" :
return _context . stop ( ) ;
}
}
} , _callee ) ;
} ) ) ;
return function getConfig ( ) {
return _ref . apply ( this , arguments ) ;
} ;
} ( ) ;
var getTimeDifference = function getTimeDifference ( ) {
2020-08-07 12:38:19 +02:00
// multiplier par -1, car c'est ce qu'il faut "ajouter" à l'heure UTC pour revenir en heure locale qui m'intéresse et non l'inverse
var timeLocal = new Date ( ) . getTimezoneOffset ( ) * - 1 ;
2020-08-07 12:23:59 +02:00
if ( timeLocal > _config _users _js _ _WEBPACK _IMPORTED _MODULE _1 _ _ [ "timeDifferenceMax" ] || timeLocal < _config _users _js _ _WEBPACK _IMPORTED _MODULE _1 _ _ [ "timeDifferenceMin" ] ) return 0 ; else return timeLocal ;
} ; // On enlève volontairement les 0/O pour éviter les confusions !
// Et mieux vaut aussi débuter et finir par une lettre simple.
var getPassword = function getPassword ( nbCarMin , nbCarMax ) {
var nbCar = nbCarMin + Math . floor ( Math . random ( ) * ( nbCarMax - nbCarMin ) ) ;
var letters = "ABCDEFGHIJKLMNPQRSTUVWXYZabcdefghijklmnpqrstuvwxyz" ;
var others = "123456789!?.*-_%@&ÉÀÈÙ€$ÂÊÛÎ" ;
var password = letters [ Math . floor ( Math . random ( ) * letters . length ) ] ;
for ( var i = 1 ; i < nbCar - 1 ; i ++ ) {
if ( i % 2 === 1 ) password += others [ Math . floor ( Math . random ( ) * others . length ) ] ; else password += letters [ Math . floor ( Math . random ( ) * letters . length ) ] ;
}
password += letters [ Math . floor ( Math . random ( ) * letters . length ) ] ;
return password ;
} ; // J'utilise le stockage local du navigateur pour enregistrer les données permettant de reconnaître l'utilisateur par la suite
// Seul le serveur pourra vérifier que les identifiants sont (toujours) valides.
var setSession = function setSession ( userId , token , durationTS ) {
var storageUser = {
id : userId ,
token : token ,
duration : durationTS
} ;
Object ( _clientstorage _js _ _WEBPACK _IMPORTED _MODULE _2 _ _ [ "saveLocaly" ] ) ( "user" , storageUser ) ;
} ; // Vérifie qu'il y a des données locales concernant le résultat d'un quiz
// Et les ajoute aux données envoyées par les formulaires d'inscription/connexion si c'est le cas
var checkAnswerDatas = function checkAnswerDatas ( datas ) {
var lastAnswer = Object ( _clientstorage _js _ _WEBPACK _IMPORTED _MODULE _2 _ _ [ "getLocaly" ] ) ( "lastAnswer" ) ;
if ( ! Object ( _tools _main _ _WEBPACK _IMPORTED _MODULE _3 _ _ [ "isEmpty" ] ) ( lastAnswer ) ) {
var answer = JSON . parse ( lastAnswer ) ;
if ( ! Object ( _tools _main _ _WEBPACK _IMPORTED _MODULE _3 _ _ [ "isEmpty" ] ) ( answer . duration ) && ! Object ( _tools _main _ _WEBPACK _IMPORTED _MODULE _3 _ _ [ "isEmpty" ] ) ( answer . nbCorrectAnswers ) && ! Object ( _tools _main _ _WEBPACK _IMPORTED _MODULE _3 _ _ [ "isEmpty" ] ) ( answer . QuestionnaireId ) && ! Object ( _tools _main _ _WEBPACK _IMPORTED _MODULE _3 _ _ [ "isEmpty" ] ) ( answer . nbQuestions ) ) {
datas . duration = answer . duration ;
datas . nbCorrectAnswers = answer . nbCorrectAnswers ;
datas . QuestionnaireId = answer . QuestionnaireId ;
datas . nbQuestions = answer . nbQuestions ;
}
}
return datas ;
} ; // Cette fonction teste la connexion de l'utilisateur d'une page
// On peut fournis une liste de statuts acceptés (si vide = tous), ainsi qu'une url de redirection si non connecté, un message d'erreur à afficher sur la page de destination et l'url sur laquelle revenir une fois connecté
var checkSession = /*#__PURE__*/ function ( ) {
var _ref2 = _asyncToGenerator ( /*#__PURE__*/ regeneratorRuntime . mark ( function _callee2 ( ) {
var status ,
urlRedirection ,
message ,
urlWanted ,
_args2 = arguments ;
return regeneratorRuntime . wrap ( function _callee2$ ( _context2 ) {
while ( 1 ) {
switch ( _context2 . prev = _context2 . next ) {
case 0 :
status = _args2 . length > 0 && _args2 [ 0 ] !== undefined ? _args2 [ 0 ] : [ ] ;
urlRedirection = _args2 . length > 1 ? _args2 [ 1 ] : undefined ;
message = _args2 . length > 2 ? _args2 [ 2 ] : undefined ;
urlWanted = _args2 . length > 3 ? _args2 [ 3 ] : undefined ;
return _context2 . abrupt ( "return" , new Promise ( function ( resolve , reject ) {
var userDatas = Object ( _clientstorage _js _ _WEBPACK _IMPORTED _MODULE _2 _ _ [ "getLocaly" ] ) ( "user" ) ;
if ( Object ( _tools _main _ _WEBPACK _IMPORTED _MODULE _3 _ _ [ "isEmpty" ] ) ( userDatas ) ) {
redirectUser ( urlRedirection , message , urlWanted ) ;
resolve ( false ) ;
} else {
var user = JSON . parse ( userDatas ) ;
if ( Object ( _tools _main _ _WEBPACK _IMPORTED _MODULE _3 _ _ [ "isEmpty" ] ) ( user . id ) || Object ( _tools _main _ _WEBPACK _IMPORTED _MODULE _3 _ _ [ "isEmpty" ] ) ( user . token ) || Object ( _tools _main _ _WEBPACK _IMPORTED _MODULE _3 _ _ [ "isEmpty" ] ) ( user . duration ) || user . duration < Date . now ( ) ) {
Object ( _clientstorage _js _ _WEBPACK _IMPORTED _MODULE _2 _ _ [ "removeLocaly" ] ) ( "user" ) ;
redirectUser ( urlRedirection , message , urlWanted ) ;
resolve ( false ) ;
} else {
var xhr = new XMLHttpRequest ( ) ;
xhr . open ( "GET" , _config _instance _js _ _WEBPACK _IMPORTED _MODULE _0 _ _ [ "apiUrl" ] + _config _users _js _ _WEBPACK _IMPORTED _MODULE _1 _ _ [ "userRoutes" ] + _config _users _js _ _WEBPACK _IMPORTED _MODULE _1 _ _ [ "checkLoginRoute" ] + user . token ) ;
xhr . onload = function ( ) {
var response = JSON . parse ( xhr . responseText ) ;
if ( xhr . status === 200 && response . isValid && response . id != undefined ) {
if ( response . id === user . id ) {
user . name = response . name ;
user . language = response . language ;
user . timeDifference = response . timeDifference ;
2020-08-07 12:38:19 +02:00
user . status = response . status ; // c'est le token qui sert à vérifier le statut à chaque requête à l'API
2020-08-07 12:23:59 +02:00
Object ( _clientstorage _js _ _WEBPACK _IMPORTED _MODULE _2 _ _ [ "saveLocaly" ] ) ( "user" , user ) ; // si il s'agit d'un "user" et que son abonnement a expiré, je le redirige vers la caisse :-)
if ( response . status === "user" && response . nbDaysOk <= 0 ) {
2020-08-07 12:38:19 +02:00
var urlAccount = _config _instance _js _ _WEBPACK _IMPORTED _MODULE _0 _ _ [ "siteUrl" ] + "/" + configTemplate . accountPage ;
if ( window . location . href . indexOf ( urlAccount ) === - 1 ) window . location . assign ( "/" + configTemplate . accountPage + "#subscribe" ) ; // passée directement ici, l'ancre #subscribe ne fonctionne pas !?
2020-08-07 12:23:59 +02:00
resolve ( true ) ;
} else {
if ( status . length !== 0 && status . indexOf ( response . status ) === - 1 ) {
redirectUser ( urlRedirection , message , urlWanted ) ;
resolve ( false ) ;
} else resolve ( true ) ;
}
} else {
Object ( _clientstorage _js _ _WEBPACK _IMPORTED _MODULE _2 _ _ [ "removeLocaly" ] ) ( "user" ) ;
redirectUser ( urlRedirection , message , urlWanted ) ;
resolve ( false ) ;
}
} else {
Object ( _clientstorage _js _ _WEBPACK _IMPORTED _MODULE _2 _ _ [ "removeLocaly" ] ) ( "user" ) ;
redirectUser ( urlRedirection , message , urlWanted ) ;
resolve ( false ) ;
}
} ;
xhr . onerror = function ( ) {
return reject ( xhr . statusText ) ;
} ;
xhr . send ( ) ;
}
}
} ) ) ;
case 5 :
case "end" :
return _context2 . stop ( ) ;
}
}
} , _callee2 ) ;
} ) ) ;
return function checkSession ( ) {
return _ref2 . apply ( this , arguments ) ;
} ;
} ( ) ; // Cette fonction sert à la précédente en cas de connexion non valide
var redirectUser = function redirectUser ( urlRedirection , message , urlWanted ) {
if ( ! Object ( _tools _main _ _WEBPACK _IMPORTED _MODULE _3 _ _ [ "isEmpty" ] ) ( message ) ) Object ( _clientstorage _js _ _WEBPACK _IMPORTED _MODULE _2 _ _ [ "saveLocaly" ] ) ( "message" , message ) ;
if ( ! Object ( _tools _main _ _WEBPACK _IMPORTED _MODULE _3 _ _ [ "isEmpty" ] ) ( urlWanted ) ) Object ( _clientstorage _js _ _WEBPACK _IMPORTED _MODULE _2 _ _ [ "saveLocaly" ] ) ( "url" , urlWanted ) ;
if ( ! Object ( _tools _main _ _WEBPACK _IMPORTED _MODULE _3 _ _ [ "isEmpty" ] ) ( urlRedirection ) ) window . location . assign ( urlRedirection ) ;
} ;
/***/ } )
/******/ } ) ;
2020-08-14 17:15:06 +02:00
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vLy4uL2NvbmZpZy9pbnN0YW5jZS5qcyIsIndlYnBhY2s6Ly8vLi4vY29uZmlnL3F1ZXN0aW9ubmFpcmVzLmpzIiwid2VicGFjazovLy8uLi9jb25maWcvdXNlcnMuanMiLCJ3ZWJwYWNrOi8vLy4uL2xhbmcgc3luYyBeXFwuXFwvLipcXC9nZW5lcmFsJCIsIndlYnBhY2s6Ly8vLi4vbGFuZyBzeW5jIF5cXC5cXC8uKlxcL3N1YnNjcmlwdGlvbiQiLCJ3ZWJwYWNrOi8vLy4uL2xhbmcgc3luYyBeXFwuXFwvLipcXC91c2VyJCIsIndlYnBhY2s6Ly8vLi4vbGFuZy9mci9nZW5lcmFsLmpzIiwid2VicGFjazovLy8uLi9sYW5nL2ZyL3N1YnNjcmlwdGlvbi5qcyIsIndlYnBhY2s6Ly8vLi4vbGFuZy9mci91c2VyLmpzIiwid2VicGFjazovLy8uLi90b29scy9tYWluLmpzIiwid2VicGFjazovLy8uLi92aWV3cyBzeW5jIF5cXC5cXC8uKlxcLmpzJCIsIndlYnBhY2s6Ly8vLi4vdmlld3MvZGVmYXVsdC9jb25maWcvZnIuanMiLCJ3ZWJwYWNrOi8vLy4uL3ZpZXdzL3dpa2lsZXJuaS9jb25maWcvZnIuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL21hbmFnZVVzZXJzLmpzIiwid2VicGFjazovLy8uL3NyYy90b29scy9jbGllbnRzdG9yYWdlLmpzIiwid2VicGFjazovLy8uL3NyYy90b29scy9kb20uanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3Rvb2xzL2V2ZXJ5d2hlcmUuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3Rvb2xzL2Zvcm1zLmpzIiwid2VicGFjazovLy8uL3NyYy90b29scy91cmwuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3Rvb2xzL3VzZXJzLmpzIl0sIm5hbWVzIjpbInVzZXJzIiwicmVxdWlyZSIsInF1ZXN0aW9ubmFpcmVzIiwibW9kdWxlIiwiZXhwb3J0cyIsImFwaVVybCIsInNpdGVVcmwiLCJhZG1pbk5hbWUiLCJhZG1pbkVtYWlsIiwic2VuZGVyTmFtZSIsInNlbmRlckVtYWlsIiwiYWRtaW5MYW5nIiwidGhlbWUiLCJhdmFpbGFibGVMYW5ncyIsInNpdGVOYW1lIiwiYmVnaW5Db2RlR29kZmF0aGVyIiwiY3JvblRpbWluZ0FsZXJ0SW5TZWNvbmRlIiwicmVzcG9uc2VUaW1pbmdBbGVydEluU2Vjb25kZSIsInRva2VuU2lnbnVwVmFsaWRhdGlvblRpbWVJbkhvdXJzIiwidG9rZW5Mb2dpbkxpbmtUaW1lSW5Ib3VycyIsInRva2VuQ29ubmV4aW9uTWluVGltZUluSG91cnMiLCJ0b2tlbkNvbm5leGlvbk1heFRpbWVJbkRheXMiLCJ0b2tlbkxvZ2luQ2hhbmdpbmdUaW1lSW5Ib3VycyIsInRva2VuRGVsZXRlVXNlclRpbWVJbkhvdXJzIiwidG9rZW5VbnN1YnNjcmliZUxpbmtUaW1lSW5EYXlzIiwiZnJlZUFjY291bnRUaW1pbmdJbkRheXMiLCJmcmVlQWNjb3VudEV4cGlyYXRpb25Ob3RpZmljYXRpb25JbkRheXMiLCJhY2NvdW50RXhwaXJhdGlvbkZpcnN0Tm90aWZpY2F0aW9uSW5EYXlzIiwiYWNjb3VudEV4cGlyYXRpb25TZWNvbmROb3RpZmljYXRpb25JbkRheXMiLCJpbmFjdGl2ZUFjY291bnRUaW1lVG9EZWxldGVJbkRheXMiLCJuYlF1ZXN0aW9uc01pbiIsIm5iUXVlc3Rpb25zTWF4IiwibmJDaG9pY2VzTWF4IiwibmJOZXdRdWVzdGlvbm5haXJlcyIsImhvdXJHaXZlTmV3UXVlc3Rpb25uYWlyZUJlZ2luIiwiaG91ckdpdmVOZXdRdWVzdGlvbm5haXJlRW5kIiwibnVtYmVyTmV3UXVlc3Rpb25uYWlyZUF0U2FtZVRpbWUiLCJtaW5TZWFyY2hRdWVzdGlvbm5haXJlcyIsIm5iSWxsdXN0cmF0aW9uc01pbiIsIm5iSWxsdXN0cmF0aW9uc01heCIsIm1heElsbHVzdHJhdGlvblNpemVpbk9jdGV0IiwibWltZVR5cGVzRm9ySWxsdXN0cmF0aW9uIiwiaWxsdXN0cmF0aW9uc1dpZHRoTWF4SW5QeCIsImlsbHVzdHJhdGlvbnNNaW5pYXR1cmVzV2lkdGhNYXhJblB4IiwibmJMaW5rc01pbiIsIm5iTGlua3NNYXgiLCJwYXNzd29yZCIsIm1pbmxlbmd0aCIsImRpckNhY2hlVXNlcnMiLCJkaXJDYWNoZVVzZXJzQW5zd2VycyIsImRpckNhY2hlUXVlc3Rpb25uYWlyZXMiLCJkaXJDYWNoZVF1ZXN0aW9ucyIsImRpckNhY2hlVXNlcnNRdWVzdGlvbm5haXJlcyIsImRpckhUTUxRdWVzdGlvbm5haXJlIiwiZGlyV2ViUXVlc3Rpb25uYWlyZSIsInF1ZXN0aW9ubmFpcmVSb3V0ZXMiLCJnZXRRdWVzdGlvbm5haXJlUm91dGVzIiwicHJldmlld1F1ZXN0aW9ubmFpcmVSb3V0ZXMiLCJwdWJsaXNoZWRRdWVzdGlvbm5haXJlUm91dGVzIiwic2F2ZUFuc3dlcnNSb3V0ZSIsImdldFN0YXRzUXVlc3Rpb25uYWlyZXMiLCJzZWFyY2hRdWVzdGlvbm5haXJlc1JvdXRlIiwiZ2V0UmFuZG9tUXVlc3Rpb25uYWlyZXNSb3V0ZSIsInNlYXJjaEFkbWluUXVlc3Rpb25uYWlyZXNSb3V0ZSIsImdldExpc3ROZXh0UXVlc3Rpb25uYWlyZXMiLCJyZWdlbmVyYXRlSFRNTCIsInF1ZXN0aW9uc1JvdXRlIiwidGFnc1NlYXJjaFJvdXRlIiwiZ2V0UXVlc3Rpb25uYWlyZXNXaXRob3V0QW5zd2VyIiwiZ2V0UHJldmlvdXNBbnN3ZXJzIiwiZ2V0U3RhdHNBbnN3ZXJzIiwiZ2V0QWRtaW5TdGF0cyIsIlF1ZXN0aW9ubmFpcmUiLCJ0aXRsZSIsIm1heGxlbmd0aCIsInJlcXVpcmVkIiwic2x1ZyIsImludHJvZHVjdGlvbiIsInNlYXJjaFF1ZXN0aW9ubmFpcmVzIiwiUXVlc3Rpb24iLCJ0ZXh0IiwicmFuayIsIm1pbiIsImRlZmF1bHRWYWx1ZSIsIkNob2ljZSIsIm5iVGFnc01pbiIsIm5iVGFnc01heCIsImRpckNhY2hlVGFncyIsImRpckhUTUxUYWdzIiwiZGlyV2ViVGFncyIsIm5iUmFuZG9tUmVzdWx0cyIsInVzZXJSb3V0ZXMiLCJzdWJzY3JpYmVSb3V0ZSIsImdldEdvZGZhdGhlclJvdXRlIiwiY2hlY2tJZklzRW1haWxmcmVlUm91dGUiLCJjaGVja1N1YnNjcmliZVRva2VuUm91dGUiLCJjaGVja0xvZ2luUm91dGUiLCJjb25uZWN0aW9uUm91dGUiLCJnZXRMb2dpbkxpbmtSb3V0ZSIsImNvbm5lY3Rpb25XaXRoTGlua1JvdXRlIiwiZ2V0VXNlckluZm9zIiwiY3JlYXRlVXNlclJvdXRlIiwidmFsaWRhdGVVc2VyUm91dGUiLCJ1cGRhdGVVc2VySW5mb3MiLCJzZWFyY2hVc2VyUm91dGUiLCJnZXRHb2RDaGlsZHMiLCJjaGVja05ld0xvZ2luTGlua1JvdXRlIiwiY2hlY2tEZWx