diff --git a/packages/telescope-newsletter/i18n/en.i18n.json b/packages/telescope-newsletter/i18n/en.i18n.json index a42db8e84..73bf1072a 100644 --- a/packages/telescope-newsletter/i18n/en.i18n.json +++ b/packages/telescope-newsletter/i18n/en.i18n.json @@ -9,6 +9,7 @@ "mailChimpListId": "MailChimp List ID", "postsPerNewsletter": "Posts per Newsletter", "newsletterFrequency": "Newsletter Frequency", + "newsletterTime": "Newsletter Time", "enableNewsletter": "Enable Newsletter", "autoSubscribe": "Auto Subscribe" } \ No newline at end of file diff --git a/packages/telescope-newsletter/lib/newsletter.js b/packages/telescope-newsletter/lib/newsletter.js index c831a267e..2e5c0b22d 100644 --- a/packages/telescope-newsletter/lib/newsletter.js +++ b/packages/telescope-newsletter/lib/newsletter.js @@ -18,11 +18,11 @@ campaignSchema = new SimpleSchema({ posts: { type: [String], optional: true - }, + }, webHits: { type: Number, optional: true - }, + }, }); Campaigns = new Meteor.Collection("campaigns", { @@ -141,6 +141,21 @@ var newsletterFrequency = { } addToSettingsSchema.push(newsletterFrequency); +var newsletterTime = { + propertyName: 'newsletterTime', + propertySchema: { + type: String, + optional: true, + defaultValue: '00:00', + autoform: { + group: 'newsletter', + instructions: 'Defaults to 00:00/12:00 AM. Time to send out newsletter if enabled.', + type: 'time' + } + } +} +addToSettingsSchema.push(newsletterTime); + var autoSubscribe = { propertyName: 'autoSubscribe', propertySchema: { @@ -160,9 +175,9 @@ viewParameters.campaign = function (terms) { find: { scheduledAt: {$exists: false}, postedAt: { - $gte: terms.after + $gte: terms.after } - }, + }, options: {sort: {sticky: -1, score: -1}} }; } diff --git a/packages/telescope-newsletter/lib/server/cron.js b/packages/telescope-newsletter/lib/server/cron.js index a3ef7cdb5..b438e336e 100644 --- a/packages/telescope-newsletter/lib/server/cron.js +++ b/packages/telescope-newsletter/lib/server/cron.js @@ -1,36 +1,38 @@ SyncedCron.options = { log: false, collectionName: 'cronHistory', - utc: false, + utc: false, collectionTTL: 172800 } -Later = Npm.require('later'); - defaultFrequency = 7; // once a week +defaultTime = '00:00'; -getSchedule = function (parser) { +var getSchedule = function (parser) { var frequency = getSetting('newsletterFrequency', defaultFrequency); + var recur = parser.recur(); + var schedule; switch (frequency) { case 1: // every day - // sched = {schedules: [{dw: [1,2,3,4,5,6,0]}]}; - return parser.recur().on(1,2,3,4,5,6,0).dayOfWeek(); + // sched = {schedules: [{dw: [1,2,3,4,5,6,0]}]}; + schedule = recur.on(1,2,3,4,5,6,0).dayOfWeek(); case 2: // Mondays, Wednesdays, Fridays - // sched = {schedules: [{dw: [2,4,6]}]}; - return parser.recur().on(2,4,6).dayOfWeek(); + // sched = {schedules: [{dw: [2,4,6]}]}; + schedule = recur.on(2,4,6).dayOfWeek(); case 3: // Mondays, Thursdays - // sched = {schedules: [{dw: [2,5]}]}; - return parser.recur().on(2,5).dayOfWeek(); + // sched = {schedules: [{dw: [2,5]}]}; + schedule = recur.on(2,5).dayOfWeek(); case 7: // Once a week (Mondays) - // sched = {schedules: [{dw: [2]}]}; - return parser.recur().on(2).dayOfWeek(); + // sched = {schedules: [{dw: [2]}]}; + schedule = recur.on(2).dayOfWeek(); default: // Once a week (Mondays) - return parser.recur().on(2).dayOfWeek(); - } + schedule = recur.on(2).dayOfWeek(); + } + return schedule.on(getSetting('newsletterTime', defaultTime)).time(); } Meteor.methods({ @@ -41,18 +43,13 @@ Meteor.methods({ } }); -resetNewsletterJob = function () { - SyncedCron.stop(); - addJob(); -} - var addJob = function () { SyncedCron.add({ name: 'scheduleNewsletter', schedule: function(parser) { // parser is a later.parse object return getSchedule(parser); - }, + }, job: function() { scheduleNextCampaign(); } diff --git a/packages/telescope-newsletter/package.js b/packages/telescope-newsletter/package.js index 56f88525f..44bc765df 100644 --- a/packages/telescope-newsletter/package.js +++ b/packages/telescope-newsletter/package.js @@ -5,15 +5,14 @@ Package.describe({ }); Npm.depends({ - "html-to-text": "0.1.0", - "later": "1.1.6" + "html-to-text": "0.1.0" }); Package.onUse(function (api) { api.use([ - 'telescope-lib', - 'telescope-base', + 'telescope-lib', + 'telescope-base', 'aldeed:simple-schema', 'iron:router', 'miro:mailchimp', @@ -48,7 +47,7 @@ Package.onUse(function (api) { api.add_files([ 'lib/server/campaign.js', 'lib/server/cron.js', - 'lib/server/mailchimp.js', + 'lib/server/mailchimp.js', 'lib/server/routes.js', 'lib/server/templates/emailDigest.handlebars', 'lib/server/templates/emailDigestConfirmation.handlebars', @@ -63,7 +62,7 @@ Package.onUse(function (api) { "i18n/it.i18n.json", "i18n/zh-CN.i18n.json", ], ["client", "server"]); - + api.export([ 'resetNewsletterSchedule' ]);