Added VERP support
This commit is contained in:
parent
06d5e0d9bf
commit
e5e71e0407
13 changed files with 374 additions and 148 deletions
|
@ -5,6 +5,7 @@ let db = require('../db');
|
|||
let lists = require('./lists');
|
||||
let templates = require('./templates');
|
||||
let segments = require('./segments');
|
||||
let subscriptions = require('./subscriptions');
|
||||
let shortid = require('shortid');
|
||||
|
||||
let allowedKeys = ['description', 'from', 'address', 'subject', 'template', 'list', 'segment', 'html', 'text'];
|
||||
|
@ -424,7 +425,7 @@ module.exports.getMail = (campaignId, listId, subscriptionId, callback) => {
|
|||
});
|
||||
};
|
||||
|
||||
module.exports.findMail = (responseId, callback) => {
|
||||
module.exports.findMailByResponse = (responseId, callback) => {
|
||||
db.getConnection((err, connection) => {
|
||||
if (err) {
|
||||
return callback(err);
|
||||
|
@ -466,6 +467,105 @@ module.exports.findMail = (responseId, callback) => {
|
|||
});
|
||||
};
|
||||
|
||||
module.exports.findMailByCampaign = (campaignHeader, callback) => {
|
||||
if (!campaignHeader) {
|
||||
return callback(null, false);
|
||||
}
|
||||
|
||||
let parts = campaignHeader.split('.');
|
||||
let cCid = parts.shift();
|
||||
let sCid = parts.pop();
|
||||
|
||||
db.getConnection((err, connection) => {
|
||||
if (err) {
|
||||
return callback(err);
|
||||
}
|
||||
let query = 'SELECT `id`, `list`, `segment` FROM `campaigns` WHERE `cid`=? LIMIT 1';
|
||||
connection.query(query, [cCid], (err, rows) => {
|
||||
if (err) {
|
||||
connection.release();
|
||||
return callback(err);
|
||||
}
|
||||
if (!rows || !rows.length) {
|
||||
connection.release();
|
||||
return callback(null, false);
|
||||
}
|
||||
|
||||
let campaignId = rows[0].id;
|
||||
let listId = rows[0].list;
|
||||
let segmentId = rows[0].segment;
|
||||
|
||||
let query = 'SELECT id FROM `subscription__' + listId + '` WHERE cid=? LIMIT 1';
|
||||
connection.query(query, [sCid], (err, rows) => {
|
||||
if (err) {
|
||||
connection.release();
|
||||
return callback(err);
|
||||
}
|
||||
if (!rows || !rows.length) {
|
||||
connection.release();
|
||||
return callback(null, false);
|
||||
}
|
||||
|
||||
let subscriptionId = rows[0].id;
|
||||
|
||||
let query = 'SELECT `id`, `list`, `segment`, `subscription` FROM `campaign__' + campaignId + '` WHERE `list`=? AND `segment`=? AND `subscription`=? LIMIT 1';
|
||||
connection.query(query, [listId, segmentId, subscriptionId], (err, rows) => {
|
||||
connection.release();
|
||||
if (err) {
|
||||
return callback(err);
|
||||
}
|
||||
if (!rows || !rows.length) {
|
||||
return callback(null, false);
|
||||
}
|
||||
|
||||
let message = rows[0];
|
||||
message.campaign = campaignId;
|
||||
|
||||
return callback(null, message);
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
};
|
||||
|
||||
module.exports.updateMessage = (message, status, updateSubscription, callback) => {
|
||||
db.getConnection((err, connection) => {
|
||||
if (err) {
|
||||
return callback(err);
|
||||
}
|
||||
|
||||
let statusCode;
|
||||
if (status === 'unsubscribed') {
|
||||
statusCode = 2;
|
||||
}
|
||||
if (status === 'bounced') {
|
||||
statusCode = 3;
|
||||
}
|
||||
if (status === 'complained') {
|
||||
statusCode = 4;
|
||||
}
|
||||
|
||||
let query = 'UPDATE `campaigns` SET `' + status + '`=`' + status + '`+1 WHERE id=? LIMIT 1';
|
||||
connection.query(query, [message.campaign], () => {
|
||||
|
||||
let query = 'UPDATE `campaign__' + message.campaign + '` SET status=?, updated=NOW() WHERE id=? LIMIT 1';
|
||||
connection.query(query, [statusCode, message.id], err => {
|
||||
connection.release();
|
||||
if (err) {
|
||||
return callback(err);
|
||||
}
|
||||
|
||||
if (updateSubscription) {
|
||||
subscriptions.changeStatus(message.subscription, message.list, statusCode === 2 ? message.campaign : false, statusCode, callback);
|
||||
} else {
|
||||
return callback(null, true);
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
});
|
||||
};
|
||||
|
||||
function createCampaignTables(id, callback) {
|
||||
let query = 'CREATE TABLE `campaign__' + id + '` LIKE campaign';
|
||||
db.getConnection((err, connection) => {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue