Panels with campaign statistics and some fixes in computation of clicks.
This commit is contained in:
parent
ba996d845d
commit
d103a2cc79
18 changed files with 811 additions and 96 deletions
|
@ -8,6 +8,20 @@ const interoperableErrors = require('../../shared/interoperable-errors');
|
|||
|
||||
const trackImg = Buffer.from('R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7', 'base64');
|
||||
|
||||
router.getAsync('/:campaign/:list/:subscription/:link', async (req, res) => {
|
||||
const link = await links.resolve(req.params.link);
|
||||
|
||||
if (link) {
|
||||
// In Mailtrain v1 we would do the URL expansion here based on merge tags. We don't do it here anymore. Instead, the URLs are expanded when message is sent out (in links.updateLinks)
|
||||
res.redirect(link.url);
|
||||
|
||||
await links.countLink(req.ip, req.headers['user-agent'], req.params.campaign, req.params.list, req.params.subscription, link.id);
|
||||
} else {
|
||||
log.error('Redirect', 'Unresolved URL: <%s>', req.url);
|
||||
throw new interoperableErrors.NotFoundError('Oops, we couldn\'t find a link for the URL you clicked');
|
||||
}
|
||||
});
|
||||
|
||||
router.getAsync('/:campaign/:list/:subscription', async (req, res) => {
|
||||
res.writeHead(200, {
|
||||
'Content-Type': 'image/gif',
|
||||
|
@ -20,18 +34,4 @@ router.getAsync('/:campaign/:list/:subscription', async (req, res) => {
|
|||
});
|
||||
|
||||
|
||||
router.getAsync('/:campaign/:list/:subscription/:link', async (req, res) => {
|
||||
const link = await links.resolve(req.params.link);
|
||||
|
||||
if (link) {
|
||||
// In Mailtrain v1 we would do the URL expansion here based on merge tags. We don't do it here anymore. Instead, the URLs are expanded when message is sent out (in links.updateLinks)
|
||||
res.redirect(url);
|
||||
|
||||
await links.countLink(req.ip, req.headers['user-agent'], req.params.campaign, req.params.list, req.params.subscription, link.id);
|
||||
} else {
|
||||
log.error('Redirect', 'Unresolved URL: <%s>', req.url);
|
||||
throw new interoperableErrors.NotFoundError('Oops, we couldn\'t find a link for the URL you clicked');
|
||||
}
|
||||
});
|
||||
|
||||
module.exports = router;
|
||||
|
|
|
@ -94,5 +94,26 @@ router.postAsync('/campaign-disable/:campaignId', passport.loggedIn, passport.cs
|
|||
return res.json(await campaigns.disable(req.context, castToInteger(req.params.campaignId), null));
|
||||
});
|
||||
|
||||
router.getAsync('/campaign-statistics/:campaignId/overview', passport.loggedIn, async (req, res) => {
|
||||
return res.json(await campaigns.getStatisticsOverview(req.context, castToInteger(req.params.campaignId)));
|
||||
});
|
||||
|
||||
router.getAsync('/campaign-statistics/:campaignId/opened', passport.loggedIn, async (req, res) => {
|
||||
return res.json(await campaigns.getStatisticsOpened(req.context, castToInteger(req.params.campaignId)));
|
||||
});
|
||||
|
||||
router.postAsync('/campaigns-subscribers-by-status-table/:campaignId/:status', passport.loggedIn, async (req, res) => {
|
||||
return res.json(await campaigns.listSentByStatusDTAjax(req.context, castToInteger(req.params.campaignId), castToInteger(req.params.status), req.body));
|
||||
});
|
||||
|
||||
router.postAsync('/campaigns-opens-table/:campaignId', passport.loggedIn, async (req, res) => {
|
||||
return res.json(await campaigns.listOpensDTAjax(req.context, castToInteger(req.params.campaignId), req.body));
|
||||
});
|
||||
|
||||
router.postAsync('/campaigns-link-clicks-table/:campaignId', passport.loggedIn, async (req, res) => {
|
||||
return res.json(await campaigns.listLinkClicksDTAjax(req.context, castToInteger(req.params.campaignId), req.body));
|
||||
});
|
||||
|
||||
|
||||
|
||||
module.exports = router;
|
Loading…
Add table
Add a link
Reference in a new issue