From 87869b87f3e2f5efe72f9338b2d0b6de72adc018 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fabrice=20PENHO=C3=8BT?= Date: Mon, 2 Nov 2020 11:32:17 +0100 Subject: [PATCH] =?UTF-8?q?Revue=20de=20l'appel=20aux=20contr=C3=B4leurs?= =?UTF-8?q?=20permettant=20de=20reg=C3=A9n=C3=A9rer=20les=20pages=20HTML?= =?UTF-8?q?=20pour=20prise=20en=20compte=20des=20nouvelles=20pages=20(grou?= =?UTF-8?q?pes,=20liste=20tags).?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- controllers/group.js | 29 +++++++++++++++++++++++------ controllers/questionnaire.js | 35 +++++++++++++++++++---------------- controllers/tag.js | 9 +++++---- lang/fr/questionnaire.js | 2 +- 4 files changed, 48 insertions(+), 27 deletions(-) diff --git a/controllers/group.js b/controllers/group.js index 1b82b85..f1274ba 100644 --- a/controllers/group.js +++ b/controllers/group.js @@ -204,6 +204,22 @@ exports.getStats = async(req, res, next) => } } +// (Re)génère tous les fichiers HTML des groupes +// La requête est ensuite passé aux tags qui font la même chose +exports.HTMLRegenerate= async (req, res, next) => +{ + try + { + const nb=await checkGroupsNeedToBePublished(true); + res.messageToNext=txtGroups.haveBeenPublished.replace("#NB", nb); + next(); + } + catch(e) + { + next(e); + } +} + // CRONS @@ -363,28 +379,29 @@ exports.searchGroupById = searchGroupById; const checkGroupsNeedToBePublished = async (regenerate=false) => { const db = require("../models/index"); - const groups = await db.sequelize.query("SELECT `id`,`slug` FROM `groups` WHERE `publishingAt` < NOW()", { type: QueryTypes.SELECT }); - let publishedOk=false, nb=0; + const groups = await db.sequelize.query("SELECT `id`,`slug` FROM `Groups` WHERE `publishingAt` < NOW()", { type: QueryTypes.SELECT }); + let nb = 0; for(let i in groups) { - if(regenerate===false) + if(regenerate === false) { - if(await toolFile.checkIfFileExist(configQuestionnaires.dirHTMLGroups, group.Group.slug+".html")===false) + if(await toolFile.checkIfFileExist(configQuestionnaires.dirHTMLGroups, group.Group.slug+".html") === false) { - publishedOk=await creaGroupHTML(groups[i].id);// creaGroupHTLM contrôle que le groupe est publiable + const publishedOk=await creaGroupHTML(groups[i].id);// creaGroupHTLM contrôle que le groupe est publiable. if(publishedOk) nb++; } } else { - publishedOk=await creaGroupHTML(groups[i].id); + const publishedOk = await creaGroupHTML(groups[i].id); if(publishedOk) nb++; } } return nb; } +exports.checkGroupsNeedToBePublished = checkGroupsNeedToBePublished; // Compte le nombre total de groupes et le stocke const creaStatsGroupsJson = async () => diff --git a/controllers/questionnaire.js b/controllers/questionnaire.js index 5ab0153..b5e75ca 100644 --- a/controllers/questionnaire.js +++ b/controllers/questionnaire.js @@ -335,15 +335,19 @@ exports.getListNextQuestionnaires = async(req, res, next) => } // Test si des questionnaires doivent être publiés puis (re)génère tous les fichiers HTML des questionnaires + les pages accueil + news -// La requête est ensuite passé aux tags qui font la même chose +// La requête est ensuite passé aux groupes, puis aux tags qui font la même chose exports.HTMLRegenerate= async (req, res, next) => { try { await checkQuestionnairesNeedToBePublished(); const nb=await checkQuestionnairesPublishedHaveHTML(true); - await creaNewQuestionnairesJson();// provoque mise à jour du HTLM, RSS, etc. - res.messageToNext=txtQuestionnaire.haveBeenRegenerated.replace("#NB1", nb); + let messageToNext=txtQuestionnaire.haveBeenRegenerated.replace("#NB1", nb); + creaNewQuestionnairesJson();// Provoque mise à jour du HTLM, etc. + // Les groupes sont aussi à regénérés : + const nbGroups=await groupCtrl.checkGroupsNeedToBePublished(true); + messageToNext=messageToNext.replace("#NB2", nbGroups); + res.messageToNext=messageToNext;// Adapter par le middleware suivant. next(); } catch(e) @@ -375,9 +379,8 @@ exports.deleteJsonFiles= async (req, res, next) => } } -// test si des questionnaires doivent être publiés -// + si des questionnaires publiés n'ont pas fichier html -// si fichier html créé il faut aussi actualiser la page d'accueil & co +// Teste si des questionnaires doivent être publiés + si des questionnaires publiés n'ont pas de fichier html +// Si au moins un fichier html est créé, il faut aussi actualiser la page d'accueil & co exports.checkQuestionnairesNeedToBePublished= async (req, res, next) => { try @@ -385,7 +388,7 @@ exports.checkQuestionnairesNeedToBePublished= async (req, res, next) => await checkQuestionnairesNeedToBePublished(); const nb=await checkQuestionnairesPublishedHaveHTML(); if(nb > 0) - creaNewQuestionnairesJson();// provoque mise à jour du HTLM, RSS, etc. + creaNewQuestionnairesJson();// Provoque mise à jour du HTLM, etc. res.status(200).json(txtQuestionnaire.haveBeenPublished.replace(":NB", nb)); next(); } @@ -517,7 +520,7 @@ const checkQuestionnaireIsPublishable = (datas, checkDate=true) => { if(checkDate) { - if(datas.Questionnaire.publishingAt===null) + if(datas.Questionnaire.publishingAt === null) return false; else { @@ -665,22 +668,22 @@ const searchQuestionnaireById = async (id, reassemble=false) => } exports.searchQuestionnaireById = searchQuestionnaireById; -// Cherche si il y a des questionnaires dont la date de publication est passée mais qui ne sont pas notés comme publiés -// Vérifie si ils sont publiables et si oui change leur statut et réactualise le cache json +// Cherche si il y a des questionnaires dont la date de publication est passée mais qui ne sont pas notés comme publiés. +// Vérifie si ils sont publiables et si oui change leur statut et réactualise le cache json. const checkQuestionnairesNeedToBePublished = async () => { const db = require("../models/index"); - const questionnaires= await db.sequelize.query("SELECT `id` FROM `Questionnaires` WHERE `publishingAt` < NOW() AND `isPublished` = false", { type: QueryTypes.SELECT }); - let questionnaireDatas; + const questionnaires=await db.sequelize.query("SELECT `id` FROM `Questionnaires` WHERE `publishingAt` < NOW() AND `isPublished` = false", { type: QueryTypes.SELECT }); for(let i in questionnaires) { - questionnaireDatas=await searchQuestionnaireById(questionnaires[i].id, true); + const questionnaireDatas=await searchQuestionnaireById(questionnaires[i].id, true); if(checkQuestionnaireIsPublishable(questionnaireDatas)) { await db["Questionnaire"].update({ isPublished:true }, { where: { id : questionnaires[i].id } , fields: ["isPublished"], limit:1 }); - creaQuestionnaireJson(questionnaires[i].id);// provoque normalement la création du HTML + creaQuestionnaireJson(questionnaires[i].id);// Provoque la création du HTML. } } + return true; } // Contrôle si tous les fichiers devant être publiés ont bien leur fichier HTML, sinon le génère @@ -698,7 +701,7 @@ const checkQuestionnairesPublishedHaveHTML = async (regenerate=false) => await creaQuestionnaireHTML(questionnaires[i].id); nb++; } - else if(await toolFile.checkIfFileExist(config.dirHTMLQuestionnaires, questionnaires[i].slug+".html")===false) + else if(await toolFile.checkIfFileExist(config.dirHTMLQuestionnaires, questionnaires[i].slug+".html") === false) { await creaQuestionnaireHTML(questionnaires[i].id); nb++; @@ -707,7 +710,7 @@ const checkQuestionnairesPublishedHaveHTML = async (regenerate=false) => return nb; } -// Liste des derniers questionnaires publiés (utile pour page d'accueil, flux rss, etc.) +// Liste des derniers questionnaires publiés (utile pour page d'accueil, etc.) const creaNewQuestionnairesJson = async () => { const db = require("../models/index"); diff --git a/controllers/tag.js b/controllers/tag.js index c2ecf45..7ffff67 100644 --- a/controllers/tag.js +++ b/controllers/tag.js @@ -111,8 +111,10 @@ exports.HTMLRegenerate= async (req, res, next) => { const tagsUsed=await getUsedTags(); for(let i in tagsUsed) - await creaQuestionnairesTagJson(tagsUsed[i].id);// provoque la regénération du json + du html - res.status(200).json({ message: res.messageToNext.replace("#NB2", tagsUsed.length) }); + await creaQuestionnairesTagJson(tagsUsed[i].id);// Provoque la regénération du json + du html. + // + Page listant tous les tags actifs : + creaUsedTagsHTML(tagsUsed); + res.status(200).json({ message: res.messageToNext.replace("#NB3", tagsUsed.length) }); res.messageToNext=null; next(); } @@ -144,7 +146,6 @@ const getAllTags = async () => } // Créer la liste de tous tags utilisés pour classer au moins un quiz publié -/// Ajouter l'actualisation de la page "parcourir" du site const creaUsedTagsJson = async () => { const db = require("../models/index"); @@ -227,7 +228,7 @@ const creaQuestionnairesTagJson = async (id) => return false; const db = require("../models/index"); const questionnaires = await db.sequelize.query("SELECT id FROM `Questionnaires` INNER JOIN `QuestionnaireClassifications` ON `Questionnaires`.`id`=`QuestionnaireClassifications`.`QuestionnaireId` AND `Questionnaires`.`isPublished`=1 AND `QuestionnaireClassifications`.`TagId`=:id ORDER BY "+config.fieldNewQuestionnaires+" DESC", { replacements: { id: id }, type: QueryTypes.SELECT , model: db["Questionnaire"], mapToModel: true }); - await toolFile.createJSON(configQuestionnaire.dirCacheTags, "liste-"+id, questionnaires);// le supprimer si liste vide ? + await toolFile.createJSON(configQuestionnaire.dirCacheTags, "liste-"+id, questionnaires); creaUsedTagsJson(); creaQuestionnairesTagHTML(id, questionnaires);// pas await, car potentiellement long ! return questionnaires; diff --git a/lang/fr/questionnaire.js b/lang/fr/questionnaire.js index 7370542..abb0d22 100644 --- a/lang/fr/questionnaire.js +++ b/lang/fr/questionnaire.js @@ -15,7 +15,7 @@ module.exports = }, explanationBeforeTxt: "Extrait :", haveBeenPublished : ":NB nouveaux questionnaires ont été publiés.", - haveBeenRegenerated : "Les fichiers HTML de #NB1 questionnaires et #NB2 rubriques ont été regénérés.", + haveBeenRegenerated : "Les pages HTML de #NB1 questionnaires ou éléments de groupes, #NB2 quizs groupés et #NB3 thèmes ont été regénérés.", lastUpdated: "Dernière mise à jour, le ", linkGoToNextElement: "Leçon suivante", linkGoToQuiz: "Accéder au quiz",