v1.7.0
This commit is contained in:
parent
bc902f8db7
commit
c26f8b15d7
6 changed files with 127 additions and 81 deletions
|
@ -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
|
||||
});
|
||||
});
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue