diff --git a/public/src/admin/manage/category.js b/public/src/admin/manage/category.js index 743fc2e1a4..c51dba4a01 100644 --- a/public/src/admin/manage/category.js +++ b/public/src/admin/manage/category.js @@ -184,24 +184,24 @@ define('admin/manage/category', [ privilege = checkboxEl.parent().attr('data-privilege'), state = checkboxEl.prop('checked'), rowEl = checkboxEl.parents('tr'), - member = rowEl.attr('data-group-name') || rowEl.attr('data-uid'); + member = rowEl.attr('data-group-name') || rowEl.attr('data-uid'), + isPrivate = parseInt(rowEl.attr('data-private') || 0, 10), + isGroup = rowEl.attr('data-group-name') !== undefined; if (member) { - socket.emit('admin.categories.setPrivilege', { - cid: ajaxify.variables.get('cid'), - privilege: privilege, - set: state, - member: member - }, function(err) { - if (err) { - return app.alertError(err.message); - } - - checkboxEl.replaceWith(''); - Category.refreshPrivilegeTable(); - }); + if (isGroup && privilege === 'groups:moderate' && !isPrivate && state) { + bootbox.confirm('Are you sure you wish to grant the moderation privilege to this user group? This group is public, and any users can join at will.', function(confirm) { + if (confirm) { + Category.setPrivilege(member, privilege, state, checkboxEl); + } else { + checkboxEl.prop('checked', checkboxEl.prop('checked') ^ 1); + } + }); + } else { + Category.setPrivilege(member, privilege, state, checkboxEl); + } } else { - app.alertError('No member or group was selected'); + app.alertError('[[error:invalid-data]]'); } }) }; @@ -220,6 +220,22 @@ define('admin/manage/category', [ }); }; + Category.setPrivilege = function(member, privilege, state, checkboxEl) { + socket.emit('admin.categories.setPrivilege', { + cid: ajaxify.variables.get('cid'), + privilege: privilege, + set: state, + member: member + }, function(err) { + if (err) { + return app.alertError(err.message); + } + + checkboxEl.replaceWith(''); + Category.refreshPrivilegeTable(); + }); + }; + Category.launchParentSelector = function() { socket.emit('categories.get', function(err, categories) { templates.parse('partials/category_list', { diff --git a/public/src/modules/helpers.js b/public/src/modules/helpers.js index 042075e6a3..04937895c5 100644 --- a/public/src/modules/helpers.js +++ b/public/src/modules/helpers.js @@ -108,7 +108,7 @@ } }; - helpers.spawnPrivilegeStates = function(privileges) { + helpers.spawnPrivilegeStates = function(member, privileges) { var states = []; for(var priv in privileges) { if (privileges.hasOwnProperty(priv)) { @@ -119,7 +119,7 @@ } } return states.map(function(priv) { - return ''; + return ''; }).join(''); }; diff --git a/src/privileges/categories.js b/src/privileges/categories.js index 8591a174c4..59b2f79a1d 100644 --- a/src/privileges/categories.js +++ b/src/privileges/categories.js @@ -117,6 +117,19 @@ module.exports = function(privileges) { next(null, memberData); }); + }, + function(memberData, next) { + // Grab privacy info for the groups as well + async.map(memberData, function(member, next) { + groups.isPrivate(member.name, function(err, isPrivate) { + if (err) { + return next(err); + } + + member.isPrivate = isPrivate; + next(null, member); + }); + }, next); } ], next); } diff --git a/src/views/admin/manage/category.tpl b/src/views/admin/manage/category.tpl index 358e05609c..80b5dbe694 100644 --- a/src/views/admin/manage/category.tpl +++ b/src/views/admin/manage/category.tpl @@ -79,7 +79,7 @@

You can configure the access control privileges for this category in this section. Privileges can be granted on a per-user or - a per-group basis. You can add a new user or group to this table by searching for them in the form below. + a per-group basis. You can add a new user to this table by searching for them in the form below.

Note: Privilege settings take effect immediately. It is not necessary to save the category after adjusting diff --git a/src/views/admin/partials/categories/privileges.tpl b/src/views/admin/partials/categories/privileges.tpl index c1f6aa8979..b6b33ac42b 100644 --- a/src/views/admin/partials/categories/privileges.tpl +++ b/src/views/admin/partials/categories/privileges.tpl @@ -11,7 +11,7 @@ {username} - {function.spawnPrivilegeStates, privileges} + {function.spawnPrivilegeStates, username, privileges} @@ -31,9 +31,14 @@ - - {privileges.groups.name} - {function.spawnPrivilegeStates, privileges} + + + + + + {privileges.groups.name} + + {function.spawnPrivilegeStates, name, privileges}