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,18 +26,67 @@ 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");
|
||||||
|
const formSearch = document.getElementById("search");
|
||||||
|
|
||||||
helloDev();
|
// Fonction utile pour vider le formulaire, y compris les champs hidden, etc.
|
||||||
|
const emptyGroupForm = () =>
|
||||||
|
{
|
||||||
|
empyForm(formGroup);
|
||||||
|
// Case de suppression inutile en mode création :
|
||||||
|
deleteCheckBox.style.display="none";
|
||||||
|
// Intro à vider !
|
||||||
|
divGroupIntro.innerHTML="";
|
||||||
|
}
|
||||||
|
|
||||||
|
// Fonction affichant les infos connues concernant un groupe.
|
||||||
|
const showFormGroupInfos = (id, token) =>
|
||||||
|
{
|
||||||
|
// on commence par tout vider, des fois que... :
|
||||||
|
emptyGroupForm();
|
||||||
|
const xhrGetInfos = new XMLHttpRequest();
|
||||||
|
xhrGetInfos.open("GET", apiUrl+configQuestionnaires.groupRoutes+configQuestionnaires.getGroupRoute+id);
|
||||||
|
xhrGetInfos.onreadystatechange = function()
|
||||||
|
{
|
||||||
|
if (this.readyState == XMLHttpRequest.DONE)
|
||||||
|
{
|
||||||
|
let response=JSON.parse(this.responseText);
|
||||||
|
if (this.status === 200 && response.Group != undefined)
|
||||||
|
{
|
||||||
|
const mapText =
|
||||||
|
{
|
||||||
|
GROUP_ID : response.Group.id,
|
||||||
|
DATE_CREA : dateFormat(response.Group.createdAt),
|
||||||
|
DATE_UPDATE : dateFormat(response.Group.updatedAt),
|
||||||
|
NB_ELEMENTS : (response.Group.Questionnaires!==undefined) ? response.Group.Questionnaires.length : 0
|
||||||
|
};
|
||||||
|
const groupIntro=replaceAll(infosGroupForAdmin, mapText);
|
||||||
|
addElement(divGroupIntro, "p", groupIntro, "", ["info"]);
|
||||||
|
for(let data in response.Group)
|
||||||
|
{
|
||||||
|
if(formGroup.elements[data]!==undefined)
|
||||||
|
{
|
||||||
|
if(data==="publishingAt" && response.Group[data]!==null)
|
||||||
|
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
|
||||||
|
formGroup.elements[data].value=response.Group[data];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
deleteCheckBox.style.display="block";
|
||||||
|
}// ajout gestion erreur 404 ???
|
||||||
|
}
|
||||||
|
}
|
||||||
|
xhrGetInfos.setRequestHeader("Authorization", "Bearer "+token);
|
||||||
|
xhrGetInfos.send();
|
||||||
|
}
|
||||||
|
|
||||||
const initialise = async () =>
|
const initialise = async () =>
|
||||||
{
|
{
|
||||||
|
@ -47,104 +96,50 @@ const initialise = async () =>
|
||||||
if(isConnected)
|
if(isConnected)
|
||||||
{
|
{
|
||||||
const user=getLocaly("user", true);
|
const user=getLocaly("user", true);
|
||||||
updateAccountLink(user.status, configTemplate);
|
updateAccountLink(user.status, configTemplate);// lien "Compte" menu header template
|
||||||
divMain.style.display="block";
|
divMain.style.display="block";
|
||||||
if(!isEmpty(getLocaly("message")))
|
if(!isEmpty(getLocaly("message")))
|
||||||
{
|
{
|
||||||
addElement(divMessage, "p", getLocaly("message", true).message, "", [getLocaly("message", true).color], "", false);
|
addElement(divMessage, "p", getLocaly("message", true).message, "", [getLocaly("message", true).color], "", false);
|
||||||
removeLocaly("message");
|
removeLocaly("message");
|
||||||
}
|
}
|
||||||
// Initialisation du formulaire de recherche :
|
// Initialisation des formulaires :
|
||||||
setAttributesToInputs(configQuestionnaires, formSearch);
|
setAttributesToInputs(configQuestionnaires, formSearch);
|
||||||
|
|
||||||
// Fonction utile pour vider le formulaire, y compris les champs hidden, etc.
|
|
||||||
// Cache aussi certains champs en mode création
|
|
||||||
const emptyGroupForm = () =>
|
|
||||||
{
|
|
||||||
empyForm(formGroup);
|
|
||||||
// Case de suppression cachée par défaut, car inutile pour formulaire de création
|
|
||||||
deleteCheckBox.style.display="none";
|
|
||||||
}
|
|
||||||
emptyGroupForm();
|
|
||||||
// Initialise les contraintes du formulaire :
|
|
||||||
setAttributesToInputs(configQuestionnaires.Group, formGroup);
|
setAttributesToInputs(configQuestionnaires.Group, formGroup);
|
||||||
|
emptyGroupForm();
|
||||||
// Fonction affichant les infos connues concernant un utilisateur et son abonnement
|
|
||||||
const showFormGroupInfos = (id) =>
|
|
||||||
{
|
|
||||||
// on commence par tout vider, des fois que... :
|
|
||||||
emptyGroupForm();
|
|
||||||
const xhrGetInfos = new XMLHttpRequest();
|
|
||||||
xhrGetInfos.open("GET", apiUrl+configQuestionnaires.groupRoutes+configQuestionnaires.getGroupRoute+id);
|
|
||||||
xhrGetInfos.onreadystatechange = function()
|
|
||||||
{
|
|
||||||
if (this.readyState == XMLHttpRequest.DONE)
|
|
||||||
{
|
|
||||||
let response=JSON.parse(this.responseText);
|
|
||||||
if (this.status === 200 && response.Group != undefined)
|
|
||||||
{
|
|
||||||
const mapText =
|
|
||||||
{
|
|
||||||
GROUP_ID : response.Group.id,
|
|
||||||
DATE_CREA : dateFormat(response.Group.createdAt),
|
|
||||||
DATE_UPDATE : dateFormat(response.Group.updatedAt),
|
|
||||||
NB_ELEMENTS : (response.Group.Questionnaires!==undefined) ? response.Group.Questionnaires.length : 0
|
|
||||||
};
|
|
||||||
const groupIntro=replaceAll(infosGroupForAdmin, mapText);
|
|
||||||
addElement(divGroupIntro, "p", groupIntro, "", ["info"]);
|
|
||||||
for(let data in response.Group)
|
|
||||||
{
|
|
||||||
if(formGroup.elements[data]!==undefined)
|
|
||||||
{
|
|
||||||
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"
|
|
||||||
else
|
|
||||||
formGroup.elements[data].value=response.Group[data];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
deleteCheckBox.style.display="block";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
xhrGetInfos.setRequestHeader("Authorization", "Bearer "+user.token);
|
|
||||||
xhrGetInfos.send();
|
|
||||||
}
|
|
||||||
|
|
||||||
// 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();
|
||||||
divResponse.innerHTML="";
|
divResponse.innerHTML="";
|
||||||
let datas=getDatasFromInputs(formGroup);
|
let datas=getDatasFromInputs(formGroup);
|
||||||
const xhrGroupDatas = new XMLHttpRequest();
|
const xhrGroupDatas = new XMLHttpRequest();
|
||||||
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>");
|
||||||
|
@ -164,8 +159,8 @@ const initialise = async () =>
|
||||||
addElement(divResponse, "p", serverError, "", ["error"]);
|
addElement(divResponse, "p", serverError, "", ["error"]);
|
||||||
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();
|
||||||
|
@ -191,8 +186,8 @@ const initialise = async () =>
|
||||||
let response=JSON.parse(this.responseText);
|
let response=JSON.parse(this.responseText);
|
||||||
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>";
|
||||||
|
@ -202,8 +197,8 @@ const initialise = async () =>
|
||||||
const searchSelect=document.getElementById("selectSearch");
|
const searchSelect=document.getElementById("selectSearch");
|
||||||
searchSelect.addEventListener("change", function()
|
searchSelect.addEventListener("change", function()
|
||||||
{
|
{
|
||||||
if(searchSelect.value!=="")
|
if(searchSelect.value !== "")
|
||||||
showFormGroupInfos(searchSelect.value);
|
showFormGroupInfos(searchSelect.value, user.token);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -232,4 +227,5 @@ const initialise = async () =>
|
||||||
console.error(e);
|
console.error(e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
initialise();
|
initialise();
|
||||||
|
helloDev();
|
File diff suppressed because it is too large
Load Diff
Loading…
Reference in New Issue