Skip to content
This repository has been archived by the owner on Jan 20, 2021. It is now read-only.

Commit

Permalink
mailgunning enquiries
Browse files Browse the repository at this point in the history
  • Loading branch information
jesuscript committed Dec 15, 2014
1 parent b72037b commit c7e24da
Show file tree
Hide file tree
Showing 7 changed files with 42 additions and 186 deletions.
39 changes: 0 additions & 39 deletions keystone.js
Expand Up @@ -29,10 +29,7 @@ keystone.init({
'views': 'templates/views',
'view engine': 'jade',

'emails': 'templates/emails',

'auto update': true,
'session': true,
'auth': true,
'user model': 'User',
'cookie secret': 'o9}#e0{8JCiy,gb^6PF49miMa.M(|*eBSPnl-5"DnzT0=:^W@ZqRgFJ34%}0<d~T'
Expand Down Expand Up @@ -60,42 +57,6 @@ keystone.set('locals', {

keystone.set('routes', require('./routes'));

// Setup common locals for your emails. The following are required by Keystone's
// default email templates, you may remove them if you're using your own.

keystone.set('email locals', {
logo_src: '/images/logo-email.gif',
logo_width: 194,
logo_height: 76,
theme: {
email_bg: '#f9f9f9',
link_color: '#2697de',
buttons: {
color: '#fff',
background_color: '#2697de',
border_color: '#1a7cb7'
}
}
});

// Setup replacement rules for emails, to automate the handling of differences
// between development a production.

// Be sure to update this rule to include your site's actual domain, and add
// other rules your email templates require.

keystone.set('email rules', [{
find: '/images/',
replace: (keystone.get('env') == 'production') ? 'http://www.your-server.com/images/' : 'http://localhost:3000/images/'
}, {
find: '/keystone/',
replace: (keystone.get('env') == 'production') ? 'http://www.your-server.com/keystone/' : 'http://localhost:3000/keystone/'
}]);

// Load your project's email test routes

keystone.set('email tests', require('./routes/emails'));

// Configure the navigation bar in Keystone's Admin UI

keystone.set('nav', {
Expand Down
71 changes: 33 additions & 38 deletions models/Enquiry.js
@@ -1,61 +1,56 @@
var keystone = require('keystone'),
Types = keystone.Field.Types;
Types = keystone.Field.Types,
_ = require("underscore"),
Mailgun = require("mailgun-js");

/**
* Enquiry Model
* =============
*/

var Enquiry = new keystone.List('Enquiry', {
nocreate: true,
noedit: true
nocreate: true,
noedit: true
});

Enquiry.add({
name: { type: Types.Name, required: true },
email: { type: Types.Email, required: true },
phone: { type: String },
enquiryType: { type: Types.Select, options: [
{ value: 'message', label: "Just leaving a message" },
{ value: 'question', label: "I've got a question" },
{ value: 'other', label: "Something else..." }
] },
message: { type: Types.Markdown, required: true },
createdAt: { type: Date, default: Date.now }
name: { type: Types.Name, required: true },
email: { type: Types.Email, required: true },
phone: { type: String },
enquiryType: { type: Types.Select, options: [
{ value: 'message', label: "Just leaving a message" },
{ value: 'question', label: "I've got a question" },
{ value: 'other', label: "Something else..." }
] },
message: { type: Types.Markdown, required: true },
createdAt: { type: Date, default: Date.now }
});

Enquiry.schema.pre('save', function(next) {
this.wasNew = this.isNew;
next();
this.wasNew = this.isNew;
next();
})

Enquiry.schema.post('save', function() {
if (this.wasNew) {
this.sendNotificationEmail();
}
if (this.wasNew) {
this.sendNotificationEmail();
}
});

Enquiry.schema.methods.sendNotificationEmail = function(callback) {

var enqiury = this;

keystone.list('User').model.find().where('isAdmin', true).exec(function(err, admins) {

if (err) return callback(err);

new keystone.Email('enquiry-notification').send({
to: admins,
from: {
name: 'EthereumDev',
email: 'contact@ethereumdev.com'
},
subject: 'New Enquiry for EthereumDev',
enquiry: enqiury
}, callback);

});

}
var enq = this;

var name = enq.name.first + (enq.name.last ? (" " + enq.name.last) : "");

keystone.list('User').model.find().where('receiveEnquiries', true).exec(function(err, recipients) {
(new Mailgun({apiKey: process.env.MAILGUN_KEY, domain: process.env.DOMAIN})).messages().send({
from: "webmaster@ethdev.com",
to: _.pluck(recipients, "email"),
subject: "New enquiry from " + name + " " + enq.email,
html: enq.message.md
});
});
};

Enquiry.defaultSort = '-createdAt';
Enquiry.defaultColumns = 'name, email, enquiryType, createdAt';
Expand Down
13 changes: 7 additions & 6 deletions models/User.js
@@ -1,5 +1,5 @@
var keystone = require('keystone'),
Types = keystone.Field.Types;
Types = keystone.Field.Types;

/**
* User Model
Expand All @@ -9,16 +9,17 @@ var keystone = require('keystone'),
var User = new keystone.List('User');

User.add({
name: { type: Types.Name, required: true, index: true },
email: { type: Types.Email, initial: true, required: true, index: true },
password: { type: Types.Password, initial: true, required: true }
name: { type: Types.Name, required: true, index: true },
email: { type: Types.Email, initial: true, required: true, index: true },
password: { type: Types.Password, initial: true, required: true },
receiveEnquiries: {type: Boolean, label: 'Receives enquiries by email', index: true}
}, 'Permissions', {
isAdmin: { type: Boolean, label: 'Can access Keystone', index: true }
isAdmin: { type: Boolean, label: 'Can access Keystone', index: true }
});

// Provide access to Keystone
User.schema.virtual('canAccessKeystone').get(function() {
return this.isAdmin;
return this.isAdmin;
});


Expand Down
3 changes: 2 additions & 1 deletion package.json
Expand Up @@ -11,7 +11,8 @@
"marked": "^0.3.2",
"moment": "^2.8.3",
"underscore": "~1.7.0",
"newrelic": "^1.14.1"
"newrelic": "^1.14.1",
"mailgun-js": "0.6.7"
},
"devDependencies": {
"gulp": "~3.6.2",
Expand Down
43 changes: 0 additions & 43 deletions routes/emails.js

This file was deleted.

24 changes: 0 additions & 24 deletions templates/emails/enquiry-notification.jade

This file was deleted.

35 changes: 0 additions & 35 deletions updates/0.0.1-admins.js
Expand Up @@ -10,38 +10,3 @@ exports.create = {
]
};

/**
* The following is the older version of this update script, it is
* left here for reference as an example of how more complex updates
* can be structured.
*/
/*
var keystone = require('keystone'),
async = require('async'),
User = keystone.list('User');
var admins = [
{ email: 'user@keystonejs.com', password: 'admin', name: { first: 'Admin', last: 'User' } }
];
function createAdmin(admin, done) {
var newAdmin = new User.model(admin);
newAdmin.isAdmin = true;
newAdmin.save(function(err) {
if (err) {
console.error("Error adding admin " + admin.email + " to the database:");
console.error(err);
} else {
console.log("Added admin " + admin.email + " to the database.");
}
done(err);
});
}
exports = module.exports = function(done) {
async.forEach(admins, createAdmin, done);
};
*/

0 comments on commit c7e24da

Please sign in to comment.