2016-04-01 12:38:50 +09:00
|
|
|
// import Email from 'meteor/nova:email';
|
2015-04-22 07:50:11 +09:00
|
|
|
|
2016-03-17 16:34:36 +09:00
|
|
|
const defaultFrequency = 7;
|
|
|
|
const defaultPosts = 5;
|
|
|
|
|
|
|
|
const Campaign = {};
|
|
|
|
|
|
|
|
Campaign.getPosts = function (postsCount) {
|
2015-04-22 07:50:11 +09:00
|
|
|
|
|
|
|
// look for last scheduled campaign in the database
|
2015-07-28 12:17:41 +09:00
|
|
|
var lastCampaign = SyncedCron._collection.findOne({name: 'scheduleNewsletter'}, {sort: {finishedAt: -1}, limit: 1});
|
2015-04-22 07:50:11 +09:00
|
|
|
|
2016-02-06 11:01:41 +09:00
|
|
|
// if there is a last campaign and it was sent less than 7 days ago use its date, else default to posts from the last 7 days
|
|
|
|
var lastWeek = moment().subtract(7, 'days');
|
|
|
|
var after = (lastCampaign && moment(lastCampaign.finishedAt).isAfter(lastWeek)) ? lastCampaign.finishedAt : lastWeek.toDate();
|
2015-04-22 07:50:11 +09:00
|
|
|
|
2015-09-03 14:22:51 +09:00
|
|
|
var params = Posts.parameters.get({
|
2015-04-22 07:50:11 +09:00
|
|
|
view: 'campaign',
|
2016-03-17 16:34:36 +09:00
|
|
|
after: after,
|
|
|
|
options: {
|
|
|
|
limit: postsCount,
|
|
|
|
}
|
2015-04-22 07:50:11 +09:00
|
|
|
});
|
|
|
|
return Posts.find(params.find, params.options).fetch();
|
2015-05-01 18:22:00 +02:00
|
|
|
};
|
2015-04-22 07:50:11 +09:00
|
|
|
|
2016-03-17 16:34:36 +09:00
|
|
|
Campaign.build = function (postsArray) {
|
2015-04-22 07:50:11 +09:00
|
|
|
var postsHTML = '', subject = '';
|
|
|
|
|
|
|
|
// 1. Iterate through posts and pass each of them through a handlebars template
|
|
|
|
postsArray.forEach(function (post, index) {
|
|
|
|
if(index > 0)
|
|
|
|
subject += ', ';
|
|
|
|
|
|
|
|
subject += post.title;
|
|
|
|
|
|
|
|
var postUser = Meteor.users.findOne(post.userId);
|
|
|
|
|
|
|
|
// the naked post object as stored in the database is missing a few properties, so let's add them
|
|
|
|
var properties = _.extend(post, {
|
2015-06-19 12:09:03 +09:00
|
|
|
authorName: post.getAuthorName(),
|
2015-06-19 09:48:59 +09:00
|
|
|
postLink: Posts.getLink(post, true),
|
2015-06-19 11:52:57 +09:00
|
|
|
profileUrl: Users.getProfileUrl(postUser, true),
|
2015-06-19 09:48:59 +09:00
|
|
|
postPageLink: Posts.getPageUrl(post, true),
|
2015-08-14 17:39:00 +09:00
|
|
|
date: moment(post.postedAt).format("MMMM D YYYY"),
|
|
|
|
authorAvatarUrl: Avatar.getUrl(postUser)
|
2015-04-22 07:50:11 +09:00
|
|
|
});
|
|
|
|
|
2015-08-14 17:39:00 +09:00
|
|
|
try {
|
|
|
|
HTTP.get(post.authorAvatarUrl);
|
|
|
|
} catch (error) {
|
|
|
|
post.authorAvatarUrl = false;
|
|
|
|
}
|
|
|
|
|
2015-08-15 12:28:22 +09:00
|
|
|
if (post.body) {
|
|
|
|
properties.body = Telescope.utils.trimHTML(post.htmlBody, 20);
|
|
|
|
}
|
|
|
|
|
2016-03-17 16:34:36 +09:00
|
|
|
if (post.commentCount > 0) {
|
|
|
|
|
2015-07-15 17:30:49 +10:00
|
|
|
properties.popularComments = Comments.find({postId: post._id}, {sort: {score: -1}, limit: 2, transform: function (comment) {
|
2015-08-15 11:51:23 +09:00
|
|
|
var user = Meteor.users.findOne(comment.userId);
|
2015-08-15 12:28:22 +09:00
|
|
|
|
|
|
|
comment.body = Telescope.utils.trimHTML(comment.htmlBody, 20);
|
2015-08-15 11:51:23 +09:00
|
|
|
comment.authorProfileUrl = Users.getProfileUrl(user, true);
|
2015-08-15 12:28:22 +09:00
|
|
|
comment.authorAvatarUrl = Avatar.getUrl(user);
|
|
|
|
|
2015-08-14 17:39:00 +09:00
|
|
|
try {
|
|
|
|
HTTP.get(comment.authorAvatarUrl);
|
|
|
|
} catch (error) {
|
|
|
|
comment.authorAvatarUrl = false;
|
|
|
|
}
|
2015-07-15 17:30:49 +10:00
|
|
|
return comment;
|
|
|
|
}}).fetch();
|
|
|
|
|
2016-03-17 16:34:36 +09:00
|
|
|
}
|
|
|
|
|
2015-12-13 10:45:15 +09:00
|
|
|
if(post.url) {
|
2015-05-01 18:22:00 +02:00
|
|
|
properties.domain = Telescope.utils.getDomain(post.url);
|
2015-12-13 10:45:15 +09:00
|
|
|
}
|
|
|
|
|
|
|
|
if (properties.thumbnailUrl) {
|
|
|
|
properties.thumbnailUrl = Telescope.utils.addHttp(properties.thumbnailUrl);
|
|
|
|
}
|
2015-04-22 07:50:11 +09:00
|
|
|
|
2016-04-01 12:38:50 +09:00
|
|
|
postsHTML += Telescope.email.getTemplate('postItem')(properties);
|
2015-04-22 07:50:11 +09:00
|
|
|
});
|
|
|
|
|
|
|
|
// 2. Wrap posts HTML in digest template
|
2016-04-01 12:38:50 +09:00
|
|
|
var digestHTML = Telescope.email.getTemplate('newsletter')({
|
2016-02-17 20:44:52 +09:00
|
|
|
siteName: Telescope.settings.get('title'),
|
2015-04-22 07:50:11 +09:00
|
|
|
date: moment().format("dddd, MMMM Do YYYY"),
|
|
|
|
content: postsHTML
|
|
|
|
});
|
|
|
|
|
|
|
|
// 3. wrap digest HTML in email wrapper template
|
2016-04-01 12:38:50 +09:00
|
|
|
var emailHTML = Telescope.email.buildTemplate(digestHTML);
|
2015-04-22 07:50:11 +09:00
|
|
|
|
|
|
|
var campaign = {
|
|
|
|
postIds: _.pluck(postsArray, '_id'),
|
|
|
|
subject: Telescope.utils.trimWords(subject, 15),
|
|
|
|
html: emailHTML
|
2015-05-01 18:22:00 +02:00
|
|
|
};
|
|
|
|
return campaign;
|
|
|
|
};
|
2015-04-22 07:50:11 +09:00
|
|
|
|
2016-03-17 16:34:36 +09:00
|
|
|
export default Campaign;
|