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
@ -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 () =>

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
// 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");

View File

@ -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;

View File

@ -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",