Vulcan/packages/vulcan-posts/lib/newsletter.js
2017-08-28 22:48:28 +09:00

85 lines
1.9 KiB
JavaScript

import VulcanEmail from 'meteor/vulcan:email';
import { addCallback } from 'meteor/vulcan:core';
// email test routes (make available to client & server)
import Newsletters from 'meteor/vulcan:newsletter';
import Posts from './collection.js';
import moment from 'moment';
VulcanEmail.addEmails({
newsletter: {
template: 'newsletter',
path: '/email/newsletter',
subject(data) {
return _.isEmpty(data) ? '[Generated on server]' : Newsletters.getSubject(data.PostsList);
},
data() {
return {
date: moment().format('MMMM D YYYY')
}
},
query: `
query NewsletterQuery($terms: JSON){
SiteData{
title
}
PostsList(terms: $terms){
_id
title
url
pageUrl
linkUrl
domain
htmlBody
thumbnailUrl
commentsCount
postedAtFormatted
user{
pageUrl
displayName
}
comments(limit: 3){
user{
displayName
avatarUrl
pageUrl
}
htmlBody
postedAt
}
}
}
`,
isValid(data) {
return data.PostsList && data.PostsList.length;
},
testVariables() {
return {
terms : {
view: 'newsletter'
}
}
}
},
newsletterConfirmation: {
template: 'newsletterConfirmation',
path: '/email/newsletter-confirmation',
subject() {
return 'Newsletter confirmation';
}
}
});
function MarkPostsAsScheduled (email) {
const postsIds = _.pluck(email.data.PostsList, '_id');
console.log(postsIds)
const updated = Posts.update({_id: {$in: postsIds}}, {$set: {scheduledAt: new Date()}}, {multi: true}) // eslint-disable-line
console.log(`updated ${updated} posts`)
}
addCallback('newsletter.send.async', MarkPostsAsScheduled);