2020-08-07 12:23:59 +02:00
|
|
|
// -- GESTION DES FORMULAIRES PERMETTANT AUX UTILISATEURS DE METTRE À JOUR LEURS INFORMATIONS + LEUR ABONNEMENT
|
|
|
|
|
|
|
|
/// Vérifier que l'utilisateur est bien connecté, a le bon statut et le rediriger vers le formulaire d'inscription si ce n'est pas le cas.
|
|
|
|
/// Si c'est ok, on récupère les infos de son compte et son abonnement et les affiche dans le formulaire.
|
2020-09-10 12:22:34 +02:00
|
|
|
/// Une information est affichée concernant la possibilité de parrainage et liste les filleuls existants.
|
2020-08-07 12:23:59 +02:00
|
|
|
/// Un menu permet à l'utilisateur d'accéder à la modification de ses infos, etc.
|
|
|
|
/// Des boutons de paiement sont aussi affichés suivant le choix de l'utilisateur pour lui permettre de prolonger son abonnement.
|
|
|
|
/// Un message venant d'une autre page peut aussi être à afficher lors du premier chargement.
|
|
|
|
|
|
|
|
// Fichier de configuration côté client :
|
|
|
|
import { apiUrl, availableLangs, theme } from "../../config/instance.js";
|
|
|
|
const lang=availableLangs[0];
|
2020-10-07 12:29:31 +02:00
|
|
|
const configTemplate = require("../../views/"+theme+"/config/"+lang+".js");// besoin de toutes les déclarations pour la fonction : updateAccountLink()
|
|
|
|
const { beginCodeGodfather } = require("../../config/instance");
|
|
|
|
const configUsers = require("../../config/users"); // besoin de tous le fichier pour configurer le formulaire
|
2020-08-07 12:23:59 +02:00
|
|
|
|
2020-09-10 12:22:34 +02:00
|
|
|
// Fonctions utiles au script
|
|
|
|
import { getLocaly, removeLocaly } from "./tools/clientstorage.js";
|
2020-08-07 12:23:59 +02:00
|
|
|
import { addElement } from "./tools/dom.js";
|
|
|
|
import { helloDev, updateAccountLink } from "./tools/everywhere.js";
|
|
|
|
import { getDatasFromInputs, setAttributesToInputs } from "./tools/forms.js";
|
2020-09-10 12:22:34 +02:00
|
|
|
import { isEmpty } from "../../tools/main";
|
2020-08-07 12:23:59 +02:00
|
|
|
import { checkSession, getConfig, getTimeDifference } from "./tools/users.js";
|
|
|
|
|
|
|
|
// Spécifique WebPortage pour paiements:
|
|
|
|
import { showBtnPayment, unCheckAllOthers } from "./tools/webportage.js";
|
|
|
|
|
|
|
|
// Dictionnaires :
|
2020-10-06 16:34:17 +02:00
|
|
|
const { serverError } = require("../../lang/"+lang+"/general");
|
|
|
|
const { infosUserNbGodChilds, infosUserNoGodchilds, needBeConnected } = require("../../lang/"+lang+"/user");
|
|
|
|
const { infosExpirated, infosNbDays } = require("../../lang/"+lang+"/subscription");
|
2020-08-07 12:23:59 +02:00
|
|
|
|
|
|
|
// Principaux éléments du DOM manipulés :
|
|
|
|
const divCrash = document.getElementById("crash");
|
|
|
|
const divMain = document.getElementById("main-content");
|
|
|
|
const divMessage = document.getElementById("message");
|
|
|
|
const divResponse = document.getElementById("response");
|
2020-12-07 16:42:39 +01:00
|
|
|
const divGodfatherInfos = document.getElementById("godfatherInfos");
|
2020-08-07 12:23:59 +02:00
|
|
|
const divGodchilds = document.getElementById("godchilds");
|
2020-12-07 16:42:39 +01:00
|
|
|
const divSubscribeInfos = document.getElementById("subscribeInfos");
|
2020-08-07 12:23:59 +02:00
|
|
|
const divSubscribeIntro = document.getElementById("subscribeIntro");
|
|
|
|
const formAccount = document.getElementById("accountUpdate");
|
|
|
|
const newPassword = document.getElementById("newPassword");
|
|
|
|
const showGFEmail = document.getElementById("godfatherEmail");
|
|
|
|
const showGFCode = document.getElementById("godfatherCode");
|
|
|
|
|
|
|
|
helloDev();
|
|
|
|
|
|
|
|
const initialise = async () =>
|
|
|
|
{
|
|
|
|
try
|
2020-10-07 12:29:31 +02:00
|
|
|
{
|
|
|
|
// Si l'utilisateur n'est pas connecté avec le bon statut, pas la peine d'aller + loin :
|
|
|
|
const isConnected=await checkSession(["user"], "/"+configTemplate.connectionPage, { message: needBeConnected, color:"error" }, window.location);
|
|
|
|
if(isConnected)
|
2020-08-07 12:23:59 +02:00
|
|
|
{
|
2020-10-07 12:29:31 +02:00
|
|
|
divMain.style.display="block";
|
|
|
|
// l'éventuelle ancre est ignorée, car absente du DOM avant d'avoir vérifié la connexion
|
|
|
|
if(window.location.hash!==undefined)
|
|
|
|
window.location.assign(window.location.hash);
|
|
|
|
|
|
|
|
if(!isEmpty(getLocaly("message")))
|
2020-08-07 12:23:59 +02:00
|
|
|
{
|
2020-10-07 12:29:31 +02:00
|
|
|
addElement(divMessage, "p", getLocaly("message", true).message, "", [getLocaly("message", true).color], "", false);
|
|
|
|
removeLocaly("message");
|
|
|
|
}
|
|
|
|
const user=getLocaly("user", true);
|
|
|
|
updateAccountLink(user.status, configTemplate);
|
|
|
|
// Initialise le formulaire permettant de mettre à jour les infos :
|
|
|
|
setAttributesToInputs(configUsers, formAccount);
|
|
|
|
// Certains navigateurs remplissent les champs password :
|
|
|
|
newPassword.value="";
|
2020-08-07 12:23:59 +02:00
|
|
|
|
2020-10-07 12:29:31 +02:00
|
|
|
// Fonction affichant les infos connues au premier affichage, puis après envoi mise à jour
|
|
|
|
const getInfos = () =>
|
|
|
|
{
|
|
|
|
const xhrGetInfos = new XMLHttpRequest();
|
|
|
|
xhrGetInfos.open("GET", apiUrl+configUsers.userRoutes+configUsers.getUserInfos+user.id);
|
|
|
|
xhrGetInfos.onreadystatechange = function()
|
2020-08-07 12:23:59 +02:00
|
|
|
{
|
2020-10-07 12:29:31 +02:00
|
|
|
if (this.readyState == XMLHttpRequest.DONE)
|
2020-08-07 12:23:59 +02:00
|
|
|
{
|
2020-10-07 12:29:31 +02:00
|
|
|
let response=JSON.parse(this.responseText);
|
|
|
|
if (this.status === 200 && response.User != undefined && response.Subscription != undefined)
|
2020-08-07 12:23:59 +02:00
|
|
|
{
|
2020-10-07 12:29:31 +02:00
|
|
|
for(let data in response.User)
|
2020-08-07 12:23:59 +02:00
|
|
|
{
|
2020-10-07 12:29:31 +02:00
|
|
|
if(formAccount.elements[data]!==undefined)
|
2020-08-07 12:23:59 +02:00
|
|
|
{
|
2020-10-07 12:29:31 +02:00
|
|
|
if(response.User[data]!==true && response.User[data]!==false)// booléen = case à cocher !
|
|
|
|
formAccount.elements[data].value=response.User[data];
|
|
|
|
else if (response.User[data]==true) // si false, on ne fait rien
|
|
|
|
formAccount.elements[""+data].checked="checked";
|
2020-08-07 12:23:59 +02:00
|
|
|
}
|
|
|
|
}
|
2020-10-07 12:29:31 +02:00
|
|
|
// jours de réception
|
|
|
|
for(let i in response.Subscription.receiptDays)
|
|
|
|
formAccount.elements["d"+response.Subscription.receiptDays[i]].checked="checked";
|
|
|
|
// "codes" possibles à transmettre pour parrainer d'autres utilisateurs
|
|
|
|
showGFEmail.innerHTML=response.User.email;
|
|
|
|
showGFCode.innerHTML=beginCodeGodfather+response.User.id;
|
2020-08-07 12:23:59 +02:00
|
|
|
}
|
2020-10-07 12:29:31 +02:00
|
|
|
const beginSubTS=new Date(response.Subscription.createdAt).getTime();
|
2020-12-07 16:42:39 +01:00
|
|
|
if(response.Subscription.numberOfDays !== 0)
|
2020-10-07 12:29:31 +02:00
|
|
|
{
|
2020-12-07 16:42:39 +01:00
|
|
|
divGodfatherInfos.style.display="block";
|
|
|
|
divSubscribeInfos.style.display="block";
|
|
|
|
const nbDaysOk=response.Subscription.numberOfDays-Math.round((Date.now()-beginSubTS)/1000/3600/24);
|
|
|
|
if(nbDaysOk > 0)
|
|
|
|
addElement(divSubscribeIntro, "p", infosNbDays.replace("NB_DAYS", nbDaysOk), "", ["info"]);
|
|
|
|
else
|
|
|
|
{
|
|
|
|
addElement(divSubscribeIntro, "p", infosExpirated.replace("NB_DAYS", nbDaysOk), "", ["error"]);
|
|
|
|
window.location.assign("#subscribe");
|
|
|
|
}
|
|
|
|
}
|
2020-08-07 12:23:59 +02:00
|
|
|
}
|
|
|
|
}
|
2020-10-07 12:29:31 +02:00
|
|
|
xhrGetInfos.setRequestHeader("Authorization", "Bearer "+user.token);
|
|
|
|
xhrGetInfos.send();
|
|
|
|
}
|
|
|
|
// Remonte les infos déjà enregistrées :
|
|
|
|
getInfos();
|
|
|
|
|
|
|
|
// Traitement de l'envoi d'une mise à jour des infos
|
|
|
|
formAccount.addEventListener("submit", function(e)
|
|
|
|
{
|
|
|
|
e.preventDefault();
|
|
|
|
divResponse.innerHTML="";
|
|
|
|
let datas=getDatasFromInputs(formAccount);
|
|
|
|
// recomposition des jours valables pour l'abonnement :
|
|
|
|
datas.receiptDays="";
|
|
|
|
for(let i=1; i<=7; i++)
|
2020-08-07 12:23:59 +02:00
|
|
|
{
|
2020-10-07 12:29:31 +02:00
|
|
|
if(datas["d"+i]!==undefined)
|
|
|
|
datas.receiptDays+=""+i;
|
|
|
|
}
|
|
|
|
datas.timeDifference=getTimeDifference();
|
|
|
|
const xhrUserUpdate = new XMLHttpRequest();
|
|
|
|
if(datas.deleteOk!==undefined)
|
|
|
|
xhrUserUpdate.open("DELETE", apiUrl+configUsers.userRoutes+"/"+user.id);
|
|
|
|
else
|
|
|
|
xhrUserUpdate.open("PUT", apiUrl+configUsers.userRoutes+configUsers.updateUserInfos+user.id);
|
|
|
|
xhrUserUpdate.onreadystatechange = function()
|
|
|
|
{
|
|
|
|
if (this.readyState == XMLHttpRequest.DONE)
|
2020-08-07 12:23:59 +02:00
|
|
|
{
|
2020-10-07 12:29:31 +02:00
|
|
|
let response=JSON.parse(this.responseText);
|
|
|
|
if (this.status === 200 && response.message!=undefined)
|
2020-08-07 12:23:59 +02:00
|
|
|
{
|
2020-10-07 12:29:31 +02:00
|
|
|
if(Array.isArray(response.message))
|
|
|
|
response.message = response.message.join("<br>");
|
2020-08-07 12:23:59 +02:00
|
|
|
else
|
2020-10-07 12:29:31 +02:00
|
|
|
response.message = response.message;
|
|
|
|
addElement(divResponse, "p", response.message, "", ["success"]);
|
2020-08-07 12:23:59 +02:00
|
|
|
}
|
2020-10-07 12:29:31 +02:00
|
|
|
else if (response.errors)
|
2020-08-07 12:23:59 +02:00
|
|
|
{
|
2020-10-07 12:29:31 +02:00
|
|
|
if(Array.isArray(response.errors))
|
|
|
|
response.errors = response.errors.join("<br>");
|
|
|
|
else
|
|
|
|
response.errors = serverError;
|
|
|
|
addElement(divResponse, "p", response.errors, "", ["error"]);
|
2020-08-07 12:23:59 +02:00
|
|
|
}
|
2020-10-07 12:29:31 +02:00
|
|
|
else
|
|
|
|
addElement(divResponse, "p", serverError, "", ["error"]);
|
|
|
|
// dans tous les cas, je mets à jour le contenu du formulaire :
|
|
|
|
getInfos();
|
2020-08-07 12:23:59 +02:00
|
|
|
}
|
2020-10-07 12:29:31 +02:00
|
|
|
}
|
|
|
|
xhrUserUpdate.setRequestHeader("Content-Type", "application/json");
|
|
|
|
xhrUserUpdate.setRequestHeader("Authorization", "Bearer "+user.token);
|
|
|
|
if(datas)
|
|
|
|
{
|
|
|
|
datas.output="html";
|
|
|
|
xhrUserUpdate.send(JSON.stringify(datas));
|
|
|
|
}
|
|
|
|
});
|
|
|
|
|
|
|
|
// on passe à la caisse ?
|
|
|
|
const abo9=document.getElementById("abo9");
|
|
|
|
const abo18=document.getElementById("abo18");
|
|
|
|
const abo36=document.getElementById("abo36");
|
|
|
|
const abo54=document.getElementById("abo54");
|
|
|
|
const CGV=document.getElementById("CGVOk");
|
|
|
|
const divWPBtns=document.getElementById("WPBtns");
|
|
|
|
divWPBtns.style.display="none";
|
|
|
|
abo9.addEventListener("change", function(e)
|
|
|
|
{
|
|
|
|
unCheckAllOthers("abo9");
|
|
|
|
});
|
|
|
|
abo18.addEventListener("change", function(e)
|
|
|
|
{
|
|
|
|
unCheckAllOthers("abo18");
|
|
|
|
});
|
|
|
|
abo36.addEventListener("change", function(e)
|
|
|
|
{
|
|
|
|
unCheckAllOthers("abo36");
|
|
|
|
});
|
|
|
|
abo54.addEventListener("change", function(e)
|
|
|
|
{
|
|
|
|
unCheckAllOthers("abo54");
|
|
|
|
});
|
|
|
|
CGV.addEventListener("change", function(e)
|
|
|
|
{
|
|
|
|
if(CGV.checked===true)
|
|
|
|
{
|
|
|
|
divWPBtns.style.display="block";
|
|
|
|
if(abo9.checked===true)
|
|
|
|
showBtnPayment("btn9");
|
|
|
|
else if(abo18.checked===true)
|
|
|
|
showBtnPayment("btn18");
|
|
|
|
else if(abo36.checked===true)
|
|
|
|
showBtnPayment("btn36");
|
|
|
|
else if(abo54.checked===true)
|
|
|
|
showBtnPayment("btn54");
|
2020-08-07 12:23:59 +02:00
|
|
|
else
|
2020-10-07 12:29:31 +02:00
|
|
|
{
|
2020-08-07 12:23:59 +02:00
|
|
|
divWPBtns.style.display="none";
|
2020-10-07 12:29:31 +02:00
|
|
|
CGV.checked=false;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else
|
|
|
|
divWPBtns.style.display="none";
|
|
|
|
});
|
2020-08-07 12:23:59 +02:00
|
|
|
|
2020-10-07 12:29:31 +02:00
|
|
|
// Liste des filleuls, si il y en a
|
|
|
|
const xhrGetGodchilds = new XMLHttpRequest();
|
|
|
|
xhrGetGodchilds.open("GET", apiUrl+configUsers.userRoutes+configUsers.getGodChilds);
|
|
|
|
xhrGetGodchilds.onreadystatechange = function()
|
|
|
|
{
|
|
|
|
if (this.readyState == XMLHttpRequest.DONE)
|
2020-08-07 12:23:59 +02:00
|
|
|
{
|
2020-10-07 12:29:31 +02:00
|
|
|
let response=JSON.parse(this.responseText), txtGodchilds="";
|
|
|
|
if (this.status === 200)
|
2020-08-07 12:23:59 +02:00
|
|
|
{
|
2020-10-07 12:29:31 +02:00
|
|
|
const nbGodchilds=response.length;
|
|
|
|
if(nbGodchilds===0)
|
|
|
|
txtGodchilds=infosUserNoGodchilds;
|
|
|
|
else
|
2020-08-07 12:23:59 +02:00
|
|
|
{
|
2020-10-07 12:29:31 +02:00
|
|
|
txtGodchilds=infosUserNbGodChilds.replace("#NB", nbGodchilds);
|
|
|
|
for(let i in response)
|
|
|
|
txtGodchilds+=response[i].name+" ("+response[i].email+") ";
|
2020-08-07 12:23:59 +02:00
|
|
|
}
|
|
|
|
}
|
2020-10-07 12:29:31 +02:00
|
|
|
addElement(divGodchilds, "p", txtGodchilds, "", ["info"]);
|
2020-08-07 12:23:59 +02:00
|
|
|
}
|
|
|
|
}
|
2020-10-07 12:29:31 +02:00
|
|
|
xhrGetGodchilds.setRequestHeader("Authorization", "Bearer "+user.token);
|
|
|
|
xhrGetGodchilds.send();
|
2020-08-07 12:23:59 +02:00
|
|
|
}
|
|
|
|
}
|
|
|
|
catch(e)
|
|
|
|
{
|
2020-10-06 16:34:17 +02:00
|
|
|
addElement(divCrash, "p", serverError, "", ["error"]);
|
2020-08-07 12:23:59 +02:00
|
|
|
console.error(e);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
initialise();
|