142 lines
3.4 KiB
JavaScript
142 lines
3.4 KiB
JavaScript
"use strict";
|
|
var config = require('config');
|
|
require('../../models/db');
|
|
|
|
var redis = require('../../helpers/redis');
|
|
var mailer = require('../../helpers/mailer');
|
|
var uploader = require('../../helpers/uploader');
|
|
var space_render = require('../../helpers/space-render');
|
|
var phantom = require('../../helpers/phantom');
|
|
|
|
var async = require('async');
|
|
var fs = require('fs');
|
|
var _ = require("underscore");
|
|
var mongoose = require("mongoose");
|
|
var archiver = require('archiver');
|
|
var request = require('request');
|
|
var url = require("url");
|
|
var path = require("path");
|
|
var crypto = require('crypto');
|
|
var qr = require('qr-image');
|
|
var glob = require('glob');
|
|
var gm = require('gm');
|
|
|
|
var express = require('express');
|
|
var router = express.Router({mergeParams: true});
|
|
|
|
// JSON MAPPINGS
|
|
|
|
var userMapping = {
|
|
_id: 1,
|
|
nickname: 1,
|
|
email: 1,
|
|
avatar_thumb_uri: 1
|
|
};
|
|
|
|
var spaceMapping = {
|
|
_id: 1,
|
|
name: 1,
|
|
thumbnail_url: 1
|
|
};
|
|
|
|
var roleMapping = {
|
|
"none": 0,
|
|
"viewer": 1,
|
|
"editor": 2,
|
|
"admin": 3
|
|
}
|
|
|
|
// MESSAGES
|
|
|
|
router.get('/', function(req, res, next) {
|
|
Message.find({
|
|
space: req.space._id
|
|
}).populate('user', userMapping).exec(function(err, messages) {
|
|
res.status(200).json(messages);
|
|
});
|
|
});
|
|
|
|
router.post('/', function(req, res, next) {
|
|
var attrs = req.body;
|
|
attrs.space = req.space;
|
|
|
|
if (req.user) {
|
|
attrs.user = req.user;
|
|
} else {
|
|
attrs.user = null;
|
|
}
|
|
|
|
var msg = new Message(attrs);
|
|
msg.save(function(err) {
|
|
if (err) res.status(400).json(erra);
|
|
else {
|
|
if (msg.message.length <= 1) return;
|
|
|
|
Membership
|
|
.find({
|
|
space: req.space,
|
|
user: {
|
|
"$exists": true
|
|
}
|
|
})
|
|
.populate('user')
|
|
.exec(function(err, memberships) {
|
|
var users = memberships.map(function(m) {
|
|
return m.user;
|
|
});
|
|
users.forEach((user) => {
|
|
if (user.preferences.email_notifications) {
|
|
redis.isOnlineInSpace(user, req.space, function(err, online) {
|
|
if (!online) {
|
|
var nickname = msg.editor_name;
|
|
if (req.user) {
|
|
nickname = req.user.nickname;
|
|
}
|
|
mailer.sendMail(
|
|
user.email,
|
|
req.i18n.__("space_message_subject", req.space.name),
|
|
req.i18n.__("space_message_body", nickname, req.space.name), {
|
|
message: msg.message,
|
|
action: {
|
|
link: config.endpoint + "/spaces/" + req.space._id.toString(),
|
|
name: req.i18n.__("open")
|
|
}
|
|
});
|
|
} else {
|
|
console.log("not sending message to user: is online.");
|
|
}
|
|
});
|
|
} else {
|
|
console.log("not sending message to user: is disabled notifications.");
|
|
}
|
|
});
|
|
});
|
|
|
|
res.distributeCreate("Message", msg);
|
|
}
|
|
});
|
|
});
|
|
|
|
router.delete('/:message_id', function(req, res, next) {
|
|
Message.findOne({
|
|
"_id": req.params.message_id
|
|
}, function(err, msg) {
|
|
if (!msg) {
|
|
res.sendStatus(404);
|
|
} else {
|
|
msg.remove(function(err) {
|
|
if (err) res.status(400).json(err);
|
|
else {
|
|
if (msg) {
|
|
res.distributeDelete("Message", msg);
|
|
} else {
|
|
res.sendStatus(404);
|
|
}
|
|
}
|
|
});
|
|
}
|
|
});
|
|
});
|
|
|
|
module.exports = router;
|