From bc34ed2e39dff84ea119e79b3b97a7945d758f34 Mon Sep 17 00:00:00 2001 From: Andris Reinman Date: Sat, 30 Apr 2016 18:19:48 +0300 Subject: [PATCH] u --- lib/models/campaigns.js | 8 ++++++-- meta.json | 2 +- routes/archive.js | 6 +++--- services/sender.js | 11 ++++++----- services/tzupdate.js | 11 +++++++++-- setup/sql/upgrade-00007.sql | 14 ++++++++++++++ views/campaigns/create.hbs | 2 +- views/campaigns/edit.hbs | 6 +++--- 8 files changed, 43 insertions(+), 17 deletions(-) create mode 100644 setup/sql/upgrade-00007.sql diff --git a/lib/models/campaigns.js b/lib/models/campaigns.js index ddf1be27..641513d1 100644 --- a/lib/models/campaigns.js +++ b/lib/models/campaigns.js @@ -8,7 +8,7 @@ let segments = require('./segments'); let subscriptions = require('./subscriptions'); let shortid = require('shortid'); -let allowedKeys = ['description', 'from', 'address', 'subject', 'template', 'template_url', 'list', 'segment', 'html', 'text']; +let allowedKeys = ['description', 'from', 'address', 'subject', 'template', 'source_url', 'list', 'segment', 'html', 'text']; module.exports.list = (start, limit, callback) => { db.getConnection((err, connection) => { @@ -107,7 +107,11 @@ module.exports.filter = (request, callback) => { }); }; - processQuery(false); + processQuery({ + // only find normal campaigns at this point + where: '`type`=?', + values: [1] + }); }; module.exports.getByCid = (cid, callback) => { diff --git a/meta.json b/meta.json index dc9ea22e..ee3d8093 100644 --- a/meta.json +++ b/meta.json @@ -1,3 +1,3 @@ { - "schemaVersion": 6 + "schemaVersion": 7 } diff --git a/routes/archive.js b/routes/archive.js index 8ae7348f..3a7f3897 100644 --- a/routes/archive.js +++ b/routes/archive.js @@ -84,20 +84,20 @@ router.get('/:campaign/:list/:subscription', (req, res, next) => { }); }; - if (campaign.templateUrl) { + 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.templateUrl, + 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.templateUrl)); + return next(new Error('Received status code ' + httpResponse.statusCode + ' from ' + campaign.sourceUrl)); } renderAndShow(body && body.toString(), false); }); diff --git a/services/sender.js b/services/sender.js index c51a04ef..3ad40b87 100644 --- a/services/sender.js +++ b/services/sender.js @@ -22,8 +22,9 @@ function findUnsent(callback) { return callback(err); } - let query = 'SELECT `id`, `list`, `segment` FROM `campaigns` WHERE `status`=? AND (`scheduled` IS NULL OR `scheduled` <= NOW()) LIMIT 1'; - connection.query(query, [2], (err, rows) => { + // Find "normal" campaigns. Ignore RSS and drip campaigns at this point + let query = 'SELECT `id`, `list`, `segment` FROM `campaigns` WHERE `status`=? AND (`scheduled` IS NULL OR `scheduled` <= NOW()) AND `type`=? LIMIT 1'; + connection.query(query, [2, 1], (err, rows) => { if (err) { connection.release(); return callback(err); @@ -232,20 +233,20 @@ function formatMessage(message, callback) { }); }; - if (campaign.templateUrl) { + if (campaign.sourceUrl) { let form = tools.getMessageLinks(configItems.serviceUrl, campaign, list, message.subscription); Object.keys(message.subscription.mergeTags).forEach(key => { form[key] = message.subscription.mergeTags[key]; }); request.post({ - url: campaign.templateUrl, + url: campaign.sourceUrl, form }, (err, httpResponse, body) => { if (err) { return callback(err); } if (httpResponse.statusCode !== 200) { - return callback(new Error('Received status code ' + httpResponse.statusCode + ' from ' + campaign.templateUrl)); + return callback(new Error('Received status code ' + httpResponse.statusCode + ' from ' + campaign.sourceUrl)); } renderAndSend(body && body.toString(), '', false); }); diff --git a/services/tzupdate.js b/services/tzupdate.js index 7c8266b3..061e4056 100644 --- a/services/tzupdate.js +++ b/services/tzupdate.js @@ -1,12 +1,19 @@ 'use strict'; -// This script re-calculates timezone offsets once a day +// This script re-calculates timezone offsets once a day. +// We need this to be able to send messages using subscriber's local time +// The best option would be to use built-in timezone data of MySQL but +// the availability of timezone data is not guaranteed as it's an optional add on. +// So instead we keep a list of timezone offsets in a table that we can use to +// JOIN with subscription table. Subscription table includes timezone name for +// a subscriber and tzoffset table includes offset from UTC in minutes let moment = require('moment-timezone'); let db = require('../lib/db'); -let lastCheck = false; let log = require('npmlog'); +let lastCheck = false; + function updateTimezoneOffsets(callback) { log.verbose('UTC', 'Updating timezone offsets'); db.getConnection((err, connection) => { diff --git a/setup/sql/upgrade-00007.sql b/setup/sql/upgrade-00007.sql new file mode 100644 index 00000000..9b960748 --- /dev/null +++ b/setup/sql/upgrade-00007.sql @@ -0,0 +1,14 @@ +# Header section +# Define incrementing schema version number +SET @schema_version = '7'; + +# Rename template_url to source_url in order to use this field for different kind of urls, eg. for RSS url +ALTER TABLE `campaigns` CHANGE COLUMN `template_url` `source_url` varchar(255) CHARACTER SET ascii DEFAULT NULL; +# Add new column type that defines what kind of campaign is it. A normal campaign, (1), RSS (2) or drip (3) +ALTER TABLE `campaigns` ADD COLUMN `type` tinyint(4) unsigned NOT NULL DEFAULT '1' AFTER `cid`; +CREATE INDEX type_index ON `campaigns` (`type`); + +# Footer section +LOCK TABLES `settings` WRITE; +INSERT INTO `settings` (`key`, `value`) VALUES('db_schema_version', @schema_version) ON DUPLICATE KEY UPDATE `value`=@schema_version; +UNLOCK TABLES; diff --git a/views/campaigns/create.hbs b/views/campaigns/create.hbs index 8b238f31..02f62331 100644 --- a/views/campaigns/create.hbs +++ b/views/campaigns/create.hbs @@ -72,7 +72,7 @@ Or alternatively use an URL as the message content source:

- + If a message is sent then this URL will be POSTed to using Merge Tags as POST body. Use this if you want to generate the HTML message yourself
diff --git a/views/campaigns/edit.hbs b/views/campaigns/edit.hbs index e33bcb73..0ab11516 100644 --- a/views/campaigns/edit.hbs +++ b/views/campaigns/edit.hbs @@ -106,11 +106,11 @@ Template Settings - {{#if templateUrl}} + {{#if sourceUrl}}
- +
- + If a message is sent then this URL will be POSTed to using Merge Tags as POST body. Use this if you want to generate the HTML message yourself