a96e72fa519c76b93618a31e91bd28b42a828d5c
[motion.git] / server / config / triggers / chat.js
1 var _ = require('lodash');
2 var Mustache = require('mustache');
3
4 var sequelize = require('../../models').sequelize;
5 var ChatEnquiry = require('../../models').ChatEnquiry;
6 var MailMessage = require('../../models').MailMessage;
7 var MailServerOut = require('../../models').MailServerOut;
8
9 function Chat() {
10   console.log('Trigger Chat Initialization...');
11
12   ChatEnquiry.afterCreate(function (chatEnquiry, options) {
13     var _chatEnquiry = chatEnquiry;
14     var _chatWebsite;
15     var _mailServerOut;
16     var _offlineTemplate;
17
18     return chatEnquiry
19       .getChatWebsite()
20       .then(function (chatWebsite) {
21         _chatWebsite = chatWebsite;
22         _chatEnquiry.chatWebsite = _chatWebsite.name;
23         if (_chatWebsite && _chatWebsite.enquiry_forwarding && _chatWebsite.enquiry_forwarding_address) {
24           return _chatWebsite
25             .getOfflineTemplate();
26         } else {
27           throw new Error({
28             message: 'chatWebsite can\'t send offline messages via mail'
29           });
30         }
31       })
32       .then(function (offlineTemplate) {
33         _offlineTemplate = offlineTemplate;
34         if (_offlineTemplate) {
35           _offlineTemplate.html = Mustache.render(_offlineTemplate.html, _chatEnquiry);
36           _offlineTemplate.subject = Mustache.render(_offlineTemplate.subject, _chatEnquiry);
37         } else {
38           throw new Error({
39             message: 'offlineTemplate not found. ChatWebsite: ' + _chatWebsite.name
40           });
41         }
42
43         return MailServerOut
44           .findOne({
45             where: {
46               service: true
47             }
48           });
49       })
50       .then(function (mailServerOut) {
51         _mailServerOut = mailServerOut;
52
53         if (!_mailServerOut) {
54           throw new Error('Motion Service SMTP not configured!');
55         }
56
57         return MailMessage
58           .create({
59             from: _mailServerOut.username,
60             to: _chatWebsite.enquiry_forwarding_address,
61             subject: _offlineTemplate.subject,
62             html: _offlineTemplate.html,
63             status: 'SENDING'
64           }, {
65             transaction: options ? options.transaction : null
66           });
67       });
68   });
69 }
70
71 module.exports = Chat;