Revue contrôleurs appelés par cron pour publication nouveaux questionnaires ou groupes + ajout quelques console.log pour contrôler lancement cronjobs.
This commit is contained in:
parent
a0ccbffe59
commit
f27ddda44e
@ -248,8 +248,10 @@ exports.cronCheckGroupsNeedToBePublished = async (req, res, next) =>
|
|||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
|
console.log("Je teste si des groupes doivent être publiés");
|
||||||
const nb=await checkGroupsNeedToBePublished();
|
const nb=await checkGroupsNeedToBePublished();
|
||||||
res.status(200).json(txtGroups.haveBeenPublished.replace("#NB", nb));
|
res.status(200).json(txtGroups.haveBeenPublished.replace("#NB", nb));
|
||||||
|
console.log(txtGroups.haveBeenPublished.replace("#NB", nb));
|
||||||
next();
|
next();
|
||||||
}
|
}
|
||||||
catch(e)
|
catch(e)
|
||||||
@ -276,7 +278,7 @@ const creaGroupJson = async (id) =>
|
|||||||
if(checkGroupIsPublishable(datas))
|
if(checkGroupIsPublishable(datas))
|
||||||
await creaGroupHTML(id);// !!! await important car sinon bug, plusieurs fonctions accédant au même fichier (à revoir car pas clair !)
|
await creaGroupHTML(id);// !!! await important car sinon bug, plusieurs fonctions accédant au même fichier (à revoir car pas clair !)
|
||||||
else // dans le cas contraire, on supprime l'éventuel fichier préexistant
|
else // dans le cas contraire, on supprime l'éventuel fichier préexistant
|
||||||
toolFile.deleteFile(config.dirHTMLGroups, Group.slug+".html");
|
toolFile.deleteFile(configQuestionnaires.dirHTMLGroups, Group.slug+".html");
|
||||||
// Dans certains cas les fichiers HTML des quizs du groupe peuvent aussi être impactés (notamment le dernier)
|
// Dans certains cas les fichiers HTML des quizs du groupe peuvent aussi être impactés (notamment le dernier)
|
||||||
for(let i in Questionnaires)
|
for(let i in Questionnaires)
|
||||||
await questionnaireCtrl.creaQuestionnaireHTML(Questionnaires[i].id, false);
|
await questionnaireCtrl.creaQuestionnaireHTML(Questionnaires[i].id, false);
|
||||||
@ -375,7 +377,7 @@ const searchGroupById = async (id, reassemble=false) =>
|
|||||||
}
|
}
|
||||||
exports.searchGroupById = searchGroupById;
|
exports.searchGroupById = searchGroupById;
|
||||||
|
|
||||||
// Cherche si il y a des groupes de questionnaires dont la date de publication est passée mais qui ne sont pas publiés
|
// Cherche si il y a des groupes de questionnaires dont la date de publication est passée, mais qui ne sont pas publiés
|
||||||
// Vérifie si ils sont publiables et si oui génère le HTML
|
// Vérifie si ils sont publiables et si oui génère le HTML
|
||||||
// Si regenerate=true, tous les fichiers sont (ré)générés, même s'ils existent déjà (évolution template...)
|
// Si regenerate=true, tous les fichiers sont (ré)générés, même s'ils existent déjà (évolution template...)
|
||||||
// Retourne le nombre de fichiers ayant été (ré)générés
|
// Retourne le nombre de fichiers ayant été (ré)générés
|
||||||
@ -388,16 +390,15 @@ const checkGroupsNeedToBePublished = async (regenerate=false) =>
|
|||||||
{
|
{
|
||||||
if(regenerate === false)
|
if(regenerate === false)
|
||||||
{
|
{
|
||||||
if(toolFile.checkIfFileExist(configQuestionnaires.dirHTMLGroups, groups[i].slug+".html") === false)
|
if(await toolFile.checkIfFileExist(configQuestionnaires.dirHTMLGroups, groups[i].slug+".html") === false)
|
||||||
{
|
{
|
||||||
const publishedOk = await creaGroupHTML(groups[i].id);// creaGroupHTLM contrôle que le groupe est publiable.
|
if(await creaGroupJson(groups[i].id))// permet aussi de mettre à jour les fichiers des quizs du groupe avec lien vers le groupe
|
||||||
if(publishedOk)
|
|
||||||
nb++;
|
nb++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
const publishedOk = await creaGroupHTML(groups[i].id);
|
const publishedOk = await creaGroupHTML(groups[i].id);// creaGroupHTLM contrôle que le groupe est publiable.
|
||||||
if(publishedOk)
|
if(publishedOk)
|
||||||
nb++;
|
nb++;
|
||||||
}
|
}
|
||||||
|
@ -385,11 +385,13 @@ exports.checkQuestionnairesNeedToBePublished= async (req, res, next) =>
|
|||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
await checkQuestionnairesNeedToBePublished();
|
console.log("Je teste si des questionnaires doivent être publiés.");
|
||||||
const nb=await checkQuestionnairesPublishedHaveHTML();
|
const nb = await checkQuestionnairesNeedToBePublished();// actualise bd, json, html, listes d'articles... si l'élement devient publiable.
|
||||||
if(nb > 0)
|
//const nb=await checkQuestionnairesPublishedHaveHTML();
|
||||||
creaNewQuestionnairesJson();// Provoque mise à jour du HTLM, etc.
|
//if(nb > 0)
|
||||||
|
//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));
|
||||||
|
console.log(txtQuestionnaire.haveBeenPublished.replace(":NB", nb));
|
||||||
next();
|
next();
|
||||||
}
|
}
|
||||||
catch(e)
|
catch(e)
|
||||||
@ -443,15 +445,7 @@ const creaQuestionnaireJson = async (id) =>
|
|||||||
// Si le questionnaire est l'élément d'un groupe, il faut actualiser les fichiers du groupe
|
// Si le questionnaire est l'élément d'un groupe, il faut actualiser les fichiers du groupe
|
||||||
// Il faut le faire ici et non dans le contrôleur de mise à jour, car des chgts des éléments annexes (liens, questions...) peuvent aussi impacter les fichiers du groupe ou avoir rendu le questionnaire publiable, etc.
|
// Il faut le faire ici et non dans le contrôleur de mise à jour, car des chgts des éléments annexes (liens, questions...) peuvent aussi impacter les fichiers du groupe ou avoir rendu le questionnaire publiable, etc.
|
||||||
if(!tool.isEmpty(Questionnaire.GroupId))
|
if(!tool.isEmpty(Questionnaire.GroupId))
|
||||||
{
|
await groupCtrl.creaGroupJson(Questionnaire.GroupId);// actualise aussi le HTML du quiz + les fichiers html des autres éléments du groupe
|
||||||
const groupInfos = await groupCtrl.creaGroupJson(Questionnaire.GroupId);
|
|
||||||
// Idem pour le HTML des éventuels autres quizs du groupe car title, slug, rank, etc. peuvent avoir changé
|
|
||||||
if(groupInfos !== false)
|
|
||||||
{
|
|
||||||
for(let i in groupInfos.Questionnaires)
|
|
||||||
await creaQuestionnaireHTML(groupInfos.Questionnaires[i].id);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return datas;
|
return datas;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@ -673,6 +667,7 @@ exports.searchQuestionnaireById = searchQuestionnaireById;
|
|||||||
const checkQuestionnairesNeedToBePublished = async () =>
|
const checkQuestionnairesNeedToBePublished = async () =>
|
||||||
{
|
{
|
||||||
const db = require("../models/index");
|
const db = require("../models/index");
|
||||||
|
let nb = 0;
|
||||||
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 });
|
||||||
for(let i in questionnaires)
|
for(let i in questionnaires)
|
||||||
{
|
{
|
||||||
@ -680,10 +675,11 @@ const checkQuestionnairesNeedToBePublished = async () =>
|
|||||||
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 la création du HTML.
|
creaQuestionnaireJson(questionnaires[i].id);// Provoque la création du HTML en impactant celui du groupe, etc.
|
||||||
|
nb++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return true;
|
return nb;
|
||||||
}
|
}
|
||||||
|
|
||||||
// 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
|
||||||
|
@ -2,6 +2,7 @@
|
|||||||
|
|
||||||
const { Op, QueryTypes } = require("sequelize");// pour certaines requêtes sql
|
const { Op, QueryTypes } = require("sequelize");// pour certaines requêtes sql
|
||||||
const jwt = require("jsonwebtoken");
|
const jwt = require("jsonwebtoken");
|
||||||
|
const striptags = require("striptags");
|
||||||
|
|
||||||
const config = require("../config/main");
|
const config = require("../config/main");
|
||||||
const configQuestionnaires = require("../config/questionnaires");
|
const configQuestionnaires = require("../config/questionnaires");
|
||||||
@ -237,6 +238,7 @@ exports.addNewQuestionnaireUsers = async(req, res, next) =>
|
|||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
|
console.log("Je cherche les abonnements à traiter");
|
||||||
const db = require("../models/index");
|
const db = require("../models/index");
|
||||||
// Utilisateurs dont l'abonnement est toujours actif et souhaitant recevoir des quizs le jour de la semaine en cours.
|
// Utilisateurs dont l'abonnement est toujours actif et souhaitant recevoir des quizs le jour de la semaine en cours.
|
||||||
// Le tout en heure locale et en ignorant ceux qui ont déjà été traités durant les dernières 24H.
|
// Le tout en heure locale et en ignorant ceux qui ont déjà été traités durant les dernières 24H.
|
||||||
@ -246,6 +248,7 @@ exports.addNewQuestionnaireUsers = async(req, res, next) =>
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
const now=new Date();
|
const now=new Date();
|
||||||
|
console.log("Je vais traiter "+subscriptionsOk.length+" abonnements - "+now);
|
||||||
for (let i in subscriptionsOk)
|
for (let i in subscriptionsOk)
|
||||||
{
|
{
|
||||||
// On commence à chercher le dernier élément envoyé à l'utilisateur pour comparer sa date d'enregistrement à celle du dernier envoi
|
// On commence à chercher le dernier élément envoyé à l'utilisateur pour comparer sa date d'enregistrement à celle du dernier envoi
|
||||||
@ -254,7 +257,7 @@ exports.addNewQuestionnaireUsers = async(req, res, next) =>
|
|||||||
// Il y a déjà eu au moins un envoi et le dernier envoi était un des éléments d'un quiz groupé :
|
// Il y a déjà eu au moins un envoi et le dernier envoi était un des éléments d'un quiz groupé :
|
||||||
if(lastSended.length !==0 && lastSended[0].dateSended == subscriptionsOk[i].lastProcessingAt)
|
if(lastSended.length !==0 && lastSended[0].dateSended == subscriptionsOk[i].lastProcessingAt)
|
||||||
{
|
{
|
||||||
console.log(subscriptionsOk[i].email+" a reçu un article hier.")
|
console.log(subscriptionsOk[i].email+" a reçu un article lors du dernier envoi le "+subscriptionsOk[i].lastProcessingAt);
|
||||||
const lastSendedGroup = await groupCtrl.searchGroupById(lastSended[0].GroupId);
|
const lastSendedGroup = await groupCtrl.searchGroupById(lastSended[0].GroupId);
|
||||||
if(!tool.isEmpty(lastSendedGroup))
|
if(!tool.isEmpty(lastSendedGroup))
|
||||||
{
|
{
|
||||||
@ -270,7 +273,7 @@ exports.addNewQuestionnaireUsers = async(req, res, next) =>
|
|||||||
// Sinon l'élément suivant du groupe :
|
// Sinon l'élément suivant du groupe :
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
console.log(subscriptionsOk[i].email+" va recevoir le nouvel article du même groupe.")
|
console.log(subscriptionsOk[i].email+" va recevoir le nouvel article du même groupe.");
|
||||||
for(let j in lastSendedGroup.Questionnaires)
|
for(let j in lastSendedGroup.Questionnaires)
|
||||||
if(lastSendedGroup.Questionnaires[j].id == lastSended[0].QuestionnaireId)
|
if(lastSendedGroup.Questionnaires[j].id == lastSended[0].QuestionnaireId)
|
||||||
elementToSend = await questionnaireCtrl.searchQuestionnaireById(lastSendedGroup.Questionnaires[(parseInt(j)+1)].id);
|
elementToSend = await questionnaireCtrl.searchQuestionnaireById(lastSendedGroup.Questionnaires[(parseInt(j)+1)].id);
|
||||||
@ -279,7 +282,7 @@ exports.addNewQuestionnaireUsers = async(req, res, next) =>
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
console.log(subscriptionsOk[i].email+" devrait recevoir le premier article du groupe suivant, si il existe.")
|
console.log(subscriptionsOk[i].email+" devrait recevoir le premier article du groupe suivant, si il existe.");
|
||||||
// Soit il s'agit du premier envoi d'un abonnement, soit le dernier envoi était le quiz d'un groupe.
|
// Soit il s'agit du premier envoi d'un abonnement, soit le dernier envoi était le quiz d'un groupe.
|
||||||
// Dans ces deux cas, on va envoyer le premier élément non encore envoyé à cet abonné (le groupe peut ne pas être lui-même encore publié) :
|
// Dans ces deux cas, on va envoyer le premier élément non encore envoyé à cet abonné (le groupe peut ne pas être lui-même encore publié) :
|
||||||
const getElementToSend = await db.sequelize.query("SELECT `Questionnaires`.`id` FROM `Questionnaires` INNER JOIN `Groups` ON `Questionnaires`.`GroupId`=`Groups`.`id` WHERE `Questionnaires`.`isPublished`=1 AND `Groups`.`language`='"+subscriptionsOk[i].language+"' AND `Questionnaires`.`id` NOT IN (SELECT `QuestionnaireId` FROM `QuestionnaireAccesses` where `UserId`="+subscriptionsOk[i].UserId+") ORDER BY `Groups`.`publishingAt`,`rankInGroup` ASC", { type: QueryTypes.SELECT });
|
const getElementToSend = await db.sequelize.query("SELECT `Questionnaires`.`id` FROM `Questionnaires` INNER JOIN `Groups` ON `Questionnaires`.`GroupId`=`Groups`.`id` WHERE `Questionnaires`.`isPublished`=1 AND `Groups`.`language`='"+subscriptionsOk[i].language+"' AND `Questionnaires`.`id` NOT IN (SELECT `QuestionnaireId` FROM `QuestionnaireAccesses` where `UserId`="+subscriptionsOk[i].UserId+") ORDER BY `Groups`.`publishingAt`,`rankInGroup` ASC", { type: QueryTypes.SELECT });
|
||||||
@ -305,7 +308,8 @@ exports.addNewQuestionnaireUsers = async(req, res, next) =>
|
|||||||
mailTitle: elementToSend.Questionnaire.title,
|
mailTitle: elementToSend.Questionnaire.title,
|
||||||
mailHeaderLinkUrl: mapMail.UNSUBSCRIBE_URL,
|
mailHeaderLinkUrl: mapMail.UNSUBSCRIBE_URL,
|
||||||
mailHeaderLinkTxt: txt.mailStopMailLinkTxt,
|
mailHeaderLinkTxt: txt.mailStopMailLinkTxt,
|
||||||
mailMainContent: elementToSend.Questionnaire.introduction,
|
//mailMainContent: elementToSend.Questionnaire.introduction,
|
||||||
|
mailMainContent: tool.shortenIfLongerThan(striptags(elementToSend.Questionnaire.introduction.replace("<br>", " ").replace("</p>", " ").replace("</h4>", " ")), 500),
|
||||||
linksCTA: [{ url:mapMail.QUESTIONNAIRE_URL, txt:txtGeneral.btnShowOnWebSite.replace("#SITE_NAME", config.siteName) }],
|
linksCTA: [{ url:mapMail.QUESTIONNAIRE_URL, txt:txtGeneral.btnShowOnWebSite.replace("#SITE_NAME", config.siteName) }],
|
||||||
mailRecipientAddress: subscriptionsOk[i].email
|
mailRecipientAddress: subscriptionsOk[i].email
|
||||||
}
|
}
|
||||||
|
@ -7,7 +7,7 @@ module.exports =
|
|||||||
btnLinkToQuestionnaire : "Afficher !",
|
btnLinkToQuestionnaire : "Afficher !",
|
||||||
btnProposeConnection: "Je me connecte.",
|
btnProposeConnection: "Je me connecte.",
|
||||||
btnProposeSubscribe: "Je crée mon compte.",
|
btnProposeSubscribe: "Je crée mon compte.",
|
||||||
btnShowOnWebSite: "Voir sur #SITE_NAME.",
|
btnShowOnWebSite: "Lire la suite sur #SITE_NAME",
|
||||||
deleteBtnTxt: "Supprimer",
|
deleteBtnTxt: "Supprimer",
|
||||||
deleteFailMessage : "La suppression de l'enregistrement #ID a échoué.",
|
deleteFailMessage : "La suppression de l'enregistrement #ID a échoué.",
|
||||||
deleteOkMessage : "La suppression a bien été enregistrée.",
|
deleteOkMessage : "La suppression a bien été enregistrée.",
|
||||||
|
@ -34,7 +34,7 @@ class Tool
|
|||||||
{
|
{
|
||||||
myString+="";// au cas où cela ne serait pas une chaîne...
|
myString+="";// au cas où cela ne serait pas une chaîne...
|
||||||
if(myString.length > max)
|
if(myString.length > max)
|
||||||
myString=myString.substring(0, (max-3))+"...";
|
myString=myString.substring(0, (max-3))+"…";
|
||||||
return myString;
|
return myString;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user