From b6555ffd04a4cb6c0eb2895559e931ae1b6123d8 Mon Sep 17 00:00:00 2001 From: Andris Reinman Date: Wed, 6 Jul 2016 20:10:34 +0300 Subject: [PATCH] Added links to preview delivered messages --- routes/archive.js | 92 +++++++++++++++++++++------------------------ routes/campaigns.js | 91 +++++++++++++++++++++++++++----------------- routes/triggers.js | 46 +++++++++++++++++------ 3 files changed, 133 insertions(+), 96 deletions(-) diff --git a/routes/archive.js b/routes/archive.js index 54e099b4..02e54408 100644 --- a/routes/archive.js +++ b/routes/archive.js @@ -53,58 +53,50 @@ router.get('/:campaign/:list/:subscription', (req, res, next) => { return next(err); } - campaigns.getMail(campaign.id, list.id, subscription.id, (err, mail) => { - if (err) { - req.flash('danger', err.message || err); - return res.redirect('/'); - } -/* - if (!mail && !req.user) { - err = new Error('Not Found'); - err.status = 404; - return next(err); - } -*/ - let renderAndShow = (html, renderTags) => { + let renderHtml = (html, renderTags) => { + res.render('archive/view', { + layout: 'archive/layout', + message: renderTags ? tools.formatMessage(serviceUrl, campaign, list, subscription, html) : html, + campaign, + list, + subscription + }); + }; - // rewrite links to count clicks - links.updateLinks(campaign, list, subscription, serviceUrl, html, (err, html) => { - if (err) { - req.flash('danger', err.message || err); - return res.redirect('/'); - } - - res.render('archive/view', { - layout: 'archive/layout', - message: renderTags ? tools.formatMessage(serviceUrl, campaign, list, subscription, html) : html, - campaign, - list, - subscription - }); - }); - }; - - if (campaign.sourceUrl) { - let form = tools.getMessageLinks(serviceUrl, campaign, list, subscription); - Object.keys(subscription.mergeTags).forEach(key => { - form[key] = subscription.mergeTags[key]; - }); - request.post({ - url: campaign.sourceUrl, - form - }, (err, httpResponse, body) => { - if (err) { - return next(err); - } - if (httpResponse.statusCode !== 200) { - return next(new Error('Received status code ' + httpResponse.statusCode + ' from ' + campaign.sourceUrl)); - } - renderAndShow(body && body.toString(), false); - }); - } else { - renderAndShow(campaign.html, true); + let renderAndShow = (html, renderTags) => { + if (req.query.track === 'no') { + return renderHtml(html, renderTags); } - }); + // rewrite links to count clicks + links.updateLinks(campaign, list, subscription, serviceUrl, html, (err, html) => { + if (err) { + req.flash('danger', err.message || err); + return res.redirect('/'); + } + renderHtml(html, renderTags); + }); + }; + + if (campaign.sourceUrl) { + let form = tools.getMessageLinks(serviceUrl, campaign, list, subscription); + Object.keys(subscription.mergeTags).forEach(key => { + form[key] = subscription.mergeTags[key]; + }); + request.post({ + url: campaign.sourceUrl, + form + }, (err, httpResponse, body) => { + if (err) { + return next(err); + } + if (httpResponse.statusCode !== 200) { + return next(new Error('Received status code ' + httpResponse.statusCode + ' from ' + campaign.sourceUrl)); + } + renderAndShow(body && body.toString(), false); + }); + } else { + renderAndShow(campaign.html, true); + } }); }); }); diff --git a/routes/campaigns.js b/routes/campaigns.js index 8469ef28..68be30fc 100644 --- a/routes/campaigns.js +++ b/routes/campaigns.js @@ -407,7 +407,7 @@ router.post('/preview/:id', passport.parseForm, passport.csrfProtection, (req, r return res.redirect('/lists/subscription/' + encodeURIComponent(listId) + '/add/?is-test=true'); } - res.redirect('/archive/' + encodeURIComponent(campaign) + '/' + encodeURIComponent(list) + '/' + encodeURIComponent(subscription)); + res.redirect('/archive/' + encodeURIComponent(campaign) + '/' + encodeURIComponent(list) + '/' + encodeURIComponent(subscription) + '?track=no'); }); router.get('/opened/:id', passport.csrfProtection, (req, res) => { @@ -564,29 +564,40 @@ router.post('/clicked/ajax/:id/:linkId', (req, res) => { data: [] }); } - - let columns = ['#', 'email', 'first_name', 'last_name', 'campaign_tracker__' + campaign.id + '`.`created', 'count']; - campaigns.filterClickedSubscribers(campaign, linkId, req.body, columns, (err, data, total, filteredTotal) => { + lists.get(campaign.list, (err, list) => { if (err) { return res.json({ - error: err.message || err, + error: err && err.message || err, data: [] }); } - res.json({ - draw: req.body.draw, - recordsTotal: total, - recordsFiltered: filteredTotal, - data: data.map((row, i) => [ - (Number(req.body.start) || 0) + 1 + i, - htmlescape(row.email || ''), - htmlescape(row.firstName || ''), - htmlescape(row.lastName || ''), - row.created && row.created.toISOString ? '' + row.created.toISOString() + '' : 'N/A', - row.count, - 'Edit' - ]) + let campaignCid = campaign.cid; + let listCid = list.cid; + + let columns = ['#', 'email', 'first_name', 'last_name', 'campaign_tracker__' + campaign.id + '`.`created', 'count']; + campaigns.filterClickedSubscribers(campaign, linkId, req.body, columns, (err, data, total, filteredTotal) => { + if (err) { + return res.json({ + error: err.message || err, + data: [] + }); + } + + res.json({ + draw: req.body.draw, + recordsTotal: total, + recordsFiltered: filteredTotal, + data: data.map((row, i) => [ + '' + ((Number(req.body.start) || 0) + 1 + i) + '', + htmlescape(row.email || ''), + htmlescape(row.firstName || ''), + htmlescape(row.lastName || ''), + row.created && row.created.toISOString ? '' + row.created.toISOString() + '' : 'N/A', + row.count, + 'Edit' + ]) + }); }); }); }); @@ -603,28 +614,40 @@ router.post('/status/ajax/:id/:status', (req, res) => { }); } - let columns = ['#', 'email', 'first_name', 'last_name', 'campaign__' + campaign.id + '`.`updated']; - campaigns.filterStatusSubscribers(campaign, status, req.body, columns, (err, data, total, filteredTotal) => { + lists.get(campaign.list, (err, list) => { if (err) { return res.json({ - error: err.message || err, + error: err && err.message || err, data: [] }); } - res.json({ - draw: req.body.draw, - recordsTotal: total, - recordsFiltered: filteredTotal, - data: data.map((row, i) => [ - (Number(req.body.start) || 0) + 1 + i, - htmlescape(row.email || ''), - htmlescape(row.firstName || ''), - htmlescape(row.lastName || ''), - htmlescape(row.response || ''), - row.updated && row.created.toISOString ? '' + row.updated.toISOString() + '' : 'N/A', - 'Edit' - ]) + let campaignCid = campaign.cid; + let listCid = list.cid; + + let columns = ['#', 'email', 'first_name', 'last_name', 'campaign__' + campaign.id + '`.`updated']; + campaigns.filterStatusSubscribers(campaign, status, req.body, columns, (err, data, total, filteredTotal) => { + if (err) { + return res.json({ + error: err.message || err, + data: [] + }); + } + + res.json({ + draw: req.body.draw, + recordsTotal: total, + recordsFiltered: filteredTotal, + data: data.map((row, i) => [ + '' + ((Number(req.body.start) || 0) + 1 + i) + '', + htmlescape(row.email || ''), + htmlescape(row.firstName || ''), + htmlescape(row.lastName || ''), + htmlescape(row.response || ''), + row.updated && row.created.toISOString ? '' + row.updated.toISOString() + '' : 'N/A', + 'Edit' + ]) + }); }); }); }); diff --git a/routes/triggers.js b/routes/triggers.js index d1a31f98..c83099f7 100644 --- a/routes/triggers.js +++ b/routes/triggers.js @@ -264,19 +264,41 @@ router.post('/status/ajax/:id', (req, res) => { }); } - res.json({ - draw: req.body.draw, - recordsTotal: total, - recordsFiltered: filteredTotal, - data: data.map((row, i) => [ - (Number(req.body.start) || 0) + 1 + i, - htmlescape(row.email || ''), - htmlescape(row.firstName || ''), - htmlescape(row.lastName || ''), - '' + row.created.toISOString() + '', - 'Edit' - ]) + campaigns.get(trigger.destCampaign, false, (err, campaign) => { + if (err) { + return res.json({ + error: err && err.message || err, + data: [] + }); + } + lists.get(trigger.list, (err, list) => { + if (err) { + return res.json({ + error: err && err.message || err, + data: [] + }); + } + + let campaignCid = campaign && campaign.cid; + let listCid = list && list.cid; + + res.json({ + draw: req.body.draw, + recordsTotal: total, + recordsFiltered: filteredTotal, + data: data.map((row, i) => [ + '' + ((Number(req.body.start) || 0) + 1 + i) + '', + htmlescape(row.email || ''), + htmlescape(row.firstName || ''), + htmlescape(row.lastName || ''), + '' + row.created.toISOString() + '', + 'Edit' + ]) + }); + }); }); + + }); }); });