diff --git a/public/src/forum/admin/groups.js b/public/src/forum/admin/groups.js index e1d945ac07..70c80ff241 100644 --- a/public/src/forum/admin/groups.js +++ b/public/src/forum/admin/groups.js @@ -83,11 +83,13 @@ define('forum/admin/groups', function() { var formEl = detailsModal.find('form'), nameEl = formEl.find('#change-group-name'), descEl = formEl.find('#change-group-desc'), + userTitleEl = formEl.find('#change-group-user-title'), numMembers = groupObj.members.length, x; nameEl.val(groupObj.name); descEl.val(groupObj.description); + userTitleEl.val(groupObj.userTitle); if (numMembers > 0) { groupMembersEl.empty(); @@ -191,12 +193,14 @@ define('forum/admin/groups', function() { var formEl = detailsModal.find('form'), nameEl = formEl.find('#change-group-name'), descEl = formEl.find('#change-group-desc'), + userTitleEl = formEl.find('#change-group-user-title'), groupName = detailsModal.attr('data-groupname'); socket.emit('admin.groups.update', { groupName: groupName, values: { name: nameEl.val(), + userTitle: userTitleEl.val(), description: descEl.val() } }, function(err) { diff --git a/src/controllers/admin.js b/src/controllers/admin.js index 3e93f3adeb..0db5edd1f0 100644 --- a/src/controllers/admin.js +++ b/src/controllers/admin.js @@ -184,6 +184,9 @@ adminController.groups.get = function(req, res, next) { showSystemGroups: true, truncateUserList: true }, function(err, groups) { + groups = groups.filter(function(group) { + return group.name !== 'registered-users' && group.name !== 'guests'; + }); res.render('admin/groups', { groups: groups, yourid: req.user.uid diff --git a/src/groups.js b/src/groups.js index 1c528a6855..099949f598 100644 --- a/src/groups.js +++ b/src/groups.js @@ -221,21 +221,16 @@ }; Groups.update = function(groupName, values, callback) { + callback = callback || function() {}; db.exists('group:' + groupName, function (err, exists) { - if (!err && exists) { - // If the group was renamed, check for dupes - if (!values.name) { - db.setObject('group:' + groupName, values, callback); - } else { - if (callback) { - callback(new Error('[[error:group-name-change-not-allowed]]')); - } - } - } else { - if (callback) { - callback(new Error('[[error:no-group]]')); - } + if (err || !exists) { + return callback(err || new Error('[[error:no-group]]')); } + + db.setObject('group:' + groupName, { + userTitle: values.userTitle, + description: values.description + }, callback); }); }; @@ -321,5 +316,39 @@ }) }) }); + }; + + Groups.getUserGroups = function(uid, callback) { + var ignoredGroups = ['registered-users']; + + db.getSetMembers('groups', function(err, groupNames) { + var groupKeys = groupNames.filter(function(groupName) { + return ignoredGroups.indexOf(groupName) === -1; + }).map(function(groupName) { + return 'group:' + groupName; + }); + + db.getObjectsFields(groupKeys, ['name', 'hidden', 'userTitle'], function(err, groupData) { + + groupData = groupData.filter(function(group) { + return parseInt(group.hidden, 10) !== 1; + }); + + var groupSets = groupData.map(function(group) { + group.userTitle = group.userTitle || group.name; + return 'group:' + group.name + ':members'; + }) + + db.isMemberOfSets(groupSets, uid, function(err, isMembers) { + for(var i=isMembers.length - 1; i>=0; --i) { + if (parseInt(isMembers[i], 10) !== 1) { + groupData.splice(i, 1); + } + } + + callback(null, groupData); + }); + }); + }); } }(module.exports)); diff --git a/src/posts.js b/src/posts.js index f00fbe06f5..f368cae828 100644 --- a/src/posts.js +++ b/src/posts.js @@ -212,6 +212,9 @@ var async = require('async'), }, customProfileInfo: function(next) { plugins.fireHook('filter:posts.custom_profile_info', {profile: [], uid: post.uid, pid: post.pid}, next); + }, + groups: function(next) { + groups.getUserGroups(post.uid, next); } }, function(err, results) { if (err) {