3 var _ = require('lodash');
4 var util = require('util');
5 var async = require('async');
8 // var Imap = require("mail-listener2");
10 // var nodemailer = require('nodemailer');
11 // var smtpTransport = require('nodemailer-smtp-transport');
13 var sequelize = require('../../models').sequelize;
14 var MailAccount = require('../../models').MailAccount;
15 var MailApplication = require('../../models').MailApplication;
16 var MailServerIn = require('../../models').MailServerIn;
17 var MailServerOut = require('../../models').MailServerOut;
19 // Get list of mailAccounts
20 exports.index = function(req, res) {
22 var attributes = ['description', 'name', 'address'];
23 var per_page = req.query.per_page ? parseInt(req.query.per_page, 10) : 100;
24 var page = req.query.page ? parseInt(req.query.page, 10) : 0;
29 offset: page * per_page,
35 _.forIn(req.query, function(value, key) {
41 query.order = util.format('%s %s', req.query.sort_by, req.query.sort_order || 'ASC') || null;
47 attributes.forEach(function(attribute) {
50 $like: '%' + value + '%'
53 query.where.$or.push(tmp);
60 query.where[key].$like = '%' + value + '%';
65 .findAndCountAll(query)
66 .then(function(result) {
67 var total_pages = Math.ceil(result.count / per_page);
68 var next_page = total_pages > (query.offset + 1) ? util.format('%s://%s%s?page=%d', req.protocol, req.headers.host, req.baseUrl, page + 1) : null;
69 var previous_page = page > 0 ? util.format('%s://%s%s?page=%d', req.protocol, req.headers.host, req.baseUrl, page - 1) : null;
71 res.status(200).send({
75 previous_page: previous_page,
76 total_pages: total_pages
80 .catch(function(err) {
81 return handleError(res, err);
85 // Get a single mailAccount
86 exports.show = function(req, res, next) {
88 .findById(req.params.id, {
93 .then(function(mailAccount) {
95 return res.sendStatus(404);
97 return res.send(mailAccount);
99 .catch(function(err) {
104 // Creates a new mailAccount in the DB.
105 exports.create = function(req, res, next) {
107 return sequelize.transaction(function(t) {
109 // chain all your queries here. make sure you return them.
113 address: req.body.address,
114 description: req.body.description
117 }).then(function(mailAccount) {
118 // MAIL ACCOUNT ID SETUP
119 req.body.incoming.MailAccountId = mailAccount.id;
121 .create(req.body.incoming, {
124 .then(function(mailServerIn) {
125 // MAIL ACCOUNT ID SETUP
126 req.body.outgoing.MailAccountId = mailAccount.id;
128 .create(req.body.outgoing, {
133 }).then(function(result) {
134 return res.status(201).send(result);
135 }).catch(function(err) {
140 // Updates an existing mailAccount in the DB.
141 exports.update = function(req, res) {
146 .findById(req.params.id)
147 .then(function(mailAccount) {
149 return res.sendStatus(404);
151 var updated = _.merge(mailAccount, req.body);
155 return res.status(200).send(mailAccount);
157 .catch(function(err) {
158 return handleError(res, err);
161 .catch(function(err) {
162 return handleError(res, err);
166 // Sort Mail Applications
167 exports.sortApplications = function(req, res, next) {
172 id: req.body.applications
175 .then(function(mailApplications) {
176 var tmpMailApplications = mailApplications;
183 id: req.body.applications
186 console.log('destroy');
189 .catch(function(err) {
194 // arg1 now equals 'one' and arg2 now equals 'two'
195 var sortedApplications = [];
196 for (var i = 0; i < req.body.applications.length; i++) {
197 var tmpMailApplication = _.find(tmpMailApplications, {
198 'id': req.body.applications[i]
200 if (tmpMailApplication) {
201 tmpMailApplication.priority = i + 1;
202 sortedApplications.push(tmpMailApplication.dataValues);
207 .bulkCreate(sortedApplications)
209 console.log('bulkCreate');
212 .catch(function(err) {
217 // arg1 now equals 'three'
221 id: req.body.applications
228 .then(function(mailApplications) {
229 console.log(mailApplications);
230 callback(null, mailApplications);
232 .catch(function(err) {
236 ], function(err, result) {
237 // result now equals 'done'
239 return handleError(res, err);
241 return res.status(201).send(result);
246 .catch(function(err) {
247 return handleError(res, err);
251 // Deletes a mailAccount from the DB.
252 exports.destroy = function(req, res, next) {
254 .findById(req.params.id)
255 .then(function(mailAccount) {
257 return res.sendStatus(404);
259 mailAccount.destroy()
261 return res.sendStatus(204);
263 .catch(function(err) {
267 .catch(function(err) {
272 // Deletes a agent from the DB.
273 exports.bulkDestroy = function(req, res) {
279 individualHooks: true
282 return res.sendStatus(204);
284 .catch(function(err) {
285 return handleError(res, err);
289 function handleError(res, err) {
290 return res.status(500).send(err);