|
|
@ -17,6 +17,7 @@ const txtQuestionnaireAccess= require("../lang/"+config.adminLang+"/questionnair
|
|
|
|
const txtGeneral= require("../lang/"+config.adminLang+"/general");
|
|
|
|
const txtGeneral= require("../lang/"+config.adminLang+"/general");
|
|
|
|
|
|
|
|
|
|
|
|
const answerCtrl = require("./answer");
|
|
|
|
const answerCtrl = require("./answer");
|
|
|
|
|
|
|
|
const groupCtrl = require("./group");
|
|
|
|
const questionnaireCtrl = require("./questionnaire");
|
|
|
|
const questionnaireCtrl = require("./questionnaire");
|
|
|
|
const userCtrl = require("./user");
|
|
|
|
const userCtrl = require("./user");
|
|
|
|
|
|
|
|
|
|
|
@ -38,6 +39,7 @@ exports.unsubscribeLink = async (req, res, next) =>
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// CRONS
|
|
|
|
// CRONS
|
|
|
|
|
|
|
|
|
|
|
|
// Envoi des notifications aux abonnés arrivés à quelques jours de la fin de leur période d'abonnement gratuit.
|
|
|
|
// Envoi des notifications aux abonnés arrivés à quelques jours de la fin de leur période d'abonnement gratuit.
|
|
|
@ -177,80 +179,129 @@ exports.notifyExpirationAccount= async(req, res, next) =>
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// CRON donnant accès à l'utilisateur à nouveau quiz suivant son choix
|
|
|
|
// Diffuse aux abonnés un nouvel élément de quiz, en parcourant ceux d'un même groupe, dans l'ordre où ils ont été enregistrés.
|
|
|
|
// si il n'a plus de nouveaux quizs et que l'utilisateur souhaite recevoir un email, on lui passe un quiz au hasard à retester.
|
|
|
|
// Quand tous les éléments ont été envoyés, l'abonné reçoit en plus le quiz regroupant les questions des éléments du groupe.
|
|
|
|
|
|
|
|
// Si il n'y plus de nouveautés pour l'utilisateur, on lui envoie un quiz au hasard parmi ceux déjà envoyés pour le retester.
|
|
|
|
exports.addNewQuestionnaireUsers = async(req, res, next) =>
|
|
|
|
exports.addNewQuestionnaireUsers = async(req, res, next) =>
|
|
|
|
{
|
|
|
|
{
|
|
|
|
try
|
|
|
|
try
|
|
|
|
{ /// revoir pour ne plus associer et envoyer de mails qu'aux utilisateurs ayant des jours d'envoi choisis
|
|
|
|
{
|
|
|
|
const db = require("../models/index");
|
|
|
|
const db = require("../models/index");
|
|
|
|
// Utilisateurs dont l'abonnement est toujours actif et souhaitant recevoir un nouveau quiz le jour de l'appel de cette méthode.
|
|
|
|
// 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 ce jour.
|
|
|
|
// Le tout en heure locale et en ignorant ceux qui ont déjà été traités ces dernières 24H.
|
|
|
|
const subscriptionsOk = await db.sequelize.query("SELECT `Subscriptions`.`id` as SubscriptionId, `Subscriptions`.`lastProcessingAt`, `UserId`, `name`, `email`, `smtp`, `language`, `receiptDays`, ADDDATE(UTC_TIMESTAMP, INTERVAL `timeDifference` MINUTE) AS localDate FROM `Subscriptions` INNER JOIN `Users` ON `Subscriptions`.`UserId`=`Users`.`id` WHERE `status`='user' AND ADDDATE(`Subscriptions`.`createdAt`, `numberOfDays`) > UTC_TIMESTAMP HAVING HOUR(localDate) > "+config.hourGiveNewQuestionnaireBegin+" AND HOUR(localDate) < "+config.hourGiveNewQuestionnaireEnd+" AND LOCATE(DAYOFWEEK(localDate),receiptDays)!=0 AND SubscriptionId NOT IN (SELECT DISTINCT `SubscriptionId` FROM `Pauses` WHERE ADDDATE(`startingAt`, INTERVAL `timeDifference` MINUTE) <= localDate AND ADDDATE(`endingAT`, INTERVAL `timeDifference` MINUTE) > localDate) AND DATEDIFF(NOW(),`Subscriptions`.`lastProcessingAt`) >= 1 LIMIT "+config.numberNewQuestionnaireAtSameTime, { type: QueryTypes.SELECT });
|
|
|
|
const subscriptionsOk = await db.sequelize.query("SELECT `Subscriptions`.`id` as SubscriptionId, `Subscriptions`.`lastProcessingAt`, `UserId`, `name`, `email`, `smtp`, `language`, `receiptDays`, ADDDATE(UTC_TIMESTAMP, INTERVAL `timeDifference` MINUTE) AS localDate FROM `Subscriptions` INNER JOIN `Users` ON `Subscriptions`.`UserId`=`Users`.`id` WHERE `status`='user' AND ADDDATE(`Subscriptions`.`createdAt`, `numberOfDays`) > UTC_TIMESTAMP HAVING HOUR(localDate) > "+config.hourGiveNewQuestionnaireBegin+" AND HOUR(localDate) < "+config.hourGiveNewQuestionnaireEnd+" AND LOCATE(DAYOFWEEK(localDate),receiptDays)!=0 AND SubscriptionId NOT IN (SELECT DISTINCT `SubscriptionId` FROM `Pauses` WHERE ADDDATE(`startingAt`, INTERVAL `timeDifference` MINUTE) <= localDate AND ADDDATE(`endingAT`, INTERVAL `timeDifference` MINUTE) > localDate) AND DATEDIFF(NOW(),`Subscriptions`.`lastProcessingAt`) >= 1 LIMIT "+config.maxQuestionnaireSendedAtSameTime, { type: QueryTypes.SELECT });
|
|
|
|
if(subscriptionsOk.length===0)
|
|
|
|
if(subscriptionsOk.length === 0)
|
|
|
|
res.status(200).json({ message: txt.allSubscriptionProcessed });
|
|
|
|
res.status(200).json({ message: txt.allSubscriptionProcessed });
|
|
|
|
else
|
|
|
|
else
|
|
|
|
{
|
|
|
|
{
|
|
|
|
let newQuestionnaire, access, questionnaire, token, now=new Date();
|
|
|
|
let lastSended, lastSendedGroup, lastSendedGroupNbElements, elementToSend, getElementToSend, accessSave, token, textMail, now=new Date();
|
|
|
|
for (let i in subscriptionsOk)
|
|
|
|
for (let i in subscriptionsOk)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
newQuestionnaire=await db.sequelize.query("SELECT `Questionnaires`.`id`, `title`, `slug`, `introduction`, `url`, `anchor`,`estimatedTime` FROM `Questionnaires` INNER JOIN `Links` ON `Links`.`QuestionnaireId`=`Questionnaires`.`id` WHERE `isPublished`=1 AND `language`='"+subscriptionsOk[i].language+"' AND `Questionnaires`.`id` NOT IN (SELECT `QuestionnaireId` FROM `QuestionnaireAccesses` WHERE `UserId`="+subscriptionsOk[i].UserId+") ORDER BY `id` LIMIT 1", { type: QueryTypes.SELECT });
|
|
|
|
// On commence à chercher le dernier élément auquel il a été donné accès à l'utilisateur pour comparer sa date à celle du dernier envoi
|
|
|
|
if(newQuestionnaire.length!==0)
|
|
|
|
lastSended = await db.sequelize.query("SELECT DATE_FORMAT(`QuestionnaireAccesses`.`createdAt`, \"%Y-%m-%d\") as `dateSended`, `QuestionnaireId`, `GroupId`, `rankInGroup` FROM `QuestionnaireAccesses` INNER JOIN `Questionnaires` WHERE `Questionnaires`.`id`=`QuestionnaireAccesses`.`QuestionnaireId` AND `UserId`="+subscriptionsOk[i].UserId+" AND `selfCreatedOk`= 0 AND `GroupId` IS NOT NULL ORDER BY `QuestionnaireAccesses`.`CreatedAt` DESC LIMIT 1", { type: QueryTypes.SELECT });
|
|
|
|
|
|
|
|
elementToSend="", lastSendedGroup="";
|
|
|
|
|
|
|
|
// Il y a déjà eu au moins un envoi et le dernier envoi était l'élément d'un quiz groupé :
|
|
|
|
|
|
|
|
if(lastSended.length !==0 && lastSended[0].dateSended == subscriptionsOk[i].lastProcessingAt)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
access=await db["QuestionnaireAccess"].create({ QuestionnaireId: newQuestionnaire[0].id, UserId: subscriptionsOk[i].UserId, selfCreatedOk: false });
|
|
|
|
// Si l'élément envoyé était le dernier de son groupe, on va lui envoyer le lien du quiz du groupe :
|
|
|
|
if(access)
|
|
|
|
lastSendedGroup = await groupCtrl.searchGroupById(lastSended[0].GroupId);
|
|
|
|
|
|
|
|
lastSendedGroupNbElements = lastSendedGroup.Questionnaires.length;
|
|
|
|
|
|
|
|
if(!tool.isEmpty(lastSendedGroupNbElements) && lastSendedGroup.Questionnaires[(lastSendedGroupNbElements-1)].id == lastSended[0].QuestionnaireId)
|
|
|
|
|
|
|
|
elementToSend = lastSendedGroup.Group;
|
|
|
|
|
|
|
|
else
|
|
|
|
{
|
|
|
|
{
|
|
|
|
answerCtrl.creaUserQuestionnairesWithoutAnswerJson(subscriptionsOk[i].UserId);
|
|
|
|
// dans ce cas, on va envoyer l'élément suivant du groupe :
|
|
|
|
token=jwt.sign({ userId: subscriptionsOk[i].UserId }, config.tokenPrivateKey, { expiresIn: config.tokenUnsubscribeLinkTimeInDays });
|
|
|
|
for(let j in lastSendedGroup.Questionnaires)
|
|
|
|
const mapMail =
|
|
|
|
if(lastSendedGroup.Questionnaires[j].id == lastSended[0].QuestionnaireId)
|
|
|
|
{
|
|
|
|
elementToSend = await questionnaireCtrl.searchQuestionnaireById(lastSendedGroup.Questionnaires[(parseInt(j)+1)].id, true);
|
|
|
|
USER_NAME: subscriptionsOk[i].name,
|
|
|
|
|
|
|
|
QUESTIONNAIRE_URL: config.siteUrl+"/"+configQuestionnaires.dirWebQuestionnaire+"/"+newQuestionnaire[0].slug+".html",
|
|
|
|
|
|
|
|
UNSUBSCRIBE_URL: config.siteUrl+"/"+configTpl.stopMailPage+token
|
|
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
const mailDatas=
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
mailSubject: newQuestionnaire[0].title,
|
|
|
|
|
|
|
|
mailPreheader: newQuestionnaire[0].title,
|
|
|
|
|
|
|
|
mailTitle: newQuestionnaire[0].title,
|
|
|
|
|
|
|
|
mailHeaderLinkUrl: config.siteUrl+"/"+configTpl.stopMailPage+token,
|
|
|
|
|
|
|
|
mailHeaderLinkTxt: txt.mailStopMailLinkTxt,
|
|
|
|
|
|
|
|
mailMainContent: newQuestionnaire[0].introduction+"<p><b>"+txtQuestionnaire.estimatedTime+"</b> "+txtQuestionnaire.estimatedTimeOption[newQuestionnaire[0].estimatedTime]+".</p>",
|
|
|
|
|
|
|
|
linksCTA: [{ url:newQuestionnaire[0].url, txt:newQuestionnaire[0].anchor }, { url:config.siteUrl+"/"+configQuestionnaires.dirWebQuestionnaire+"/"+newQuestionnaire[0].slug+".html#questionnaire", txt:txtQuestionnaire.btnShowQuestionnaire }],
|
|
|
|
|
|
|
|
mailRecipientAddress: subscriptionsOk[i].email
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
toolMail.sendMail(subscriptionsOk[i].smtp, subscriptionsOk[i].email, newQuestionnaire[0].title, tool.replaceAll(txt.mailNewQuestionnaireBodyTxt, mapMail), "", mailDatas);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
db["Subscription"].update({ lastProcessingAt: now }, { where: { id : subscriptionsOk[i].SubscriptionId }, limit:1 });
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else
|
|
|
|
else
|
|
|
|
{
|
|
|
|
{
|
|
|
|
// L'utilisateur a déjà accès à tous les quizs enregistés.
|
|
|
|
// Soit il s'agit du premier envoi d'un abonnement, soit le dernier envoi était un quiz groupé.
|
|
|
|
// Si il est abonné par email, on en tire un au hasard pour le lui envoyer, sinon on ne fait rien
|
|
|
|
// Dans ces deux cas, on va envoyer le premier élément non encore envoyé d'un groupe :
|
|
|
|
getRandomQuestionnaire=await db.sequelize.query("SELECT `Questionnaires`.`id`, `title`, `slug`, `introduction`, `url`, `anchor`, `estimatedTime` FROM `Questionnaires` INNER JOIN `Links` ON `Links`.`QuestionnaireId`=`Questionnaires`.`id` WHERE `isPublished`=1 AND `language`='"+subscriptionsOk[i].language+"' ORDER BY RAND() LIMIT 1", { type: QueryTypes.SELECT });
|
|
|
|
getElementToSend = await db.sequelize.query("SELECT `Questionnaires`.`id` FROM `Questionnaires` INNER JOIN `Groups` WHERE `Questionnaires`.`GroupId`=`Groups`.`id` AND `Questionnaires`.`isPublished`=1 AND `Groups`.`language`='"+subscriptionsOk[i].language+"' AND `Groups`.`publishingAt` < NOW() AND `Questionnaires`.`id` NOT IN (SELECT `QuestionnaireId` FROM `QuestionnaireAccesses` where `UserId`="+subscriptionsOk[i].UserId+") ORDER BY `Groups`.`publishingAt`,`rankInGroup` ASC", { type: QueryTypes.SELECT });
|
|
|
|
|
|
|
|
if(getElementToSend.length !== 0)
|
|
|
|
|
|
|
|
elementToSend = await questionnaireCtrl.searchQuestionnaireById(getElementToSend[0].id, true);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
// console.log(elementToSend);
|
|
|
|
|
|
|
|
if(!tool.isEmpty(elementToSend))
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
token=jwt.sign({ userId: subscriptionsOk[i].UserId }, config.tokenPrivateKey, { expiresIn: config.tokenUnsubscribeLinkTimeInDays });
|
|
|
|
|
|
|
|
if(elementToSend.Questionnaire !== undefined)// il s'agit de l'élément d'un group
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
const mapMail =
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
USER_NAME: subscriptionsOk[i].name,
|
|
|
|
|
|
|
|
QUESTIONNAIRE_URL: config.siteUrl+"/"+configQuestionnaires.dirWebQuestionnaires+"/"+elementToSend.Questionnaire.slug+".html",
|
|
|
|
|
|
|
|
UNSUBSCRIBE_URL: config.siteUrl+"/"+configTpl.stopMailPage+token
|
|
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
const mailDatas =
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
mailSubject: elementToSend.Questionnaire.title,
|
|
|
|
|
|
|
|
mailPreheader: elementToSend.Questionnaire.title,
|
|
|
|
|
|
|
|
mailTitle: elementToSend.Questionnaire.title,
|
|
|
|
|
|
|
|
mailHeaderLinkUrl: config.siteUrl+"/"+configTpl.stopMailPage+token,
|
|
|
|
|
|
|
|
mailHeaderLinkTxt: txt.mailStopMailLinkTxt,
|
|
|
|
|
|
|
|
mailMainContent: elementToSend.Questionnaire.introduction,
|
|
|
|
|
|
|
|
mailMainContentLinks : elementToSend.Questionnaire.Links,
|
|
|
|
|
|
|
|
linksCTA: [{ url:config.siteUrl+"/"+configQuestionnaires.dirWebQuestionnaires+"/"+elementToSend.Questionnaire.slug+".html", txt:txtGeneral.btnShowOnWebSite.replace("#SITE_NAME", config.siteName) }],
|
|
|
|
|
|
|
|
mailRecipientAddress: subscriptionsOk[i].email
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
toolMail.sendMail(subscriptionsOk[i].smtp, subscriptionsOk[i].email, mailDatas.mailSubject, tool.replaceAll(txt.mailNewElementForGroupTxt, mapMail), "", mailDatas);
|
|
|
|
|
|
|
|
// on enregistre le fait que cet élément a déjà été envoyé :
|
|
|
|
|
|
|
|
accessSave = await db["QuestionnaireAccess"].create({ QuestionnaireId: elementToSend.Questionnaire.id, UserId: subscriptionsOk[i].UserId, selfCreatedOk: false });
|
|
|
|
|
|
|
|
/// à remplacer pour fonction listant les derniers éléments "lus" par l'utilisateur :
|
|
|
|
|
|
|
|
//answerCtrl.creaUserQuestionnairesWithoutAnswerJson(subscriptionsOk[i].UserId);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
else // envoi du quiz du groupe
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
const mapMail =
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
USER_NAME: subscriptionsOk[i].name,
|
|
|
|
|
|
|
|
QUESTIONNAIRE_URL: config.siteUrl+"/"+configQuestionnaires.dirWebGroups+"/"+elementToSend.slug+".html",
|
|
|
|
|
|
|
|
UNSUBSCRIBE_URL: config.siteUrl+"/"+configTpl.stopMailPage+token
|
|
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
const mailDatas =
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
mailSubject: elementToSend.title+" ("+txtQuestionnaire.questionnairesName+")",
|
|
|
|
|
|
|
|
mailPreheader: elementToSend.title,
|
|
|
|
|
|
|
|
mailTitle: elementToSend.title,
|
|
|
|
|
|
|
|
mailHeaderLinkUrl: config.siteUrl+"/"+configTpl.stopMailPage+token,
|
|
|
|
|
|
|
|
mailHeaderLinkTxt: txt.mailStopMailLinkTxt,
|
|
|
|
|
|
|
|
mailMainContent: elementToSend.introduction,
|
|
|
|
|
|
|
|
linksCTA: [{ url:config.siteUrl+"/"+configQuestionnaires.dirWebGroups+"/"+elementToSend.slug+".html", txt:txtQuestionnaire.btnShowQuestionnaire }],
|
|
|
|
|
|
|
|
mailRecipientAddress: subscriptionsOk[i].email
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
toolMail.sendMail(subscriptionsOk[i].smtp, subscriptionsOk[i].email, mailDatas.mailSubject, tool.replaceAll(txt.mailNewQuestionnaireBodyTxt, mapMail), "", mailDatas);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
else
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
// L'utilisateur a déjà reçu tous les élements et quizs des groupes publiés. Dans ces cas, on tire un au hasard un quiz groupé pour le lui renvoyer
|
|
|
|
|
|
|
|
getElementToSend = await db.sequelize.query("SELECT `id`, `title`, `slug`, `introduction` FROM `Groups` WHERE `publishingAt` < NOW() AND `language`='"+subscriptionsOk[i].language+"' ORDER BY RAND() LIMIT 1", { type: QueryTypes.SELECT });
|
|
|
|
token=jwt.sign({ userId: subscriptionsOk[i].UserId }, config.tokenPrivateKey, { expiresIn: config.tokenUnsubscribeLinkTimeInDays });
|
|
|
|
token=jwt.sign({ userId: subscriptionsOk[i].UserId }, config.tokenPrivateKey, { expiresIn: config.tokenUnsubscribeLinkTimeInDays });
|
|
|
|
const mapMail =
|
|
|
|
const mapMail =
|
|
|
|
{
|
|
|
|
{
|
|
|
|
USER_NAME: subscriptionsOk[i].name,
|
|
|
|
USER_NAME: subscriptionsOk[i].name,
|
|
|
|
QUESTIONNAIRE_URL: config.siteUrl+"/"+configQuestionnaires.dirWebQuestionnaire+"/"+getRandomQuestionnaire[0].slug+".html",
|
|
|
|
QUESTIONNAIRE_URL: config.siteUrl+"/"+configQuestionnaires.dirWebQuestionnaires+"/"+getElementToSend[0].slug+".html",
|
|
|
|
UNSUBSCRIBE_URL: config.siteUrl+"/"+configTpl.stopMailPage+token
|
|
|
|
UNSUBSCRIBE_URL: config.siteUrl+"/"+configTpl.stopMailPage+token
|
|
|
|
};
|
|
|
|
};
|
|
|
|
const mailDatas=
|
|
|
|
const mailDatas=
|
|
|
|
{
|
|
|
|
{
|
|
|
|
mailSubject: getRandomQuestionnaire[0].title,
|
|
|
|
mailSubject: getElementToSend[0].title+" ("+txtQuestionnaire.questionnairesName+")",
|
|
|
|
mailPreheader: getRandomQuestionnaire[0].title,
|
|
|
|
mailPreheader: getElementToSend[0].title,
|
|
|
|
mailTitle: getRandomQuestionnaire[0].title,
|
|
|
|
mailTitle: getElementToSend[0].title,
|
|
|
|
mailHeaderLinkUrl: config.siteUrl+"/"+configTpl.stopMailPage+token,
|
|
|
|
mailHeaderLinkUrl: config.siteUrl+"/"+configTpl.stopMailPage+token,
|
|
|
|
mailHeaderLinkTxt: txt.mailStopMailLinkTxt,
|
|
|
|
mailHeaderLinkTxt: txt.mailStopMailLinkTxt,
|
|
|
|
mailMainContent: "<h4>"+txtQuestionnaireAccess.questionnaireRetryInfo+"</h4>"+getRandomQuestionnaire[0].introduction+"<p><b>"+txtQuestionnaire.estimatedTime+"</b> "+txtQuestionnaire.estimatedTimeOption[getRandomQuestionnaire[0].estimatedTime]+".</p>",
|
|
|
|
mailMainContent: "<h4>"+txtQuestionnaireAccess.questionnaireRetryInfo+"</h4>"+getElementToSend[0].introduction,
|
|
|
|
linksCTA: [{ url:getRandomQuestionnaire[0].url, txt:getRandomQuestionnaire[0].anchor }, { url:config.siteUrl+"/"+configQuestionnaires.dirWebQuestionnaire+"/"+getRandomQuestionnaire[0].slug+".html#questionnaire", txt:txtQuestionnaire.btnShowQuestionnaire }],
|
|
|
|
linksCTA: [{ url:config.siteUrl+"/"+configQuestionnaires.dirWebGroups+"/"+getElementToSend[0].slug+".html", txt:txtQuestionnaire.btnShowQuestionnaire }],
|
|
|
|
mailRecipientAddress: subscriptionsOk[i].email
|
|
|
|
mailRecipientAddress: subscriptionsOk[i].email
|
|
|
|
}
|
|
|
|
}
|
|
|
|
toolMail.sendMail(subscriptionsOk[i].smtp, subscriptionsOk[i].email, getRandomQuestionnaire[0].title, tool.replaceAll(txtQuestionnaireAccess.questionnaireRetryInfoTxt, mapMail), "", mailDatas);
|
|
|
|
toolMail.sendMail(subscriptionsOk[i].smtp, subscriptionsOk[i].email, mailDatas.mailSubject, tool.replaceAll(txtQuestionnaireAccess.questionnaireRetryInfoTxt, mapMail), "", mailDatas);
|
|
|
|
db["Subscription"].update({ lastProcessingAt: now }, { where: { id : subscriptionsOk[i].SubscriptionId }, limit:1 });
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
// dans tout les cas, on enregistre l'envoi :
|
|
|
|
|
|
|
|
//db["Subscription"].update({ lastProcessingAt: now }, { where: { id : subscriptionsOk[i].SubscriptionId }, limit:1 });
|
|
|
|
}
|
|
|
|
}
|
|
|
|
res.status(200).json(subscriptionsOk);
|
|
|
|
res.status(200).json(subscriptionsOk);
|
|
|
|
}
|
|
|
|
}
|
|
|
@ -262,7 +313,6 @@ exports.addNewQuestionnaireUsers = async(req, res, next) =>
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// FONCTIONS UTILITAIRES
|
|
|
|
// FONCTIONS UTILITAIRES
|
|
|
|
|
|
|
|
|
|
|
|
// Retourne un booléen suivant si l'utilisateur a accès ou non à un questionnaire
|
|
|
|
// Retourne un booléen suivant si l'utilisateur a accès ou non à un questionnaire
|
|
|
|