2016-09-12 16:15:20 +08:00

191 lines
5.2 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

var validator = require('validator');
var _ = require('lodash');
var at = require('../common/at');
var message = require('../common/message');
var EventProxy = require('eventproxy');
var User = require('../proxy').User;
var Topic = require('../proxy').Topic;
var Reply = require('../proxy').Reply;
var config = require('../config');
/**
* 添加回复
*/
exports.add = function (req, res, next) {
var content = req.body.r_content;
var topic_id = req.params.topic_id;
var reply_id = req.body.reply_id;
var str = validator.trim(String(content));
if (str === '') {
return res.renderError('回复内容不能为空!', 422);
}
var ep = EventProxy.create();
ep.fail(next);
Topic.getTopic(topic_id, ep.doneLater(function (topic) {
if (!topic) {
ep.unbind();
// just 404 page
return next();
}
if (topic.lock) {
return res.status(403).send('此主题已锁定。');
}
ep.emit('topic', topic);
}));
ep.all('topic', function (topic) {
User.getUserById(topic.author_id, ep.done('topic_author'));
});
ep.all('topic', 'topic_author', function (topic, topicAuthor) {
Reply.newAndSave(content, topic_id, req.session.user._id, reply_id, ep.done(function (reply) {
Topic.updateLastReply(topic_id, reply._id, ep.done(function () {
ep.emit('reply_saved', reply);
//发送at消息并防止重复 at 作者
var newContent = content.replace('@' + topicAuthor.loginname + ' ', '');
at.sendMessageToMentionUsers(newContent, topic_id, req.session.user._id, reply._id);
}));
}));
User.getUserById(req.session.user._id, ep.done(function (user) {
user.score += 5;
user.reply_count += 1;
user.save();
req.session.user = user;
ep.emit('score_saved');
}));
});
ep.all('reply_saved', 'topic', function (reply, topic) {
if (topic.author_id.toString() !== req.session.user._id.toString()) {
message.sendReplyMessage(topic.author_id, req.session.user._id, topic._id, reply._id);
}
ep.emit('message_saved');
});
ep.all('reply_saved', 'message_saved', 'score_saved', function (reply) {
res.redirect('/topic/' + topic_id + '#' + reply._id);
});
};
/**
* 删除回复信息
*/
exports.delete = function (req, res, next) {
var reply_id = req.body.reply_id;
Reply.getReplyById(reply_id, function (err, reply) {
if (err) {
return next(err);
}
if (!reply) {
res.status(422);
res.json({status: 'no reply ' + reply_id + ' exists'});
return;
}
if (reply.author_id.toString() === req.session.user._id.toString() || req.session.user.is_admin) {
reply.deleted = true;
reply.save();
res.json({status: 'success'});
reply.author.score -= 5;
reply.author.reply_count -= 1;
reply.author.save();
} else {
res.json({status: 'failed'});
return;
}
Topic.reduceCount(reply.topic_id, _.noop);
});
};
/*
打开回复编辑器
*/
exports.showEdit = function (req, res, next) {
var reply_id = req.params.reply_id;
Reply.getReplyById(reply_id, function (err, reply) {
if (!reply) {
return res.render404('此回复不存在或已被删除。');
}
if (req.session.user._id.equals(reply.author_id) || req.session.user.is_admin) {
res.render('reply/edit', {
reply_id: reply._id,
content: reply.content
});
} else {
return res.renderError('对不起,你不能编辑此回复。', 403);
}
});
};
/*
提交编辑回复
*/
exports.update = function (req, res, next) {
var reply_id = req.params.reply_id;
var content = req.body.t_content;
Reply.getReplyById(reply_id, function (err, reply) {
if (!reply) {
return res.render404('此回复不存在或已被删除。');
}
if (String(reply.author_id) === req.session.user._id.toString() || req.session.user.is_admin) {
if (content.trim().length > 0) {
reply.content = content;
reply.update_at = new Date();
reply.save(function (err) {
if (err) {
return next(err);
}
res.redirect('/topic/' + reply.topic_id + '#' + reply._id);
});
} else {
return res.renderError('回复的字数太少。', 400);
}
} else {
return res.renderError('对不起,你不能编辑此回复。', 403);
}
});
};
exports.up = function (req, res, next) {
var replyId = req.params.reply_id;
var userId = req.session.user._id;
Reply.getReplyById(replyId, function (err, reply) {
if (err) {
return next(err);
}
if (reply.author_id.equals(userId) && !config.debug) {
// 不能帮自己点赞
res.send({
success: false,
message: '呵呵,不能帮自己点赞。',
});
} else {
var action;
reply.ups = reply.ups || [];
var upIndex = reply.ups.indexOf(userId);
if (upIndex === -1) {
reply.ups.push(userId);
action = 'up';
} else {
reply.ups.splice(upIndex, 1);
action = 'down';
}
reply.save(function () {
res.send({
success: true,
action: action
});
});
}
});
};