diff --git a/.gitignore b/.gitignore index d165798..1ebcb4d 100644 --- a/.gitignore +++ b/.gitignore @@ -15,17 +15,17 @@ nodemon.json /front/node_modules/ /front/webpack.config* -/front/public/.htaccess* -/front/public/.htpasswd +/front/public/www/.htaccess* +/front/public/www/.htpasswd !/front/webpack.config.js -/front/public/img/quizs/ -/front/public/JS/* -/front/public/quiz/ -/front/public/quizs/ -/front/public/themes/ -/front/public/index.html -/front/public/CGV-CGU.html -/front/public/mentions-legales.html -/front/public/robots-*.txt -/front/public/WikiLerni-pub.asc -/front/public/*.xml \ No newline at end of file +/front/public/www/img/quizs/ +/front/*/www/JS/* +/front/public/www/quiz/ +/front/public/www/quizs/ +/front/public/www/themes/ +/front/public/www/index.html +/front/public/www/CGV-CGU.html +/front/public/www/mentions-legales.html +/front/*/robots-*.txt +/front/*/WikiLerni-pub.asc +/front/public/www/*.xml \ No newline at end of file diff --git a/config/illustrations.js b/config/illustrations.js index 4e0cdac..27f4216 100644 --- a/config/illustrations.js +++ b/config/illustrations.js @@ -14,5 +14,5 @@ module.exports = }, // files upload tempory dir dirIllustrationsTmp : "temp", - dirIllustrations: "front/public/img/quizs" + dirIllustrations: "front/public/www/img/quizs" }; \ No newline at end of file diff --git a/config/main.js b/config/main.js index f93a283..893c533 100644 --- a/config/main.js +++ b/config/main.js @@ -9,7 +9,7 @@ instance.tokenPrivateKey=process.env.TOKEN_PRIVATE_KEY; instance.maxLoginFail=parseInt(process.env.MAX_LOGIN_FAILS,10); instance.loginFailTimeInMinutes=parseInt(process.env.LOGIN_FAIL_TIME_IN_MINUTES,10); instance.dirCache="datas"; -instance.dirHTML="front/public"; +instance.dirHTML="front/public/www"; instance.dirTmp="datas/tmp"; instance.dirTmpLogin="datas/tmp/logins"; diff --git a/config/questionnaires.js b/config/questionnaires.js index f0767e9..f433ab3 100644 --- a/config/questionnaires.js +++ b/config/questionnaires.js @@ -56,10 +56,10 @@ module.exports = dirCacheTags : "datas/questionnaires/tags", dirCacheUsersQuestionnaires : "datas/users/questionnaires", // Emplacement des fichiers HTML générés : - dirHTMLGroups : "front/public/quiz/gp", - dirHTMLQuestionnaires : "front/public/quiz", - dirHTMLNews : "front/public/quizs", - dirHTMLTags : "front/public/quizs", + dirHTMLGroups : "front/public/www/quiz/gp", + dirHTMLQuestionnaires : "front/public/www/quiz", + dirHTMLNews : "front/public/www/quizs", + dirHTMLTags : "front/public/www/quizs", // Idem mais pour urls : dirWebGroups : "quiz/gp", dirWebQuestionnaires : "quiz", diff --git a/controllers/questionnaire.js b/controllers/questionnaire.js index 53649b9..694546a 100644 --- a/controllers/questionnaire.js +++ b/controllers/questionnaire.js @@ -407,7 +407,6 @@ exports.checkQuestionnairesNeedToBePublished = async (req, res, next) => const creaQuestionnaireJson = async (id) => { const db=require("../models/index"); - console.log("j'arrive ici avec "+id); const Questionnaire=await db["Questionnaire"].findByPk(id); if(Questionnaire) { @@ -543,6 +542,9 @@ const creaQuestionnaireHTML = async (id, preview=false) => // deux possibilités : // -- si élément d'un groupe de quiz : juste le texte sans les questions // -- si quiz automone : toutes les infos + + console.log("je passe par ici pour créer le fichier du quiz "+id); + const questionnaire=await searchQuestionnaireById(id, true); if(!questionnaire) return false; diff --git a/front/package-lock.json b/front/admin/package-lock.json similarity index 100% rename from front/package-lock.json rename to front/admin/package-lock.json diff --git a/front/admin/package.json b/front/admin/package.json new file mode 100644 index 0000000..5828ec1 --- /dev/null +++ b/front/admin/package.json @@ -0,0 +1,36 @@ +{ + "name": "wikilerni", + "version": "0.2.0", + "description": "Admin pages of WikiLerni web application", + "main": "index.js", + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1", + "build": "webpack --mode production", + "start": "webpack serve --no-live-reload" + }, + "repository": { + "type": "git", + "url": "https://forge.chapril.org/Fab_Blab/WikiLerni" + }, + "keywords": [ + "quiz", + "wikipédia", + "questionnaire", + "e-learning" + ], + "author": "Fabrice PENHOËT", + "license": "GPL-3.0-or-later", + "devDependencies": { + "@babel/core": "^7.15.5", + "@babel/preset-env": "^7.15.6", + "@webpack-cli/serve": "^1.5.2", + "babel-loader": "^8.2.2", + "babel-polyfill": "^6.26.0", + "webpack": "^5.56.1", + "webpack-cli": "^4.8.0", + "webpack-dev-server": "^4.3.0" + }, + "browserslist": [ + "> 1%" + ] +} \ No newline at end of file diff --git a/front/src/config/general.js b/front/admin/src/config/general.js similarity index 100% rename from front/src/config/general.js rename to front/admin/src/config/general.js diff --git a/front/src/connection.js b/front/admin/src/connection.js similarity index 93% rename from front/src/connection.js rename to front/admin/src/connection.js index 8cca535..dcb0e50 100644 --- a/front/src/connection.js +++ b/front/admin/src/connection.js @@ -6,24 +6,23 @@ /// Le connexion peut se faire directement ici via la saisie d'un mot de passe ou via l'envoi d'un token par e-mail. // Fichier de configuration tirés du backend : -import { apiUrl, availableLangs, siteUrl, theme } from "../../config/instance.js"; +import { apiUrl, availableLangs, siteUrl, theme } from "../../../config/instance.js"; const lang=availableLangs[0]; -import { connectionRoute, getLoginLinkRoute, userRoutes } from "../../config/users.js"; -const configTemplate = require("../../views/"+theme+"/config/"+lang+".js"); +import { connectionRoute, getLoginLinkRoute, userRoutes } from "../../../config/users.js"; +const configTemplate = require("../../../views/"+theme+"/config/"+lang+".js"); // Importation des fonctions utiles au script : import { getLocaly, removeLocaly, saveLocaly } from "./tools/clientstorage.js"; import { addElement } from "./tools/dom.js"; import { helloDev } from "./tools/everywhere.js"; import { getDatasFromInputs } from "./tools/forms.js"; -import { isEmpty } from "../../tools/main"; -import { loadMatomo } from "./tools/matomo.js"; +import { isEmpty } from "../../../tools/main"; import { checkAnswerDatas, checkSession, getTimeDifference, setSession } from "./tools/users.js"; // Dictionnaires : -const { serverError } = require("../../lang/"+lang+"/general"); -const { alreadyConnected, needChooseLoginWay } = require("../../lang/"+lang+"/user"); +const { serverError } = require("../../../lang/"+lang+"/general"); +const { alreadyConnected, needChooseLoginWay } = require("../../../lang/"+lang+"/user"); // Principaux éléments du DOM manipulés : const myForm = document.getElementById("connection"); @@ -43,11 +42,11 @@ const initialise = async () => saveLocaly("message", { message: alreadyConnected, color:"info" });// pour l'afficher sur la page suivante const user=getLocaly("user", true); const homePage=user.status+"HomePage"; - window.location.assign("/"+configTemplate[homePage]); + console.log("./"+configTemplate[homePage]); + window.location.assign("./"+configTemplate[homePage]); } else { - loadMatomo(); myForm.style.display="block"; if(!isEmpty(getLocaly("message"))) { diff --git a/front/src/deconnection.js b/front/admin/src/deconnection.js similarity index 78% rename from front/src/deconnection.js rename to front/admin/src/deconnection.js index 639f5e9..f35edc4 100644 --- a/front/src/deconnection.js +++ b/front/admin/src/deconnection.js @@ -3,7 +3,7 @@ /// On se contente ici de supprimer la session stockée côté client // Fichier de configuration côté client : -import { apiUrl, availableLangs, theme } from "../../config/instance.js"; +import { apiUrl, availableLangs, theme } from "../../../config/instance.js"; const lang=availableLangs[0]; // Importation des fonctions utile au script : @@ -12,8 +12,8 @@ import { addElement } from "./tools/dom.js"; import { helloDev } from "./tools/everywhere.js"; // Dictionnaires : -const { serverError } = require("../../lang/"+lang+"/general"); -const { byebyeMessage } = require("../../lang/"+lang+"/user"); +const { serverError } = require("../../../lang/"+lang+"/general"); +const { byebyeMessage } = require("../../../lang/"+lang+"/user"); const divResponse = document.getElementById("response"); diff --git a/front/src/homeManager.js b/front/admin/src/homeManager.js similarity index 91% rename from front/src/homeManager.js rename to front/admin/src/homeManager.js index 9eaa431..2874e47 100644 --- a/front/src/homeManager.js +++ b/front/admin/src/homeManager.js @@ -9,24 +9,24 @@ /// Temporairement, c'est ici aussi que l'on peut régénérer tout le HTML -> à terme dans homeAdmin ! // Fichier de configuration côté client : -import { apiUrl, availableLangs, theme } from "../../config/instance.js"; +import { apiUrl, availableLangs, theme } from "../../../config/instance.js"; const lang=availableLangs[0]; -import { getAdminStats, userRoutes } from "../../config/users.js"; -import { getListNextQuestionnaires, questionnaireRoutes, regenerateHTML } from "../../config/questionnaires.js"; -const configTemplate = require("../../views/"+theme+"/config/"+lang+".js"); +import { getAdminStats, userRoutes } from "../../../config/users.js"; +import { getListNextQuestionnaires, questionnaireRoutes, regenerateHTML } from "../../../config/questionnaires.js"; +const configTemplate = require("../../../views/"+theme+"/config/"+lang+".js"); // Fonctions utiles au script : import { getLocaly, removeLocaly } from "./tools/clientstorage.js"; import { addElement } from "./tools/dom.js"; -import { helloDev, updateAccountLink } from "./tools/everywhere.js"; -import { dateFormat, isEmpty, replaceAll } from "../../tools/main"; +import { helloDev } from "./tools/everywhere.js"; +import { dateFormat, isEmpty, replaceAll } from "../../../tools/main"; import { checkSession } from "./tools/users.js"; // Dictionnaires : -const { notAllowed, serverError, statsAdmin } = require("../../lang/"+lang+"/general"); -const { nextDateWithoutQuestionnaire, nextQuestionnairesList, questionnaireNeedBeCompleted } = require("../../lang/"+lang+"/questionnaire"); -const { welcomeMessage } = require("../../lang/"+lang+"/user"); +const { notAllowed, serverError, statsAdmin } = require("../../../lang/"+lang+"/general"); +const { nextDateWithoutQuestionnaire, nextQuestionnairesList, questionnaireNeedBeCompleted } = require("../../../lang/"+lang+"/questionnaire"); +const { welcomeMessage } = require("../../../lang/"+lang+"/user"); // Principaux éléments du DOM manipulés : const divMain = document.getElementById("main-content"); @@ -45,7 +45,6 @@ const initialise = async () => if(isConnected) { const user=getLocaly("user", true); - updateAccountLink(user.status, configTemplate); addElement(divMessage, "h2", welcomeMessage.replace("#NAME", user.name)); divMain.style.display="block"; if(!isEmpty(getLocaly("message"))) @@ -143,4 +142,4 @@ const initialise = async () => console.error(e); } } -initialise(); \ No newline at end of file +initialise(); \ No newline at end of file diff --git a/front/src/manageGroups.js b/front/admin/src/manageGroups.js similarity index 94% rename from front/src/manageGroups.js rename to front/admin/src/manageGroups.js index 4410697..aa554f7 100644 --- a/front/src/manageGroups.js +++ b/front/admin/src/manageGroups.js @@ -6,24 +6,24 @@ /// Si pas d'id passé par l'url, on affiche un formulaire vide permettant d'en saisir un nouveau. // Fichiers de configuration : -import { apiUrl, availableLangs, siteUrl, theme } from "../../config/instance.js"; +import { apiUrl, availableLangs, siteUrl, theme } from "../../../config/instance.js"; const lang=availableLangs[0]; -const configQuestionnaires = require("../../config/questionnaires.js"); -const configTemplate = require("../../views/"+theme+"/config/"+lang+".js"); +const configQuestionnaires = require("../../../config/questionnaires.js"); +const configTemplate = require("../../../views/"+theme+"/config/"+lang+".js"); // Fonctions : import { getLocaly, removeLocaly } from "./tools/clientstorage.js"; import { addElement } from "./tools/dom.js"; -import { helloDev, updateAccountLink } from "./tools/everywhere.js"; +import { helloDev } from "./tools/everywhere.js"; import { empyForm, getDatasFromInputs, setAttributesToInputs } from "./tools/forms.js"; -import { dateFormat, isEmpty, replaceAll } from "../../tools/main"; +import { dateFormat, isEmpty, replaceAll } from "../../../tools/main"; import { getUrlParams } from "./tools/url.js"; import { checkSession } from "./tools/users.js"; // Dictionnaires : -const { addOkMessage, serverError } = require("../../lang/"+lang+"/general"); -const { groupQuestionnairesList, groupQuestionnairesListWithout, infosGroupForAdmin, searchWithoutResult } = require("../../lang/"+lang+"/group"); -const { needBeConnected } = require("../../lang/"+lang+"/user"); +const { addOkMessage, serverError } = require("../../../lang/"+lang+"/general"); +const { groupQuestionnairesList, groupQuestionnairesListWithout, infosGroupForAdmin, searchWithoutResult } = require("../../../lang/"+lang+"/group"); +const { needBeConnected } = require("../../../lang/"+lang+"/user"); // Principaux éléments du DOM manipulés : const btnNewGroup = document.getElementById("wantNewGroup"); @@ -116,7 +116,6 @@ const initialise = async () => if(isConnected) { const user=getLocaly("user", true); - updateAccountLink(user.status, configTemplate);// lien "Compte" menu header template divMain.style.display="block"; if(!isEmpty(getLocaly("message"))) { diff --git a/front/src/manageQuestionnaires.js b/front/admin/src/manageQuestionnaires.js similarity index 90% rename from front/src/manageQuestionnaires.js rename to front/admin/src/manageQuestionnaires.js index 0e888e2..01be07d 100644 --- a/front/src/manageQuestionnaires.js +++ b/front/admin/src/manageQuestionnaires.js @@ -7,30 +7,30 @@ /// Si pas d'id passé par l'url, on affiche un formulaire vide permettant de saisir un nouveau quiz. // Fichiers de configuration : -import { apiUrl, availableLangs, theme } from "../../config/instance.js"; +import { apiUrl, availableLangs, theme } from "../../../config/instance.js"; const lang=availableLangs[0]; -const config = require("../../config/instance.js"); -const configIllustrations = require("../../config/illustrations.js"); -const configLinks = require("../../config/links.js"); -const configQuestionnaires = require("../../config/questionnaires.js"); -const configTemplate = require("../../views/"+theme+"/config/"+lang+".js"); +const config = require("../../../config/instance.js"); +const configIllustrations = require("../../../config/illustrations.js"); +const configLinks = require("../../../config/links.js"); +const configQuestionnaires = require("../../../config/questionnaires.js"); +const configTemplate = require("../../../views/"+theme+"/config/"+lang+".js"); // Fonctions : import { getLocaly, removeLocaly } from "./tools/clientstorage.js"; import { addElement } from "./tools/dom.js"; -import { helloDev, updateAccountLink } from "./tools/everywhere.js"; +import { helloDev } from "./tools/everywhere.js"; import { empyAndHideForm, getDatasFromInputs, setAttributesToInputs } from "./tools/forms.js"; -import { dateFormat, isEmpty } from "../../tools/main"; +import { dateFormat, isEmpty } from "../../../tools/main"; import { getUrlParams } from "./tools/url.js"; import { checkSession } from "./tools/users.js"; // Dictionnaires : -const { addOkMessage, deleteBtnTxt, serverError, updateBtnTxt } = require("../../lang/"+lang+"/general"); -const { addIllustrationTxt, defaultAlt, introNoIllustration, introTitleForIllustration } = require("../../lang/"+lang+"/illustration"); -const { addLinkTxt, defaultValueForLink, introNoLink, introTitleForLink } = require("../../lang/"+lang+"/link"); -const { addQuestionTxt, introNoQuestion, introTitleForQuestion } = require("../../lang/"+lang+"/question"); -const { needGroupIfRank, nextDateWithoutQuestionnaire, nextQuestionnairesList, questionnaireNeedBeCompleted, searchQuestionnaireWithNoResult } = require("../../lang/"+lang+"/questionnaire"); -const { needBeConnected } = require("../../lang/"+lang+"/user"); +const { addOkMessage, deleteBtnTxt, serverError, updateBtnTxt } = require("../../../lang/"+lang+"/general"); +const { addIllustrationTxt, defaultAlt, introNoIllustration, introTitleForIllustration } = require("../../../lang/"+lang+"/illustration"); +const { addLinkTxt, defaultValueForLink, introNoLink, introTitleForLink } = require("../../../lang/"+lang+"/link"); +const { addQuestionTxt, introNoQuestion, introTitleForQuestion } = require("../../../lang/"+lang+"/question"); +const { needGroupIfRank, nextDateWithoutQuestionnaire, nextQuestionnairesList, questionnaireNeedBeCompleted, searchQuestionnaireWithNoResult } = require("../../../lang/"+lang+"/questionnaire"); +const { needBeConnected } = require("../../../lang/"+lang+"/user"); // Principaux éléments du DOM manipulés : const btnNewQuestionnaire = document.getElementById("wantNewQuestionnaire"); @@ -196,7 +196,7 @@ const showIllustrationInfos = (Illustrations, token) => addElement(divIllustrations, "h2", introTitleForIllustration); let listIllustrations=""; for(let i in Illustrations) - listIllustrations+="