2016-11-26 02:46:55 +08:00
|
|
|
/* eslint-disable no-console */
|
|
|
|
|
2016-06-23 17:24:58 +09:00
|
|
|
// newsletter scheduling with MailChimp
|
|
|
|
|
2017-03-23 16:27:59 +09:00
|
|
|
import Posts from 'meteor/vulcan:posts';
|
2017-03-24 10:35:19 +09:00
|
|
|
import VulcanEmail from 'meteor/vulcan:email';
|
2016-06-28 17:33:30 +09:00
|
|
|
import htmlToText from 'html-to-text';
|
|
|
|
import moment from 'moment';
|
2016-11-26 02:46:55 +08:00
|
|
|
import Newsletter from '../../namespace.js';
|
|
|
|
import MailChimp from './mailchimp_api.js';
|
2017-03-23 16:27:59 +09:00
|
|
|
import { Utils, getSetting } from 'meteor/vulcan:core';
|
2016-06-23 17:24:58 +09:00
|
|
|
|
2016-06-28 17:33:30 +09:00
|
|
|
const defaultPosts = 5;
|
|
|
|
|
|
|
|
Newsletter.scheduleNextWithMailChimp = function (isTest = false) {
|
2016-12-12 15:00:56 +09:00
|
|
|
var posts = Newsletter.getPosts(getSetting('postsPerNewsletter', defaultPosts));
|
2016-06-23 17:24:58 +09:00
|
|
|
if(!!posts.length){
|
|
|
|
return Newsletter.scheduleWithMailChimp(Newsletter.build(posts), isTest);
|
|
|
|
}else{
|
2017-01-20 14:12:59 +09:00
|
|
|
var result = {result: 'No posts to schedule today…'};
|
2016-06-23 17:24:58 +09:00
|
|
|
return result;
|
|
|
|
}
|
|
|
|
};
|
|
|
|
|
2016-06-28 17:33:30 +09:00
|
|
|
Newsletter.scheduleWithMailChimp = function (campaign, isTest = false) {
|
2016-06-23 17:24:58 +09:00
|
|
|
|
2016-12-12 15:00:56 +09:00
|
|
|
var apiKey = getSetting('mailChimpAPIKey');
|
|
|
|
var listId = getSetting('mailChimpListId');
|
2016-06-23 17:24:58 +09:00
|
|
|
|
|
|
|
if(!!apiKey && !!listId){
|
|
|
|
|
|
|
|
var wordCount = 15;
|
|
|
|
var subject = campaign.subject;
|
|
|
|
while (subject.length >= 150){
|
2016-12-12 11:34:28 +09:00
|
|
|
subject = Utils.trimWords(subject, wordCount);
|
2016-06-23 17:24:58 +09:00
|
|
|
wordCount--;
|
|
|
|
}
|
|
|
|
|
|
|
|
try {
|
|
|
|
|
|
|
|
var api = new MailChimp(apiKey);
|
|
|
|
var text = htmlToText.fromString(campaign.html, {wordwrap: 130});
|
2016-12-12 15:00:56 +09:00
|
|
|
var defaultEmail = getSetting('defaultEmail');
|
2016-06-23 17:24:58 +09:00
|
|
|
var campaignOptions = {
|
|
|
|
type: 'regular',
|
|
|
|
options: {
|
|
|
|
list_id: listId,
|
|
|
|
subject: subject,
|
|
|
|
from_email: defaultEmail,
|
2016-12-12 15:00:56 +09:00
|
|
|
from_name: getSetting('title')
|
2016-06-23 17:24:58 +09:00
|
|
|
},
|
|
|
|
content: {
|
|
|
|
html: campaign.html,
|
|
|
|
text: text
|
|
|
|
}
|
|
|
|
};
|
|
|
|
|
2016-06-28 17:33:30 +09:00
|
|
|
console.log('// Creating campaign…');
|
|
|
|
console.log('// Subject: '+subject)
|
2016-06-23 17:24:58 +09:00
|
|
|
// create campaign
|
|
|
|
var mailchimpNewsletter = api.call( 'campaigns', 'create', campaignOptions);
|
|
|
|
|
2016-06-28 17:33:30 +09:00
|
|
|
console.log('// Newsletter created');
|
2016-06-23 17:24:58 +09:00
|
|
|
// console.log(campaign)
|
|
|
|
|
|
|
|
var scheduledTime = moment().utcOffset(0).add(1, 'hours').format("YYYY-MM-DD HH:mm:ss");
|
|
|
|
|
|
|
|
var scheduleOptions = {
|
|
|
|
cid: mailchimpNewsletter.id,
|
|
|
|
schedule_time: scheduledTime
|
|
|
|
};
|
|
|
|
|
|
|
|
// schedule campaign
|
2016-11-26 02:46:55 +08:00
|
|
|
var schedule = api.call('campaigns', 'schedule', scheduleOptions); // eslint-disable-line
|
2016-06-23 17:24:58 +09:00
|
|
|
|
|
|
|
console.log('// Newsletter scheduled for '+scheduledTime);
|
|
|
|
// console.log(schedule)
|
|
|
|
|
|
|
|
// if this is not a test, mark posts as sent
|
|
|
|
if (!isTest)
|
2016-11-26 02:46:55 +08:00
|
|
|
var updated = Posts.update({_id: {$in: campaign.postIds}}, {$set: {scheduledAt: new Date()}}, {multi: true}) // eslint-disable-line
|
2016-06-23 17:24:58 +09:00
|
|
|
|
|
|
|
// send confirmation email
|
2017-03-24 10:35:19 +09:00
|
|
|
var confirmationHtml = VulcanEmail.getTemplate('newsletterConfirmation')({
|
2016-06-23 17:24:58 +09:00
|
|
|
time: scheduledTime,
|
|
|
|
newsletterLink: mailchimpNewsletter.archive_url,
|
|
|
|
subject: subject
|
|
|
|
});
|
2017-03-24 10:35:19 +09:00
|
|
|
VulcanEmail.send(defaultEmail, 'Newsletter scheduled', VulcanEmail.buildTemplate(confirmationHtml));
|
2016-06-23 17:24:58 +09:00
|
|
|
|
|
|
|
} catch (error) {
|
|
|
|
console.log(error);
|
|
|
|
}
|
|
|
|
return subject;
|
|
|
|
}
|
2016-11-26 02:46:55 +08:00
|
|
|
};
|