From 764fc9bf9329c4fa38a7598467acf1c74b4a3d4f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fabrice=20PENHO=C3=8BT?= Date: Tue, 6 Oct 2020 16:34:17 +0200 Subject: [PATCH] =?UTF-8?q?Revue=20appels=20des=20=C3=A9l=C3=A9ments=20des?= =?UTF-8?q?=20dictionnaires=20dans=20scripts=20front-end=20avec=20utilisat?= =?UTF-8?q?ion=20de=20require()=20et=20uniquement=20les=20=C3=A9l=C3=A9men?= =?UTF-8?q?ts=20n=C3=A9cessaires=20aux=20scripts.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- front/src/accountUser.js | 24 +++++++++--------- front/src/connection.js | 17 ++++++------- front/src/deconnection.js | 10 ++++---- front/src/deleteValidation.js | 12 ++++----- front/src/homeManager.js | 32 +++++++++--------------- front/src/homeUser.js | 40 +++++++++++++++--------------- front/src/index.js | 2 +- front/src/loginLink.js | 16 ++++++------ front/src/manageUsers.js | 42 +++++++++++++------------------- front/src/newLoginValidation.js | 12 ++++----- front/src/paymentPage.js | 2 +- front/src/questionnaire.js | 20 +++++++-------- front/src/subscribe.js | 23 +++++++++-------- front/src/subscribeValidation.js | 12 ++++----- front/src/unsubscribe.js | 11 ++++----- lang/fr/questionnaire.js | 5 ++-- lang/fr/user.js | 2 +- 17 files changed, 131 insertions(+), 151 deletions(-) diff --git a/front/src/accountUser.js b/front/src/accountUser.js index f8a6c29..817210c 100644 --- a/front/src/accountUser.js +++ b/front/src/accountUser.js @@ -24,9 +24,9 @@ import { checkSession, getConfig, getTimeDifference } from "./tools/users.js"; import { showBtnPayment, unCheckAllOthers } from "./tools/webportage.js"; // Dictionnaires : -const txt = require("../../lang/"+lang+"/general"); -const txtUsers = require("../../lang/"+lang+"/user"); -const txtSubscriptions = require("../../lang/"+lang+"/subscription"); +const { serverError } = require("../../lang/"+lang+"/general"); +const { infosUserNbGodChilds, infosUserNoGodchilds, needBeConnected } = require("../../lang/"+lang+"/user"); +const { infosExpirated, infosNbDays } = require("../../lang/"+lang+"/subscription"); // Principaux éléments du DOM manipulés : const divCrash = document.getElementById("crash"); @@ -48,11 +48,11 @@ const initialise = async () => { const config = await getConfig(); if(!config) - addElement(divCrash, "p", txt.serverError, "", ["error"]); + addElement(divCrash, "p", serverError, "", ["error"]); else { // Si l'utilisateur n'est pas connecté avec le bon statut, pas la peine d'aller + loin : - const isConnected=await checkSession(["user"], "/"+configFrontEnd.connectionPage, { message: txtUsers.needBeConnected, color:"error" }, window.location); + const isConnected=await checkSession(["user"], "/"+configFrontEnd.connectionPage, { message: needBeConnected, color:"error" }, window.location); if(isConnected) { divMain.style.display="block"; @@ -107,10 +107,10 @@ const initialise = async () => const beginSubTS=new Date(response.Subscription.createdAt).getTime(); const nbDaysOk=response.Subscription.numberOfDays-Math.round((Date.now()-beginSubTS)/1000/3600/24); if(nbDaysOk > 0) - addElement(divSubscribeIntro, "p", txtSubscriptions.infosNbDays.replace("NB_DAYS", nbDaysOk), "", ["info"]); + addElement(divSubscribeIntro, "p", infosNbDays.replace("NB_DAYS", nbDaysOk), "", ["info"]); else { - addElement(divSubscribeIntro, "p", txtSubscriptions.infosExpirated.replace("NB_DAYS", nbDaysOk), "", ["error"]); + addElement(divSubscribeIntro, "p", infosExpirated.replace("NB_DAYS", nbDaysOk), "", ["error"]); window.location.assign("#subscribe"); } } @@ -162,11 +162,11 @@ const initialise = async () => if(Array.isArray(response.errors)) response.errors = response.errors.join("
"); else - response.errors = txt.serverError; + response.errors = serverError; addElement(divResponse, "p", response.errors, "", ["error"]); } else - addElement(divResponse, "p", txt.serverError, "", ["error"]); + addElement(divResponse, "p", serverError, "", ["error"]); // dans tous les cas, je mets à jour le contenu du formulaire : getInfos(); } @@ -239,10 +239,10 @@ const initialise = async () => { const nbGodchilds=response.length; if(nbGodchilds===0) - txtGodchilds=txtUsers.infosUserNoGodchilds; + txtGodchilds=infosUserNoGodchilds; else { - txtGodchilds=txtUsers.infosUserNbGodChilds.replace("#NB", nbGodchilds); + txtGodchilds=infosUserNbGodChilds.replace("#NB", nbGodchilds); for(let i in response) txtGodchilds+=response[i].name+" ("+response[i].email+") "; } @@ -257,7 +257,7 @@ const initialise = async () => } catch(e) { - addElement(divCrash, "p", txt.serverError, "", ["error"]); + addElement(divCrash, "p", serverError, "", ["error"]); console.error(e); } } diff --git a/front/src/connection.js b/front/src/connection.js index d43a4f6..5b74a14 100644 --- a/front/src/connection.js +++ b/front/src/connection.js @@ -22,9 +22,8 @@ import { loadMatomo } from "./tools/matomo.js"; import { checkAnswerDatas, checkSession, getTimeDifference, setSession } from "./tools/users.js"; // Dictionnaires : -const txtServerError = require("../../lang/"+lang+"/general").serverError; -const txtAlreadyConnected = require("../../lang/"+lang+"/user").alreadyConnected; -const txtNeedChooseLoginWay = require("../../lang/"+lang+"/user").needChooseLoginWay; +const { serverError } = require("../../lang/"+lang+"/general"); +const { alreadyConnected, needChooseLoginWay } = require("../../lang/"+lang+"/user"); // Principaux éléments du DOM manipulés : const myForm = document.getElementById("connection"); @@ -41,7 +40,7 @@ const initialise = async () => const isConnected=await checkSession(); if(isConnected) { - saveLocaly("message", { message: txtAlreadyConnected, color:"info" });// pour l'afficher sur la page suivante + saveLocaly("message", { message: alreadyConnected, color:"info" });// pour l'afficher sur la page suivante const user=getLocaly("user", true); const homePage=user.status+"HomePage"; window.location.assign("/"+configTemplate[homePage]); @@ -59,7 +58,7 @@ const initialise = async () => } catch(e) { - addElement(divResponse, "p", txtServerError, "", ["error"]); + addElement(divResponse, "p", serverError, "", ["error"]); console.error(e); } } @@ -74,7 +73,7 @@ myForm.addEventListener("submit", function(e) divResponse.innerHTML="";// efface d'éventuels messages déjà affichés let datas=getDatasFromInputs(myForm); if(isEmpty(datas.password) && isEmpty(datas.getLoginLink)) - addElement(divResponse, "div", txtNeedChooseLoginWay, "", ["error"]); + addElement(divResponse, "div", needChooseLoginWay, "", ["error"]); else { const xhr = new XMLHttpRequest(); @@ -116,7 +115,7 @@ myForm.addEventListener("submit", function(e) window.location.assign(url); } else - addElement(divResponse, "p", txtServerError, "", ["error"]); + addElement(divResponse, "p", serverError, "", ["error"]); } else if (response.errors) { @@ -124,7 +123,7 @@ myForm.addEventListener("submit", function(e) addElement(divResponse, "p", response.errors, "", ["error"]); } else - addElement(divResponse, "p", txtServerError, "", ["error"]); + addElement(divResponse, "p", serverError, "", ["error"]); } } xhr.setRequestHeader("Content-Type", "application/json"); @@ -139,7 +138,7 @@ myForm.addEventListener("submit", function(e) } catch(e) { - addElement(divResponse, "p", txtServerError, "", ["error"]); + addElement(divResponse, "p", serverError, "", ["error"]); console.error(e); } }); \ No newline at end of file diff --git a/front/src/deconnection.js b/front/src/deconnection.js index f011120..af2429e 100644 --- a/front/src/deconnection.js +++ b/front/src/deconnection.js @@ -14,8 +14,8 @@ import { helloDev } from "./tools/everywhere.js"; import { getConfig } from "./tools/users.js"; // Dictionnaires : -const txt = require("../../lang/"+lang+"/general"); -const txtUsers = require("../../lang/"+lang+"/user"); +const { serverError } = require("../../lang/"+lang+"/general"); +const { byebyeMessage } = require("../../lang/"+lang+"/user"); helloDev(); @@ -27,18 +27,18 @@ const initialise = async () => { config = await getConfig(); if(!config) - addElement(divResponse, "p", txt.serverError, "", ["error"]); + addElement(divResponse, "p", serverError, "", ["error"]); else { removeLocaly("user"); removeLocaly("url"); removeLocaly("message"); - addElement(divResponse, "p", txtUsers.byebyeMessage, "", ["success"]); + addElement(divResponse, "p", byebyeMessage, "", ["success"]); } } catch(e) { - addElement(divResponse, "p", txt.serverError, "", ["error"]); + addElement(divResponse, "p", serverError, "", ["error"]); } } initialise(); \ No newline at end of file diff --git a/front/src/deleteValidation.js b/front/src/deleteValidation.js index 5d787f1..7c3ffe7 100644 --- a/front/src/deleteValidation.js +++ b/front/src/deleteValidation.js @@ -17,8 +17,8 @@ import { getUrlParams } from "./tools/url.js"; import { checkSession, getConfig, setSession } from "./tools/users.js"; // Dictionnaires : -const txt = require("../../lang/"+lang+"/general"); -const txtUsers = require("../../lang/"+lang+"/user"); +const { serverError } = require("../../lang/"+lang+"/general"); +const { badLinkValidationMessage } = require("../../lang/"+lang+"/user"); const divResponse = document.getElementById("response"); @@ -31,7 +31,7 @@ const initialise = async () => { config = await getConfig(); if(!config) - addElement(divResponse, "p", txt.serverError, "", ["error"]); + addElement(divResponse, "p", serverError, "", ["error"]); else { const datas=getUrlParams(); @@ -54,11 +54,11 @@ const initialise = async () => if(Array.isArray(response.errors)) response.errors = response.errors.join("
"); else - response.errors = txt.serverError; + response.errors = serverError; addElement(divResponse, "p", response.errors, "", ["error"]); } else - addElement(divResponse, "p", txtUsers.badLinkValidationMessage.replace("#URL", configFrontEnd.accountPage), "", ["error"]); + addElement(divResponse, "p", badLinkValidationMessage.replace("#URL", configFrontEnd.accountPage), "", ["error"]); } } xhr.setRequestHeader("Authorization", "Bearer "+datas.t); @@ -68,7 +68,7 @@ const initialise = async () => } catch(e) { - addElement(divResponse, "p", txt.serverError, "", ["error"]); + addElement(divResponse, "p", serverError, "", ["error"]); console.error(e); } } diff --git a/front/src/homeManager.js b/front/src/homeManager.js index 66155d7..9eaa431 100644 --- a/front/src/homeManager.js +++ b/front/src/homeManager.js @@ -23,18 +23,10 @@ import { helloDev, updateAccountLink } from "./tools/everywhere.js"; import { dateFormat, isEmpty, replaceAll } from "../../tools/main"; import { checkSession } from "./tools/users.js"; -// Dictionnaires : revoir pour ne prendre que les variables utilisées -const txt = require("../../lang/"+lang+"/general"); - -const txtNotAllowed = require("../../lang/"+lang+"/general").notAllowed; -const txtServerError = require("../../lang/"+lang+"/general").serverError; -const txtStatsAdmin = require("../../lang/"+lang+"/general").statsAdmin; -const txtNeedBeCompleted = require("../../lang/"+lang+"/questionnaire").needBeCompleted; -const txtNextDateWithoutQuestionnaire = require("../../lang/"+lang+"/questionnaire").nextDateWithoutQuestionnaire; -const txtNextQuestionnairesList = require("../../lang/"+lang+"/questionnaire").nextQuestionnairesList; -const txtWelcome = require("../../lang/"+lang+"/user").welcomeMessage; - -const txtQuestionnaire = require("../../lang/"+lang+"/questionnaire"); +// Dictionnaires : +const { notAllowed, serverError, statsAdmin } = require("../../lang/"+lang+"/general"); +const { nextDateWithoutQuestionnaire, nextQuestionnairesList, questionnaireNeedBeCompleted } = require("../../lang/"+lang+"/questionnaire"); +const { welcomeMessage } = require("../../lang/"+lang+"/user"); // Principaux éléments du DOM manipulés : const divMain = document.getElementById("main-content"); @@ -49,12 +41,12 @@ const initialise = async () => { try { - const isConnected=await checkSession(["manager", "admin"], "/"+configTemplate.connectionPage, { message: txtNotAllowed, color:"error" }); + const isConnected=await checkSession(["manager", "admin"], "/"+configTemplate.connectionPage, { message: notAllowed, color:"error" }); if(isConnected) { const user=getLocaly("user", true); updateAccountLink(user.status, configTemplate); - addElement(divMessage, "h2", txtWelcome.replace("#NAME", user.name)); + addElement(divMessage, "h2", welcomeMessage.replace("#NAME", user.name)); divMain.style.display="block"; if(!isEmpty(getLocaly("message"))) { @@ -85,7 +77,7 @@ const initialise = async () => NB_USERS_DELETED_VALIDED : response.nbDeletedUsersWasValided, NB_USERS_DELETED_PREMIUM : response.nbDeletedUsersTotWasPremium }; - addElement(divMessage, "p", replaceAll(txtStatsAdmin, mapText), "", "", "", false); + addElement(divMessage, "p", replaceAll(statsAdmin, mapText), "", "", "", false); } } } @@ -108,12 +100,12 @@ const initialise = async () => dayStr=new Intl.DateTimeFormat(lang, optionsDayStr).format(new Date(response.questionnaires[i].datePublishing)); listHTML+="
  • "+dayStr+" "+dateFormat(response.questionnaires[i].datePublishing, availableLangs[0])+": "+response.questionnaires[i].title+""; if(response.questionnaires[i].isPublishable===false) - listHTML+=" ("+txtNeedBeCompleted+")
  • "; + listHTML+=" ("+questionnaireNeedBeCompleted+")"; listHTML+=""; } if(response.questionnaires.length!==0) - addElement(divQuestionnaires, "h2", txtNextQuestionnairesList.replace("#NB", response.questionnaires.length)); - addElement(divQuestionnaires, "h4", txtNextDateWithoutQuestionnaire+dateFormat(response.dateNeeded, availableLangs[0]), "", ["info"], "", false); + addElement(divQuestionnaires, "h2", nextQuestionnairesList.replace("#NB", response.questionnaires.length)); + addElement(divQuestionnaires, "h4", nextDateWithoutQuestionnaire+dateFormat(response.dateNeeded, availableLangs[0]), "", ["info"], "", false); addElement(divQuestionnaires, "ul", listHTML, "", "", "", false); } } @@ -135,7 +127,7 @@ const initialise = async () => if (this.status === 200 && response.message!=undefined) addElement(divMessage, "p", response.message, "", ["success"], "", false); else - addElement(divMessage, "p", txt.serverError, "", ["error"], "", false); + addElement(divMessage, "p", serverError, "", ["error"], "", false); } } xhrRegenerate.setRequestHeader("Content-Type", "application/json"); @@ -147,7 +139,7 @@ const initialise = async () => } catch(e) { - addElement(divCrash, "p", txtServerError, "", ["error"]); + addElement(divCrash, "p", serverError, "", ["error"]); console.error(e); } } diff --git a/front/src/homeUser.js b/front/src/homeUser.js index a6a6fbc..e5138aa 100644 --- a/front/src/homeUser.js +++ b/front/src/homeUser.js @@ -21,10 +21,10 @@ import { isEmpty, replaceAll } from "../../tools/main"; import { checkSession, getConfig } from "./tools/users.js"; // Dictionnaires : -const txt = require("../../lang/"+lang+"/general"); -const txtUsers = require("../../lang/"+lang+"/user"); -const txtAnwers = require("../../lang/"+lang+"/answer"); -const txtQuestionnaire = require("../../lang/"+lang+"/questionnaire"); +const { nbQuestionnaireWithoudAnswer, noQuestionnaireWithoudAnswer, statsUser } = require("../../lang/"+lang+"/answer"); +const { nextPage, previousPage, serverError } = require("../../lang/"+lang+"/general"); +const { searchQuestionnaireResultTitle, searchQuestionnaireWithResult, searchQuestionnaireWithNoResult } = require("../../lang/"+lang+"/questionnaire"); +const { needBeConnected, welcomeMessage } = require("../../lang/"+lang+"/user"); // Principaux éléments du DOM manipulés : const divMain= document.getElementById("main-content"); @@ -47,16 +47,16 @@ const initialise = async () => { const config = await getConfig(); if(!config) - addElement(divCrash, "p", txt.serverError, "", ["error"]); + addElement(divCrash, "p", serverError, "", ["error"]); else { // Si l'utilisateur n'est pas connecté, pas la peine d'aller + loin : - const isConnected=await checkSession(["user"], "/"+configFrontEnd.connectionPage, { message: txtUsers.needBeConnected, color:"error" }, window.location); + const isConnected=await checkSession(["user"], "/"+configFrontEnd.connectionPage, { message: needBeConnected, color:"error" }, window.location); if(isConnected) { const user=getLocaly("user", true); updateAccountLink(user.status, configFrontEnd); - addElement(divMessage, "h1", txtUsers.welcomeMessage.replace("#NAME", user.name)); + addElement(divMessage, "h1", welcomeMessage.replace("#NAME", user.name)); divMain.style.display="block"; if(!isEmpty(getLocaly("message"))) { @@ -83,7 +83,7 @@ const initialise = async () => AVGDURATION : response.avgDuration, AVGCORRECTANSWERS : response.avgCorrectAnswers }; - addElement(divMessage, "p", replaceAll(txtAnwers.statsUser, mapText), "", "", "", false); + addElement(divMessage, "p", replaceAll(statsUser, mapText), "", "", "", false); } } } @@ -101,19 +101,19 @@ const initialise = async () => if (this.status === 200) { if(response.nbTot===0) - addElement(quizIntro, "p", txtAnwers.noQuestionnaireWithoudAnswer, "", ["success"]); + addElement(quizIntro, "p", noQuestionnaireWithoudAnswer, "", ["success"]); else if(response.html) { - addElement(quizIntro, "p", txtAnwers.nbQuestionnaireWithoudAnswer.replace("#NB", response.questionnaires.length), "", ["info"]); + addElement(quizIntro, "p", nbQuestionnaireWithoudAnswer.replace("#NB", response.questionnaires.length), "", ["info"]); quizListing.innerHTML=response.html; window.location.hash="";// sinon les hash s'enchaînent... window.location.assign("#quizsTitle"); } else - addElement(quizs, "p", txt.serverError, "", ["error"]);// revoir si intérêt d'afficher quelque chose + addElement(quizs, "p", serverError, "", ["error"]);// revoir si intérêt d'afficher quelque chose } else - addElement(quizs, "p", txt.serverError, "", ["error"]); // idem + addElement(quizs, "p", serverError, "", ["error"]); // idem } } xhrLastQuizs.setRequestHeader("Authorization", "Bearer "+user.token); @@ -123,7 +123,7 @@ const initialise = async () => // La recherche peut être lancée via la bouton submit ou un lien de pagination const sendSearch = (type="search") => { - quizTitle.innerHTML=txtQuestionnaire.searchResultTitle; + quizTitle.innerHTML=searchQuestionnaireResultTitle; quizListing.innerHTML=""+""; let datas=getDatasFromInputs(formSearch); const xhrSearch = new XMLHttpRequest(); @@ -140,13 +140,13 @@ const initialise = async () => { if(response.nbTot===0) { - addElement(quizIntro, "p", txtQuestionnaire.notFound, "", ["info"]); + addElement(quizIntro, "p", searchQuestionnaireWithNoResult, "", ["info"]); window.location.hash="";// sinon les hash s'enchaînent... window.location.assign("#quizsTitle"); } else if(response.html) { - addElement(quizIntro, "p", txtQuestionnaire.searchWithResult.replace("#NB", response.nbTot) , "", ["success"]); + addElement(quizIntro, "p", searchQuestionnaireWithResult.replace("#NB", response.nbTot) , "", ["success"]); quizListing.innerHTML=response.html; window.location.hash=""; window.location.assign("#quizsTitle"); @@ -156,7 +156,7 @@ const initialise = async () => quizPaginationNext.innerHTML=""; if(response.begin != 0)// peut retourner "0" et non 0 ! { - addElement(quizPaginationPrevious, "a", "<< "+txt.previousPage , "previousRes", ["button"], { href: "#search" }); // revoir, les "<<" pourraient être gérées par le CSS + addElement(quizPaginationPrevious, "a", "<< "+previousPage , "previousRes", ["button"], { href: "#search" }); // revoir, les "<<" pourraient être gérées par le CSS const previousPage=document.getElementById("previousRes"); // le retour à la page précédente peut se faire en cliquant sur le bouton ou via l'historique du navigateur const goBackRes = () => @@ -183,7 +183,7 @@ const initialise = async () => } if(response.end < (response.nbTot-1))// -1, car tableau commence à 0 ! { - addElement(quizPaginationNext, "a", txt.nextPage+ " >>", "nextRes", ["button"], { href: "#search" }, false); + addElement(quizPaginationNext, "a", nextPage+ " >>", "nextRes", ["button"], { href: "#search" }, false); const nextPage=document.getElementById("nextRes"); nextPage.addEventListener("click", function(e) { @@ -196,10 +196,10 @@ const initialise = async () => } } else - addElement(quizs, "p", txt.serverError, "", ["error"]); + addElement(quizs, "p", serverError, "", ["error"]); } else - addElement(quizs, "p", txt.serverError, "", ["error"]); + addElement(quizs, "p", serverError, "", ["error"]); } } xhrSearch.setRequestHeader("Content-Type", "application/json"); @@ -230,7 +230,7 @@ const initialise = async () => catch(e) { console.error(e); - addElement(divCrash, "p", txt.serverError, "", ["error"]); + addElement(divCrash, "p", serverError, "", ["error"]); } } initialise(); \ No newline at end of file diff --git a/front/src/index.js b/front/src/index.js index c6d7373..6bf0de3 100644 --- a/front/src/index.js +++ b/front/src/index.js @@ -21,7 +21,7 @@ const initialise = async () => const isConnected=await checkSession(); if(isConnected) { - // on change le lien du compte en haut + // on change le lien d'accès au compte const user=getLocaly("user", true); updateAccountLink(user.status, configTemplate); } diff --git a/front/src/loginLink.js b/front/src/loginLink.js index 72a7d1e..01fe5b6 100644 --- a/front/src/loginLink.js +++ b/front/src/loginLink.js @@ -20,8 +20,8 @@ import { getUrlParams } from "./tools/url.js"; import { checkAnswerDatas, checkSession, getConfig, getTimeDifference, setSession } from "./tools/users.js"; // Dictionnaires : -const txt = require("../../lang/"+lang+"/general"); -const txtUsers = require("../../lang/"+lang+"/user"); +const { serverError } = require("../../lang/"+lang+"/general"); +const { alreadyConnected, badLinkValidationMessage, validationMessage } = require("../../lang/"+lang+"/user"); const divResponse = document.getElementById("response"); @@ -34,14 +34,14 @@ const initialise = async () => { config = await getConfig(); if(!config) - addElement(divResponse, "p", txt.serverError, "", ["error"]); + addElement(divResponse, "p", serverError, "", ["error"]); else { // si l'utilisateur est déjà connecté, pas la peine d'aller + loin : const isConnected=await checkSession(); if(isConnected) { - saveLocaly("message", { message: txtUsers.alreadyConnected, color:"information" });// pour l'afficher sur la page suivante + saveLocaly("message", { message: alreadyConnected, color:"information" });// pour l'afficher sur la page suivante const user=getLocaly("user", true); const homePage=user.status+"HomePage"; window.location.assign("/"+configFrontEnd[homePage]); @@ -67,7 +67,7 @@ const initialise = async () => connexionMaxTime+=parseInt(response.connexionTime,10)*3600*1000; setSession(response.userId, response.token, connexionMaxTime); removeLocaly("lastAnswer");// ! important pour ne pas enregister plusieurs fois le résultat - addElement(divResponse, "p", txtUsers.validationMessage, "", ["success"]);// au cas où blocage redirection + addElement(divResponse, "p", validationMessage, "", ["success"]);// au cas où blocage redirection window.location.assign("/"+configFrontEnd.userHomePage);// connexion par lien ne concerne que les simples "user" } else if ((this.status === 401 || this.status === 403) && response.errors != undefined) @@ -75,11 +75,11 @@ const initialise = async () => if(Array.isArray(response.errors)) response.errors = response.errors.join("
    "); else - response.errors = txt.serverError; + response.errors = serverError; addElement(divResponse, "p", response.errors, "", ["error"]); } else - addElement(divResponse, "p", txtUsers.badLinkValidationMessage.replace("#URL", configFrontEnd.connectionPage), "", ["error"]); + addElement(divResponse, "p", badLinkValidationMessage.replace("#URL", configFrontEnd.connectionPage), "", ["error"]); } } datas.timeDifference=getTimeDifference(config); @@ -93,7 +93,7 @@ const initialise = async () => } catch(e) { - addElement(divResponse, "p", txt.serverError, "", ["error"]); + addElement(divResponse, "p", serverError, "", ["error"]); } } initialise(); \ No newline at end of file diff --git a/front/src/manageUsers.js b/front/src/manageUsers.js index 538a5c7..96d8432 100644 --- a/front/src/manageUsers.js +++ b/front/src/manageUsers.js @@ -25,17 +25,9 @@ import { getUrlParams } from "./tools/url.js"; import { checkSession, getPassword } from "./tools/users.js"; // Dictionnaires : -const txtAddOkMessage = require("../../lang/"+lang+"/general").addOkMessage; -const txtServerError = require("../../lang/"+lang+"/general").serverError; -const txtInfosAdminGodfather = require("../../lang/"+lang+"/user").infosAdminGodfather; -const txtInfosAdminNbGodChilds = require("../../lang/"+lang+"/user").infosAdminNbGodChilds; -const txtInfosUserForAdmin = require("../../lang/"+lang+"/user").infosUserForAdmin; -const txtNeedBeConnected = require("../../lang/"+lang+"/user").needBeConnected; -const txtNotFound = require("../../lang/"+lang+"/user").notFound; -const txtInfosExpiratedAdmin = require("../../lang/"+lang+"/subscription").infosExpiratedAdmin; -const txtInfosNbDaysAdmin = require("../../lang/"+lang+"/subscription").infosNbDaysAdmin; -const txtInfosPaymentsAdmin = require("../../lang/"+lang+"/subscription").infosPaymentsAdmin; -const txtIsNotValided = require("../../lang/"+lang+"/subscription").isNotValided; +const { addOkMessage, serverError } = require("../../lang/"+lang+"/general"); +const { infosAdminGodfather, infosAdminNbGodChilds, infosUserForAdmin, needBeConnected, searchUsersWithoutResult } = require("../../lang/"+lang+"/user"); +const { infosExpiratedAdmin, infosNbDaysAdmin, infosPaymentsAdmin, isNotValided } = require("../../lang/"+lang+"/subscription"); // Principaux éléments du DOM manipulés : const divMain = document.getElementById("main-content"); @@ -60,7 +52,7 @@ const initialise = async () => { try { - const isConnected=await checkSession(["manager", "admin"], "/"+configTemplate.connectionPage, { message: txtNeedBeConnected, color:"error" }, window.location); + const isConnected=await checkSession(["manager", "admin"], "/"+configTemplate.connectionPage, { message: needBeConnected, color:"error" }, window.location); if(isConnected) { const user=getLocaly("user", true); @@ -120,7 +112,7 @@ const initialise = async () => DATE_UPDATE : dateFormat(response.User.updatedAt), DATE_CONNECTION : dateFormat(response.User.connectedAt) }; - let subscribeIntro=replaceAll(txtInfosUserForAdmin, mapText); + let subscribeIntro=replaceAll(infosUserForAdmin, mapText); for(let data in response.User) { if(formUser.elements[data]!==undefined) @@ -143,14 +135,14 @@ const initialise = async () => const beginSubTS=new Date(response.Subscription.createdAt).getTime(); const nbDaysOk=response.Subscription.numberOfDays-Math.round((Date.now()-beginSubTS)/1000/3600/24); if(nbDaysOk > 0) - subscribeIntro+="
    "+txtInfosNbDaysAdmin.replace("NB_DAYS", nbDaysOk); + subscribeIntro+="
    "+infosNbDaysAdmin.replace("NB_DAYS", nbDaysOk); else - subscribeIntro+="
    "+txtInfosExpiratedAdmin; + subscribeIntro+="
    "+infosExpiratedAdmin; addElement(divSubscribeIntro, "p", subscribeIntro, "", ["info"], "", false); } else { - addElement(divSubscribeIntro, "p", txtIsNotValided, "", ["error"]); + addElement(divSubscribeIntro, "p", isNotValided, "", ["error"]); validationCheckBox.style.display="block"; } deleteCheckBox.style.display="block"; @@ -175,7 +167,7 @@ const initialise = async () => AMOUNT : responsePay[i].amount, CLIENT_NAME : responsePay[i].clientName }; - txtPayments+="
  • "+replaceAll(txtInfosPaymentsAdmin, mapText)+"
  • "; + txtPayments+="
  • "+replaceAll(infosNbDaysAdmin, mapText)+"
  • "; } addElement(divPaymentsInfos, "ul", txtPayments, "", ["info"], "", false); divPaymentsInfos.style.display="block" @@ -198,7 +190,7 @@ const initialise = async () => let responseGF=JSON.parse(this.responseText); if (this.status === 200 && responseGF.User != undefined) { - addElement(divGodchildsInfos, "p", txtInfosAdminGodfather+""+responseGF.User.name+""+".
    ", "", ["info"], "", false); + addElement(divGodchildsInfos, "p", infosAdminGodfather+""+responseGF.User.name+""+".
    ", "", ["info"], "", false); divGodchildsInfos.style.display="block"; } } @@ -220,7 +212,7 @@ const initialise = async () => { if(responseGS.length!==0) { - txtGodchilds+=txtInfosAdminNbGodChilds.replace("#NB", responseGS.length); + txtGodchilds+=infosAdminGodfather.replace("#NB", responseGS.length); for(let i in responseGS) txtGodchilds+=""+responseGS[i].name+""; addElement(divGodchildsInfos, "p", txtGodchilds+".", "", ["info"], "", false); @@ -286,7 +278,7 @@ const initialise = async () => let response=JSON.parse(this.responseText); if (this.status === 201 && response.id!=undefined) { - addElement(divResponse, "p", txtAddOkMessage, "", ["success"]); + addElement(divResponse, "p", addOkMessage, "", ["success"]); datas.id=response.id; } else if (this.status === 200 && response.message!=undefined) @@ -302,11 +294,11 @@ const initialise = async () => if(Array.isArray(response.errors)) response.errors = response.errors.join("
    "); else - response.errors = txtServerError; + response.errors = serverError; addElement(divResponse, "p", response.errors, "", ["error"]); } else - addElement(divResponse, "p", txtServerError, "", ["error"]); + addElement(divResponse, "p", serverError, "", ["error"]); if(isEmpty(response.errors)) { if(datas.deleteOk===undefined) @@ -337,7 +329,7 @@ const initialise = async () => if (this.status === 200 && Array.isArray(response)) { if(response.length===0) - addElement(divSearchResult, "p", txtNotFound, "", ["info"]); + addElement(divSearchResult, "p", searchUsersWithoutResult, "", ["info"]); else { let selectHTML=""; @@ -353,7 +345,7 @@ const initialise = async () => } } else - addElement(divSearchResult, "p", txtServerError, "", ["error"]); + addElement(divSearchResult, "p", serverError, "", ["error"]); } } xhrSearch.setRequestHeader("Content-Type", "application/json"); @@ -365,7 +357,7 @@ const initialise = async () => } catch(e) { - addElement(divCrash, "p", txtServerError, "", ["error"]); + addElement(divCrash, "p", serverError, "", ["error"]); console.error(e); } } diff --git a/front/src/newLoginValidation.js b/front/src/newLoginValidation.js index 8b225e2..26f14cc 100644 --- a/front/src/newLoginValidation.js +++ b/front/src/newLoginValidation.js @@ -16,8 +16,8 @@ import { getUrlParams } from "./tools/url.js"; import { checkSession, getConfig, setSession } from "./tools/users.js"; // Dictionnaires : -const txt = require("../../lang/"+lang+"/general"); -const txtUsers = require("../../lang/"+lang+"/user"); +const { serverError } = require("../../lang/"+lang+"/general"); +const { badLinkValidationMessage } = require("../../lang/"+lang+"/user"); const divResponse = document.getElementById("response"); @@ -30,7 +30,7 @@ const initialise = async () => { config = await getConfig(); if(!config) - addElement(divResponse, "p", txt.serverError, "", ["error"]); + addElement(divResponse, "p", serverError, "", ["error"]); else { const datas=getUrlParams(); @@ -54,11 +54,11 @@ const initialise = async () => if(Array.isArray(response.errors)) response.errors = response.errors.join("
    "); else - response.errors = txt.serverError; + response.errors = serverError; addElement(divResponse, "p", response.errors, "", ["error"]); } else - addElement(divResponse, "p", txtUsers.badLinkValidationMessage.replace("#URL", configFrontEnd.accountPage), "", ["error"]); + addElement(divResponse, "p", badLinkValidationMessage.replace("#URL", configFrontEnd.accountPage), "", ["error"]); } } xhr.setRequestHeader("Authorization", "Bearer "+datas.t); @@ -68,7 +68,7 @@ const initialise = async () => } catch(e) { - addElement(divResponse, "p", txt.serverError, "", ["error"]); + addElement(divResponse, "p", serverError, "", ["error"]); console.error(e); } } diff --git a/front/src/paymentPage.js b/front/src/paymentPage.js index 0c2d43e..5c04bea 100644 --- a/front/src/paymentPage.js +++ b/front/src/paymentPage.js @@ -1,7 +1,7 @@ // -- GESTION DE LA PAGE DU FINANCEMENT PARTICIPATIF (SANS DEVOIR ÊTRE CONNECTÉ) /// Permet d'afficher les boutons de paiement WP suivant le choix de l'utilisateur. -/// Matomo est également activité son internaute non connecté. +/// Matomo est également activé si l'internaute n'est pas connecté. // Fichier de configuration tirés du backend : import { availableLangs, theme } from "../../config/instance.js"; diff --git a/front/src/questionnaire.js b/front/src/questionnaire.js index 1db93e3..dcf7de6 100644 --- a/front/src/questionnaire.js +++ b/front/src/questionnaire.js @@ -21,8 +21,8 @@ import { loadMatomo } from "./tools/matomo.js"; import { checkSession, getTimeDifference } from "./tools/users.js"; // Dictionnaires : -const txtServerError = require("../../lang/"+lang+"/general").serverError; -const txtAnswers = require("../../lang/"+lang+"/answer"); +const { noPreviousAnswer, previousAnswersLine, previousAnswersStats, previousAnswersTitle, responseSavedError, wantToSaveResponses } = require("../../lang/"+lang+"/answer"); +const { serverError } = require("../../lang/"+lang+"/general"); // Principaux éléments du DOM manipulés : const myForm = document.getElementById("questionnaire"); @@ -83,7 +83,7 @@ btnShow.addEventListener("click", function(e) } catch(e) { - addElement(divResponse, "p", txtServerError, "", ["error"]); + addElement(divResponse, "p", serverError, "", ["error"]); console.error(e); } }); @@ -160,7 +160,7 @@ myForm.addEventListener("submit", function(e) checkPreviousResponses(user); } else - getOuput+="
    "+txtAnswers.responseSavedError.replace("#URL", configTemplate.userHomePage); + getOuput+="
    "+responseSavedError.replace("#URL", configTemplate.userHomePage); // on redirige vers le résultat window.location.hash=""; const here=window.location;// window.location à ajouter pour ne pas quitter la page en mode "preview"... @@ -176,7 +176,7 @@ myForm.addEventListener("submit", function(e) { // si pas connecté, on enregistre le résultat côté client pour permettre de le retrouver au moment de la création du compte ou de la connexion. if(saveAnswer(answer)) { - getOuput+="

    "+txtAnswers.wantToSaveResponses; + getOuput+="

    "+wantToSaveResponses; addElement(divResponse, "p", getOuput, "", ["info"]); document.querySelector(".subscribeBtns").style.display="block"; } @@ -197,7 +197,7 @@ myForm.addEventListener("submit", function(e) } catch(e) { - addElement(divResponse, "p", txtServerError, "", ["error"]); + addElement(divResponse, "p", serverError, "", ["error"]); console.error(e); } }) @@ -217,7 +217,7 @@ const checkPreviousResponses = (user) => { const nbResponses=response.length; let previousAnswersContent=""; - addElement(explanationsTitle, "span", txtAnswers.previousAnswersTitle.replace("#NOM", user.name)); + addElement(explanationsTitle, "span", previousAnswersTitle.replace("#NOM", user.name)); if(nbResponses!==0) { let totNbQuestions=0, totNbCorrectAnswers=0, totDuration=0, mapLineContent; @@ -233,18 +233,18 @@ const checkPreviousResponses = (user) => NBQUESTIONS : response[i].nbQuestions, AVGDURATION : response[i].duration }; - previousAnswersContent+="
  • "+replaceAll(txtAnswers.previousAnswersLine, mapLineContent)+"
  • "; + previousAnswersContent+="
  • "+replaceAll(previousAnswersLine, mapLineContent)+"
  • "; } mapLineContent = { AVGDURATION : Math.round(totDuration/nbResponses), AVGCORRECTANSWERS : Math.round(totNbCorrectAnswers/totNbQuestions*100) }; - previousAnswersContent="
    "+replaceAll(txtAnswers.previousAnswersStats, mapLineContent)+"
    "+previousAnswersContent; + previousAnswersContent="
    "+replaceAll(previousAnswersStats, mapLineContent)+"
    "+previousAnswersContent; addElement(explanationsContent, "ul", previousAnswersContent); } else - addElement(explanationsContent, "ul", txtAnswers.noPreviousAnswer); + addElement(explanationsContent, "ul", noPreviousAnswer); // dans un cas comme dans l'autre, bouton pour revenir à l'accueil du compte addElement(explanationsContent, "p", ""+configTemplate.userHomePageTxt+"", "", ["btn"], "", false); diff --git a/front/src/subscribe.js b/front/src/subscribe.js index 8b7ba3a..f10bd3f 100644 --- a/front/src/subscribe.js +++ b/front/src/subscribe.js @@ -19,9 +19,8 @@ import { loadMatomo } from "./tools/matomo.js"; import { checkAnswerDatas, checkSession, getPassword, getTimeDifference } from "./tools/users.js"; // Dictionnaires : -const txtServerError = require("../../lang/"+lang+"/general").serverError; -const txtNotRequired = require("../../lang/"+lang+"/general").notRequired; -const txtUsers = require("../../lang/"+lang+"/user"); +const { notRequired, serverError } = require("../../lang/"+lang+"/general"); +const { alreadyConnected, godfatherFound, godfatherNotFound, needUniqueEmail, passwordCopied } = require("../../lang/"+lang+"/user"); // Principaux éléments du DOM manipulés : const myForm=document.getElementById("subscription"); @@ -43,7 +42,7 @@ const initialise = async () => const isConnected=await checkSession(); if(isConnected) { - saveLocaly("message", { message: txtUsers.alreadyConnected, color:"info" });// pour l'afficher sur la page suivante + saveLocaly("message", { message: alreadyConnected, color:"info" });// pour l'afficher sur la page suivante const user=getLocaly("user", true); const homePage=user.status+"HomePage"; window.location.assign("/"+configTemplate[homePage]); @@ -57,7 +56,7 @@ const initialise = async () => } catch(e) { - addElement(divResponse, "p", txtServerError, "", ["error"]); + addElement(divResponse, "p", serverError, "", ["error"]); console.error(e); } } @@ -72,7 +71,7 @@ passwordLink.addEventListener("click", function(e) // Copie du mot de passe généré dans le "presse-papier" de l'ordinateur : passwordInput.select(); document.execCommand("copy"); - addElement(passwordHelp, "div", txtUsers.passwordCopied, "", ["success"]); + addElement(passwordHelp, "div", passwordCopied, "", ["success"]); }); // Test si l'e-mail saisi est déjà utilisé par un autre compte. @@ -95,7 +94,7 @@ emailInput.addEventListener("blur", function(e) let response=JSON.parse(this.responseText); if (this.status === 200 && response.free!==undefined && response.free === false) { - addElement(document.getElementById("emailMessage"), "div", txtUsers.needUniqueEmail.replace("#URL", configTemplate.connectionPage), "", ["error"]); + addElement(document.getElementById("emailMessage"), "div", needUniqueEmail.replace("#URL", configTemplate.connectionPage), "", ["error"]); btnSubmit.setAttribute("disabled", true); } else @@ -111,7 +110,7 @@ emailInput.addEventListener("blur", function(e) // Vérification que le code/e-mail de parrainage saisi est valide. codeGodfatherInput.addEventListener("focus", function(e) { // on efface l'éventuel message d'erreur si on revient sur le champ pour tester un autre code. - addElement(document.getElementById("codeGodfatherMessage"), "i", txtNotRequired); + addElement(document.getElementById("codeGodfatherMessage"), "i", notRequired); }); codeGodfatherInput.addEventListener("blur", function(e) { @@ -125,9 +124,9 @@ codeGodfatherInput.addEventListener("blur", function(e) if (this.readyState == XMLHttpRequest.DONE) { if (this.status === 204) - addElement(document.getElementById("codeGodfatherMessage"), "div", txtUsers.godfatherNotFound, "", ["error"]); + addElement(document.getElementById("codeGodfatherMessage"), "div", godfatherNotFound, "", ["error"]); else - addElement(document.getElementById("codeGodfatherMessage"), "div", txtUsers.godfatherFound, "", ["success"]); + addElement(document.getElementById("codeGodfatherMessage"), "div", godfatherFound, "", ["success"]); } } xhr.setRequestHeader("Content-Type", "application/json"); @@ -161,7 +160,7 @@ myForm.addEventListener("submit", function(e) addElement(divResponse, "p", response.errors, "", ["error"]); } else - addElement(divResponse, "p", txtServerError, "", ["error"]); + addElement(divResponse, "p", serverError, "", ["error"]); } } xhr.setRequestHeader("Content-Type", "application/json"); @@ -176,7 +175,7 @@ myForm.addEventListener("submit", function(e) } catch(e) { - addElement(divResponse, "p", txtServerError, "", ["error"]); + addElement(divResponse, "p", serverError, "", ["error"]); console.error(e); } }); \ No newline at end of file diff --git a/front/src/subscribeValidation.js b/front/src/subscribeValidation.js index 0e07532..f4e45ed 100644 --- a/front/src/subscribeValidation.js +++ b/front/src/subscribeValidation.js @@ -21,8 +21,8 @@ import { getUrlParams } from "./tools/url.js"; import { checkSession } from "./tools/users.js"; // Dictionnaires : -const txtServerError = require("../../lang/"+lang+"/general").serverError; -const txtUsers = require("../../lang/"+lang+"/user"); +const { serverError } = require("../../lang/"+lang+"/general"); +const { alreadyConnected, badLinkValidationMessage, validationMessage } = require("../../lang/"+lang+"/user"); const divResponse = document.getElementById("response"); @@ -34,7 +34,7 @@ const initialise = async () => const isConnected=await checkSession(); if(isConnected) { - saveLocaly("message", { message: txtUsers.alreadyConnected, color:"info" }); + saveLocaly("message", { message: alreadyConnected, color:"info" }); const user=getLocaly("user", true); const homePage=user.status+"HomePage";// lors de la création d'un compte, seul le statut "user" est possible. window.location.assign("/"+configTemplate[homePage]); @@ -54,7 +54,7 @@ const initialise = async () => let response=JSON.parse(this.responseText); if (this.status === 200 && response.userId != undefined && response.token != undefined) { - saveLocaly("message", { message: txtUsers.validationMessage, color:"success" });// pour l'afficher sur la page suivante + saveLocaly("message", { message: validationMessage, color:"success" });// pour l'afficher sur la page suivante window.location.assign("/"+configTemplate.connectionPage); } else if ((this.status === 200 || this.status === 404) && response.errors != undefined) @@ -63,7 +63,7 @@ const initialise = async () => addElement(divResponse, "p", response.errors, "", ["error"]); } else - addElement(divResponse, "p", txtUsers.badLinkValidationMessage.replace("#URL", configTemplate.connectionPage), "", ["error"]); + addElement(divResponse, "p", badLinkValidationMessage.replace("#URL", configTemplate.connectionPage), "", ["error"]); } } xhr.send(); @@ -73,7 +73,7 @@ const initialise = async () => catch(e) { console.error(e); - addElement(divResponse, "p", txtServerError, "", ["error"]); + addElement(divResponse, "p", serverError, "", ["error"]); } } initialise(); diff --git a/front/src/unsubscribe.js b/front/src/unsubscribe.js index a361dcf..f93cf65 100644 --- a/front/src/unsubscribe.js +++ b/front/src/unsubscribe.js @@ -17,9 +17,8 @@ import { getUrlParams } from "./tools/url.js"; import { checkSession, getConfig, setSession } from "./tools/users.js"; // Dictionnaires : -const txt = require("../../lang/"+lang+"/general"); -const txtUsers = require("../../lang/"+lang+"/user"); -const txtSubscriptions = require("../../lang/"+lang+"/subscription"); +const { serverError } = require("../../lang/"+lang+"/general"); +const { unsubscriptionFail } = require("../../lang/"+lang+"/subscription"); const divResponse = document.getElementById("response"); @@ -32,7 +31,7 @@ const initialise = async () => { config = await getConfig(); if(!config) - addElement(divResponse, "p", txt.serverError, "", ["error"]); + addElement(divResponse, "p", serverError, "", ["error"]); else { const datas=getUrlParams(); @@ -48,7 +47,7 @@ const initialise = async () => if (this.status === 200 && response.message != undefined) addElement(divResponse, "p", response.message.replace("#URL", configFrontEnd.accountPage), "", ["success"]); else - addElement(divResponse, "p", txtSubscriptions.unsubscriptionFail.replace("#URL", configFrontEnd.accountPage), "", ["error"]); + addElement(divResponse, "p", unsubscriptionFail.replace("#URL", configFrontEnd.accountPage), "", ["error"]); } } xhr.send(); @@ -57,7 +56,7 @@ const initialise = async () => } catch(e) { - addElement(divResponse, "p", txt.serverError, "", ["error"]); + addElement(divResponse, "p", serverError, "", ["error"]); } } initialise(); \ No newline at end of file diff --git a/lang/fr/questionnaire.js b/lang/fr/questionnaire.js index e60e48f..1c27917 100644 --- a/lang/fr/questionnaire.js +++ b/lang/fr/questionnaire.js @@ -28,13 +28,12 @@ module.exports = needUrl: "Merci de fournir l'url à votre quiz.", nextDateWithoutQuestionnaire: "Prochaine date sans quiz programmé : ", nextQuestionnairesList: "Les #NB prochains quizs devant être publiés", - notFound : "Aucun quiz n'a pas été trouvé.", questionnairesName: "quiz", questionnaireNeedBeCompleted: "Quiz incomplet", publishedAt: ", le", publishedBy: "Quiz publié par", + searchQuestionnaireResultTitle : "Résultat pour votre recherche", searchQuestionnaireWithNoResult : "Aucun quiz n'a été trouvé pour votre recherche.", - searchResultTitle : "Résultat pour votre recherche", - searchWithResult : "Voici #NB quizs pour votre recherche :", + searchQuestionnaireWithResult : "Voici #NB quizs pour votre recherche :", wrongAnswerTxt: "Mauvaise réponse" }; \ No newline at end of file diff --git a/lang/fr/user.js b/lang/fr/user.js index 85a57a9..7434132 100644 --- a/lang/fr/user.js +++ b/lang/fr/user.js @@ -70,8 +70,8 @@ module.exports = 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, cliquez-ici pour vous connecter.", 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.", needValidLastConnectionDate : "La date de dernière connexion n'est pas valide.", - notFound: "L'utilisateur n'a pas été trouvé.", 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.", + searchUsersWithoutResult: "L'utilisateur n'a pas été trouvé.", 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.", updatedFailedGodfatherNotFound : "L'identifiant fourni pour le parrain ne correspond à aucun utilisateur.", updatedNeedGoodEmail : "Mais la nouvelle adresse e-mail n'a pu être enregistrée, car elle n'a pas un format correct.",