Réorganisation et débuggage script formulaire édition des quizs avant ajout des nouveaux champs pour les groupes
This commit is contained in:
parent
9a6bb5d882
commit
d52be75633
|
@ -439,10 +439,10 @@ const deleteQuestionnaire = async (id, req) =>
|
||||||
await questionCtrl.deleteQuestionById(questionnaire.Questions[i].id);
|
await questionCtrl.deleteQuestionById(questionnaire.Questions[i].id);
|
||||||
for(let i in questionnaire.Illustrations)
|
for(let i in questionnaire.Illustrations)
|
||||||
await illustrationCtrl.deleteIllustrationById(questionnaire.Illustrations[i].id);
|
await illustrationCtrl.deleteIllustrationById(questionnaire.Illustrations[i].id);
|
||||||
const nb=await db["Questionnaire"].destroy( { where: { id : req.params.id }, limit:1 });
|
const nb=await db["Questionnaire"].destroy( { where: { id : id }, limit:1 });
|
||||||
if(nb===1)// = json existant, bien que sql déjà supprimé
|
if(nb===1)// = json existant, bien que sql déjà supprimé
|
||||||
{
|
{
|
||||||
toolFile.deleteJSON(configQuestionnaires.dirCacheQuestionnaires, req.params.id);
|
toolFile.deleteJSON(configQuestionnaires.dirCacheQuestionnaires, id);
|
||||||
// + HTML :
|
// + HTML :
|
||||||
toolFile.deleteFile(configQuestionnaires.dirHTMLQuestionnaires, questionnaire.Questionnaire.slug+".html");
|
toolFile.deleteFile(configQuestionnaires.dirHTMLQuestionnaires, questionnaire.Questionnaire.slug+".html");
|
||||||
// Actualisation de liste des questionnaires pour les tags concernés.
|
// Actualisation de liste des questionnaires pour les tags concernés.
|
||||||
|
|
|
@ -5,13 +5,13 @@
|
||||||
/// Si un id est passé par l'url on affiche les informations du groupe dans un formulaire permettant de l'éditer/supprimer.
|
/// Si un id est passé par l'url on affiche les informations du groupe 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 nouveau.
|
/// Si pas d'id passé par l'url, on affiche un formulaire vide permettant d'en saisir un nouveau.
|
||||||
|
|
||||||
// Fichier de configuration côté client :
|
// Fichiers de configuration :
|
||||||
import { apiUrl, availableLangs, theme } from "../../config/instance.js";
|
import { apiUrl, availableLangs, theme } from "../../config/instance.js";
|
||||||
const lang=availableLangs[0];
|
const lang=availableLangs[0];
|
||||||
const configQuestionnaires = require("../../config/questionnaires.js");
|
const configQuestionnaires = require("../../config/questionnaires.js");
|
||||||
const configTemplate = require("../../views/"+theme+"/config/"+lang+".js");
|
const configTemplate = require("../../views/"+theme+"/config/"+lang+".js");
|
||||||
|
|
||||||
// Fonctions utiles au script :
|
// Fonctions :
|
||||||
import { getLocaly, removeLocaly } from "./tools/clientstorage.js";
|
import { getLocaly, removeLocaly } from "./tools/clientstorage.js";
|
||||||
import { addElement } from "./tools/dom.js";
|
import { addElement } from "./tools/dom.js";
|
||||||
import { helloDev, updateAccountLink } from "./tools/everywhere.js";
|
import { helloDev, updateAccountLink } from "./tools/everywhere.js";
|
||||||
|
@ -26,51 +26,29 @@ const { infosGroupForAdmin, searchWithoutResult } = require("../../lang/"+lang+"
|
||||||
const { needBeConnected } = require("../../lang/"+lang+"/user");
|
const { needBeConnected } = require("../../lang/"+lang+"/user");
|
||||||
|
|
||||||
// Principaux éléments du DOM manipulés :
|
// Principaux éléments du DOM manipulés :
|
||||||
|
const btnNewGroup = document.getElementById("wantNewGroup");
|
||||||
|
const deleteCheckBox = document.getElementById("deleteOkLabel");
|
||||||
|
const divCrash = document.getElementById("crash");
|
||||||
|
const divGroupIntro = document.getElementById("groupIntro");
|
||||||
const divMain = document.getElementById("main-content");
|
const divMain = document.getElementById("main-content");
|
||||||
const divMessage = document.getElementById("message");
|
const divMessage = document.getElementById("message");
|
||||||
const divResponse = document.getElementById("response");
|
const divResponse = document.getElementById("response");
|
||||||
const divCrash = document.getElementById("crash");
|
|
||||||
const divGroupIntro = document.getElementById("groupIntro");
|
|
||||||
const formGroup = document.getElementById("groups");
|
|
||||||
const deleteCheckBox = document.getElementById("deleteOkLabel");
|
|
||||||
const btnNewGroup = document.getElementById("wantNewGroup");
|
|
||||||
const formSearch = document.getElementById("search");
|
|
||||||
const divSearchResult = document.getElementById("searchResult");
|
const divSearchResult = document.getElementById("searchResult");
|
||||||
|
const formGroup = document.getElementById("groups");
|
||||||
helloDev();
|
const formSearch = document.getElementById("search");
|
||||||
|
|
||||||
const initialise = async () =>
|
|
||||||
{
|
|
||||||
try
|
|
||||||
{
|
|
||||||
const isConnected=await checkSession(["manager", "admin"], "/"+configTemplate.connectionPage, { message: needBeConnected, color:"error" }, window.location);
|
|
||||||
if(isConnected)
|
|
||||||
{
|
|
||||||
const user=getLocaly("user", true);
|
|
||||||
updateAccountLink(user.status, configTemplate);
|
|
||||||
divMain.style.display="block";
|
|
||||||
if(!isEmpty(getLocaly("message")))
|
|
||||||
{
|
|
||||||
addElement(divMessage, "p", getLocaly("message", true).message, "", [getLocaly("message", true).color], "", false);
|
|
||||||
removeLocaly("message");
|
|
||||||
}
|
|
||||||
// Initialisation du formulaire de recherche :
|
|
||||||
setAttributesToInputs(configQuestionnaires, formSearch);
|
|
||||||
|
|
||||||
// Fonction utile pour vider le formulaire, y compris les champs hidden, etc.
|
// Fonction utile pour vider le formulaire, y compris les champs hidden, etc.
|
||||||
// Cache aussi certains champs en mode création
|
|
||||||
const emptyGroupForm = () =>
|
const emptyGroupForm = () =>
|
||||||
{
|
{
|
||||||
empyForm(formGroup);
|
empyForm(formGroup);
|
||||||
// Case de suppression cachée par défaut, car inutile pour formulaire de création
|
// Case de suppression inutile en mode création :
|
||||||
deleteCheckBox.style.display="none";
|
deleteCheckBox.style.display="none";
|
||||||
|
// Intro à vider !
|
||||||
|
divGroupIntro.innerHTML="";
|
||||||
}
|
}
|
||||||
emptyGroupForm();
|
|
||||||
// Initialise les contraintes du formulaire :
|
|
||||||
setAttributesToInputs(configQuestionnaires.Group, formGroup);
|
|
||||||
|
|
||||||
// Fonction affichant les infos connues concernant un utilisateur et son abonnement
|
// Fonction affichant les infos connues concernant un groupe.
|
||||||
const showFormGroupInfos = (id) =>
|
const showFormGroupInfos = (id, token) =>
|
||||||
{
|
{
|
||||||
// on commence par tout vider, des fois que... :
|
// on commence par tout vider, des fois que... :
|
||||||
emptyGroupForm();
|
emptyGroupForm();
|
||||||
|
@ -97,31 +75,48 @@ const initialise = async () =>
|
||||||
if(formGroup.elements[data]!==undefined)
|
if(formGroup.elements[data]!==undefined)
|
||||||
{
|
{
|
||||||
if(data==="publishingAt" && response.Group[data]!==null)
|
if(data==="publishingAt" && response.Group[data]!==null)
|
||||||
formGroup.elements[data].value=dateFormat(response.Group[data], "form");// !! revoir car format pouvant poser soucis si navigateur ne gère pas les champs de type "date"
|
formGroup.elements[data].value=dateFormat(response.Group[data], "form");// !! format pouvant poser soucis si navigateur ne gère pas les champs de type "date"
|
||||||
else
|
else
|
||||||
formGroup.elements[data].value=response.Group[data];
|
formGroup.elements[data].value=response.Group[data];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
deleteCheckBox.style.display="block";
|
deleteCheckBox.style.display="block";
|
||||||
|
}// ajout gestion erreur 404 ???
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
xhrGetInfos.setRequestHeader("Authorization", "Bearer "+token);
|
||||||
xhrGetInfos.setRequestHeader("Authorization", "Bearer "+user.token);
|
|
||||||
xhrGetInfos.send();
|
xhrGetInfos.send();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const initialise = async () =>
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
const isConnected=await checkSession(["manager", "admin"], "/"+configTemplate.connectionPage, { message: needBeConnected, color:"error" }, window.location);
|
||||||
|
if(isConnected)
|
||||||
|
{
|
||||||
|
const user=getLocaly("user", true);
|
||||||
|
updateAccountLink(user.status, configTemplate);// lien "Compte" menu header template
|
||||||
|
divMain.style.display="block";
|
||||||
|
if(!isEmpty(getLocaly("message")))
|
||||||
|
{
|
||||||
|
addElement(divMessage, "p", getLocaly("message", true).message, "", [getLocaly("message", true).color], "", false);
|
||||||
|
removeLocaly("message");
|
||||||
|
}
|
||||||
|
// Initialisation des formulaires :
|
||||||
|
setAttributesToInputs(configQuestionnaires, formSearch);
|
||||||
|
setAttributesToInputs(configQuestionnaires.Group, formGroup);
|
||||||
|
emptyGroupForm();
|
||||||
// Si un id est passé par l'url, on essaye d'afficher les infos :
|
// Si un id est passé par l'url, on essaye d'afficher les infos :
|
||||||
let urlDatas=getUrlParams();
|
let urlDatas=getUrlParams();
|
||||||
if(urlDatas && urlDatas.id!==undefined)
|
if(urlDatas && urlDatas.id!==undefined)
|
||||||
showFormGroupInfos(urlDatas.id);
|
showFormGroupInfos(urlDatas.id, user.token);
|
||||||
|
|
||||||
// Besoin d'un coup de Kärcher ?
|
// Besoin d'un coup de Kärcher ?
|
||||||
btnNewGroup.addEventListener("click", function(e)
|
btnNewGroup.addEventListener("click", function(e)
|
||||||
{
|
{
|
||||||
emptyGroupForm();
|
emptyGroupForm();
|
||||||
});
|
});
|
||||||
|
// Envoi du formulaire principal :
|
||||||
// Envoi du formulaire des infos du groupe
|
|
||||||
formGroup.addEventListener("submit", function(e)
|
formGroup.addEventListener("submit", function(e)
|
||||||
{
|
{
|
||||||
e.preventDefault();
|
e.preventDefault();
|
||||||
|
@ -131,20 +126,20 @@ const initialise = async () =>
|
||||||
if(!isEmpty(datas.id) && (datas.deleteOk !== undefined))
|
if(!isEmpty(datas.id) && (datas.deleteOk !== undefined))
|
||||||
xhrGroupDatas.open("DELETE", apiUrl+configQuestionnaires.groupRoutes+"/"+datas.id);
|
xhrGroupDatas.open("DELETE", apiUrl+configQuestionnaires.groupRoutes+"/"+datas.id);
|
||||||
else if(!isEmpty(datas.id))
|
else if(!isEmpty(datas.id))
|
||||||
xhrGroupDatas.open("PUT", apiUrl+configQuestionnaires.groupRoutes+"/"+datas.id);
|
xhrGroupDatas.open("PUT", apiUrl+configQuestionnaires.groupRoutes+"/"+datas.id);// mise à jour
|
||||||
else
|
else
|
||||||
xhrGroupDatas.open("POST", apiUrl+configQuestionnaires.groupRoutes);
|
xhrGroupDatas.open("POST", apiUrl+configQuestionnaires.groupRoutes);// nouvel enregistrement
|
||||||
xhrGroupDatas.onreadystatechange = function()
|
xhrGroupDatas.onreadystatechange = function()
|
||||||
{
|
{
|
||||||
if (this.readyState == XMLHttpRequest.DONE)
|
if (this.readyState == XMLHttpRequest.DONE)
|
||||||
{
|
{
|
||||||
let response=JSON.parse(this.responseText);
|
let response=JSON.parse(this.responseText);
|
||||||
if (this.status === 201 && response.id!=undefined)
|
if (this.status === 201 && response.id != undefined) // nouvel enregistrement créé
|
||||||
{
|
{
|
||||||
addElement(divResponse, "p", addOkMessage, "", ["success"]);
|
addElement(divResponse, "p", addOkMessage, "", ["success"]);
|
||||||
datas.id=response.id;
|
datas.id=response.id; // utile pour réaffichage + bas
|
||||||
}
|
}
|
||||||
else if (this.status === 200 && response.message!=undefined)
|
else if (this.status === 200 && response.message != undefined) // mise à jour ou suppression ok
|
||||||
{
|
{
|
||||||
if(Array.isArray(response.message))
|
if(Array.isArray(response.message))
|
||||||
response.message = response.message.join("<br>");
|
response.message = response.message.join("<br>");
|
||||||
|
@ -165,7 +160,7 @@ const initialise = async () =>
|
||||||
if(isEmpty(response.errors))
|
if(isEmpty(response.errors))
|
||||||
{
|
{
|
||||||
if(datas.deleteOk === undefined)
|
if(datas.deleteOk === undefined)
|
||||||
showFormGroupInfos(datas.id);
|
showFormGroupInfos(datas.id, user.token);// actualisation de l'affichage après traitement serveur
|
||||||
else
|
else
|
||||||
emptyGroupForm();
|
emptyGroupForm();
|
||||||
}
|
}
|
||||||
|
@ -177,7 +172,7 @@ const initialise = async () =>
|
||||||
xhrGroupDatas.send(JSON.stringify(datas));
|
xhrGroupDatas.send(JSON.stringify(datas));
|
||||||
});
|
});
|
||||||
|
|
||||||
// Traitement du lancement d'une recherche
|
// Envoi d'une recherche
|
||||||
formSearch.addEventListener("submit", function(e)
|
formSearch.addEventListener("submit", function(e)
|
||||||
{
|
{
|
||||||
e.preventDefault();
|
e.preventDefault();
|
||||||
|
@ -192,7 +187,7 @@ const initialise = async () =>
|
||||||
if (this.status === 200 && Array.isArray(response))
|
if (this.status === 200 && Array.isArray(response))
|
||||||
{
|
{
|
||||||
if(response.length === 0)
|
if(response.length === 0)
|
||||||
addElement(divSearchResult, "p", searchWithoutResult, "", ["info"]);// vérifier et importer texte
|
addElement(divSearchResult, "p", searchWithoutResult, "", ["info"]);
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
let selectHTML="<option value=''></option>";
|
let selectHTML="<option value=''></option>";
|
||||||
|
@ -203,7 +198,7 @@ const initialise = async () =>
|
||||||
searchSelect.addEventListener("change", function()
|
searchSelect.addEventListener("change", function()
|
||||||
{
|
{
|
||||||
if(searchSelect.value !== "")
|
if(searchSelect.value !== "")
|
||||||
showFormGroupInfos(searchSelect.value);
|
showFormGroupInfos(searchSelect.value, user.token);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -233,3 +228,4 @@ const initialise = async () =>
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
initialise();
|
initialise();
|
||||||
|
helloDev();
|
|
@ -4,19 +4,18 @@
|
||||||
/// Si c'est ok, propose un moteur de recherche permettant de chercher un quiz
|
/// Si c'est ok, propose un moteur de recherche permettant de chercher un quiz
|
||||||
/// Si un id est passé par l'url on affiche les informations du quiz dans un formulaire permettant de l'éditer/supprimer avec une liste des éléments liés (liens, illustrations, questions...) pouvant eux-mêmes être édités/supprimés.
|
/// Si un id est passé par l'url on affiche les informations du quiz dans un formulaire permettant de l'éditer/supprimer avec une liste des éléments liés (liens, illustrations, questions...) pouvant eux-mêmes être édités/supprimés.
|
||||||
/// Si le nombre max configuré pour chacun de ses éléments n'est pas atteint, il est aussi proposé d'ajouter un nouvel élément.
|
/// Si le nombre max configuré pour chacun de ses éléments n'est pas atteint, il est aussi proposé d'ajouter un nouvel élément.
|
||||||
/// Sinon pas d'id passé par l'url, on affiche un formulaire vide permettant d'en saisir un nouveau quiz avec ses tags.
|
/// Si pas d'id passé par l'url, on affiche un formulaire vide permettant de saisir un nouveau quiz.
|
||||||
|
|
||||||
// Fichier de configuration côté client :
|
// Fichiers de configuration :
|
||||||
import { apiUrl, availableLangs, theme } from "../../config/instance.js";
|
import { apiUrl, availableLangs, theme } from "../../config/instance.js";
|
||||||
const lang=availableLangs[0];
|
const lang=availableLangs[0];
|
||||||
|
|
||||||
const config = require("../../config/instance.js");
|
const config = require("../../config/instance.js");
|
||||||
const configIllustrations = require("../../config/illustrations.js");
|
const configIllustrations = require("../../config/illustrations.js");
|
||||||
const configLinks = require("../../config/links.js");
|
const configLinks = require("../../config/links.js");
|
||||||
const configQuestionnaires = require("../../config/questionnaires.js");
|
const configQuestionnaires = require("../../config/questionnaires.js");
|
||||||
const configTemplate = require("../../views/"+theme+"/config/"+lang+".js");
|
const configTemplate = require("../../views/"+theme+"/config/"+lang+".js");
|
||||||
|
|
||||||
// Fonctions utiles au script :
|
// Fonctions :
|
||||||
import { getLocaly, removeLocaly } from "./tools/clientstorage.js";
|
import { getLocaly, removeLocaly } from "./tools/clientstorage.js";
|
||||||
import { addElement } from "./tools/dom.js";
|
import { addElement } from "./tools/dom.js";
|
||||||
import { helloDev, updateAccountLink } from "./tools/everywhere.js";
|
import { helloDev, updateAccountLink } from "./tools/everywhere.js";
|
||||||
|
@ -34,54 +33,30 @@ const { nextDateWithoutQuestionnaire, nextQuestionnairesList, questionnaireNeedB
|
||||||
const { needBeConnected } = require("../../lang/"+lang+"/user");
|
const { needBeConnected } = require("../../lang/"+lang+"/user");
|
||||||
|
|
||||||
// Principaux éléments du DOM manipulés :
|
// Principaux éléments du DOM manipulés :
|
||||||
const divMain = document.getElementById("main-content");
|
|
||||||
const divMessage = document.getElementById("message");
|
|
||||||
const divResponse = document.getElementById("response");
|
|
||||||
const divCrash = document.getElementById("crash");
|
|
||||||
const formQuestionnaire = document.getElementById("questionnaires");
|
|
||||||
const inputClassification = document.getElementById("classification");
|
|
||||||
const helpClassification = document.getElementById("helpClassification");
|
|
||||||
const helpPublishingAt = document.getElementById("helpPublishingAt");
|
|
||||||
const deleteCheckBox = document.getElementById("deleteOkLabel");
|
|
||||||
const btnNewQuestionnaire = document.getElementById("wantNewQuestionnaire");
|
const btnNewQuestionnaire = document.getElementById("wantNewQuestionnaire");
|
||||||
const btnPreviewQuestionnaire = document.getElementById("previewQuestionnaire");
|
const btnPreviewQuestionnaire = document.getElementById("previewQuestionnaire");
|
||||||
|
const deleteCheckBox = document.getElementById("deleteOkLabel");
|
||||||
|
const divCrash = document.getElementById("crash");
|
||||||
|
const divIllustrations = document.getElementById("illustrationsList");
|
||||||
|
const divLinks = document.getElementById("linksList");
|
||||||
|
const divMain = document.getElementById("main-content");
|
||||||
|
const divMessage = document.getElementById("message");
|
||||||
const divQuestionnaires = document.getElementById("questionnairesList");
|
const divQuestionnaires = document.getElementById("questionnairesList");
|
||||||
const formSearch = document.getElementById("search");
|
const divQuestions = document.getElementById("questionsList");
|
||||||
|
const divResponse = document.getElementById("response");
|
||||||
const divSearchResult = document.getElementById("searchResult");
|
const divSearchResult = document.getElementById("searchResult");
|
||||||
const formLink = document.getElementById("links");
|
const formLink = document.getElementById("links");
|
||||||
const formIllustration = document.getElementById("illustrations");
|
const formIllustration = document.getElementById("illustrations");
|
||||||
const formQuestion = document.getElementById("questions");
|
const formQuestion = document.getElementById("questions");
|
||||||
const divLinks = document.getElementById("linksList");
|
const formQuestionnaire = document.getElementById("questionnaires");
|
||||||
const divIllustrations = document.getElementById("illustrationsList");
|
const formSearch = document.getElementById("search");
|
||||||
const divQuestions = document.getElementById("questionsList");
|
const helpClassification = document.getElementById("helpClassification");
|
||||||
|
const helpGroup = document.getElementById("helpClassification");
|
||||||
|
const helpPublishingAt = document.getElementById("helpPublishingAt");
|
||||||
|
const inputClassification = document.getElementById("classification");
|
||||||
|
const inputGroup = document.getElementById("group");
|
||||||
|
|
||||||
helloDev();
|
// Vide et cache tous les formulaires annexes au questionnaire :
|
||||||
|
|
||||||
const initialise = async () =>
|
|
||||||
{
|
|
||||||
try
|
|
||||||
{
|
|
||||||
const isConnected=await checkSession(["manager", "admin"], "/"+configTemplate.connectionPage, { message: needBeConnected, color:"error" }, window.location);
|
|
||||||
if(isConnected)
|
|
||||||
{
|
|
||||||
divMain.style.display="block";
|
|
||||||
if(!isEmpty(getLocaly("message")))
|
|
||||||
{
|
|
||||||
addElement(divMessage, "p", getLocaly("message", true).message, "", [getLocaly("message", true).color], "", false);
|
|
||||||
removeLocaly("message");
|
|
||||||
}
|
|
||||||
const user=getLocaly("user", true);
|
|
||||||
updateAccountLink(user.status, configTemplate);
|
|
||||||
|
|
||||||
// Initialisation du formulaire de recherche :
|
|
||||||
setAttributesToInputs(configQuestionnaires, formSearch);
|
|
||||||
|
|
||||||
// Initialise le formulaire permettant de mettre à jour les infos de base du questionnaire :
|
|
||||||
setAttributesToInputs(configQuestionnaires.Questionnaire, formQuestionnaire);
|
|
||||||
// Case de suppression cachée par défaut, car inutile pour formulaire de création
|
|
||||||
deleteCheckBox.style.display="none";
|
|
||||||
|
|
||||||
// Fonction vidant et cachant tous les formulaires annexes
|
|
||||||
const hideAllForms = () =>
|
const hideAllForms = () =>
|
||||||
{
|
{
|
||||||
empyAndHideForm(formLink);
|
empyAndHideForm(formLink);
|
||||||
|
@ -90,10 +65,25 @@ const initialise = async () =>
|
||||||
empyAndHideForm(formIllustration);
|
empyAndHideForm(formIllustration);
|
||||||
empyAndHideForm(formQuestion);
|
empyAndHideForm(formQuestion);
|
||||||
}
|
}
|
||||||
hideAllForms();
|
|
||||||
|
|
||||||
// Affiche les infos connues concernant les liens
|
// Affiche les données d'un lien dans le formulaire adhoc :
|
||||||
const showLinkInfos = (Links) =>
|
const showFormLinkInfos = (Link) =>
|
||||||
|
{
|
||||||
|
// On commence par cacher et vider tous les formulaires annexes
|
||||||
|
hideAllForms();
|
||||||
|
// Puis on affiche celui concerné
|
||||||
|
formLink.style.display="block";
|
||||||
|
// + Les contraintes de champ & valeurs par défaut :
|
||||||
|
setAttributesToInputs(configLinks.Link, formLink);
|
||||||
|
for(let data in Link)
|
||||||
|
{
|
||||||
|
if(formLink.elements[data]!==undefined)
|
||||||
|
formLink.elements[data].value=Link[data];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Affiche les infos connues concernant les liens du questionnaire affiché :
|
||||||
|
const showLinkInfos = (Links, token) =>
|
||||||
{
|
{
|
||||||
addElement(divLinks, "h2", introTitleForLink);
|
addElement(divLinks, "h2", introTitleForLink);
|
||||||
let listLinks="";
|
let listLinks="";
|
||||||
|
@ -101,7 +91,7 @@ const initialise = async () =>
|
||||||
listLinks+="<li><a href='"+Links[i].url+"' target='_blank'>"+Links[i].anchor+"</a><br><a href='#updateLink"+Links[i].id+"' id='#updateLink"+Links[i].id+"' class='button' >"+updateBtnTxt+"</a> <a href='#deleteLink"+Links[i].id+"' id='#deleteLink"+Links[i].id+"' class='button' >"+deleteBtnTxt+"</a></li>";
|
listLinks+="<li><a href='"+Links[i].url+"' target='_blank'>"+Links[i].anchor+"</a><br><a href='#updateLink"+Links[i].id+"' id='#updateLink"+Links[i].id+"' class='button' >"+updateBtnTxt+"</a> <a href='#deleteLink"+Links[i].id+"' id='#deleteLink"+Links[i].id+"' class='button' >"+deleteBtnTxt+"</a></li>";
|
||||||
if(listLinks==="")
|
if(listLinks==="")
|
||||||
listLinks="<li>"+introNoLink+"</li>";
|
listLinks="<li>"+introNoLink+"</li>";
|
||||||
addElement(divLinks, "ul", listLinks, "", [], "", false);// à intégrer d'abord dans le DOM pour pouvoir ajouter des Listeners ensuite
|
addElement(divLinks, "ul", listLinks, "", [], "", false);// ! à intégrer d'abord dans le DOM pour pouvoir ajouter les Listeners ensuite
|
||||||
for(let i in Links)
|
for(let i in Links)
|
||||||
{
|
{
|
||||||
document.getElementById("#updateLink"+Links[i].id).addEventListener("click", function(e)
|
document.getElementById("#updateLink"+Links[i].id).addEventListener("click", function(e)
|
||||||
|
@ -115,10 +105,10 @@ const initialise = async () =>
|
||||||
e.preventDefault();
|
e.preventDefault();
|
||||||
showFormLinkInfos(Links[i]);
|
showFormLinkInfos(Links[i]);
|
||||||
formLink.elements["deleteOk"].value=true;
|
formLink.elements["deleteOk"].value=true;
|
||||||
sendLinkForm();
|
sendLinkForm(token);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
if(config.nbLinksMax > Links.length || config.nbLinksMax===0)
|
if(Links.length < config.nbLinksMax || config.nbLinksMax === 0)
|
||||||
{
|
{
|
||||||
let newBtn="<a href='#newLink' id='newLink' class='button'>"+addLinkTxt+"</a>";
|
let newBtn="<a href='#newLink' id='newLink' class='button'>"+addLinkTxt+"</a>";
|
||||||
addElement(divLinks, "p", newBtn, "", [], { }, false);
|
addElement(divLinks, "p", newBtn, "", [], { }, false);
|
||||||
|
@ -134,8 +124,73 @@ const initialise = async () =>
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Affiche les infos connues concernant les illustrations
|
// Envoi des données d'un lien.
|
||||||
const showIllustrationInfos = (Illustrations) =>
|
const sendLinkForm = (token) =>
|
||||||
|
{
|
||||||
|
const divResponseLink=document.getElementById("responseLink");
|
||||||
|
divResponseLink.innerHTML="";
|
||||||
|
let datas=getDatasFromInputs(formLink);
|
||||||
|
const xhrLinkDatas = new XMLHttpRequest();
|
||||||
|
if(!isEmpty(datas.id) && (!isEmpty(datas.deleteOk)))
|
||||||
|
xhrLinkDatas.open("DELETE", apiUrl+configLinks.linksRoute+datas.id);
|
||||||
|
else if(!isEmpty(datas.id))
|
||||||
|
xhrLinkDatas.open("PUT", apiUrl+configLinks.linksRoute+datas.id);
|
||||||
|
else
|
||||||
|
xhrLinkDatas.open("POST", apiUrl+configLinks.linksRoute);
|
||||||
|
xhrLinkDatas.onreadystatechange = function()
|
||||||
|
{
|
||||||
|
if (this.readyState == XMLHttpRequest.DONE)
|
||||||
|
{
|
||||||
|
let response=JSON.parse(this.responseText);
|
||||||
|
if ((this.status === 200 || this.status === 201) && response.message!=undefined && response.questionnaire!=undefined)
|
||||||
|
{
|
||||||
|
if(Array.isArray(response.message))
|
||||||
|
response.message = response.message.join("<br>");
|
||||||
|
else
|
||||||
|
response.message = response.message;
|
||||||
|
showLinkInfos(response.questionnaire.Links, token);// le serveur retourne une version actualisée de la liste des liens
|
||||||
|
addElement(divLinks, "p", response.message, "", ["success"], "", false);
|
||||||
|
hideAllForms();
|
||||||
|
window.location.assign("#linksList");
|
||||||
|
showNextQuestionnaires(token);// peut avoir évolué suivant ce qui s'est passé
|
||||||
|
}
|
||||||
|
else if (response.errors)
|
||||||
|
{
|
||||||
|
if(Array.isArray(response.errors))
|
||||||
|
response.errors = response.errors.join("<br>");
|
||||||
|
else
|
||||||
|
response.errors = serverError;
|
||||||
|
addElement(divResponseLink, "p", response.errors, "", ["error"]);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
addElement(divResponseLink, "p", serverError, "", ["error"]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
xhrLinkDatas.setRequestHeader("Content-Type", "application/json");
|
||||||
|
xhrLinkDatas.setRequestHeader("Authorization", "Bearer "+token);
|
||||||
|
xhrLinkDatas.send(JSON.stringify(datas));
|
||||||
|
}
|
||||||
|
|
||||||
|
// Affiche les données d'une illustration dans le formulaire adhoc :
|
||||||
|
const showFormIllustrationInfos = (Illustration) =>
|
||||||
|
{
|
||||||
|
// On commence par cacher et vider tous les formulaires annexes
|
||||||
|
hideAllForms();
|
||||||
|
// Puis on affiche celui concerné
|
||||||
|
formIllustration.style.display="block";
|
||||||
|
// + Les contraintes de champ & valeurs par défaut
|
||||||
|
setAttributesToInputs(configIllustrations.Illustration, formIllustration);
|
||||||
|
// Mais le champ file n'est plus requis, quand un fichier existe déjà
|
||||||
|
formIllustration.elements["image"].removeAttribute("required");
|
||||||
|
for(let data in Illustration)
|
||||||
|
{
|
||||||
|
if(formIllustration.elements[data]!==undefined)
|
||||||
|
formIllustration.elements[data].value=Illustration[data];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Affiche les infos connues concernant les illustrations du questionnaire affiché :
|
||||||
|
const showIllustrationInfos = (Illustrations, token) =>
|
||||||
{
|
{
|
||||||
addElement(divIllustrations, "h2", introTitleForIllustration);
|
addElement(divIllustrations, "h2", introTitleForIllustration);
|
||||||
let listIllustrations="";
|
let listIllustrations="";
|
||||||
|
@ -143,7 +198,7 @@ const initialise = async () =>
|
||||||
listIllustrations+="<li><a href='"+configTemplate.illustrationDir+Illustrations[i].url+"' target='_blank'><img src='"+configTemplate.illustrationDir+Illustrations[i].url+"' alt='"+defaultAlt+"' style='max-height:150px'></a><br><a href='#updateIllustration"+Illustrations[i].id+"' id='#updateIllustration"+Illustrations[i].id+"' class='button'>"+updateBtnTxt+"</a> <a href='#deleteIllustration"+Illustrations[i].id+"' id='#deleteIllustration"+Illustrations[i].id+"' class='button'>"+deleteBtnTxt+"</a></li>";
|
listIllustrations+="<li><a href='"+configTemplate.illustrationDir+Illustrations[i].url+"' target='_blank'><img src='"+configTemplate.illustrationDir+Illustrations[i].url+"' alt='"+defaultAlt+"' style='max-height:150px'></a><br><a href='#updateIllustration"+Illustrations[i].id+"' id='#updateIllustration"+Illustrations[i].id+"' class='button'>"+updateBtnTxt+"</a> <a href='#deleteIllustration"+Illustrations[i].id+"' id='#deleteIllustration"+Illustrations[i].id+"' class='button'>"+deleteBtnTxt+"</a></li>";
|
||||||
if(listIllustrations === "")
|
if(listIllustrations === "")
|
||||||
listIllustrations="<li>"+introNoIllustration+"</li>";
|
listIllustrations="<li>"+introNoIllustration+"</li>";
|
||||||
addElement(divIllustrations, "ul", listIllustrations, "", [], "", false);// à intégrer d'abord dans le DOM pour pouvoir ajouter des Listeners ensuite
|
addElement(divIllustrations, "ul", listIllustrations, "", [], "", false);// ! à intégrer d'abord dans le DOM pour pouvoir ajouter les Listeners ensuite
|
||||||
for(let i in Illustrations)
|
for(let i in Illustrations)
|
||||||
{
|
{
|
||||||
document.getElementById("#updateIllustration"+Illustrations[i].id).addEventListener("click", function(e)
|
document.getElementById("#updateIllustration"+Illustrations[i].id).addEventListener("click", function(e)
|
||||||
|
@ -157,10 +212,10 @@ const initialise = async () =>
|
||||||
e.preventDefault();
|
e.preventDefault();
|
||||||
showFormIllustrationInfos(Illustrations[i]);
|
showFormIllustrationInfos(Illustrations[i]);
|
||||||
formIllustration.elements["deleteOk"].value=true;
|
formIllustration.elements["deleteOk"].value=true;
|
||||||
sendIllustrationForm();
|
sendIllustrationForm(token);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
if(config.nbIllustrationsMax > Illustrations.length || config.nbIllustrationsMax===0)
|
if(Illustrations.length < config.nbIllustrationsMax || config.nbIllustrationsMax === 0)
|
||||||
{
|
{
|
||||||
let newBtn="<a href='#newIllustration' id='newIllustration' class='button'>"+addIllustrationTxt+"</a>";
|
let newBtn="<a href='#newIllustration' id='newIllustration' class='button'>"+addIllustrationTxt+"</a>";
|
||||||
addElement(divIllustrations, "p", newBtn, "", [], { }, false);
|
addElement(divIllustrations, "p", newBtn, "", [], { }, false);
|
||||||
|
@ -176,8 +231,81 @@ const initialise = async () =>
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Affiche les infos connues concernant les questions
|
// Envoi des données d'une illustration.
|
||||||
const showQuestionInfos = (Questions) =>
|
const sendIllustrationForm = (token) =>
|
||||||
|
{
|
||||||
|
const divResponseIllustration=document.getElementById("responseIllustration");
|
||||||
|
divResponseIllustration.innerHTML="";
|
||||||
|
let datas=getDatasFromInputs(formIllustration);
|
||||||
|
let datasWithFiles=new FormData(formIllustration); // car il me manque les informations du fichier avec la fonction getDatasFromInputs
|
||||||
|
const xhrIllustrationDatas = new XMLHttpRequest();
|
||||||
|
if(!isEmpty(datas.id) && (!isEmpty(datas.deleteOk)))
|
||||||
|
xhrIllustrationDatas.open("DELETE", apiUrl+configIllustrations.illustrationsRoute+datas.id);
|
||||||
|
else if(!isEmpty(datas.id))
|
||||||
|
xhrIllustrationDatas.open("PUT", apiUrl+configIllustrations.illustrationsRoute+datas.id);
|
||||||
|
else
|
||||||
|
xhrIllustrationDatas.open("POST", apiUrl+configIllustrations.illustrationsRoute);
|
||||||
|
xhrIllustrationDatas.onreadystatechange = function()
|
||||||
|
{
|
||||||
|
if (this.readyState == XMLHttpRequest.DONE)
|
||||||
|
{
|
||||||
|
let response=JSON.parse(this.responseText);
|
||||||
|
if ((this.status === 200 || this.status === 201) && response.message!=undefined && response.questionnaire!=undefined)
|
||||||
|
{
|
||||||
|
if(Array.isArray(response.message))
|
||||||
|
response.message = response.message.join("<br>");
|
||||||
|
else
|
||||||
|
response.message = response.message;
|
||||||
|
showIllustrationInfos(response.questionnaire.Illustrations, token);// le serveur retourne une version actualisée de la liste des liens
|
||||||
|
addElement(divIllustrations, "p", response.message, "", ["success"], "", false);
|
||||||
|
hideAllForms();
|
||||||
|
window.location.assign("#illustrationsList");
|
||||||
|
showNextQuestionnaires(token);// peut avoir évolué suivant ce qui s'est passé
|
||||||
|
}
|
||||||
|
else if (response.errors)
|
||||||
|
{
|
||||||
|
if(Array.isArray(response.errors))
|
||||||
|
response.errors = response.errors.join("<br>");
|
||||||
|
else
|
||||||
|
response.errors = serverError;
|
||||||
|
addElement(divResponseIllustration, "p", response.errors, "", ["error"]);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
addElement(divResponseIllustration, "p", serverError, "", ["error"]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
xhrIllustrationDatas.setRequestHeader("Authorization", "Bearer "+token);
|
||||||
|
xhrIllustrationDatas.send(datasWithFiles);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Affiche les données d'une question + ses réponses possibles dans le formulaire adhoc
|
||||||
|
const showFormQuestionInfos = (Question) =>
|
||||||
|
{
|
||||||
|
// On commence par cacher et vider tous les formulaires annexes
|
||||||
|
hideAllForms();
|
||||||
|
// Puis on affiche celui concerné
|
||||||
|
formQuestion.style.display="block";
|
||||||
|
for(let data in Question.Question)
|
||||||
|
{
|
||||||
|
if(formQuestion.elements[data]!==undefined)
|
||||||
|
formQuestion.elements[data].value=Question.Question[data];
|
||||||
|
}
|
||||||
|
// + Les contraintes de champ & les valeurs par défaut
|
||||||
|
setAttributesToInputs(configQuestionnaires.Question, formQuestion);
|
||||||
|
for(let data in Question.Choices)
|
||||||
|
{
|
||||||
|
if(formQuestion.elements["choiceText"+data]!==undefined)
|
||||||
|
{
|
||||||
|
formQuestion.elements["choiceText"+data].value=Question.Choices[data].text;
|
||||||
|
if(Question.Choices[data].isCorrect==true)
|
||||||
|
formQuestion.elements["choiceIsCorrect"+data].checked=true;
|
||||||
|
formQuestion.elements["idChoice"+data].value=Question.Choices[data].id;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Affiche les infos des questions du quiz affiché :
|
||||||
|
const showQuestionInfos = (Questions, token) =>
|
||||||
{
|
{
|
||||||
addElement(divQuestions, "h2", introTitleForQuestion);
|
addElement(divQuestions, "h2", introTitleForQuestion);
|
||||||
let listQuestions="";
|
let listQuestions="";
|
||||||
|
@ -185,24 +313,24 @@ const initialise = async () =>
|
||||||
listQuestions+="<li>"+Questions[i].Question.rank+" - "+Questions[i].Question.text+"<br><a href='#updateQuestion"+Questions[i].Question.id+"' id='#updateQuestion"+Questions[i].Question.id+"' class='button'>"+updateBtnTxt+"</a> <a href='#deleteQuestion"+Questions[i].Question.id+"' id='#deleteQuestion"+Questions[i].Question.id+"' class='button'>"+deleteBtnTxt+"</a></li>";
|
listQuestions+="<li>"+Questions[i].Question.rank+" - "+Questions[i].Question.text+"<br><a href='#updateQuestion"+Questions[i].Question.id+"' id='#updateQuestion"+Questions[i].Question.id+"' class='button'>"+updateBtnTxt+"</a> <a href='#deleteQuestion"+Questions[i].Question.id+"' id='#deleteQuestion"+Questions[i].Question.id+"' class='button'>"+deleteBtnTxt+"</a></li>";
|
||||||
if(listQuestions === "")
|
if(listQuestions === "")
|
||||||
listQuestions="<li>"+introNoQuestion+"</li>";
|
listQuestions="<li>"+introNoQuestion+"</li>";
|
||||||
addElement(divQuestions, "ul", listQuestions, "", [], "", false);// à intégrer d'abord dans le DOM pour pouvoir ajouter des Listeners ensuite
|
addElement(divQuestions, "ul", listQuestions, "", [], "", false);// à intégrer d'abord dans le DOM pour pouvoir ajouter les Listeners ensuite
|
||||||
for(let i in Questions)
|
for(let i in Questions)
|
||||||
{
|
{
|
||||||
document.getElementById("#updateQuestion"+Questions[i].Question.id).addEventListener("click", function(e)
|
document.getElementById("#updateQuestion"+Questions[i].Question.id).addEventListener("click", function(e)
|
||||||
{
|
{
|
||||||
e.preventDefault();
|
e.preventDefault();
|
||||||
showFormQuestionInfos(Questions[i]);
|
showFormQuestionInfos(Questions[i]);
|
||||||
window.location.assign("#links");
|
window.location.assign("#questions");
|
||||||
});
|
});
|
||||||
document.getElementById("#deleteQuestion"+Questions[i].Question.id).addEventListener("click", function(e)
|
document.getElementById("#deleteQuestion"+Questions[i].Question.id).addEventListener("click", function(e)
|
||||||
{
|
{
|
||||||
e.preventDefault();
|
e.preventDefault();
|
||||||
showFormQuestionInfos(Questions[i]);
|
showFormQuestionInfos(Questions[i]);
|
||||||
formQuestion.elements["deleteOk"].value=true;
|
formQuestion.elements["deleteOk"].value=true;
|
||||||
sendQuestionForm();
|
sendQuestionForm(token);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
if(config.nbQuestionsMax > Questions.length || config.nbQuestionsMax===0)
|
if(Questions.length < config.nbQuestionsMax || config.nbQuestionsMax === 0)
|
||||||
{
|
{
|
||||||
let newBtn="<a href='#newQuestion' id='newQuestion' class='button'>"+addQuestionTxt+"</a>";
|
let newBtn="<a href='#newQuestion' id='newQuestion' class='button'>"+addQuestionTxt+"</a>";
|
||||||
addElement(divQuestions, "p", newBtn, "", [], { }, false);
|
addElement(divQuestions, "p", newBtn, "", [], { }, false);
|
||||||
|
@ -219,68 +347,55 @@ const initialise = async () =>
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Fonction affichant les infos d'un lien dans le formulaire adhoc
|
// Envoi des données d'une question et de ses réponse. Peut être généré par le bouton submit ou par le lien "supprimer".
|
||||||
const showFormLinkInfos = (Link) =>
|
const sendQuestionForm = (token) =>
|
||||||
{
|
{
|
||||||
// on commence par cacher et vider tous les formulaires annexes
|
const divResponseQuestion=document.getElementById("responseQuestion");
|
||||||
|
divResponseQuestion.innerHTML="";
|
||||||
|
let datas=getDatasFromInputs(formQuestion);
|
||||||
|
const xhrQuestionDatas = new XMLHttpRequest();
|
||||||
|
if(!isEmpty(datas.id) && (!isEmpty(datas.deleteOk)))
|
||||||
|
xhrQuestionDatas.open("DELETE", apiUrl+configQuestionnaires.questionsRoute+datas.id);
|
||||||
|
else if(!isEmpty(datas.id))
|
||||||
|
xhrQuestionDatas.open("PUT", apiUrl+configQuestionnaires.questionsRoute+datas.id);// mise à jour d'une question
|
||||||
|
else
|
||||||
|
xhrQuestionDatas.open("POST", apiUrl+configQuestionnaires.questionsRoute);// nouvelle question
|
||||||
|
xhrQuestionDatas.onreadystatechange = function()
|
||||||
|
{
|
||||||
|
if (this.readyState == XMLHttpRequest.DONE)
|
||||||
|
{
|
||||||
|
let response=JSON.parse(this.responseText);
|
||||||
|
if ((this.status === 200 || this.status === 201) && response.message!=undefined && response.questionnaire!=undefined)
|
||||||
|
{
|
||||||
|
if(Array.isArray(response.message))
|
||||||
|
response.message = response.message.join("<br>");
|
||||||
|
else
|
||||||
|
response.message = response.message;
|
||||||
|
showQuestionInfos(response.questionnaire.Questions, token);// le serveur me retourne une version actualisée de la liste des questions
|
||||||
|
addElement(divQuestions, "p", response.message, "", ["success"], "", false);
|
||||||
hideAllForms();
|
hideAllForms();
|
||||||
// puis on affiche celui dont l'id est passé avec ses données connues
|
window.location.assign("#questionsList");
|
||||||
formLink.style.display="block";
|
showNextQuestionnaires(token);// car peut avoir évolué suivant ce qui s'est passé
|
||||||
// + les contraintes de champ & valeurs par défaut :
|
|
||||||
setAttributesToInputs(configLinks, formLink);
|
|
||||||
for(let data in Link)
|
|
||||||
{
|
|
||||||
if(formLink.elements[data]!==undefined)
|
|
||||||
formLink.elements[data].value=Link[data];
|
|
||||||
}
|
}
|
||||||
|
else if (response.errors)
|
||||||
|
{
|
||||||
|
if(Array.isArray(response.errors))
|
||||||
|
response.errors = response.errors.join("<br>");
|
||||||
|
else
|
||||||
|
response.errors = serverError;
|
||||||
|
addElement(divResponseQuestion, "p", response.errors, "", ["error"]);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
addElement(divResponseQuestion, "p", serverError, "", ["error"]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
xhrQuestionDatas.setRequestHeader("Content-Type", "application/json");
|
||||||
|
xhrQuestionDatas.setRequestHeader("Authorization", "Bearer "+token);
|
||||||
|
xhrQuestionDatas.send(JSON.stringify(datas));
|
||||||
}
|
}
|
||||||
|
|
||||||
// Fonction affichant les infos d'une illustration dans le formulaire adhoc
|
// Affichant les infos connues concernant un questionnaire et ses dépendances
|
||||||
const showFormIllustrationInfos = (Illustration) =>
|
const showFormQuestionnaireInfos = (id, token) =>
|
||||||
{
|
|
||||||
// on commence par cacher et vider tous les formulaires annexes
|
|
||||||
hideAllForms();
|
|
||||||
// puis on affiche celui dont l'id est passé avec ses données connues
|
|
||||||
formIllustration.style.display="block";
|
|
||||||
// + les contraintes de champ & valeurs par défaut :
|
|
||||||
setAttributesToInputs(configIllustrations, formIllustration);
|
|
||||||
// !! le champ file qui n'est plus requis, quand un fichier existe déjà !
|
|
||||||
formIllustration.elements["image"].removeAttribute("required");
|
|
||||||
for(let data in Illustration)
|
|
||||||
{
|
|
||||||
if(formIllustration.elements[data]!==undefined)
|
|
||||||
formIllustration.elements[data].value=Illustration[data];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Fonction affichant les infos d'une question + ses réponses possibles dans le formulaire adhoc
|
|
||||||
const showFormQuestionInfos = (Question) =>
|
|
||||||
{
|
|
||||||
// on commence par cacher et vider tous les formulaires annexes
|
|
||||||
hideAllForms();
|
|
||||||
// puis on affiche celui dont l'id est passé avec ses données connues
|
|
||||||
formQuestion.style.display="block";
|
|
||||||
for(let data in Question.Question)
|
|
||||||
{
|
|
||||||
if(formQuestion.elements[data]!==undefined)
|
|
||||||
formQuestion.elements[data].value=Question.Question[data];
|
|
||||||
}
|
|
||||||
// + les contraintes de champ & valeurs par défaut :
|
|
||||||
setAttributesToInputs(configQuestionnaires.Question, formQuestion);
|
|
||||||
for(let data in Question.Choices)
|
|
||||||
{
|
|
||||||
if(formQuestion.elements["choiceText"+data]!==undefined)
|
|
||||||
{
|
|
||||||
formQuestion.elements["choiceText"+data].value=Question.Choices[data].text;
|
|
||||||
if(Question.Choices[data].isCorrect==true)
|
|
||||||
formQuestion.elements["choiceIsCorrect"+data].checked=true;
|
|
||||||
formQuestion.elements["idChoice"+data].value=Question.Choices[data].id;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Fonction affichant les infos connues concernant un questionnaire et ses dépendances
|
|
||||||
const showFormQuestionnaireInfos = (id) =>
|
|
||||||
{
|
{
|
||||||
const xhrGetInfos = new XMLHttpRequest();
|
const xhrGetInfos = new XMLHttpRequest();
|
||||||
xhrGetInfos.open("GET", apiUrl+configQuestionnaires.questionnaireRoutes+configQuestionnaires.getQuestionnaireRoutes+"/"+id);
|
xhrGetInfos.open("GET", apiUrl+configQuestionnaires.questionnaireRoutes+configQuestionnaires.getQuestionnaireRoutes+"/"+id);
|
||||||
|
@ -303,7 +418,7 @@ const initialise = async () =>
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
deleteCheckBox.style.display="block";
|
deleteCheckBox.style.display="block";
|
||||||
}
|
}// ajouter gestion des retours en erreur ?
|
||||||
if(response.Tags != undefined)
|
if(response.Tags != undefined)
|
||||||
{
|
{
|
||||||
let classification="";
|
let classification="";
|
||||||
|
@ -320,18 +435,18 @@ const initialise = async () =>
|
||||||
divQuestions.style.display="block";
|
divQuestions.style.display="block";
|
||||||
divIllustrations.style.display="block";
|
divIllustrations.style.display="block";
|
||||||
if(response.Links != undefined)
|
if(response.Links != undefined)
|
||||||
showLinkInfos(response.Links);
|
showLinkInfos(response.Links, token);
|
||||||
if(response.Questions != undefined)
|
if(response.Questions != undefined)
|
||||||
showQuestionInfos(response.Questions);
|
showQuestionInfos(response.Questions, token);
|
||||||
if(response.Illustrations != undefined)
|
if(response.Illustrations != undefined)
|
||||||
showIllustrationInfos(response.Illustrations);
|
showIllustrationInfos(response.Illustrations, token);
|
||||||
helpPublishingAt.style.display="none";// info utile pour "placer" un nouveau quiz
|
helpPublishingAt.style.display="none";// info uniquement utile pour "placer" un nouveau quiz
|
||||||
// à revoir : remplacer lien pour un bouton + reset complet du formulaire, y compris champs hidden :
|
// à revoir : remplacer lien pour un bouton + reset complet du formulaire, y compris champs hidden :
|
||||||
btnNewQuestionnaire.style.display="block";
|
btnNewQuestionnaire.style.display="block";
|
||||||
btnNewQuestionnaire.setAttribute("href", configTemplate.questionnairesManagementPage);
|
btnNewQuestionnaire.setAttribute("href", configTemplate.questionnairesManagementPage);
|
||||||
btnPreviewQuestionnaire.style.display="block";
|
btnPreviewQuestionnaire.style.display="block";
|
||||||
if(response.Questionnaire["isPublished"] === false)
|
if(response.Questionnaire["isPublished"] === false)
|
||||||
btnPreviewQuestionnaire.setAttribute("href", apiUrl+configQuestionnaires.questionnaireRoutes+configQuestionnaires.previewQuestionnaireRoutes+"/"+id+"/"+user.token);
|
btnPreviewQuestionnaire.setAttribute("href", apiUrl+configQuestionnaires.questionnaireRoutes+configQuestionnaires.previewQuestionnaireRoutes+"/"+id+"/"+token);
|
||||||
else
|
else
|
||||||
btnPreviewQuestionnaire.setAttribute("href", config.siteUrl+configQuestionnaires.publishedQuestionnaireRoutes+response.Questionnaire["slug"]+".html");
|
btnPreviewQuestionnaire.setAttribute("href", config.siteUrl+configQuestionnaires.publishedQuestionnaireRoutes+response.Questionnaire["slug"]+".html");
|
||||||
}
|
}
|
||||||
|
@ -339,53 +454,8 @@ const initialise = async () =>
|
||||||
xhrGetInfos.send();
|
xhrGetInfos.send();
|
||||||
}
|
}
|
||||||
|
|
||||||
// Si un id est passé par l'url, on essaye d'afficher le questionnaire :
|
// Affiche les questionnaires bientôt publiés.
|
||||||
let urlDatas=getUrlParams();
|
const showNextQuestionnaires = (token) =>
|
||||||
if(urlDatas && urlDatas.id!==undefined)
|
|
||||||
showFormQuestionnaireInfos(urlDatas.id);
|
|
||||||
|
|
||||||
// Traitement du lancement d'une recherche
|
|
||||||
formSearch.addEventListener("submit", function(e)
|
|
||||||
{
|
|
||||||
e.preventDefault();
|
|
||||||
let datas=getDatasFromInputs(formSearch);
|
|
||||||
const xhrSearch = new XMLHttpRequest();
|
|
||||||
xhrSearch.open("POST", apiUrl+configQuestionnaires.questionnaireRoutes+configQuestionnaires.searchAdminQuestionnairesRoute);
|
|
||||||
xhrSearch.onreadystatechange = function()
|
|
||||||
{
|
|
||||||
if (this.readyState == XMLHttpRequest.DONE)
|
|
||||||
{
|
|
||||||
let response=JSON.parse(this.responseText);
|
|
||||||
if (this.status === 200 && Array.isArray(response))
|
|
||||||
{
|
|
||||||
if(response.length===0)
|
|
||||||
addElement(divSearchResult, "p", searchQuestionnaireWithNoResult, "", ["info"]);
|
|
||||||
else
|
|
||||||
{
|
|
||||||
let selectHTML="<option value=''></option>";
|
|
||||||
for(let i in response)
|
|
||||||
selectHTML+="<option value='"+response[i].id+"'>"+response[i].title+"</option>";
|
|
||||||
addElement(divSearchResult, "select", selectHTML, "selectSearch");
|
|
||||||
const searchSelect=document.getElementById("selectSearch");
|
|
||||||
searchSelect.addEventListener("change", function()
|
|
||||||
{
|
|
||||||
if(searchSelect.value!=="")
|
|
||||||
showFormQuestionnaireInfos(searchSelect.value);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
addElement(divSearchResult, "p", serverError, "", ["error"]);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
xhrSearch.setRequestHeader("Content-Type", "application/json");
|
|
||||||
xhrSearch.setRequestHeader("Authorization", "Bearer "+user.token);
|
|
||||||
if(datas)
|
|
||||||
xhrSearch.send(JSON.stringify(datas));
|
|
||||||
});
|
|
||||||
|
|
||||||
// Les questionnaires bientôt publiés. Dans une fonction car devant être rechargé.
|
|
||||||
const showNextQuestionnaires = () =>
|
|
||||||
{
|
{
|
||||||
const xhrNextQuestionnaires = new XMLHttpRequest();
|
const xhrNextQuestionnaires = new XMLHttpRequest();
|
||||||
xhrNextQuestionnaires.open("GET", apiUrl+configQuestionnaires.questionnaireRoutes+configQuestionnaires.getListNextQuestionnaires);
|
xhrNextQuestionnaires.open("GET", apiUrl+configQuestionnaires.questionnaireRoutes+configQuestionnaires.getListNextQuestionnaires);
|
||||||
|
@ -414,19 +484,86 @@ const initialise = async () =>
|
||||||
document.getElementById("questionnaire_"+response.questionnaires[i].id).addEventListener("click", function(e)
|
document.getElementById("questionnaire_"+response.questionnaires[i].id).addEventListener("click", function(e)
|
||||||
{
|
{
|
||||||
e.preventDefault();
|
e.preventDefault();
|
||||||
showFormQuestionnaireInfos(e.target.id.split("_")[1]);
|
showFormQuestionnaireInfos(e.target.id.split("_")[1], user.token);
|
||||||
window.location.assign("#questionnaires");
|
window.location.assign("#questionnaires");
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
}// ajouter gestion erreurs reçues du serveur ?
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
xhrNextQuestionnaires.setRequestHeader("Authorization", "Bearer "+token);
|
||||||
xhrNextQuestionnaires.setRequestHeader("Authorization", "Bearer "+user.token);
|
|
||||||
xhrNextQuestionnaires.send();
|
xhrNextQuestionnaires.send();
|
||||||
}
|
}
|
||||||
showNextQuestionnaires();
|
|
||||||
|
|
||||||
// Aide saisie classement du quiz
|
const initialise = async () =>
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
const isConnected=await checkSession(["manager", "admin"], "/"+configTemplate.connectionPage, { message: needBeConnected, color:"error" }, window.location);
|
||||||
|
if(isConnected)
|
||||||
|
{
|
||||||
|
divMain.style.display="block";
|
||||||
|
if(!isEmpty(getLocaly("message")))
|
||||||
|
{
|
||||||
|
addElement(divMessage, "p", getLocaly("message", true).message, "", [getLocaly("message", true).color], "", false);
|
||||||
|
removeLocaly("message");
|
||||||
|
}
|
||||||
|
const user=getLocaly("user", true);
|
||||||
|
// Mise à jour du lien "compte" du header :
|
||||||
|
updateAccountLink(user.status, configTemplate);
|
||||||
|
// Initialisation des formulaires :
|
||||||
|
setAttributesToInputs(configQuestionnaires, formSearch);
|
||||||
|
setAttributesToInputs(configQuestionnaires.Questionnaire, formQuestionnaire);
|
||||||
|
// Vide/cache les éléments inutiles en mode création :
|
||||||
|
btnPreviewQuestionnaire.style.display="none";
|
||||||
|
deleteCheckBox.style.display="none";
|
||||||
|
hideAllForms();
|
||||||
|
// Si un id est passé par l'url, on essaye d'afficher le questionnaire :
|
||||||
|
let urlDatas=getUrlParams();
|
||||||
|
if(urlDatas && urlDatas.id!==undefined)
|
||||||
|
showFormQuestionnaireInfos(urlDatas.id, user.token);
|
||||||
|
// Lancement d'une recherche :
|
||||||
|
formSearch.addEventListener("submit", function(e)
|
||||||
|
{
|
||||||
|
e.preventDefault();
|
||||||
|
let datas=getDatasFromInputs(formSearch);
|
||||||
|
const xhrSearch = new XMLHttpRequest();
|
||||||
|
xhrSearch.open("POST", apiUrl+configQuestionnaires.questionnaireRoutes+configQuestionnaires.searchAdminQuestionnairesRoute);
|
||||||
|
xhrSearch.onreadystatechange = function()
|
||||||
|
{
|
||||||
|
if (this.readyState == XMLHttpRequest.DONE)
|
||||||
|
{
|
||||||
|
let response=JSON.parse(this.responseText);
|
||||||
|
if (this.status === 200 && Array.isArray(response))
|
||||||
|
{
|
||||||
|
if(response.length===0)
|
||||||
|
addElement(divSearchResult, "p", searchQuestionnaireWithNoResult, "", ["info"]);
|
||||||
|
else
|
||||||
|
{
|
||||||
|
let selectHTML="<option value=''></option>";
|
||||||
|
for(let i in response)
|
||||||
|
selectHTML+="<option value='"+response[i].id+"'>"+response[i].title+"</option>";
|
||||||
|
addElement(divSearchResult, "select", selectHTML, "selectSearch");
|
||||||
|
const searchSelect=document.getElementById("selectSearch");
|
||||||
|
searchSelect.addEventListener("change", function()
|
||||||
|
{
|
||||||
|
if(searchSelect.value!=="")
|
||||||
|
showFormQuestionnaireInfos(searchSelect.value, user.token);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
addElement(divSearchResult, "p", serverError, "", ["error"]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
xhrSearch.setRequestHeader("Content-Type", "application/json");
|
||||||
|
xhrSearch.setRequestHeader("Authorization", "Bearer "+user.token);
|
||||||
|
if(datas)
|
||||||
|
xhrSearch.send(JSON.stringify(datas));
|
||||||
|
});
|
||||||
|
showNextQuestionnaires(user.token);
|
||||||
|
|
||||||
|
// Aide à la saisie pour le classement du quiz
|
||||||
inputClassification.addEventListener("input", function(e)
|
inputClassification.addEventListener("input", function(e)
|
||||||
{
|
{
|
||||||
divResponse.innerHTML="";
|
divResponse.innerHTML="";
|
||||||
|
@ -456,6 +593,7 @@ const initialise = async () =>
|
||||||
tags[0]=e.target.innerHTML;
|
tags[0]=e.target.innerHTML;
|
||||||
tags.reverse();
|
tags.reverse();
|
||||||
inputClassification.value=tags.join(",");
|
inputClassification.value=tags.join(",");
|
||||||
|
helpClassification.innerHTML="";
|
||||||
});
|
});
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -490,7 +628,7 @@ const initialise = async () =>
|
||||||
{
|
{
|
||||||
addElement(divResponse, "p", addOkMessage, "", ["success"]);
|
addElement(divResponse, "p", addOkMessage, "", ["success"]);
|
||||||
datas.id=response.id;
|
datas.id=response.id;
|
||||||
showNextQuestionnaires();// peut avoir évolué suivant ce qui s'est passé
|
showNextQuestionnaires(user.token);// peut avoir évolué suivant ce qui s'est passé
|
||||||
}
|
}
|
||||||
else if (this.status === 200 && response.message!=undefined)
|
else if (this.status === 200 && response.message!=undefined)
|
||||||
{
|
{
|
||||||
|
@ -499,7 +637,7 @@ const initialise = async () =>
|
||||||
else
|
else
|
||||||
response.message = response.message;
|
response.message = response.message;
|
||||||
addElement(divResponse, "p", response.message, "", ["success"]);
|
addElement(divResponse, "p", response.message, "", ["success"]);
|
||||||
showNextQuestionnaires();// peut avoir évolué suivant ce qui s'est passé
|
showNextQuestionnaires(user.token);// peut avoir évolué suivant ce qui s'est passé
|
||||||
}
|
}
|
||||||
else if (response.errors)
|
else if (response.errors)
|
||||||
{
|
{
|
||||||
|
@ -512,9 +650,14 @@ const initialise = async () =>
|
||||||
else
|
else
|
||||||
addElement(divResponse, "p", serverError, "", ["error"]);
|
addElement(divResponse, "p", serverError, "", ["error"]);
|
||||||
if(datas.deleteOk===undefined)
|
if(datas.deleteOk===undefined)
|
||||||
showFormQuestionnaireInfos(datas.id);
|
showFormQuestionnaireInfos(datas.id, user.token);
|
||||||
else
|
else
|
||||||
|
{
|
||||||
formQuestionnaire.reset();
|
formQuestionnaire.reset();
|
||||||
|
divLinks.innerHTML="";
|
||||||
|
divIllustrations.innerHTML="";
|
||||||
|
divQuestions.innerHTML="";
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
xhrQuestionnaireDatas.setRequestHeader("Content-Type", "application/json");
|
xhrQuestionnaireDatas.setRequestHeader("Content-Type", "application/json");
|
||||||
|
@ -522,161 +665,20 @@ const initialise = async () =>
|
||||||
if(datas)
|
if(datas)
|
||||||
xhrQuestionnaireDatas.send(JSON.stringify(datas));
|
xhrQuestionnaireDatas.send(JSON.stringify(datas));
|
||||||
});
|
});
|
||||||
|
|
||||||
// L'envoi des données d'un lien peut être généré par le bouton formulaire ou par le lien supprimer
|
|
||||||
const sendLinkForm = () =>
|
|
||||||
{
|
|
||||||
const divResponseLink=document.getElementById("responseLink");
|
|
||||||
divResponseLink.innerHTML="";
|
|
||||||
let datas=getDatasFromInputs(formLink);
|
|
||||||
const xhrLinkDatas = new XMLHttpRequest();
|
|
||||||
if(!isEmpty(datas.id) && (!isEmpty(datas.deleteOk)))
|
|
||||||
xhrLinkDatas.open("DELETE", apiUrl+configLinks.linksRoute+datas.id);
|
|
||||||
else if(!isEmpty(datas.id))
|
|
||||||
xhrLinkDatas.open("PUT", apiUrl+configLinks.linksRoute+datas.id);
|
|
||||||
else
|
|
||||||
xhrLinkDatas.open("POST", apiUrl+configLinks.linksRoute);
|
|
||||||
xhrLinkDatas.onreadystatechange = function()
|
|
||||||
{
|
|
||||||
if (this.readyState == XMLHttpRequest.DONE)
|
|
||||||
{
|
|
||||||
let response=JSON.parse(this.responseText);
|
|
||||||
if ((this.status === 200 || this.status === 201) && response.message!=undefined && response.questionnaire!=undefined)
|
|
||||||
{
|
|
||||||
if(Array.isArray(response.message))
|
|
||||||
response.message = response.message.join("<br>");
|
|
||||||
else
|
|
||||||
response.message = response.message;
|
|
||||||
showLinkInfos(response.questionnaire.Links);// le serveur me retourne une version actualisée de la liste des liens
|
|
||||||
addElement(divLinks, "p", response.message, "", ["success"], "", false);
|
|
||||||
hideAllForms();
|
|
||||||
window.location.assign("#linksList");
|
|
||||||
showNextQuestionnaires();// peut avoir évolué suivant ce qui s'est passé
|
|
||||||
}
|
|
||||||
else if (response.errors)
|
|
||||||
{
|
|
||||||
if(Array.isArray(response.errors))
|
|
||||||
response.errors = response.errors.join("<br>");
|
|
||||||
else
|
|
||||||
response.errors = serverError;
|
|
||||||
addElement(divResponseLink, "p", response.errors, "", ["error"]);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
addElement(divResponseLink, "p", serverError, "", ["error"]);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
xhrLinkDatas.setRequestHeader("Content-Type", "application/json");
|
|
||||||
xhrLinkDatas.setRequestHeader("Authorization", "Bearer "+user.token);
|
|
||||||
xhrLinkDatas.send(JSON.stringify(datas));
|
|
||||||
}
|
|
||||||
formLink.addEventListener("submit", function(e)
|
formLink.addEventListener("submit", function(e)
|
||||||
{
|
{
|
||||||
e.preventDefault();
|
e.preventDefault();
|
||||||
sendLinkForm();
|
sendLinkForm(user.token);
|
||||||
});
|
});
|
||||||
|
|
||||||
// L'envoi des données d'une illustration peut être généré par le bouton formulaire ou par le lien supprimer
|
|
||||||
const sendIllustrationForm = () =>
|
|
||||||
{
|
|
||||||
const divResponseIllustration=document.getElementById("responseIllustration");
|
|
||||||
divResponseIllustration.innerHTML="";
|
|
||||||
let datas=getDatasFromInputs(formIllustration);
|
|
||||||
let datasWithFiles=new FormData(formIllustration); // il me manque les informations du fichier avec ma fonction getDatasFromInputs
|
|
||||||
const xhrIllustrationDatas = new XMLHttpRequest();
|
|
||||||
if(!isEmpty(datas.id) && (!isEmpty(datas.deleteOk)))
|
|
||||||
xhrIllustrationDatas.open("DELETE", apiUrl+configIllustrations.illustrationsRoute+datas.id);
|
|
||||||
else if(!isEmpty(datas.id))
|
|
||||||
xhrIllustrationDatas.open("PUT", apiUrl+configIllustrations.illustrationsRoute+datas.id);
|
|
||||||
else
|
|
||||||
xhrIllustrationDatas.open("POST", apiUrl+configIllustrations.illustrationsRoute);
|
|
||||||
xhrIllustrationDatas.onreadystatechange = function()
|
|
||||||
{
|
|
||||||
if (this.readyState == XMLHttpRequest.DONE)
|
|
||||||
{
|
|
||||||
let response=JSON.parse(this.responseText);
|
|
||||||
if ((this.status === 200 || this.status === 201) && response.message!=undefined && response.questionnaire!=undefined)
|
|
||||||
{
|
|
||||||
if(Array.isArray(response.message))
|
|
||||||
response.message = response.message.join("<br>");
|
|
||||||
else
|
|
||||||
response.message = response.message;
|
|
||||||
showIllustrationInfos(response.questionnaire.Illustrations);// le serveur me retourne une version actualisée de la liste des liens
|
|
||||||
addElement(divIllustrations, "p", response.message, "", ["success"], "", false);
|
|
||||||
hideAllForms();
|
|
||||||
window.location.assign("#illustrationsList");
|
|
||||||
showNextQuestionnaires();// peut avoir évolué suivant ce qui s'est passé
|
|
||||||
}
|
|
||||||
else if (response.errors)
|
|
||||||
{
|
|
||||||
if(Array.isArray(response.errors))
|
|
||||||
response.errors = response.errors.join("<br>");
|
|
||||||
else
|
|
||||||
response.errors = serverError;
|
|
||||||
addElement(divResponseIllustration, "p", response.errors, "", ["error"]);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
addElement(divResponseIllustration, "p", serverError, "", ["error"]);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
xhrIllustrationDatas.setRequestHeader("Authorization", "Bearer "+user.token);
|
|
||||||
xhrIllustrationDatas.send(datasWithFiles);
|
|
||||||
}
|
|
||||||
formIllustration.addEventListener("submit", function(e)
|
formIllustration.addEventListener("submit", function(e)
|
||||||
{
|
{
|
||||||
e.preventDefault();
|
e.preventDefault();
|
||||||
sendIllustrationForm();
|
sendIllustrationForm(user.token);
|
||||||
});
|
});
|
||||||
|
|
||||||
// L'envoi des données d'une question et de ses réponse qui peut être généré par le bouton submit ou par le lien supprimer
|
|
||||||
const sendQuestionForm = () =>
|
|
||||||
{
|
|
||||||
const divResponseQuestion=document.getElementById("responseQuestion");
|
|
||||||
divResponseQuestion.innerHTML="";
|
|
||||||
let datas=getDatasFromInputs(formQuestion);
|
|
||||||
const xhrQuestionDatas = new XMLHttpRequest();
|
|
||||||
if(!isEmpty(datas.id) && (!isEmpty(datas.deleteOk)))
|
|
||||||
xhrQuestionDatas.open("DELETE", apiUrl+configQuestionnaires.questionsRoute+datas.id);
|
|
||||||
else if(!isEmpty(datas.id))
|
|
||||||
xhrQuestionDatas.open("PUT", apiUrl+configQuestionnaires.questionsRoute+datas.id);
|
|
||||||
else
|
|
||||||
xhrQuestionDatas.open("POST", apiUrl+configQuestionnaires.questionsRoute);
|
|
||||||
xhrQuestionDatas.onreadystatechange = function()
|
|
||||||
{
|
|
||||||
if (this.readyState == XMLHttpRequest.DONE)
|
|
||||||
{
|
|
||||||
let response=JSON.parse(this.responseText);
|
|
||||||
if ((this.status === 200 || this.status === 201) && response.message!=undefined && response.questionnaire!=undefined)
|
|
||||||
{
|
|
||||||
if(Array.isArray(response.message))
|
|
||||||
response.message = response.message.join("<br>");
|
|
||||||
else
|
|
||||||
response.message = response.message;
|
|
||||||
showQuestionInfos(response.questionnaire.Questions);// le serveur me retourne une version actualisée de la liste des questions
|
|
||||||
addElement(divQuestions, "p", response.message, "", ["success"], "", false);
|
|
||||||
hideAllForms();
|
|
||||||
window.location.assign("#questionsList");
|
|
||||||
showNextQuestionnaires();// peut avoir évolué suivant ce qui s'est passé
|
|
||||||
}
|
|
||||||
else if (response.errors)
|
|
||||||
{
|
|
||||||
if(Array.isArray(response.errors))
|
|
||||||
response.errors = response.errors.join("<br>");
|
|
||||||
else
|
|
||||||
response.errors = serverError;
|
|
||||||
addElement(divResponseQuestion, "p", response.errors, "", ["error"]);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
addElement(divResponseQuestion, "p", serverError, "", ["error"]);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
xhrQuestionDatas.setRequestHeader("Content-Type", "application/json");
|
|
||||||
xhrQuestionDatas.setRequestHeader("Authorization", "Bearer "+user.token);
|
|
||||||
xhrQuestionDatas.send(JSON.stringify(datas));
|
|
||||||
}
|
|
||||||
formQuestion.addEventListener("submit", function(e)
|
formQuestion.addEventListener("submit", function(e)
|
||||||
{
|
{
|
||||||
e.preventDefault();
|
e.preventDefault();
|
||||||
sendQuestionForm();
|
sendQuestionForm(user.token);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -687,3 +689,4 @@ const initialise = async () =>
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
initialise();
|
initialise();
|
||||||
|
helloDev();
|
Loading…
Reference in New Issue