initial commit.
This commit is contained in:
141
routes/api/space_messages.js
Normal file
141
routes/api/space_messages.js
Normal file
@@ -0,0 +1,141 @@
|
||||
"use strict";
|
||||
var config = require('config');
|
||||
require('../../models/schema');
|
||||
|
||||
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;
|
||||
Reference in New Issue
Block a user