mirror of
https://github.com/vale981/Vulcan
synced 2025-03-06 01:51:40 -05:00
fixing newsletter sync/async issue
This commit is contained in:
parent
f01f084525
commit
1fd47b23f0
4 changed files with 88 additions and 346 deletions
|
@ -39,6 +39,7 @@
|
|||
display: inline-block;
|
||||
float: none;
|
||||
vertical-align: middle;
|
||||
position: relative;
|
||||
}
|
||||
.show-loader{
|
||||
pointer-events:none;
|
||||
|
@ -60,6 +61,7 @@
|
|||
left: 0px;
|
||||
right: 0px;
|
||||
display: block;
|
||||
opacity: 0.8;
|
||||
}
|
||||
|
||||
@media screen and (max-width: 30em) {
|
||||
|
|
|
@ -81,6 +81,6 @@ scheduleNextCampaign = function (isTest) {
|
|||
Meteor.methods({
|
||||
testCampaign: function () {
|
||||
if(isAdminById(this.userId))
|
||||
scheduleNextCampaign(true);
|
||||
return scheduleNextCampaign(true);
|
||||
}
|
||||
});
|
||||
|
|
|
@ -1,80 +1,70 @@
|
|||
var htmlToText = Npm.require('html-to-text');
|
||||
|
||||
scheduleCampaign = function (campaign, isTest) {
|
||||
var isTest = typeof isTest === 'undefined' ? false : isTest;
|
||||
|
||||
MailChimpOptions.apiKey = getSetting('mailChimpAPIKey');
|
||||
MailChimpOptions.listId = getSetting('mailChimpListId');
|
||||
var apiKey = getSetting('mailChimpAPIKey');
|
||||
var listId = getSetting('mailChimpListId');
|
||||
|
||||
var htmlToText = Npm.require('html-to-text');
|
||||
var text = htmlToText.fromString(campaign.html, {
|
||||
wordwrap: 130
|
||||
});
|
||||
var defaultEmail = getSetting('defaultEmail');
|
||||
var result= '';
|
||||
|
||||
if(!!MailChimpOptions.apiKey && !!MailChimpOptions.listId){
|
||||
|
||||
console.log( 'Creating campaign…');
|
||||
if(!!apiKey && !!listId){
|
||||
|
||||
try {
|
||||
var api = new MailChimp();
|
||||
} catch ( error ) {
|
||||
console.log( error.message );
|
||||
|
||||
var api = new MailChimp(apiKey);
|
||||
var text = htmlToText.fromString(campaign.html, {wordwrap: 130});
|
||||
var defaultEmail = getSetting('defaultEmail');
|
||||
var campaignOptions = {
|
||||
type: 'regular',
|
||||
options: {
|
||||
list_id: listId,
|
||||
subject: campaign.subject,
|
||||
from_email: defaultEmail,
|
||||
from_name: getSetting('title')+ ' Top Posts',
|
||||
},
|
||||
content: {
|
||||
html: campaign.html,
|
||||
text: text
|
||||
}
|
||||
};
|
||||
|
||||
console.log( '// Creating campaign…');
|
||||
|
||||
// create campaign
|
||||
var campaign = api.call( 'campaigns', 'create', campaignOptions);
|
||||
|
||||
console.log( '// Campaign created');
|
||||
// console.log(campaign)
|
||||
|
||||
var scheduledTime = moment().zone(0).add(1, 'hours').format("YYYY-MM-DD HH:mm:ss");
|
||||
|
||||
var scheduleOptions = {
|
||||
cid: campaign.id,
|
||||
schedule_time: scheduledTime
|
||||
};
|
||||
|
||||
// schedule campaign
|
||||
var schedule = api.call('campaigns', 'schedule', scheduleOptions);
|
||||
|
||||
console.log('// Campaign scheduled for '+scheduledTime);
|
||||
// console.log(schedule)
|
||||
|
||||
// if this is not a test, mark posts as sent
|
||||
if (!isTest)
|
||||
Posts.update({_id: {$in: campaign.postIds}}, {$set: {scheduledAt: new Date()}}, {multi: true})
|
||||
|
||||
// send confirmation email
|
||||
var confirmationHtml = getEmailTemplate('emailDigestConfirmation')({
|
||||
time: scheduledTime,
|
||||
newsletterLink: campaign.archive_url,
|
||||
subject: campaign.subject
|
||||
});
|
||||
sendEmail(defaultEmail, 'Newsletter scheduled', buildEmailTemplate(confirmationHtml));
|
||||
|
||||
} catch (error) {
|
||||
console.log(error);
|
||||
}
|
||||
|
||||
api.call( 'campaigns', 'create', {
|
||||
type: 'regular',
|
||||
options: {
|
||||
list_id: MailChimpOptions.listId,
|
||||
subject: campaign.subject,
|
||||
from_email: getSetting('defaultEmail'),
|
||||
from_name: getSetting('title')+ ' Top Posts',
|
||||
},
|
||||
content: {
|
||||
html: campaign.html,
|
||||
text: text
|
||||
}
|
||||
}, Meteor.bindEnvironment(function ( error, result ) {
|
||||
if ( error ) {
|
||||
console.log( error.message );
|
||||
result = error.message;
|
||||
} else {
|
||||
console.log( 'Campaign created');
|
||||
// console.log( JSON.stringify( result ) );
|
||||
|
||||
var cid = result.id;
|
||||
var archive_url = result.archive_url;
|
||||
var scheduledTime = moment().zone(0).add(1, 'hours').format("YYYY-MM-DD HH:mm:ss");
|
||||
|
||||
api.call('campaigns', 'schedule', {
|
||||
cid: cid,
|
||||
schedule_time: scheduledTime
|
||||
}, Meteor.bindEnvironment(function ( error, result) {
|
||||
if (error) {
|
||||
console.log( error.message );
|
||||
result = error.message;
|
||||
}else{
|
||||
console.log('Campaign scheduled for '+scheduledTime);
|
||||
console.log(campaign.subject)
|
||||
// console.log( JSON.stringify( result ) );
|
||||
|
||||
// if this is not a test, mark posts as sent
|
||||
if (!isTest)
|
||||
Posts.update({_id: {$in: campaign.postIds}}, {$set: {scheduledAt: new Date()}}, {multi: true})
|
||||
|
||||
// send confirmation email
|
||||
var confirmationHtml = getEmailTemplate('emailDigestConfirmation')({
|
||||
time: scheduledTime,
|
||||
newsletterLink: archive_url,
|
||||
subject: campaign.subject
|
||||
});
|
||||
sendEmail(defaultEmail, 'Newsletter scheduled', buildEmailTemplate(confirmationHtml));
|
||||
result = campaign.subject;
|
||||
}
|
||||
}));
|
||||
}
|
||||
}));
|
||||
return campaign.subject;
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
addToMailChimpList = function(userOrEmail, confirm, done){
|
||||
|
@ -83,6 +73,7 @@ addToMailChimpList = function(userOrEmail, confirm, done){
|
|||
|
||||
var confirm = (typeof confirm === 'undefined') ? false : confirm // default to no confirmation
|
||||
|
||||
// not sure if it's really necessary that the function take both user and email?
|
||||
if (typeof userOrEmail == "string") {
|
||||
user = null;
|
||||
email = userOrEmail;
|
||||
|
@ -93,37 +84,37 @@ addToMailChimpList = function(userOrEmail, confirm, done){
|
|||
throw 'User must have an email address';
|
||||
}
|
||||
|
||||
MailChimpOptions.apiKey = getSetting('mailChimpAPIKey');
|
||||
MailChimpOptions.listId = getSetting('mailChimpListId');
|
||||
var apiKey = getSetting('mailChimpAPIKey');
|
||||
var listId = getSetting('mailChimpListId');
|
||||
|
||||
// add a user to a MailChimp list.
|
||||
// called when a new user is created, or when an existing user fills in their email
|
||||
if(!!MailChimpOptions.apiKey && !!MailChimpOptions.listId){
|
||||
|
||||
console.log('adding "'+email+'" to MailChimp list…');
|
||||
if(!!apiKey && !!listId){
|
||||
|
||||
try {
|
||||
var api = new MailChimp();
|
||||
|
||||
console.log('// Adding "'+email+'" to MailChimp list…');
|
||||
|
||||
var api = new MailChimp(apiKey);
|
||||
var subscribeOptions = {
|
||||
id: listId,
|
||||
email: {"email": email},
|
||||
double_optin: confirm
|
||||
};
|
||||
|
||||
// subscribe user
|
||||
var subscribe = api.call('lists', 'subscribe', subscribeOptions);
|
||||
|
||||
// mark user as subscribed
|
||||
if(!!user)
|
||||
setUserSetting('subscribedToNewsletter', true, user);
|
||||
|
||||
console.log("// User subscribed");
|
||||
|
||||
} catch (error) {
|
||||
console.log( error.message );
|
||||
console.log( error.message );
|
||||
}
|
||||
|
||||
api.call('lists', 'subscribe', {
|
||||
id: MailChimpOptions.listId,
|
||||
email: {"email": email},
|
||||
double_optin: confirm
|
||||
}, Meteor.bindEnvironment(function ( error, result ) {
|
||||
if (error) {
|
||||
console.log( error.message );
|
||||
done(error, null);
|
||||
} else {
|
||||
console.log( JSON.stringify( result ) );
|
||||
if(!!user)
|
||||
setUserSetting('subscribedToNewsletter', true, user);
|
||||
done(null, result);
|
||||
}
|
||||
}));
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
syncAddToMailChimpList = Async.wrap(addToMailChimpList);
|
||||
|
@ -144,4 +135,4 @@ Meteor.methods({
|
|||
throw new Meteor.Error(500, error.message);
|
||||
}
|
||||
}
|
||||
})
|
||||
});
|
|
@ -1,251 +0,0 @@
|
|||
{
|
||||
"dependencies": [
|
||||
[
|
||||
"aldeed:simple-schema",
|
||||
"1.2.0"
|
||||
],
|
||||
[
|
||||
"application-configuration",
|
||||
"1.0.3"
|
||||
],
|
||||
[
|
||||
"base64",
|
||||
"1.0.1"
|
||||
],
|
||||
[
|
||||
"binary-heap",
|
||||
"1.0.1"
|
||||
],
|
||||
[
|
||||
"blaze",
|
||||
"2.0.3"
|
||||
],
|
||||
[
|
||||
"blaze-tools",
|
||||
"1.0.1"
|
||||
],
|
||||
[
|
||||
"boilerplate-generator",
|
||||
"1.0.1"
|
||||
],
|
||||
[
|
||||
"callback-hook",
|
||||
"1.0.1"
|
||||
],
|
||||
[
|
||||
"check",
|
||||
"1.0.2"
|
||||
],
|
||||
[
|
||||
"cmather:handlebars-server",
|
||||
"2.0.0"
|
||||
],
|
||||
[
|
||||
"coffeescript",
|
||||
"1.0.4"
|
||||
],
|
||||
[
|
||||
"ddp",
|
||||
"1.0.12"
|
||||
],
|
||||
[
|
||||
"deps",
|
||||
"1.0.5"
|
||||
],
|
||||
[
|
||||
"ejson",
|
||||
"1.0.4"
|
||||
],
|
||||
[
|
||||
"follower-livedata",
|
||||
"1.0.2"
|
||||
],
|
||||
[
|
||||
"geojson-utils",
|
||||
"1.0.1"
|
||||
],
|
||||
[
|
||||
"handlebars",
|
||||
"1.0.1"
|
||||
],
|
||||
[
|
||||
"html-tools",
|
||||
"1.0.2"
|
||||
],
|
||||
[
|
||||
"htmljs",
|
||||
"1.0.2"
|
||||
],
|
||||
[
|
||||
"id-map",
|
||||
"1.0.1"
|
||||
],
|
||||
[
|
||||
"iron:controller",
|
||||
"1.0.3"
|
||||
],
|
||||
[
|
||||
"iron:core",
|
||||
"1.0.4"
|
||||
],
|
||||
[
|
||||
"iron:dynamic-template",
|
||||
"1.0.5"
|
||||
],
|
||||
[
|
||||
"iron:layout",
|
||||
"1.0.5"
|
||||
],
|
||||
[
|
||||
"iron:location",
|
||||
"1.0.4"
|
||||
],
|
||||
[
|
||||
"iron:middleware-stack",
|
||||
"1.0.3"
|
||||
],
|
||||
[
|
||||
"iron:router",
|
||||
"1.0.3"
|
||||
],
|
||||
[
|
||||
"iron:url",
|
||||
"1.0.4"
|
||||
],
|
||||
[
|
||||
"jquery",
|
||||
"1.0.1"
|
||||
],
|
||||
[
|
||||
"json",
|
||||
"1.0.1"
|
||||
],
|
||||
[
|
||||
"logging",
|
||||
"1.0.5"
|
||||
],
|
||||
[
|
||||
"meteor",
|
||||
"1.1.3"
|
||||
],
|
||||
[
|
||||
"meteorhacks:async",
|
||||
"1.0.0"
|
||||
],
|
||||
[
|
||||
"meteorhacks:npm",
|
||||
"1.2.1"
|
||||
],
|
||||
[
|
||||
"minifiers",
|
||||
"1.1.2"
|
||||
],
|
||||
[
|
||||
"minimongo",
|
||||
"1.0.5"
|
||||
],
|
||||
[
|
||||
"mongo",
|
||||
"1.0.9"
|
||||
],
|
||||
[
|
||||
"mrt:cookies",
|
||||
"0.3.0"
|
||||
],
|
||||
[
|
||||
"mrt:mailchimp",
|
||||
"0.4.0"
|
||||
],
|
||||
[
|
||||
"observe-sequence",
|
||||
"1.0.3"
|
||||
],
|
||||
[
|
||||
"ordered-dict",
|
||||
"1.0.1"
|
||||
],
|
||||
[
|
||||
"percolatestudio:synced-cron",
|
||||
"1.1.0"
|
||||
],
|
||||
[
|
||||
"random",
|
||||
"1.0.1"
|
||||
],
|
||||
[
|
||||
"reactive-dict",
|
||||
"1.0.4"
|
||||
],
|
||||
[
|
||||
"reactive-var",
|
||||
"1.0.3"
|
||||
],
|
||||
[
|
||||
"retry",
|
||||
"1.0.1"
|
||||
],
|
||||
[
|
||||
"routepolicy",
|
||||
"1.0.2"
|
||||
],
|
||||
[
|
||||
"session",
|
||||
"1.0.4"
|
||||
],
|
||||
[
|
||||
"spacebars",
|
||||
"1.0.3"
|
||||
],
|
||||
[
|
||||
"spacebars-compiler",
|
||||
"1.0.3"
|
||||
],
|
||||
[
|
||||
"tap:http-methods",
|
||||
"0.0.23"
|
||||
],
|
||||
[
|
||||
"tap:i18n",
|
||||
"1.2.1"
|
||||
],
|
||||
[
|
||||
"telescope-base",
|
||||
"0.0.0"
|
||||
],
|
||||
[
|
||||
"telescope-i18n",
|
||||
"0.0.0"
|
||||
],
|
||||
[
|
||||
"telescope-lib",
|
||||
"0.2.9"
|
||||
],
|
||||
[
|
||||
"templating",
|
||||
"1.0.9"
|
||||
],
|
||||
[
|
||||
"tracker",
|
||||
"1.0.3"
|
||||
],
|
||||
[
|
||||
"ui",
|
||||
"1.0.4"
|
||||
],
|
||||
[
|
||||
"underscore",
|
||||
"1.0.1"
|
||||
],
|
||||
[
|
||||
"webapp",
|
||||
"1.1.4"
|
||||
],
|
||||
[
|
||||
"webapp-hashing",
|
||||
"1.0.1"
|
||||
]
|
||||
],
|
||||
"pluginDependencies": [],
|
||||
"toolVersion": "meteor-tool@1.0.36",
|
||||
"format": "1.0"
|
||||
}
|
Loading…
Add table
Reference in a new issue