diff --git a/controllers/group.js b/controllers/group.js index e12de94..f25fc80 100644 --- a/controllers/group.js +++ b/controllers/group.js @@ -248,8 +248,10 @@ exports.cronCheckGroupsNeedToBePublished = async (req, res, next) => { try { + console.log("Je teste si des groupes doivent être publiés"); const nb=await checkGroupsNeedToBePublished(); res.status(200).json(txtGroups.haveBeenPublished.replace("#NB", nb)); + console.log(txtGroups.haveBeenPublished.replace("#NB", nb)); next(); } catch(e) @@ -276,7 +278,7 @@ const creaGroupJson = async (id) => if(checkGroupIsPublishable(datas)) 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 - 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) for(let i in Questionnaires) await questionnaireCtrl.creaQuestionnaireHTML(Questionnaires[i].id, false); @@ -375,7 +377,7 @@ const searchGroupById = async (id, reassemble=false) => } 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 // 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 @@ -388,16 +390,15 @@ const checkGroupsNeedToBePublished = async (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(publishedOk) + if(await creaGroupJson(groups[i].id))// permet aussi de mettre à jour les fichiers des quizs du groupe avec lien vers le groupe nb++; } } 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) nb++; } diff --git a/controllers/questionnaire.js b/controllers/questionnaire.js index ff7079e..cd4c5dd 100644 --- a/controllers/questionnaire.js +++ b/controllers/questionnaire.js @@ -381,15 +381,17 @@ exports.deleteJsonFiles= async (req, res, next) => // 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) => +exports.checkQuestionnairesNeedToBePublished = async (req, res, next) => { try { - await checkQuestionnairesNeedToBePublished(); - const nb=await checkQuestionnairesPublishedHaveHTML(); - if(nb > 0) - creaNewQuestionnairesJson();// Provoque mise à jour du HTLM, etc. + console.log("Je teste si des questionnaires doivent être publiés."); + const nb = await checkQuestionnairesNeedToBePublished();// actualise bd, json, html, listes d'articles... si l'élement devient publiable. + //const nb=await checkQuestionnairesPublishedHaveHTML(); + //if(nb > 0) + //creaNewQuestionnairesJson();// Provoque mise à jour du HTLM, etc. res.status(200).json(txtQuestionnaire.haveBeenPublished.replace(":NB", nb)); + console.log(txtQuestionnaire.haveBeenPublished.replace(":NB", nb)); next(); } 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 // 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)) - { - 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); - } - } + await groupCtrl.creaGroupJson(Questionnaire.GroupId);// actualise aussi le HTML du quiz + les fichiers html des autres éléments du groupe return datas; } else @@ -673,6 +667,7 @@ exports.searchQuestionnaireById = searchQuestionnaireById; const checkQuestionnairesNeedToBePublished = async () => { 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 }); for(let i in questionnaires) { @@ -680,10 +675,11 @@ const checkQuestionnairesNeedToBePublished = async () => if(checkQuestionnaireIsPublishable(questionnaireDatas)) { 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 diff --git a/controllers/subscription.js b/controllers/subscription.js index 5262f77..bbe5ffd 100644 --- a/controllers/subscription.js +++ b/controllers/subscription.js @@ -2,6 +2,7 @@ const { Op, QueryTypes } = require("sequelize");// pour certaines requêtes sql const jwt = require("jsonwebtoken"); +const striptags = require("striptags"); const config = require("../config/main"); const configQuestionnaires = require("../config/questionnaires"); @@ -237,6 +238,7 @@ exports.addNewQuestionnaireUsers = async(req, res, next) => { try { + console.log("Je cherche les abonnements à traiter"); const db = require("../models/index"); // 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. @@ -246,6 +248,7 @@ exports.addNewQuestionnaireUsers = async(req, res, next) => else { const now=new Date(); + console.log("Je vais traiter "+subscriptionsOk.length+" abonnements - "+now); 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 @@ -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é : 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); if(!tool.isEmpty(lastSendedGroup)) { @@ -270,7 +273,7 @@ exports.addNewQuestionnaireUsers = async(req, res, next) => // Sinon l'élément suivant du groupe : 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) if(lastSendedGroup.Questionnaires[j].id == lastSended[0].QuestionnaireId) elementToSend = await questionnaireCtrl.searchQuestionnaireById(lastSendedGroup.Questionnaires[(parseInt(j)+1)].id); @@ -279,7 +282,7 @@ exports.addNewQuestionnaireUsers = async(req, res, next) => } 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. // 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 }); @@ -305,7 +308,8 @@ exports.addNewQuestionnaireUsers = async(req, res, next) => mailTitle: elementToSend.Questionnaire.title, mailHeaderLinkUrl: mapMail.UNSUBSCRIBE_URL, mailHeaderLinkTxt: txt.mailStopMailLinkTxt, - mailMainContent: elementToSend.Questionnaire.introduction, + //mailMainContent: elementToSend.Questionnaire.introduction, + mailMainContent: tool.shortenIfLongerThan(striptags(elementToSend.Questionnaire.introduction.replace("
", " ").replace("

", " ").replace("", " ")), 500), linksCTA: [{ url:mapMail.QUESTIONNAIRE_URL, txt:txtGeneral.btnShowOnWebSite.replace("#SITE_NAME", config.siteName) }], mailRecipientAddress: subscriptionsOk[i].email } diff --git a/lang/fr/general.js b/lang/fr/general.js index 0a9ebfb..b4f6e18 100644 --- a/lang/fr/general.js +++ b/lang/fr/general.js @@ -7,7 +7,7 @@ module.exports = btnLinkToQuestionnaire : "Afficher !", btnProposeConnection: "Je me connecte.", btnProposeSubscribe: "Je crée mon compte.", - btnShowOnWebSite: "Voir sur #SITE_NAME.", + btnShowOnWebSite: "Lire la suite sur #SITE_NAME", deleteBtnTxt: "Supprimer", deleteFailMessage : "La suppression de l'enregistrement #ID a échoué.", deleteOkMessage : "La suppression a bien été enregistrée.", diff --git a/tools/main.js b/tools/main.js index e684989..f86c6d2 100644 --- a/tools/main.js +++ b/tools/main.js @@ -34,7 +34,7 @@ class Tool { myString+="";// au cas où cela ne serait pas une chaîne... if(myString.length > max) - myString=myString.substring(0, (max-3))+"..."; + myString=myString.substring(0, (max-3))+"…"; return myString; }