Vulcan/packages/nova-newsletter/lib/server/cron.js
Comus Leong 464e20a96c eslint & clean up code, also fixed some bugs (#1515)
* [eslint] update eslint rules & add .eslintignore to ignore non-ready nova packages

* [clean-up] nova-voting

* [clean-up] [bug] nova-users: missing user parameter

* [clean-up] nova-users

* [clean-up] nova-subscribe

* [clean-up] nova-settings

* [clean-up] nova-rss

* [clean-up] [bug] nova-posts: correct UsersRemoveDeletePosts

* [clean-up] nova-posts

* [clean-up] nova-notifications

* [clean-up] [bug] nova-newsletter: no error.message on throw error

* [clean-up] nova-newsletter

* [clean-up] nova-lib

* [clean-up] nova-kadira

* [clean-up] nova-inject-data

* [clean-up] nova-getting-started

* [clean-up] nova-forms

* [clean-up] nova-events

* [clean-up] [bug] nova-embedly: no FlowRouter

* [clean-up] nova-embedly

* [clean-up] nova-email-templates

* [clean-up] nova-email

* [clean-up] nova-debug

* [clean-up] nova-core

* [clean-up] [bug] nova-comments: correct UsersRemoveDeleteComments

* [clean-up] nova-comments

* [clean-up] [bug] nova-cloudinary: use Telescope.settings.collection instand

* [clean-up] nova-cloudinary

* [clean-up] nova-categories

* [clean-up] nova-base-components

* [clean-up] nova-api

* [eslint] extends react recommended

* [clean-up] for jsx files

* [eslint] extends meteor recommended

* i forgot this one little change
2016-11-25 13:46:55 -05:00

76 lines
2.4 KiB
JavaScript

import Telescope from 'meteor/nova:lib';
import { SyncedCron } from 'meteor/percolatestudio:synced-cron';
import moment from 'moment';
import Newsletter from '../namespace.js';
const defaultFrequency = [1]; // every monday
const defaultTime = '00:00'; // GMT
SyncedCron.options = {
log: true,
collectionName: 'cronHistory',
utc: false,
collectionTTL: 172800
};
const addZero = num => {
return num < 10 ? "0"+num : num;
};
var getSchedule = function (parser) {
var frequency = Telescope.settings.get('newsletterFrequency', defaultFrequency);
var recur = parser.recur();
var schedule;
// Default is once a week (Mondays)
if (!!frequency) {
schedule = recur.on(frequency).dayOfWeek();
}
else {
schedule = recur.on(2).dayOfWeek();
}
const offsetInMinutes = new Date().getTimezoneOffset();
const GMTtime = moment.duration(Telescope.settings.get('newsletterTime', defaultTime));
const serverTime = GMTtime.subtract(offsetInMinutes, "minutes");
const serverTimeString = addZero(serverTime.hours()) + ":" + addZero(serverTime.minutes());
// console.log("// scheduled for: (GMT): "+Telescope.settings.get('newsletterTime', defaultTime));
// console.log("// server offset (minutes): "+offsetInMinutes);
// console.log("// server scheduled time (minutes): "+serverTime.asMinutes());
// console.log("// server scheduled time: "+serverTimeString);
return schedule.on(serverTimeString).time();
};
Meteor.methods({
getNextJob: function () {
var nextJob = SyncedCron.nextScheduledAtDate('scheduleNewsletter');
console.log(nextJob); // eslint-disable-line
return nextJob;
}
});
var addJob = function () {
SyncedCron.add({
name: 'scheduleNewsletter',
schedule: function(parser) {
// parser is a later.parse object
return getSchedule(parser);
},
job: function() {
// only schedule newsletter campaigns in production
if (process.env.NODE_ENV === "production" || Telescope.settings.get("enableNewsletterInDev", false)) {
console.log("// Scheduling newsletter…"); // eslint-disable-line
console.log(new Date()); // eslint-disable-line
Newsletter.scheduleNextWithMailChimp();
}
}
});
};
Meteor.startup(function () {
if (Telescope.settings.get('enableNewsletter', true) && Telescope.settings.get('mailChimpAPIKey') && Telescope.settings.get('mailChimpListId')) {
addJob();
}
});