diff --git a/src/controllers/challenges.js b/src/controllers/challenges.js index f65ca481ef..95fc79e172 100644 --- a/src/controllers/challenges.js +++ b/src/controllers/challenges.js @@ -156,7 +156,7 @@ api.create = function(req, res){ var challenge = new Challenge(req.body); // FIXME sanitize challenge.save(function(err, saved){ if (err) return res.json(500, {err:err}); - Group.findByIdAndUpdate(saved.group, {$addToSet:{challenges:saved._id}}) // fixme error-check, and also better to do in middleware? + Group.update({_id:saved.group}, {$addToSet:{challenges:saved._id}}) // fixme error-check, and also better to do in middleware? res.json(saved); }); }); diff --git a/src/controllers/groups.js b/src/controllers/groups.js index f0abfc11b1..2c61c65e88 100644 --- a/src/controllers/groups.js +++ b/src/controllers/groups.js @@ -19,6 +19,7 @@ var api = module.exports; var itemFields = 'items.armor items.head items.shield items.weapon items.currentPet'; var partyFields = 'profile preferences stats achievements party backer flags.rest auth.timestamps ' + itemFields; var nameFields = 'profile.name'; +var challengeFields = '_id name'; api.getMember = function(req, res) { User.findById(req.params.uid).select(partyFields).exec(function(err, user){ @@ -106,18 +107,25 @@ api.get = function(req, res) { // This will be called for the header, we need extra members' details than usuals if (gid == 'party') { Group.findOne({type: 'party', members: {'$in': [user._id]}}) - .populate('members invites', partyFields).exec(function(err, group){ + .populate('members', partyFields) + .populate('invites', nameFields) + .populate('challenges', challengeFields) + .exec(function(err, group){ if (err) return res.json(500,{err:err}); res.json(group); }); } else { - Group.findById(gid).populate('members invites', nameFields).exec(function(err, group){ - if ( (group.type == 'guild' && group.privacy == 'private') || group.type == 'party') { - if(!_.find(group.members, {_id: user._id})) - return res.json(401, {err: "You don't have access to this group"}); - } - res.json(group); - }) + Group.findById(gid) + .populate('members', partyFields) + .populate('invites', nameFields) + .populate('challenges', challengeFields) + .exec(function(err, group){ + if ( (group.type == 'guild' && group.privacy == 'private') || group.type == 'party') { + if(!_.find(group.members, {_id: user._id})) + return res.json(401, {err: "You don't have access to this group"}); + } + res.json(group); + }); } }; diff --git a/src/models/group.js b/src/models/group.js index bf2227ce0d..a124f62dd5 100644 --- a/src/models/group.js +++ b/src/models/group.js @@ -31,7 +31,7 @@ var GroupSchema = new Schema({ balance: Number, logo: String, leaderMessage: String, - challenges: [{type:'String', ref:'Challenge'}] + challenges: [{type:'String', ref:'Challenge'}] // do we need this? could depend on back-ref instead (Challenge.find({group:GID})) }, { strict: 'throw', minimize: false // So empty objects are returned diff --git a/views/options/social/group.jade b/views/options/social/group.jade index a9bfd58ff5..0be372b97a 100644 --- a/views/options/social/group.jade +++ b/views/options/social/group.jade @@ -84,17 +84,19 @@ a.pull-right.gem-wallet(popover-trigger='mouseenter', popover-title='Guild Bank' .modal(style='position: relative;top: auto;left: auto;right: auto;margin: 0 auto 20px;z-index: 1;max-width: 100%;') .modal-header - h3 Challenges + h3 + | Challenges + a.pull-right(target='_blank', href='https://trello.com/card/challenges-individual-party-guild-public/50e5d3684fe3a7266b0036d6/58') + i.icon-question-sign .modal-body - a(target='_blank', href='https://trello.com/card/challenges-individual-party-guild-public/50e5d3684fe3a7266b0036d6/58') Details - div(ng-show='group.challenges') + div(ng-if='group.challenges') table.table.table-striped tr(ng-repeat='challenge in group.challenges') td - | {{challenge.name}} + a(ui-sref='options.social.challenges.detail({cid:challenge._id})') {{challenge.name}} p. Visit the Challenges for more information. - div(ng-hid='group.challenges') + div(ng-if='!group.challenges') p. No challenges yet, visit the Challenges tab to create one.