From ae403a55a53df232d6db7746afec2ec324b97ef6 Mon Sep 17 00:00:00 2001 From: Tyler Renelle Date: Mon, 23 Dec 2013 02:56:55 -0700 Subject: [PATCH] quests: add abort feature --- public/js/controllers/groupsCtrl.js | 6 ++++++ public/js/services/groupServices.js | 3 ++- src/controllers/groups.js | 20 ++++++++++++++++++-- src/routes/apiv2.js | 1 + views/options/social/group.jade | 1 + 5 files changed, 28 insertions(+), 3 deletions(-) diff --git a/public/js/controllers/groupsCtrl.js b/public/js/controllers/groupsCtrl.js index 2b7c2c757e..39d809df51 100644 --- a/public/js/controllers/groupsCtrl.js +++ b/public/js/controllers/groupsCtrl.js @@ -300,6 +300,12 @@ habitrpg.controller("GroupsCtrl", ['$scope', '$rootScope', 'Groups', '$http', 'A //User.user.invitations.party = undefined; User.set({'invitations.party':{}}); } + + $scope.questAbort = function(){ + if (!confirm("Are you sure you want to abort this mission? It will abort it for everyone in your party.")) return; + if (!confirm("Are you double sure? Make sure they won't hate you forever!")) return; + $rootScope.party.$questAbort(); + } } ]) diff --git a/public/js/services/groupServices.js b/public/js/services/groupServices.js index 4dc7f7d4e2..c4c5fac1ba 100644 --- a/public/js/services/groupServices.js +++ b/public/js/services/groupServices.js @@ -17,7 +17,8 @@ angular.module('groupServices', ['ngResource']). leave: {method: "POST", url: API_URL + '/api/v2/groups/:gid/leave'}, invite: {method: "POST", url: API_URL + '/api/v2/groups/:gid/invite'}, questAccept: {method: "POST", url: API_URL + '/api/v2/groups/:gid/questAccept'}, - questReject: {method: "POST", url: API_URL + '/api/v2/groups/:gid/questReject'} + questReject: {method: "POST", url: API_URL + '/api/v2/groups/:gid/questReject'}, + questAbort: {method: "POST", url: API_URL + '/api/v2/groups/:gid/questAbort'} }); // Defer loading everything until they're requested diff --git a/src/controllers/groups.js b/src/controllers/groups.js index 70ce37279c..6eaead5240 100644 --- a/src/controllers/groups.js +++ b/src/controllers/groups.js @@ -491,5 +491,21 @@ api.questReject = function(req, res, next) { } -//TODO -function questAbort(){} +api.questAbort = function(req, res, next){ + var group = res.locals.group; + var parallel = _.transform(group.members, function(m,v){ + m.push(function(cb){ + v.party.quest = {}; + v.party.quest.tally.collection = {};v.markModified('party.quest'); + v._v++; + v.save(cb); + }) + }); + group.quest = {}; + parallel.push(function(cb){group.save(cb);}); + async.parallel(parallel,function(err){ + if (err) return res.json(500,{err:err}); + res.json(group); + }) + +} diff --git a/src/routes/apiv2.js b/src/routes/apiv2.js index ff266fcbec..0cb32a30a9 100644 --- a/src/routes/apiv2.js +++ b/src/routes/apiv2.js @@ -100,6 +100,7 @@ router.post('/groups/:gid/invite', auth.auth, groups.attachGroup, groups.invite) router.post('/groups/:gid/removeMember', auth.auth, groups.attachGroup, groups.removeMember); router.post('/groups/:gid/questAccept', auth.auth, groups.attachGroupPopulated, groups.questAccept); // query={key} (optional. if provided, trigger new invite, if not, accept existing invite) router.post('/groups/:gid/questReject', auth.auth, groups.attachGroupPopulated, groups.questReject); +router.post('/groups/:gid/questAbort', auth.auth, groups.attachGroupPopulated, groups.questAbort); //GET /groups/:gid/chat router.post('/groups/:gid/chat', auth.auth, groups.attachGroup, groups.postChat); diff --git a/views/options/social/group.jade b/views/options/social/group.jade index 843306a8ba..07fe18feaf 100644 --- a/views/options/social/group.jade +++ b/views/options/social/group.jade @@ -36,6 +36,7 @@ a.pull-right.gem-wallet(popover-trigger='mouseenter', popover-title='Guild Bank' i.icon-heart | {{group.quest.progress.hp | number:0}} / {{Content.quests[group.quest.key].stats.hp}} p {{Content.quests[group.quest.key].notes}} + button.btn.btn-mini.btn-danger(ng-click='questAbort()') Abort // ------ Information ------- .modal.inline-modal