diff --git a/public/js/controllers/groupsCtrl.js b/public/js/controllers/groupsCtrl.js index dda5c79448..b5b38d9fa5 100644 --- a/public/js/controllers/groupsCtrl.js +++ b/public/js/controllers/groupsCtrl.js @@ -128,6 +128,13 @@ habitrpg.controller("GroupsCtrl", ['$scope', '$rootScope', 'Groups', '$http', 'A } $scope.join = function(group){ + // If we're accepting an invitation, we don't have the actual group object, but a faux group object (for performance + // purposes) {id, name}. Let's trick ngResource into thinking we have a group, so we can call the same $join + // function (server calls .attachGroup(), which finds group by _id and handles this properly) + if (group.id && !group._id) { + group = new Groups.Group({_id:group.id}); + } + group.$join(function(saved){ //$scope.groups.guilds.push(saved); alert('Joined guild, refresh page to see changes') @@ -140,6 +147,14 @@ habitrpg.controller("GroupsCtrl", ['$scope', '$rootScope', 'Groups', '$http', 'A // if (~i) $scope.groups.guilds.splice(i, 1); alert('Left guild, refresh page to see changes') } + + $scope.reject = function(guild){ + var i = _.findIndex(User.user.invitations.guilds, {id:guild.id}); + if (~i){ + User.user.invitations.guilds.splice(i, 1); + User.set('invitations.guilds', User.user.invitations.guilds); + } + } } ]) diff --git a/src/controllers/groups.js b/src/controllers/groups.js index 162087b38a..e464e330d8 100644 --- a/src/controllers/groups.js +++ b/src/controllers/groups.js @@ -272,8 +272,13 @@ api.invite = function(req, res, next) { } function sendInvite (){ - //req.body.type in 'guild', 'party' - invite.invitations.party = {id:group._id, name: group.name} + if(group.type === 'guild'){ + invite.invitations.guilds.push({id: group._id, name: group.name}); + }else{ + //req.body.type in 'guild', 'party' + invite.invitations.party = {id: group._id, name: group.name} + } + invite.save(); Group.findById(group._id) .populate('members', partyFields).exec(function(err, saved){ diff --git a/src/models/user.js b/src/models/user.js index 265985ae93..0ff0a580f2 100644 --- a/src/models/user.js +++ b/src/models/user.js @@ -87,7 +87,7 @@ var UserSchema = new Schema({ /* FIXME remove?*/ invitations: { - guilds: Array, + guilds: {type: Array, 'default': []}, party: Schema.Types.Mixed }, items: { diff --git a/views/options/groups/index.jade b/views/options/groups/index.jade index 31c8745f7d..566a25295f 100644 --- a/views/options/groups/index.jade +++ b/views/options/groups/index.jade @@ -17,7 +17,7 @@ ul.nav.nav-tabs // {#with _user.invitations.party as :party} h2 You're Invited To {{user.invitations.party.name}} a.btn.btn-success(data-type='party', ng-click='join(user.invitations.party)') Accept - a.btn.btn-danger(ng-click='reject(group)') Reject + a.btn.btn-danger(ng-click='reject()') Reject // {/} div(ng-hide='user.invitations.party', ng-controller='PartyCtrl') h2 Create A Party @@ -39,8 +39,8 @@ ul.nav.nav-tabs .tab-pane.active#groups-public-guilds div(ng-repeat='invitation in user.invitations.guilds') h3 You're Invited To {{invitation.name}} - a.btn.btn-success(data-type='guild', ng-click='join(group)') Accept - a.btn.btn-danger(x-bind='click:rejectInvitation') Reject + a.btn.btn-success(data-type='guild', ng-click='join(invitation)') Accept + a.btn.btn-danger(ng-click='reject(invitation)') Reject // Public Groups .options-group.option-large.whatever-options input.option-content(type='text',ng-model='guildSearch', placeholder='Search')