Skip to content

Instantly share code, notes, and snippets.

@Globegitter
Forked from DrMoriarty/singlemail.js
Last active June 24, 2021 04:24
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save Globegitter/4afca69cc5a806637ecc to your computer and use it in GitHub Desktop.
Save Globegitter/4afca69cc5a806637ecc to your computer and use it in GitHub Desktop.
var keystone = require('keystone'),
Types = keystone.Field.Types;
var Newsletter = new keystone.List('Newsletter', {
map: { name: 'title' },
autokey: {path: 'key', from: 'title' },
defaultSort: '-sendAt'
});
Newsletter.add({
title: { type: String, required: true },
image: { type: Types.CloudinaryImage },
state: { type: Types.Select, options: 'draft, active', default: 'draft', index: true },
message: { type: Types.Html, wysiwyg: true, height: 200 },
link: {type: Types.Url},
template: { type: Types.Select, options: 'email-default', default: 'email-default'},
fromName: { type: String, default: 'FamilyCap'},
fromEmail: { type: Types.Email, default: 'contact@familycap.com'},
sendAt: { type: Types.Datetime, default: Date.now},
complete: {type: Boolean, noedit: true},
sendCounter: {type: Number, noedit: true},
openCounter: {type: Number, noedit: true}
});
Newsletter.schema.pre('save', function(next) {
//this.wasNew = this.isNew;
if (this.complete && this.state == 'active' && this.sendAt > new Date()) {
this.complete = false;
}
next();
})
Newsletter.schema.methods.sendNewsletter = function(callback) {
var newsletter = this;
keystone.list('Newsletter').model.find()
.exec(function(err, users) {
if (err) return callback(err);
Newsletter.model.update({_id: email.id}, {$set: {complete: true}, $inc: {sendCounter: users.length}}, function(err) {
if(err) console.log(err);
});
new keystone.Newsletter(newsletter.template).send({
to: users,
from: {
name: newsletter.fromName,
email: newsletter.fromEmail
},
subject: newsletter.title,
mail: newsletter,
web_view_url: 'http://mobilap.biz/email/'+newsletter.id,
unsubscribe_url: 'http://mobilap.biz/unsubscribe'
}, callback);
});
}
Newsletter.defaultColumns = 'title, state, groups, sendAt, complete|10%, sendCounter|10%, openCounter|10%';
Newsletter.register();
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment