Revue de l'appel aux contrôleurs permettant de regénérer les pages HTML pour prise en compte des nouvelles pages (groupes, liste tags).

This commit is contained in:
Fabrice PENHOËT 2020-11-02 11:32:17 +01:00
parent 6ffbdf49be
commit 87869b87f3
4 changed files with 48 additions and 27 deletions

View File

@ -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 // CRONS
@ -363,28 +379,29 @@ exports.searchGroupById = searchGroupById;
const checkGroupsNeedToBePublished = async (regenerate=false) => const checkGroupsNeedToBePublished = async (regenerate=false) =>
{ {
const db = require("../models/index"); const db = require("../models/index");
const groups = await db.sequelize.query("SELECT `id`,`slug` FROM `groups` WHERE `publishingAt` < NOW()", { type: QueryTypes.SELECT }); const groups = await db.sequelize.query("SELECT `id`,`slug` FROM `Groups` WHERE `publishingAt` < NOW()", { type: QueryTypes.SELECT });
let publishedOk=false, nb=0; let nb = 0;
for(let i in groups) 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) if(publishedOk)
nb++; nb++;
} }
} }
else else
{ {
publishedOk=await creaGroupHTML(groups[i].id); const publishedOk = await creaGroupHTML(groups[i].id);
if(publishedOk) if(publishedOk)
nb++; nb++;
} }
} }
return nb; return nb;
} }
exports.checkGroupsNeedToBePublished = checkGroupsNeedToBePublished;
// Compte le nombre total de groupes et le stocke // Compte le nombre total de groupes et le stocke
const creaStatsGroupsJson = async () => const creaStatsGroupsJson = async () =>

View File

@ -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 // 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) => exports.HTMLRegenerate= async (req, res, next) =>
{ {
try try
{ {
await checkQuestionnairesNeedToBePublished(); await checkQuestionnairesNeedToBePublished();
const nb=await checkQuestionnairesPublishedHaveHTML(true); const nb=await checkQuestionnairesPublishedHaveHTML(true);
await creaNewQuestionnairesJson();// provoque mise à jour du HTLM, RSS, etc. let messageToNext=txtQuestionnaire.haveBeenRegenerated.replace("#NB1", nb);
res.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(); next();
} }
catch(e) catch(e)
@ -375,9 +379,8 @@ exports.deleteJsonFiles= async (req, res, next) =>
} }
} }
// test si des questionnaires doivent être publiés // Teste si des questionnaires doivent être publiés + si des questionnaires publiés n'ont pas de fichier html
// + si des questionnaires publiés n'ont pas fichier html // Si au moins un fichier html est créé, il faut aussi actualiser la page d'accueil & co
// si fichier html créé il faut aussi actualiser la page d'accueil & co
exports.checkQuestionnairesNeedToBePublished= async (req, res, next) => exports.checkQuestionnairesNeedToBePublished= async (req, res, next) =>
{ {
try try
@ -385,7 +388,7 @@ exports.checkQuestionnairesNeedToBePublished= async (req, res, next) =>
await checkQuestionnairesNeedToBePublished(); await checkQuestionnairesNeedToBePublished();
const nb=await checkQuestionnairesPublishedHaveHTML(); const nb=await checkQuestionnairesPublishedHaveHTML();
if(nb > 0) 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)); res.status(200).json(txtQuestionnaire.haveBeenPublished.replace(":NB", nb));
next(); next();
} }
@ -517,7 +520,7 @@ const checkQuestionnaireIsPublishable = (datas, checkDate=true) =>
{ {
if(checkDate) if(checkDate)
{ {
if(datas.Questionnaire.publishingAt===null) if(datas.Questionnaire.publishingAt === null)
return false; return false;
else else
{ {
@ -665,22 +668,22 @@ const searchQuestionnaireById = async (id, reassemble=false) =>
} }
exports.searchQuestionnaireById = searchQuestionnaireById; 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 // 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 // Vérifie si ils sont publiables et si oui change leur statut et réactualise le cache json.
const checkQuestionnairesNeedToBePublished = async () => const checkQuestionnairesNeedToBePublished = async () =>
{ {
const db = require("../models/index"); const db = require("../models/index");
const questionnaires= await db.sequelize.query("SELECT `id` FROM `Questionnaires` WHERE `publishingAt` < NOW() AND `isPublished` = false", { type: QueryTypes.SELECT }); const questionnaires=await db.sequelize.query("SELECT `id` FROM `Questionnaires` WHERE `publishingAt` < NOW() AND `isPublished` = false", { type: QueryTypes.SELECT });
let questionnaireDatas;
for(let i in questionnaires) for(let i in questionnaires)
{ {
questionnaireDatas=await searchQuestionnaireById(questionnaires[i].id, true); const questionnaireDatas=await searchQuestionnaireById(questionnaires[i].id, true);
if(checkQuestionnaireIsPublishable(questionnaireDatas)) if(checkQuestionnaireIsPublishable(questionnaireDatas))
{ {
await db["Questionnaire"].update({ isPublished:true }, { where: { id : questionnaires[i].id } , fields: ["isPublished"], limit:1 }); 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 // 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); await creaQuestionnaireHTML(questionnaires[i].id);
nb++; 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); await creaQuestionnaireHTML(questionnaires[i].id);
nb++; nb++;
@ -707,7 +710,7 @@ const checkQuestionnairesPublishedHaveHTML = async (regenerate=false) =>
return nb; 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 creaNewQuestionnairesJson = async () =>
{ {
const db = require("../models/index"); const db = require("../models/index");

View File

@ -111,8 +111,10 @@ exports.HTMLRegenerate= async (req, res, next) =>
{ {
const tagsUsed=await getUsedTags(); const tagsUsed=await getUsedTags();
for(let i in tagsUsed) for(let i in tagsUsed)
await creaQuestionnairesTagJson(tagsUsed[i].id);// provoque la regénération du json + du html 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) }); // + Page listant tous les tags actifs :
creaUsedTagsHTML(tagsUsed);
res.status(200).json({ message: res.messageToNext.replace("#NB3", tagsUsed.length) });
res.messageToNext=null; res.messageToNext=null;
next(); next();
} }
@ -144,7 +146,6 @@ const getAllTags = async () =>
} }
// Créer la liste de tous tags utilisés pour classer au moins un quiz publié // 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 creaUsedTagsJson = async () =>
{ {
const db = require("../models/index"); const db = require("../models/index");
@ -227,7 +228,7 @@ const creaQuestionnairesTagJson = async (id) =>
return false; return false;
const db = require("../models/index"); 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 }); 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(); creaUsedTagsJson();
creaQuestionnairesTagHTML(id, questionnaires);// pas await, car potentiellement long ! creaQuestionnairesTagHTML(id, questionnaires);// pas await, car potentiellement long !
return questionnaires; return questionnaires;

View File

@ -15,7 +15,7 @@ module.exports =
}, },
explanationBeforeTxt: "Extrait :", explanationBeforeTxt: "Extrait :",
haveBeenPublished : ":NB nouveaux questionnaires ont été publiés.", 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 ", lastUpdated: "Dernière mise à jour, le ",
linkGoToNextElement: "Leçon suivante", linkGoToNextElement: "Leçon suivante",
linkGoToQuiz: "Accéder au quiz", linkGoToQuiz: "Accéder au quiz",