Vulcan/packages/telescope-newsletter/lib/newsletter.js

200 lines
3.9 KiB
JavaScript
Raw Normal View History

2014-08-29 10:37:35 +09:00
campaignSchema = new SimpleSchema({
_id: {
type: String,
optional: true
},
createdAt: {
type: Date,
optional: true
},
sentAt: {
type: String,
optional: true
},
status: {
type: String,
optional: true
},
posts: {
type: [String],
optional: true
2015-01-20 00:11:30 -08:00
},
2014-08-29 10:37:35 +09:00
webHits: {
type: Number,
optional: true
2015-01-20 00:11:30 -08:00
},
2014-08-29 10:37:35 +09:00
});
Campaigns = new Meteor.Collection("campaigns", {
schema: campaignSchema
});
Posts.addToSchema(
2014-08-29 10:37:35 +09:00
{
propertyName: 'scheduledAt',
propertySchema: {
type: Date,
2014-10-05 17:20:15 +09:00
optional: true,
autoform: {
2014-10-06 10:40:45 +09:00
omit: true
2014-10-05 17:20:15 +09:00
}
2014-08-29 10:37:35 +09:00
}
}
);
// Settings
2014-12-30 13:46:48 +09:00
var enableNewsletter = {
propertyName: 'enableNewsletter',
propertySchema: {
type: Boolean,
optional: true,
autoform: {
group: 'newsletter',
instructions: 'Enable newsletter (requires restart).'
}
}
}
2015-03-28 18:30:26 +09:00
Settings.addToSchema(enableNewsletter);
2014-08-29 10:37:35 +09:00
var showBanner = {
propertyName: 'showBanner',
propertySchema: {
type: Boolean,
optional: true,
2014-09-29 15:40:09 +09:00
label: 'Newsletter banner',
autoform: {
2014-09-29 10:15:21 +09:00
group: 'newsletter',
instructions: 'Show newsletter sign-up form on the front page.'
}
2014-08-29 10:37:35 +09:00
}
}
2015-03-28 18:30:26 +09:00
Settings.addToSchema(showBanner);
2014-08-29 10:37:35 +09:00
var mailChimpAPIKey = {
propertyName: 'mailChimpAPIKey',
propertySchema: {
type: String,
optional: true,
autoform: {
group: 'newsletter',
private: true
}
2014-08-29 10:37:35 +09:00
}
}
2015-03-28 18:30:26 +09:00
Settings.addToSchema(mailChimpAPIKey);
2014-08-29 10:37:35 +09:00
var mailChimpListId = {
propertyName: 'mailChimpListId',
propertySchema: {
type: String,
optional: true,
autoform: {
2014-09-29 10:15:21 +09:00
group: 'newsletter',
instructions: 'The ID of the list you want to send to.',
private: true
}
2014-08-29 10:37:35 +09:00
}
}
2015-03-28 18:30:26 +09:00
Settings.addToSchema(mailChimpListId);
2014-08-29 10:37:35 +09:00
var postsPerNewsletter = {
propertyName: 'postsPerNewsletter',
propertySchema: {
type: Number,
optional: true,
autoform: {
group: 'newsletter'
}
2014-08-29 10:37:35 +09:00
}
}
2015-03-28 18:30:26 +09:00
Settings.addToSchema(postsPerNewsletter);
2014-08-29 10:37:35 +09:00
var newsletterFrequency = {
propertyName: 'newsletterFrequency',
propertySchema: {
type: Number,
optional: true,
autoform: {
group: 'newsletter',
2014-12-30 13:46:48 +09:00
instructions: 'Defaults to once a week. Changes require restarting your app to take effect.',
2014-08-29 10:37:35 +09:00
options: [
{
value: 1,
label: 'Every Day'
},
{
value: 2,
label: 'Mondays, Wednesdays, Fridays'
},
{
value: 3,
label: 'Mondays & Thursdays'
},
{
value: 7,
label: 'Once a week (Mondays)'
}
]
2014-09-29 15:40:09 +09:00
}
2014-08-29 10:37:35 +09:00
}
}
2015-03-28 18:30:26 +09:00
Settings.addToSchema(newsletterFrequency);
2014-08-29 10:37:35 +09:00
2015-01-20 00:11:30 -08:00
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'
}
}
}
2015-03-28 18:30:26 +09:00
Settings.addToSchema(newsletterTime);
2015-01-20 00:11:30 -08:00
var autoSubscribe = {
propertyName: 'autoSubscribe',
propertySchema: {
type: Boolean,
optional: true,
autoform: {
group: 'newsletter',
instructions: 'Automatically subscribe new users on sign-up.'
}
}
}
2015-03-28 18:30:26 +09:00
Settings.addToSchema(autoSubscribe);
2014-08-29 10:37:35 +09:00
// create new "campaign" lens for all posts from the past X days that haven't been scheduled yet
viewParameters.campaign = function (terms) {
return {
find: {
scheduledAt: {$exists: false},
postedAt: {
2015-01-20 00:11:30 -08:00
$gte: terms.after
2014-08-29 10:37:35 +09:00
}
2015-01-20 00:11:30 -08:00
},
2014-08-29 10:37:35 +09:00
options: {sort: {sticky: -1, score: -1}}
};
}
heroModules.push({
2015-03-16 10:00:11 +09:00
template: 'newsletterBanner',
order: 10
});
function subscribeUserOnCreation (user) {
if (!!Settings.get('autoSubscribe') && !!Users.getEmail(user)) {
addToMailChimpList(user, false, function (error, result) {
console.log(error)
console.log(result)
});
}
return user;
}
Users.hooks.userCreatedCallbacks.push(subscribeUserOnCreation);