diff --git a/public/js/controllers/groupsCtrl.js b/public/js/controllers/groupsCtrl.js index f544ad9e80..a4f487f109 100644 --- a/public/js/controllers/groupsCtrl.js +++ b/public/js/controllers/groupsCtrl.js @@ -38,6 +38,15 @@ habitrpg.controller("GroupsCtrl", ['$scope', '$rootScope', 'Groups', '$http', 'A } } + $scope.removeMember = function(group, member){ + var yes = confirm("Do you really want to remove this member from the party?") + if(yes){ + group.$removeMember({uuid: member._id}, function(){ + location.reload(); + }); + } + } + // ------ Invites ------ $scope.invitee = ''; @@ -118,8 +127,6 @@ habitrpg.controller("GroupsCtrl", ['$scope', '$rootScope', 'Groups', '$http', 'A if (confirm("Create Guild for 4 Gems?")) { group.$save(function(){ location.reload(); - }, function(error){ - alert(error.data); }); } } diff --git a/public/js/services/groupServices.js b/public/js/services/groupServices.js index d4c7b5ee13..7e441b1839 100644 --- a/public/js/services/groupServices.js +++ b/public/js/services/groupServices.js @@ -15,7 +15,8 @@ angular.module('groupServices', ['ngResource']). deleteChatMessage: {method: "DELETE", url: API_URL + '/api/v1/groups/:gid/chat/:messageId'}, join: {method: "POST", url: API_URL + '/api/v1/groups/:gid/join'}, leave: {method: "POST", url: API_URL + '/api/v1/groups/:gid/leave'}, - invite: {method: "POST", url: API_URL + '/api/v1/groups/:gid/invite'} + invite: {method: "POST", url: API_URL + '/api/v1/groups/:gid/invite'}, + removeMember: {method: "POST", url: API_URL + '/api/v1/groups/:gid/removeMember'} }); // The user may not visit the public guilds, personal guilds, and tavern pages. So diff --git a/src/controllers/groups.js b/src/controllers/groups.js index 2aa5c2a601..aaa81680ac 100644 --- a/src/controllers/groups.js +++ b/src/controllers/groups.js @@ -261,8 +261,8 @@ api.leave = function(req, res, next) { Group.update({_id:group._id},{$pull:{members:user._id}}, function(err, saved){ if (err) return res.json(500,{err:err}); - res.send(200, {_id: saved._id}); - }) + return res.send(200, {_id: saved._id}); + }); } api.invite = function(req, res, next) { @@ -307,4 +307,24 @@ api.invite = function(req, res, next) { } }); +} + +api.removeMember = function(req, res, next){ + var group = res.locals.group; + var uuid = req.query.uuid; + var user = res.locals.user; + + if(group.leader !== user._id){ + return res.json(401, {err: "Only group leader can remove a member!"}); + } + + if(_.contains(group.members, uuid)){ + Group.update({_id:group._id},{$pull:{members:uuid}}, function(err, saved){ + if (err) return res.json(500,{err:err}); + return res.send(204); + }); + }else{ + return res.json(400, {err: "User not found among group's members!"}); + } + } \ No newline at end of file diff --git a/src/routes/api.js b/src/routes/api.js index 1eb4ade222..bd4c968ab4 100644 --- a/src/routes/api.js +++ b/src/routes/api.js @@ -65,6 +65,7 @@ router.post('/groups/:gid', auth.auth, groups.attachGroup, groups.updateGroup); router.post('/groups/:gid/join', auth.auth, groups.attachGroup, groups.join); router.post('/groups/:gid/leave', auth.auth, groups.attachGroup, groups.leave); router.post('/groups/:gid/invite', auth.auth, groups.attachGroup, groups.invite); +router.post('/groups/:gid/removeMember', auth.auth, groups.attachGroup, groups.removeMember); //GET /groups/:gid/chat router.post('/groups/:gid/chat', auth.auth, groups.attachGroup, groups.postChat); diff --git a/views/options/groups/group.jade b/views/options/groups/group.jade index 691e68dd97..20f7fa5e5e 100644 --- a/views/options/groups/group.jade +++ b/views/options/groups/group.jade @@ -63,7 +63,7 @@ a.pull-right.gem-wallet(popover-trigger='mouseenter', popover-title='Guild Bank' // allow leaders to ban members div(ng-show='group.leader == user.id && user.id!=member._id') // {{#with group.members[$index]}} - a(x-bind='click:removeAt', data-refresh='true', data-confirm='Boot this member?') + a(ng-click='removeMember(group, member)') i.icon-ban-circle(tooltip='Boot Member') // {{/}} a(data-toggle='modal', data-target='#avatar-modal-{{member._id}}')