merge into develop
This commit is contained in:
@@ -8,6 +8,7 @@ function clone(a) {
|
||||
var _ = require('lodash');
|
||||
var nconf = require('nconf');
|
||||
var async = require('async');
|
||||
var Q = require('q');
|
||||
var utils = require('./../utils');
|
||||
var shared = require('../../../common');
|
||||
var User = require('./../models/user').model;
|
||||
@@ -504,6 +505,10 @@ api.leave = function(req, res, next) {
|
||||
var user = res.locals.user;
|
||||
var group = res.locals.group;
|
||||
|
||||
if (group.type === 'party' && user.party.quest && user.party.quest.key) {
|
||||
return res.json(403, 'You cannot leave party during an active quest. Please leave the quest first');
|
||||
}
|
||||
|
||||
// When removing the user from challenges, should we keep the tasks?
|
||||
var keep = (/^remove-all/i).test(req.query.keep) ? 'remove-all' : 'keep-all';
|
||||
|
||||
@@ -522,17 +527,18 @@ var inviteByUUIDs = function(uuids, group, req, res, next){
|
||||
return cb({code:400,err:'User with id "' + uuid + '" not found'});
|
||||
if (group.type == 'guild') {
|
||||
if (_.contains(group.members,uuid))
|
||||
return cb({code:400,err: "User already in that group"});
|
||||
return cb({code:400, err: "User already in that group"});
|
||||
if (invite.invitations && invite.invitations.guilds && _.find(invite.invitations.guilds, {id:group._id}))
|
||||
return cb({code:400,err:"User already invited to that group"});
|
||||
return cb({code:400, err:"User already invited to that group"});
|
||||
sendInvite();
|
||||
} else if (group.type == 'party') {
|
||||
if (invite.invitations && !_.isEmpty(invite.invitations.party))
|
||||
return cb({code:400,err:"User already pending invitation."});
|
||||
Group.find({type:'party', members:{$in:[uuid]}}, function(err, groups){
|
||||
return cb({code: 400,err:"User already pending invitation."});
|
||||
Group.find({type: 'party', members: {$in: [uuid]}}, function(err, groups){
|
||||
if (err) return cb(err);
|
||||
if (!_.isEmpty(groups))
|
||||
return cb({code:400,err:"User already in a party."})
|
||||
if (!_.isEmpty(groups) && groups[0].members.length > 1) {
|
||||
return cb({code: 400, err: "User already in a party."})
|
||||
}
|
||||
sendInvite();
|
||||
});
|
||||
}
|
||||
@@ -554,9 +560,6 @@ var inviteByUUIDs = function(uuids, group, req, res, next){
|
||||
async.series([
|
||||
function(cb){
|
||||
invite.save(cb);
|
||||
},
|
||||
function(cb){
|
||||
group.save(cb);
|
||||
}
|
||||
], function(err, results){
|
||||
if (err) return cb(err);
|
||||
@@ -590,14 +593,20 @@ var inviteByUUIDs = function(uuids, group, req, res, next){
|
||||
}, function(err){
|
||||
if(err) return err.code ? res.json(err.code, {err: err.err}) : next(err);
|
||||
|
||||
// TODO pass group from save above don't find it again, or you have to find it again in order to run populate?
|
||||
populateQuery(group.type, Group.findById(group._id)).exec(function(err, populatedGroup){
|
||||
if(err) return next(err);
|
||||
async.series([
|
||||
function(cb) {
|
||||
group.save(cb);
|
||||
},
|
||||
function(cb) {
|
||||
// TODO pass group from save above don't find it again, or you have to find it again in order to run populate?
|
||||
populateQuery(group.type, Group.findById(group._id)).exec(function(err, populatedGroup){
|
||||
if(err) return next(err);
|
||||
|
||||
res.json(populatedGroup);
|
||||
});
|
||||
res.json(populatedGroup);
|
||||
});
|
||||
}
|
||||
]);
|
||||
});
|
||||
|
||||
};
|
||||
|
||||
var inviteByEmails = function(invites, group, req, res, next){
|
||||
@@ -618,6 +627,7 @@ var inviteByEmails = function(invites, group, req, res, next){
|
||||
}
|
||||
|
||||
// yeah, it supports guild too but for backward compatibility we'll use partyInvite as query
|
||||
|
||||
var link = '?partyInvite='+ utils.encrypt(JSON.stringify({id:group._id, inviter:res.locals.user._id, name:group.name}));
|
||||
|
||||
var inviterVars = utils.getUserInfo(res.locals.user, ['name', 'email']);
|
||||
@@ -648,9 +658,9 @@ var inviteByEmails = function(invites, group, req, res, next){
|
||||
}, function(err){
|
||||
if(err) return err.code ? res.json(err.code, {err: err.err}) : next(err);
|
||||
|
||||
if(usersAlreadyRegistered.length > 0){
|
||||
if (usersAlreadyRegistered.length > 0){
|
||||
inviteByUUIDs(usersAlreadyRegistered, group, req, res, next);
|
||||
}else{
|
||||
} else{
|
||||
|
||||
// Send only status code down the line because it doesn't need
|
||||
// info on invited users since they are not yet registered
|
||||
@@ -662,11 +672,11 @@ var inviteByEmails = function(invites, group, req, res, next){
|
||||
api.invite = function(req, res, next){
|
||||
var group = res.locals.group;
|
||||
|
||||
if(req.body.uuids){
|
||||
if (req.body.uuids) {
|
||||
inviteByUUIDs(req.body.uuids, group, req, res, next);
|
||||
}else if(req.body.emails){
|
||||
} else if (req.body.emails) {
|
||||
inviteByEmails(req.body.emails, group, req, res, next)
|
||||
}else{
|
||||
} else {
|
||||
return res.json(400,{err: "Can invite only by email or uuid"});
|
||||
}
|
||||
}
|
||||
@@ -1026,3 +1036,37 @@ api.questAbort = function(req, res, next){
|
||||
group = null;
|
||||
})
|
||||
}
|
||||
|
||||
api.questLeave = function(req, res, next) {
|
||||
// Non-member leave quest while still in progress
|
||||
var group = res.locals.group;
|
||||
var user = res.locals.user;
|
||||
|
||||
if (!(group.quest && group.quest.active)) {
|
||||
return res.json(404, { err: 'No active quest to leave' });
|
||||
}
|
||||
|
||||
if (!(group.quest.members && group.quest.members[user._id])) {
|
||||
return res.json(403, { err: 'You are not part of the quest' });
|
||||
}
|
||||
|
||||
if (group.quest.leader === user._id) {
|
||||
return res.json(403, { err: 'Quest leader cannot leave quest' });
|
||||
}
|
||||
|
||||
delete group.quest.members[user._id];
|
||||
group.markModified('quest.members');
|
||||
|
||||
user.party.quest = Group.cleanQuestProgress();
|
||||
user.markModified('party.quest');
|
||||
|
||||
var groupSavePromise = Q.nbind(group.save, group);
|
||||
var userSavePromise = Q.nbind(user.save, user);
|
||||
|
||||
Q.all([groupSavePromise(), userSavePromise()])
|
||||
.done(function(values) {
|
||||
return res.send(204);
|
||||
}, function(error) {
|
||||
return next(error);
|
||||
});
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user