fix(quests): when leaving group, if leader or quest.leader is leaving,

re-assign to most senior member. #3709
This commit is contained in:
Tyler Renelle
2014-07-11 16:29:42 -06:00
parent a8b2b32557
commit 80dbc1111e
2 changed files with 20 additions and 3 deletions
+3 -3
View File
@@ -304,14 +304,14 @@ habitrpg.controller("GroupsCtrl", ['$scope', '$rootScope', 'Shared', 'Groups', '
$scope.create = function(group){
group.$save(function(){
$rootScope.hardRedirect('/#/options/social/party');
$rootScope.hardRedirect('/#/options/groups/party');
});
}
$scope.join = function(party){
var group = new Groups.Group({_id: party.id, name: party.name});
group.$join(function(){
$rootScope.hardRedirect('/#/options/social/party');
$rootScope.hardRedirect('/#/options/groups/party');
});
}
@@ -322,7 +322,7 @@ habitrpg.controller("GroupsCtrl", ['$scope', '$rootScope', 'Shared', 'Groups', '
$scope.popoverEl.popover('destroy');
} else {
Groups.Group.leave({gid: $scope.selectedGroup._id, keep:keep}, undefined, function(){
$rootScope.hardRedirect('/#/options/social/party');
$rootScope.hardRedirect('/#/options/groups/party');
});
}
}
+17
View File
@@ -367,12 +367,29 @@ api.leave = function(req, res, next) {
}
], cb);
},
// Update the group
function(cb){
var update = {$pull:{members:user._id}};
if (group.type == 'party' && group.quest.key){
update['$unset'] = {};
update['$unset']['quest.members.' + user._id] = 1;
}
// FIXME do we want to remove the group `if group.members.length == 0` ? (well, 1 since the update hasn't gone through yet)
if (group.members.length > 1) {
var seniorMember = _.find(group.members, function (m) {return m != user._id});
// If the leader is leaving (or if the leader previously left, and this wasn't accounted for)
var leader = group.leader;
if (leader == user._id || !~group.members.indexOf(leader)) {
update['$set'] = update['$set'] || {};
update['$set'].leader = seniorMember;
}
leader = group.quest && group.quest.leader;
if (leader && (leader == user._id || !~group.members.indexOf(leader))) {
update['$set'] = update['$set'] || {};
update['$set']['quest.leader'] = seniorMember;
}
}
update['$inc'] = {memberCount: -1};
Group.update({_id:group._id},update,cb);
}
],function(err){