mirror of
https://github.com/vale981/Vulcan
synced 2025-03-10 04:26:41 -04:00

* [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
76 lines
2.4 KiB
JavaScript
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();
|
|
}
|
|
});
|