0.0.11 | Built motion from commit e8dda05.
[motion.git] / server / api / mail_message / mail_message.controller.js
1 'use strict';
2
3 var _ = require('lodash');
4 var async = require('async');
5
6 var htmlToText = require('html-to-text');
7 var formidable = require('formidable');
8 var path = require('path');
9
10 var config = require('../../config/environment');
11 var sequelize = require('../../models').sequelize;
12 var MailMessage = require('../../models').MailMessage;
13 var MailAttachment = require('../../models').MailAttachment;
14 var MailRoom = require('../../models').MailRoom;
15 var MailAccount = require('../../models').MailAccount;
16 var Contact = require('../../models').Contact;
17
18 // Get list of mail_messages
19 exports.index = function(req, res, next) {
20   var params = {
21     order: 'createdAt DESC',
22     include: [{
23       all: true,
24       include: [{
25         all: true
26       }]
27     }]
28   };
29
30   switch (req.user.role) {
31     case 'admin':
32       params.where = req.query;
33       break;
34     case 'agent':
35       break;
36     default:
37
38   }
39
40   MailMessage
41     .findAll(params)
42     .then(function(mail_messages) {
43       return res.status(200).send(mail_messages);
44     })
45     .catch(function(err) {
46       return handleError(res, err, next);
47     });
48 };
49
50 // Get a single mailMessage
51 exports.show = function(req, res, next) {
52   MailMessage
53     .findById(req.params.id, {
54       include: [{
55         all: true,
56         include: [{
57           all: true
58         }]
59       }]
60     })
61     .then(function(mailMessage) {
62       if (!mailMessage) {
63         return res.sendStatus(404);
64       }
65       return res.send(mailMessage);
66     })
67     .catch(function(err) {
68       return handleError(res, err, next);
69     });
70 };
71
72 // Creates a new mailMessage in the DB.
73 exports.create = function(req, res, next) {
74   // 1) Messaggio in uscita
75   var form = new formidable.IncomingForm();
76   form.uploadDir = path.join(config.root, 'server', 'files', 'attachments');
77   form.keepExtensions = true;
78   form.multiples = true;
79
80   if (_.isEmpty(req.body)) {
81     // ATTACHMENT
82     form.parse(req, function(err, form, wrap) {
83       if (err) {
84         return res.status(400).send(err);
85       }
86
87       var file = wrap.file;
88       form.MailAttachments = [{
89         path: file.path,
90         fileName: file.name,
91         length: file.size,
92         contentType: file.type
93       }];
94
95       MailMessage
96         .create(form, {
97           include: [{
98             all: true
99           }]
100         })
101         .then(function(mailMessage) {
102           return res.status(201).send(mailMessage);
103         })
104         .catch(function(err) {
105           return res.status(400).send(err);
106         });
107     });
108   } else {
109     // NO ATTACHMENT
110     console.log('NO ATTACHMENT');
111     req.body.status = 'SENDING';
112
113     MailMessage
114       .create(req.body)
115       .then(function(mailMessage) {
116         return res.status(201).send(mailMessage);
117       })
118       .catch(function(err) {
119         return res.status(400).send(err);
120       });
121   }
122 };
123
124 // Updates an existing mailMessage in the DB.
125 exports.update = function(req, res, next) {
126
127   MailMessage
128     .findById(req.params.id, {
129       include: [{
130         all: true
131       }]
132     })
133     .then(function(mailMessage) {
134       if (!mailMessage) {
135         return res.sendStatus(404);
136       }
137       var updated = _.merge(mailMessage, req.body);
138       updated.save()
139         .then(function() {
140           return res.status(200).send(updated);
141         })
142         .catch(function(err) {
143           return handleError(res, err, next);
144         });
145     })
146     .catch(function(err) {
147       return handleError(res, err, next);
148     });
149 };
150
151 // Deletes a mailMessage from the DB.
152 exports.destroy = function(req, res, next) {
153   MailMessage
154     .findById(req.params.id)
155     .then(function(mailMessage) {
156       if (!mailMessage) {
157         return res.sendStatus(404);
158       }
159       mailMessage.destroy()
160         .then(function() {
161           return res.sendStatus(204);
162         })
163         .catch(function(err) {
164           return handleError(res, err, next);
165         });
166     })
167     .catch(function(err) {
168       return handleError(res, err, next);
169     });
170 };
171
172 // Deletes a mailMessage from the DB.
173 exports.bulkDelete = function(req, res, next) {
174   MailMessage
175     .bulkUpdate({
176       where: {
177         id: {
178           $in: req.body.id
179         }
180       },
181       attributes: {
182         directory: 'TRASH'
183       }
184     })
185     .then(function(mailMessage) {
186       if (!mailMessage) {
187         return res.sendStatus(404);
188       }
189       mailMessage.destroy()
190         .then(function() {
191           return res.sendStatus(204);
192         })
193         .catch(function(err) {
194           return handleError(res, err, next);
195         });
196     })
197     .catch(function(err) {
198       return handleError(res, err, next);
199     });
200 };
201
202 function handleError(res, err, next) {
203   return next(err);
204 }