Campaign preview and campaign test send pulls the first entry in the RSS feed and substitutes its data in `[RSS_ENTRY_*]`
This commit is contained in:
Tomas Bures 2019-08-11 16:28:11 +02:00
parent 588cf34810
commit 8cb24feca1
11 changed files with 262 additions and 57 deletions

View file

@ -358,7 +358,7 @@ async function rawGetByTx(tx, key, id) {
.first();
if (!entity) {
throw new interoperableErrors.NotFoundError();
throw new shares.throwPermissionDenied();
}
if (entity.lists) {
@ -425,6 +425,16 @@ async function getById(context, id, withPermissions = true, content = Content.AL
});
}
async function getByCid(context, cid) {
return await knex.transaction(async tx => {
const entity = await rawGetByTx(tx,'cid', cid);
await shares.enforceEntityPermissionTx(tx, context, 'campaign', entity.id, 'view');
return entity;
});
}
async function _validateAndPreprocess(tx, context, entity, isCreate, content) {
if (content === Content.ALL || content === Content.WITHOUT_SOURCE_CUSTOM || content === Content.RSS_ENTRY) {
await namespaceHelpers.validateEntity(tx, entity);
@ -991,6 +1001,10 @@ async function testSend(context, data) {
attachments: []
};
if (campaign.type === CampaignType.RSS) {
messageData.rssEntry = await feedcheck.getEntryForPreview(campaign.data.feedUrl);
}
const attachments = await files.listTx(tx, contextHelpers.getAdminContext(), 'campaign', 'attachment', campaignId);
for (const attachment of attachments) {
messageData.attachments.push({
@ -1057,6 +1071,30 @@ async function testSend(context, data) {
senders.scheduleCheck();
}
async function getRssPreview(context, campaignCid, listCid, subscriptionCid) {
const campaign = await getByCid(context, campaignCid);
await shares.enforceEntityPermission(context, 'campaign', campaign.id, 'view');
enforce(campaign.type === CampaignType.RSS);
const list = await lists.getByCid(context, listCid);
await shares.enforceEntityPermission(context, 'list', list.id, 'viewTestSubscriptions');
const subscription = await subscriptions.getByCid(context, list.id, subscriptionCid);
if (!subscription.is_test) {
shares.throwPermissionDenied();
}
const settings = {
campaign, // this prevents message sender from fetching the campaign again
rssEntry: await feedcheck.getEntryForPreview(campaign.data.feedUrl)
};
return await messageSender.getMessage(campaignCid, listCid, subscriptionCid, settings);
}
module.exports.Content = Content;
module.exports.hash = hash;
@ -1073,6 +1111,7 @@ module.exports.listLinkClicksDTAjax = listLinkClicksDTAjax;
module.exports.getByIdTx = getByIdTx;
module.exports.getById = getById;
module.exports.getByCid = getByCid;
module.exports.create = create;
module.exports.createRssTx = createRssTx;
module.exports.updateWithConsistencyCheck = updateWithConsistencyCheck;
@ -1101,4 +1140,5 @@ module.exports.getStatisticsOpened = getStatisticsOpened;
module.exports.fetchRssCampaign = fetchRssCampaign;
module.exports.testSend = testSend;
module.exports.testSend = testSend;
module.exports.getRssPreview = getRssPreview;