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