mirror of
https://github.com/openmhz/trunk-server.git
synced 2026-11-09 23:37:31 -05:00
290 lines
7.6 KiB
JavaScript
290 lines
7.6 KiB
JavaScript
const Group = require("../models/group");
|
|
const System = require("../models/system");
|
|
const mongoose = require("mongoose");
|
|
|
|
//router.get('/system/:shortName/group/:groupId?', isLoggedIn, function(req, res) {
|
|
|
|
exports.getGroups = function(req, res, next) {
|
|
process.nextTick(function() {
|
|
System.findOne(
|
|
{
|
|
shortName: req.params.shortName.toLowerCase()
|
|
},
|
|
function(err, system) {
|
|
if (err) {
|
|
console.error(err);
|
|
res.json({ success: false, message: err });
|
|
return;
|
|
}
|
|
if (!system) {
|
|
console.error(err);
|
|
res.json({
|
|
success: false,
|
|
message: "That Short Name does not exist."
|
|
});
|
|
return;
|
|
}
|
|
if (!system.userId.equals(req.user._id)) {
|
|
res.json({
|
|
success: false,
|
|
message: "You are not the user associated with this system."
|
|
});
|
|
return;
|
|
}
|
|
|
|
if (req.params.groupId) {
|
|
var groupId = req.params.groupId.toLowerCase();
|
|
|
|
Group.findOne(
|
|
{
|
|
_id: new mongoose.Types.ObjectId(groupId),
|
|
shortName: req.params.shortName.toLowerCase()
|
|
},
|
|
{ sort: { position: -1 } },
|
|
function(err, group) {
|
|
if (err) {
|
|
res.json({
|
|
success: false,
|
|
message: err
|
|
});
|
|
return;
|
|
} else {
|
|
res.json({
|
|
success: true,
|
|
group: group
|
|
});
|
|
return;
|
|
}
|
|
}
|
|
);
|
|
} else {
|
|
Group.find(
|
|
{
|
|
shortName: req.params.shortName.toLowerCase()
|
|
}).sort("position").exec(
|
|
function(err, groups) {
|
|
if (err) {
|
|
res.json({
|
|
success: false,
|
|
message: err
|
|
});
|
|
return;
|
|
} else {
|
|
res.json({
|
|
success: true,
|
|
groups: groups
|
|
});
|
|
return;
|
|
}
|
|
}
|
|
);
|
|
}
|
|
}
|
|
);
|
|
});
|
|
};
|
|
|
|
exports.deleteGroup = function(req, res, next) {
|
|
//router.get('/system/:shortName/remove_group/:groupId', isLoggedIn, function(req, res) {
|
|
System.findOne({
|
|
'shortName': req.params.shortName.toLowerCase()
|
|
}, function(err, system) {
|
|
if (err) {
|
|
console.error(err);
|
|
res.json({ success: false, message: err });
|
|
return;
|
|
}
|
|
if (!system) {
|
|
console.error(err);
|
|
res.json({
|
|
success: false,
|
|
message: "That Short Name does not exist."
|
|
});
|
|
return;
|
|
}
|
|
if (!system.userId.equals(req.user._id)) {
|
|
res.json({
|
|
success: false,
|
|
message: "You are not the user associated with this system."
|
|
});
|
|
return;
|
|
}
|
|
Group.findOneAndRemove({
|
|
shortName: req.params.shortName.toLowerCase(),
|
|
'_id': new mongoose.Types.ObjectId(req.params.groupId)
|
|
}, function(err) {
|
|
|
|
if (err) {
|
|
res.json({
|
|
success: false,
|
|
message: err
|
|
});
|
|
return;
|
|
} else {
|
|
res.json({
|
|
success: true
|
|
});
|
|
return;
|
|
}
|
|
// removed!
|
|
});
|
|
|
|
});
|
|
};
|
|
|
|
exports.reorderGroups = function(req, res, next) {
|
|
//router.post('/system/:shortName/group_order', isLoggedIn, function(req, res) {
|
|
process.nextTick(function() {
|
|
System.findOne(
|
|
{
|
|
shortName: req.params.shortName.toLowerCase()
|
|
},
|
|
function(err, system) {
|
|
if (err) {
|
|
console.error(err);
|
|
res.json({ success: false, message: err });
|
|
return;
|
|
}
|
|
if (!system) {
|
|
console.error(err);
|
|
res.json({
|
|
success: false,
|
|
message: "That Short Name does not exist."
|
|
});
|
|
return;
|
|
}
|
|
if (!system.userId.equals(req.user._id)) {
|
|
res.json({
|
|
success: false,
|
|
message: "You are not the user associated with this system."
|
|
});
|
|
return;
|
|
}
|
|
|
|
var groupOrder = JSON.parse(req.body.groupOrder);
|
|
for (var i = 0; i < groupOrder.length; i++) {
|
|
|
|
console.log("in group: " + groupOrder[i] + " position: " + i);
|
|
Group.findOneAndUpdate(
|
|
{
|
|
_id: new mongoose.Types.ObjectId(groupOrder[i]),
|
|
shortName: req.params.shortName.toLowerCase()
|
|
},
|
|
{
|
|
position: i
|
|
},
|
|
{
|
|
new: true,
|
|
upsert: false
|
|
},
|
|
function(err, group) {
|
|
console.log("Save group: " + group._id + " position: " + group.position);
|
|
if (err) {
|
|
res.json({
|
|
success: false,
|
|
message: err
|
|
});
|
|
|
|
console.log(
|
|
"Error: Group Order - " +
|
|
err +
|
|
" Shortname: " +
|
|
req.params.shortName.toLowerCase()
|
|
);
|
|
return;
|
|
}
|
|
}
|
|
);
|
|
}
|
|
res.json({
|
|
success: true
|
|
});
|
|
}
|
|
);
|
|
});
|
|
};
|
|
|
|
exports.upsertGroup = function(req, res, next) {
|
|
//router.post('/system/:shortName/group/:groupId?', isLoggedIn, function(req, res) {
|
|
process.nextTick(function() {
|
|
System.findOne(
|
|
{
|
|
shortName: req.params.shortName.toLowerCase()
|
|
},
|
|
function(err, system) {
|
|
if (err) {
|
|
console.error(err);
|
|
res.json({ success: false, message: err });
|
|
return;
|
|
}
|
|
if (!system) {
|
|
console.error(err);
|
|
res.json({
|
|
success: false,
|
|
message: "That Short Name does not exist."
|
|
});
|
|
return;
|
|
}
|
|
if (!system.userId.equals(req.user._id)) {
|
|
res.json({
|
|
success: false,
|
|
message: "You are not the user associated with this system."
|
|
});
|
|
return;
|
|
}
|
|
var message = "";
|
|
var groupName = req.body.groupName.replace(/[^\w\s]/g, "");
|
|
var talkgroups = JSON.parse(req.body.talkgroups);
|
|
|
|
if (!talkgroups.length || !Array.isArray(talkgroups)) {
|
|
message = "Talkgroups need to be selected, group can not be empty ";
|
|
}
|
|
if (!groupName.length) {
|
|
message = message + "Group Name is required";
|
|
}
|
|
|
|
if (message.length) {
|
|
res.json({
|
|
success: false,
|
|
message: message
|
|
});
|
|
return;
|
|
}
|
|
// if we got here, that means that everything is good for updating/inserting
|
|
|
|
var groupId = req.params.groupId;
|
|
|
|
Group.findOneAndUpdate(
|
|
{
|
|
_id: new mongoose.Types.ObjectId(groupId),
|
|
shortName: req.params.shortName.toLowerCase()
|
|
},
|
|
{
|
|
groupName: groupName,
|
|
talkgroups: talkgroups
|
|
},
|
|
{
|
|
new: true,
|
|
upsert: true
|
|
},
|
|
function(err, group) {
|
|
if (err) {
|
|
res.json({
|
|
success: false,
|
|
message: err
|
|
});
|
|
return;
|
|
} else {
|
|
res.json({
|
|
success: true,
|
|
group: group
|
|
});
|
|
return;
|
|
}
|
|
}
|
|
);
|
|
}
|
|
);
|
|
});
|
|
};
|