Files
meanTorrent/modules/forums/server/controllers/forums.admin.server.controller.js
2017-07-08 01:57:31 +08:00

202 lines
4.2 KiB
JavaScript

'use strict';
/**
* Module dependencies
*/
var path = require('path'),
config = require(path.resolve('./config/config')),
mongoose = require('mongoose'),
errorHandler = require(path.resolve('./modules/core/server/controllers/errors.server.controller')),
User = mongoose.model('User'),
Forum = mongoose.model('Forum'),
Topic = mongoose.model('Topic'),
async = require('async');
/**
* create a forum
* @param req
* @param res
*/
exports.create = function (req, res) {
var forum = new Forum(req.body);
forum.save(function (err) {
if (err) {
return res.status(422).send({
message: errorHandler.getErrorMessage(err)
});
} else {
res.json(forum);
}
});
};
/**
* list forums
* @param req
* @param res
*/
exports.list = function (req, res) {
Forum.find()
.sort('order -createdat')
.populate('lastTopic')
.populate('moderators', 'username displayName profileImageURL uploaded downloaded')
.exec(function (err, forums) {
if (err) {
return res.status(422).send({
message: errorHandler.getErrorMessage(err)
});
}
res.json(forums);
});
};
/**
* Update an forum
*/
exports.update = function (req, res) {
var forum = req.forum;
forum.name = req.body.name;
forum.desc = req.body.desc;
forum.order = req.body.order;
forum.readOnly = req.body.readOnly;
forum.category = req.body.category;
forum.save(function (err) {
if (err) {
return res.status(422).send({
message: errorHandler.getErrorMessage(err)
});
} else {
res.json(forum);
}
});
};
/**
* addModerator
* @param req
* @param res
*/
exports.addModerator = function (req, res) {
var forum = req.forum;
var mu = req.nameuser;
var om = [];
forum.moderators.forEach(function (m) {
om.push(m._id.toString());
});
if (om.indexOf(mu._id.toString()) >= 0) {
return res.status(422).send({
message: 'username "' + mu.username + '" already exist!'
});
} else {
forum.moderators.push(mu);
forum.save(function (err) {
if (err) {
return res.status(422).send({
message: errorHandler.getErrorMessage(err)
});
} else {
res.json(forum);
}
});
}
};
exports.removeModerator = function (req, res) {
var forum = req.forum;
var mu = req.nameuser;
var om = [];
forum.moderators.forEach(function (m) {
om.push(m._id.toString());
});
if (om.indexOf(mu._id.toString()) < 0) {
return res.status(422).send({
message: 'username "' + mu.username + '" not exist!'
});
} else {
forum.moderators.splice(om.indexOf(mu._id.toString()), 1);
forum.save(function (err) {
if (err) {
return res.status(422).send({
message: errorHandler.getErrorMessage(err)
});
} else {
res.json(forum);
}
});
}
};
/**
* delete forum
* @param req
* @param res
*/
exports.delete = function (req, res) {
var forum = req.forum;
forum.remove(function (err) {
if (err) {
return res.status(422).send({
message: errorHandler.getErrorMessage(err)
});
} else {
res.json(forum);
}
});
};
/**
* Invitation middleware
*/
exports.forumByID = function (req, res, next, id) {
if (!mongoose.Types.ObjectId.isValid(id)) {
return res.status(400).send({
message: 'Forum is invalid'
});
}
Forum.findById(id)
.populate('lastTopic')
.populate('moderators', 'username displayName profileImageURL uploaded downloaded')
.exec(function (err, forum) {
if (err) {
return next(err);
} else if (!forum) {
return res.status(404).send({
message: 'No forum with that identifier has been found'
});
}
req.forum = forum;
next();
});
};
/**
* Invitation middleware
*/
exports.userByUsername = function (req, res, next, uname) {
User.findOne({
username: uname
})
.select('username displayName profileImageURL uploaded downloaded')
.exec(function (err, user) {
if (err) {
return next(err);
} else if (!user) {
return res.status(404).send({
message: 'No user with that username has been found'
});
}
req.nameuser = user;
next();
});
};