diff --git a/core/server/index.js b/core/server/index.js index 53b34d1463..93429182f7 100644 --- a/core/server/index.js +++ b/core/server/index.js @@ -28,6 +28,7 @@ function initialiseServices() { apps = require('./services/apps'), xmlrpc = require('./services/xmlrpc'), slack = require('./services/slack'), + mega = require('./services/mega'), webhooks = require('./services/webhooks'), scheduling = require('./adapters/scheduling'); @@ -38,6 +39,7 @@ function initialiseServices() { permissions.init(), xmlrpc.listen(), slack.listen(), + mega.listen(), webhooks.listen(), apps.init(), scheduling.init({ @@ -50,7 +52,7 @@ function initialiseServices() { contentPath: config.getContentPath('scheduling') }) ).then(function () { - debug('XMLRPC, Slack, Webhooks, Apps, Scheduling, Permissions done'); + debug('XMLRPC, Slack, MEGA, Webhooks, Apps, Scheduling, Permissions done'); // Initialise analytics events if (config.get('segment:key')) { diff --git a/core/server/services/mega.js b/core/server/services/mega.js new file mode 100644 index 0000000000..3ba2d3e487 --- /dev/null +++ b/core/server/services/mega.js @@ -0,0 +1,38 @@ +const common = require('../lib/common'); +const membersService = require('./members'); +const bulkEmailService = require('./bulk-email'); + +const sendEmail = async (post) => { + const emailTmpl = { + subject: post.email_subject || post.title, + html: post.html + }; + + const {members} = await membersService.api.members.list(); + const emails = members.map(m => m.email); + + return bulkEmailService.send(emailTmpl, emails); +}; + +function listener(model, options) { + // CASE: do not ping slack if we import a database + // TODO: refactor post.published events to never fire on importing + if (options && options.importing) { + return; + } + + if (!model.get('send_email_when_published')) { + return; + } + + sendEmail(model.toJSON()); +} + +function listen() { + common.events.on('post.published', listener); +} + +// Public API +module.exports = { + listen: listen +};