This commit is contained in:
Andris Reinman 2016-05-12 19:21:56 +03:00
parent bc902f8db7
commit c26f8b15d7
6 changed files with 127 additions and 81 deletions

View file

@ -6,6 +6,10 @@ let tools = require('../tools');
let fields = require('./fields');
let geoip = require('geoip-ultralight');
let segments = require('./segments');
let settings = require('./settings');
let mailer = require('../mailer');
let urllib = require('url');
let log = require('npmlog');
module.exports.list = (listId, start, limit, callback) => {
listId = Number(listId) || 0;
@ -131,7 +135,7 @@ module.exports.filter = (listId, request, columns, segmentId, callback) => {
};
module.exports.addConfirmation = (listId, email, data, callback) => {
module.exports.addConfirmation = (list, email, data, callback) => {
let cid = shortid.generate();
tools.validateEmail(email, false, err => {
@ -145,12 +149,64 @@ module.exports.addConfirmation = (listId, email, data, callback) => {
}
let query = 'INSERT INTO confirmations (cid, list, email, data) VALUES (?,?,?,?)';
connection.query(query, [cid, listId, email, JSON.stringify(data || {})], (err, result) => {
connection.query(query, [cid, list.id, email, JSON.stringify(data || {})], (err, result) => {
connection.release();
if (err) {
return callback(err);
}
return callback(null, result && cid || false);
if (!result || !result.affectedRows) {
return callback(null, false);
}
fields.list(list.id, (err, fieldList) => {
if (err) {
return callback(err);
}
let encryptionKeys = [];
fields.getRow(fieldList, data).forEach(field => {
if (field.type === 'gpg' && field.value) {
encryptionKeys.push(field.value.trim());
}
});
settings.list(['defaultHomepage', 'defaultFrom', 'defaultAddress', 'serviceUrl'], (err, configItems) => {
if (err) {
return callback(err);
}
setImmediate(() => {
mailer.sendMail({
from: {
name: configItems.defaultFrom,
address: configItems.defaultAddress
},
to: {
name: [].concat(data.firstName || []).concat(data.lastName || []).join(' '),
address: email
},
subject: list.name + ': Please Confirm Subscription',
encryptionKeys
}, {
html: 'emails/confirm-html.hbs',
text: 'emails/confirm-text.hbs',
data: {
title: list.name,
contactAddress: configItems.defaultAddress,
confirmUrl: urllib.resolve(configItems.serviceUrl, '/subscription/subscribe/' + cid)
}
}, err => {
if (err) {
log.error('Subscription', err.stack);
}
});
});
return callback(null, cid);
});
});
});
});
});
@ -263,7 +319,7 @@ module.exports.insert = (listId, meta, subscription, callback) => {
return callback(err);
}
let query = 'SELECT id, status FROM `subscription__' + listId + '` WHERE email=? OR cid=? LIMIT 1';
let query = 'SELECT `id`, `status`, `cid` FROM `subscription__' + listId + '` WHERE `email`=? OR `cid`=? LIMIT 1';
connection.query(query, [meta.email, meta.cid], (err, rows) => {
if (err) {
return connection.rollback(() => {
@ -277,6 +333,7 @@ module.exports.insert = (listId, meta, subscription, callback) => {
let existing = rows && rows[0] || false;
let entryId = existing ? existing.id : false;
meta.cid = existing ? rows[0].cid : meta.cid;
meta.status = meta.status || (existing ? existing.status : 1);
let statusChange = !existing || existing.status !== meta.status;
@ -327,6 +384,7 @@ module.exports.insert = (listId, meta, subscription, callback) => {
connection.release();
return callback(null, {
entryId,
cid: meta.cid,
inserted: !existing
});
});
@ -342,6 +400,7 @@ module.exports.insert = (listId, meta, subscription, callback) => {
connection.release();
return callback(null, {
entryId,
cid: meta.cid,
inserted: !existing
});
});