[#1489] add edit-gropu server route, basic editing of group info for now (with markdown!)

This commit is contained in:
Tyler Renelle
2013-09-09 17:09:45 -04:00
parent f5b1748d60
commit e1828153dd
8 changed files with 50 additions and 25 deletions

View File

@@ -13,10 +13,9 @@
padding-right: 14px padding-right: 14px
display: inline-block display: inline-block
.bailey-modal .popover .wide-popover
max-width: 400px max-width: 400px
// variables // variables
gpColor = #FBEFC0 gpColor = #FBEFC0

View File

@@ -10,6 +10,11 @@ habitrpg.controller("GroupsCtrl", ['$scope', '$rootScope', 'Groups', '$http', 'A
$scope.Members = Members; $scope.Members = Members;
$scope._editing = {group:false}; $scope._editing = {group:false};
$scope.save = function(group){
group.$save();
group._editing = false;
}
// ------ Loading ------ // ------ Loading ------
$scope.groups = Groups.groups; $scope.groups = Groups.groups;

View File

@@ -19,6 +19,10 @@ var api = module.exports;
var usernameFields = 'auth.local.username auth.facebook.displayName auth.facebook.givenName auth.facebook.familyName auth.facebook.name'; var usernameFields = 'auth.local.username auth.facebook.displayName auth.facebook.givenName auth.facebook.familyName auth.facebook.name';
var partyFields = 'profile preferences items stats achievements party backer flags.rest ' + usernameFields; var partyFields = 'profile preferences items stats achievements party backer flags.rest ' + usernameFields;
function removeSelf(group, user){
group.members = _.filter(group.members, function(m){return m._id != user._id});
}
api.getMember = function(req, res) { api.getMember = function(req, res) {
User.findById(req.params.uid).select(partyFields).exec(function(err, user){ User.findById(req.params.uid).select(partyFields).exec(function(err, user){
if (err) return res.json(500,{err:err}); if (err) return res.json(500,{err:err});
@@ -70,8 +74,7 @@ api.getGroups = function(req, res, next) {
// Remove self from party (see above failing `match` directive in `populate` // Remove self from party (see above failing `match` directive in `populate`
if (results.party) { if (results.party) {
var i = _.findIndex(results.party.members, {_id:user._id}); removeSelf(results.party, user);
if (~i) results.party.members.splice(i,1);
} }
// Sort public groups by members length (not easily doable in mongoose) // Sort public groups by members length (not easily doable in mongoose)
@@ -104,8 +107,7 @@ api.getGroup = function(req, res, next) {
} }
// Remove self from party (see above failing `match` directive in `populate` // Remove self from party (see above failing `match` directive in `populate`
if (group.type == 'party') { if (group.type == 'party') {
var i = _.findIndex(group.members, {_id:user._id}); removeSelf(group, user);
if (~i) group.members.splice(i,1);
} }
res.json(group); res.json(group);
@@ -121,6 +123,24 @@ api.createGroup = function(req, res, next) {
}) })
} }
api.updateGroup = function(req, res, next) {
var group = res.locals.group;
'name description logo websites logo leaderMessage'.split(' ').forEach(function(attr){
group[attr] = req.body[attr];
});
async.series([
function(cb){group.save(cb);},
function(cb){
var fields = group.type == 'party' ? partyFields : usernameFields;
Group.findById(group._id).populate('members', fields).exec(cb);
}
], function(err, results){
if (err) return res.json(500,{err:err});
removeSelf(results[1], res.locals.user);
res.json(results[1]);
})
}
api.attachGroup = function(req, res, next) { api.attachGroup = function(req, res, next) {
Group.findById(req.params.gid, function(err, group){ Group.findById(req.params.gid, function(err, group){
if(err) return res.json(500, {err:err}); if(err) return res.json(500, {err:err});
@@ -160,7 +180,7 @@ api.postChat = function(req, res, next) {
// TODO This is less efficient, but see https://github.com/lefnire/habitrpg/commit/41255dc#commitcomment-4014583 // TODO This is less efficient, but see https://github.com/lefnire/habitrpg/commit/41255dc#commitcomment-4014583
var saved = results[1]; var saved = results[1];
saved.members = _.filter(saved.members, function(m){return m._id != user._id}); removeSelf(saved, user);
res.json(saved); res.json(saved);
}) })

View File

@@ -57,7 +57,7 @@ router['delete']('/user/tags/:tid', auth.auth, user.deleteTag);
router.get('/groups', auth.auth, groups.getGroups); router.get('/groups', auth.auth, groups.getGroups);
router.post('/groups', auth.auth, groups.createGroup); router.post('/groups', auth.auth, groups.createGroup);
router.get('/groups/:gid', auth.auth, groups.getGroup); router.get('/groups/:gid', auth.auth, groups.getGroup);
//PUT /groups/:gid (edit group) router.post('/groups/:gid', auth.auth, groups.attachGroup, groups.updateGroup);
//DELETE /groups/:gid //DELETE /groups/:gid
router.post('/groups/:gid/join', auth.auth, groups.attachGroup, groups.join); router.post('/groups/:gid/join', auth.auth, groups.attachGroup, groups.join);

View File

@@ -9,15 +9,19 @@ a.pull-right.gem-wallet(rel='popover', data-trigger='hover', data-title='Guild B
// ------ Information ------- // ------ Information -------
.modal(style='position: relative;top: auto;left: auto;right: auto;margin: 0 auto 20px;z-index: 1;max-width: 100%;') .modal(style='position: relative;top: auto;left: auto;right: auto;margin: 0 auto 20px;z-index: 1;max-width: 100%;')
.modal-header .modal-header
span(ng-if='group.leader == user.id')
button.btn.btn-primary.pull-right(ng-click='save(group)', ng-show='group._editing') Save
button.btn.btn-default.pull-right(ng-click='group._editing = true', ng-hide='group._editing') Edit Group
h3 {{group.name}} h3 {{group.name}}
.modal-body .modal-body
div.whatever-options(ng-show='_editing.group') div.whatever-options(ng-show='group._editing')
.control-group.option-large .control-group.option-large
label.control-label Group Name label.control-label Group Name
input.option-content(type='text', ng-model='group.name', placeholder='Group Name') input.option-content(type='text', ng-model='group.name', placeholder='Group Name')
.control-group.option-large .control-group.option-large
label.control-label Description label.control-label Description
textarea.option-content(style='height:15em;', placeholder='Description', ng-model='group.description') textarea.option-content(style='height:15em;', placeholder='Description', ng-model='group.description')
include ../../shared/formatting-help
.control-group.option-large .control-group.option-large
label.control-label Logo URL label.control-label Logo URL
input.option-content(type='url', placeholder='Logo URL', ng-model='group.logo') input.option-content(type='url', placeholder='Logo URL', ng-model='group.logo')
@@ -39,7 +43,7 @@ a.pull-right.gem-wallet(rel='popover', data-trigger='hover', data-title='Guild B
i.icon-trash i.icon-trash
a(target='_blank', href='{{website}}') {{website}} a(target='_blank', href='{{website}}') {{website}}
div(ng-show='!_editing.group') div(ng-show='!group._editing')
img.pull-right(ng-show='group.logo', style='max-width:150px', ng-src='{{group.logo}}') img.pull-right(ng-show='group.logo', style='max-width:150px', ng-src='{{group.logo}}')
markdown(ng-model='group.description') markdown(ng-model='group.description')
div(ng-show='group.websites') div(ng-show='group.websites')
@@ -95,20 +99,16 @@ a.pull-right.gem-wallet(rel='popover', data-trigger='hover', data-title='Guild B
a.btn.btn-danger(data-id='{{group.id}}', ng-click='leave(group)') Leave a.btn.btn-danger(data-id='{{group.id}}', ng-click='leave(group)') Leave
.span8 .span8
div(ng-if='group.leader == user.id') div.blah-options(ng-show='group._editing')
div.blah-options(ng-show='_editing.group')
button.btn.btn-primary.pull-right(ng-click='_editing.group = false') Save
i.icon-ok
.option-large .option-large
textarea.option-content(style='height:15em;', placeholder='Message from group leader', ng-model='group.leaderMessage') textarea.option-content(style='height:15em;', placeholder='Message from group leader', ng-model='group.leaderMessage')
div(ng-hide='_editing.group') include ../../shared/formatting-help
button.btn.btn-default.pull-right(ng-click='_editing.group = true') Edit Group
table(ng-show='group.leaderMessage') table(ng-show='group.leaderMessage')
tr tr
td td
app:avatar:avatar(profile='{{Members.members[group.leader]}}') app:avatar:avatar(profile='{{Members.members[group.leader]}}')
td td
.popover.static-popover.fade.right.in .popover.static-popover.fade.right.in.wide-popover
.arrow .arrow
h3.popover-title {{username(Members.members[group.leader].auth, Members.members[group.leader].profile.name)}} h3.popover-title {{username(Members.members[group.leader].auth, Members.members[group.leader].profile.name)}}
.popover-content .popover-content

View File

@@ -72,8 +72,7 @@
.control-group.option-large .control-group.option-large
label.control-label Blurb label.control-label Blurb
textarea.option-content(style='height:15em;', placeholder='Blurb', ng-model='user.profile.blurb', ng-blur='set("profile.blurb", user.profile.blurb)') textarea.option-content(style='height:15em;', placeholder='Blurb', ng-model='user.profile.blurb', ng-blur='set("profile.blurb", user.profile.blurb)')
small include ../shared/formatting-help
a(target='_blank', href='http://daringfireball.net/projects/markdown/') Use Markdown form formatting
.control-group.option-large .control-group.option-large
label.control-label Websites label.control-label Websites
form(ng-submit='addWebsite()') form(ng-submit='addWebsite()')

View File

@@ -0,0 +1,2 @@
small
a(target='_blank', href='http://daringfireball.net/projects/markdown/') Use Markdown form formatting

View File

@@ -1,13 +1,13 @@
div(modal='user.flags.rewrite !== false') div(modal='user.flags.rewrite !== false')
.modal-header .modal-header
h3 Mega Ultra Update! h3 Mega Ultra Update!
.modal-body.bailey-modal .modal-body
table table
tr tr
td td
.NPC-Bailey .NPC-Bailey
td td
.popover.static-popover.fade.right.in .popover.static-popover.fade.right.in.wide-popover
.arrow .arrow
h3.popover-title h3.popover-title
a(target='_blank', href='http://www.kickstarter.com/profile/mihakuu') Bailey a(target='_blank', href='http://www.kickstarter.com/profile/mihakuu') Bailey
@@ -47,13 +47,13 @@ div(modal='user.flags.rewrite !== false')
div(modal='modals.newStuff') div(modal='modals.newStuff')
.modal-header .modal-header
h3 New Stuff! h3 New Stuff!
.modal-body.bailey-modal .modal-body
table table
tr tr
td td
.NPC-Bailey .NPC-Bailey
td td
.popover.static-popover.fade.right.in .popover.static-popover.fade.right.in.wide-popover
.arrow .arrow
h3.popover-title h3.popover-title
a(target='_blank', href='http://www.kickstarter.com/profile/mihakuu') Bailey a(target='_blank', href='http://www.kickstarter.com/profile/mihakuu') Bailey