From 109fe895b3398c7f78020fad628394d3e69c5e37 Mon Sep 17 00:00:00 2001 From: psychobunny Date: Mon, 21 Sep 2015 17:44:06 -0400 Subject: [PATCH] ability to edit and save custom email templates --- public/less/admin/appearance/customise.less | 2 +- public/src/admin/settings.js | 10 ---- public/src/admin/settings/email.js | 51 +++++++++++++++++++++ src/controllers/admin/settings.js | 20 ++++++-- src/views/admin/settings/email.tpl | 18 +++++++- 5 files changed, 83 insertions(+), 18 deletions(-) create mode 100644 public/src/admin/settings/email.js diff --git a/public/less/admin/appearance/customise.less b/public/less/admin/appearance/customise.less index d27da680da..093230c7c6 100644 --- a/public/less/admin/appearance/customise.less +++ b/public/less/admin/appearance/customise.less @@ -1,4 +1,4 @@ -#customCSS, #customHTML { +#customCSS, #customHTML, #email-editor { width: 100%; height: 450px; display: block; diff --git a/public/src/admin/settings.js b/public/src/admin/settings.js index b7d96ea8e4..d6c9ec3407 100644 --- a/public/src/admin/settings.js +++ b/public/src/admin/settings.js @@ -92,16 +92,6 @@ define('admin/settings', ['uploader', 'sounds'], function(uploader, sounds) { handleUploads(); - $('button[data-action="email.test"]').off('click').on('click', function() { - socket.emit('admin.email.test', {template: $('#test-email').val()}, function(err) { - if (err) { - return app.alertError(err.message); - } - app.alertSuccess('Test Email Sent'); - }); - return false; - }); - $('#clear-sitemap-cache').off('click').on('click', function() { socket.emit('admin.settings.clearSitemapCache', function() { app.alertSuccess('Sitemap Cache Cleared!'); diff --git a/public/src/admin/settings/email.js b/public/src/admin/settings/email.js new file mode 100644 index 0000000000..13b440d66e --- /dev/null +++ b/public/src/admin/settings/email.js @@ -0,0 +1,51 @@ +"use strict"; +/* global define, socket, app, ajaxify, ace */ + +define('admin/settings/email', ['admin/settings'], function(settings) { + var module = {}, + emailEditor; + + module.init = function() { + configureEmailTester(); + configureEmailEditor(); + }; + + function configureEmailTester() { + $('button[data-action="email.test"]').off('click').on('click', function() { + socket.emit('admin.email.test', {template: $('#test-email').val()}, function(err) { + if (err) { + return app.alertError(err.message); + } + app.alertSuccess('Test Email Sent'); + }); + return false; + }); + } + + function configureEmailEditor() { + $('#email-editor-selector').on('change', updateEmailEditor); + + emailEditor = ace.edit("email-editor"); + emailEditor.setTheme("ace/theme/twilight"); + emailEditor.getSession().setMode("ace/mode/html"); + + emailEditor.on('change', function(e) { + $('#email-editor-holder').val(emailEditor.getValue()); + }); + + updateEmailEditor(); + } + + function updateEmailEditor() { + ajaxify.data.emails.forEach(function(email) { + if (email.path === $('#email-editor-selector').val()) { + emailEditor.getSession().setValue(email.text); + $('#email-editor-holder') + .val(email.text) + .attr('data-field', 'email:custom:' + email.path); + } + }); + } + + return module; +}); \ No newline at end of file diff --git a/src/controllers/admin/settings.js b/src/controllers/admin/settings.js index fb6d3295ce..225c563604 100644 --- a/src/controllers/admin/settings.js +++ b/src/controllers/admin/settings.js @@ -1,7 +1,8 @@ 'use strict'; var settingsController = {}; -var async = require('async'); +var async = require('async'), + meta = require('../../meta'); settingsController.get = function(req, res, next) { var term = req.params.term ? req.params.term : 'general'; @@ -25,16 +26,25 @@ function renderEmail(req, res, next) { var emailsPath = path.join(__dirname, '../../../public/templates/emails'); utils.walk(emailsPath, function(err, emails) { async.map(emails, function(email, next) { - fs.readFile(email, function(err, str) { + var path = email.replace(emailsPath, '').substr(1).replace('.tpl', ''); + + function callback(err, str) { next(err, { - path: email.replace(emailsPath, '').substr(1).replace('.tpl', ''), + path: path, fullpath: email, text: str.toString() }); - }); + } + + if (meta.config['email:custom:' + path]) { + return callback(null, meta.config['email:custom:' + path]); + } + + fs.readFile(email, callback); }, function(err, emails) { res.render('admin/settings/email', { - emails: emails.filter(function(email) { + emails: emails, + sendable: emails.filter(function(email) { return email.path.indexOf('_plaintext') === -1 && email.path.indexOf('partials') === -1; }) }); diff --git a/src/views/admin/settings/email.tpl b/src/views/admin/settings/email.tpl index cb99d5450b..b2046a61a4 100644 --- a/src/views/admin/settings/email.tpl +++ b/src/views/admin/settings/email.tpl @@ -26,14 +26,28 @@
-
Email Testing
+
Edit Email Template

-
+
+ +
+
+ +
+
Email Testing
+
+
+

The test email will be sent to the currently logged in user's email address.