mirror of
https://github.com/NodeBB/NodeBB.git
synced 2025-11-01 19:46:01 +01:00
closes #4012
This commit is contained in:
@@ -29,6 +29,7 @@
|
||||
"details.has_no_posts": "This group's members have not made any posts.",
|
||||
"details.latest_posts": "Latest Posts",
|
||||
"details.private": "Private",
|
||||
"details.disableJoinRequests": "Disable join requests",
|
||||
"details.grant": "Grant/Rescind Ownership",
|
||||
"details.kick": "Kick",
|
||||
|
||||
|
||||
@@ -157,8 +157,10 @@ define('admin/manage/group', [
|
||||
description: $('#change-group-desc').val(),
|
||||
icon: groupIcon.attr('value'),
|
||||
labelColor: changeGroupLabelColor.val(),
|
||||
userTitleEnabled: $('#group-userTitleEnabled').is(':checked'),
|
||||
private: $('#group-private').is(':checked'),
|
||||
hidden: $('#group-hidden').is(':checked')
|
||||
hidden: $('#group-hidden').is(':checked'),
|
||||
disableJoinRequests: $('#group-disableJoinRequests').is(':checked')
|
||||
}
|
||||
}, function(err) {
|
||||
if (err) {
|
||||
|
||||
@@ -142,8 +142,10 @@
|
||||
return '<button class="btn btn-warning disabled"><i class="fa fa-clock-o"></i> [[groups:membership.invitation-pending]]</button>';
|
||||
} else if (groupObj.isInvited) {
|
||||
return '<button class="btn btn-link" data-action="rejectInvite" data-group="' + groupObj.displayName + '">[[groups:membership.reject]]</button><button class="btn btn-success" data-action="acceptInvite" data-group="' + groupObj.name + '"><i class="fa fa-plus"></i> [[groups:membership.accept-invitation]]</button>';
|
||||
} else {
|
||||
} else if (!groupObj.disableJoinRequests) {
|
||||
return '<button class="btn btn-success" data-action="join" data-group="' + groupObj.displayName + '"><i class="fa fa-plus"></i> [[groups:membership.join-group]]</button>';
|
||||
} else {
|
||||
return '';
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
@@ -1,16 +1,14 @@
|
||||
'use strict';
|
||||
|
||||
var async = require('async'),
|
||||
winston = require('winston'),
|
||||
nconf = require('nconf'),
|
||||
validator = require('validator'),
|
||||
var async = require('async');
|
||||
var validator = require('validator');
|
||||
|
||||
user = require('./user'),
|
||||
db = require('./database'),
|
||||
plugins = require('./plugins'),
|
||||
posts = require('./posts'),
|
||||
privileges = require('./privileges'),
|
||||
utils = require('../public/src/utils');
|
||||
var user = require('./user');
|
||||
var db = require('./database');
|
||||
var plugins = require('./plugins');
|
||||
var posts = require('./posts');
|
||||
var privileges = require('./privileges');
|
||||
var utils = require('../public/src/utils');
|
||||
|
||||
(function(Groups) {
|
||||
|
||||
@@ -184,6 +182,7 @@ var async = require('async'),
|
||||
results.base.hidden = !!parseInt(results.base.hidden, 10);
|
||||
results.base.system = !!parseInt(results.base.system, 10);
|
||||
results.base.private = results.base.private ? !!parseInt(results.base.private, 10) : true;
|
||||
results.base.disableJoinRequests = parseInt(results.base.disableJoinRequests, 10) === 1;
|
||||
results.base.isMember = results.isMember;
|
||||
results.base.isPending = results.isPending;
|
||||
results.base.isInvited = results.isInvited;
|
||||
@@ -228,7 +227,7 @@ var async = require('async'),
|
||||
}
|
||||
});
|
||||
|
||||
results.members = results.members.filter(function(user, index, array) {
|
||||
results.members = results.members.filter(function(user) {
|
||||
return user && user.uid && ownerUids.indexOf(user.uid.toString()) === -1;
|
||||
});
|
||||
results.members = results.owners.concat(results.members);
|
||||
@@ -369,14 +368,22 @@ var async = require('async'),
|
||||
], callback);
|
||||
};
|
||||
|
||||
Groups.getGroupData = function(groupName, callback) {
|
||||
Groups.getGroupsData([groupName], function(err, groupsData) {
|
||||
callback(err, Array.isArray(groupsData) && groupsData[0] ? groupsData[0] : null);
|
||||
});
|
||||
};
|
||||
|
||||
Groups.getGroupsData = function(groupNames, callback) {
|
||||
if (!Array.isArray(groupNames) || !groupNames.length) {
|
||||
return callback(null, []);
|
||||
}
|
||||
|
||||
var keys = groupNames.map(function(groupName) {
|
||||
return 'group:' + groupName;
|
||||
}),
|
||||
ephemeralIdx = groupNames.reduce(function(memo, cur, idx) {
|
||||
});
|
||||
|
||||
var ephemeralIdx = groupNames.reduce(function(memo, cur, idx) {
|
||||
if (ephemeralGroups.indexOf(cur) !== -1) {
|
||||
memo.push(idx);
|
||||
}
|
||||
@@ -403,6 +410,7 @@ var async = require('async'),
|
||||
group.hidden = parseInt(group.hidden, 10) === 1;
|
||||
group.system = parseInt(group.system, 10) === 1;
|
||||
group.private = parseInt(group.private, 10) === 1;
|
||||
group.disableJoinRequests = parseInt(group.disableJoinRequests) === 1;
|
||||
|
||||
group['cover:url'] = group['cover:url'] || require('./coverPhoto').getDefaultGroupCover(group.name);
|
||||
group['cover:position'] = group['cover:position'] || '50% 50%';
|
||||
|
||||
@@ -44,6 +44,10 @@ module.exports = function(Groups) {
|
||||
payload.private = values.private ? '1' : '0';
|
||||
}
|
||||
|
||||
if (values.hasOwnProperty('disableJoinRequests')) {
|
||||
payload.disableJoinRequests = values.disableJoinRequests ? '1' : '0';
|
||||
}
|
||||
|
||||
async.series([
|
||||
async.apply(checkNameChange, groupName, values.name),
|
||||
async.apply(updatePrivacy, groupName, values.private),
|
||||
|
||||
@@ -37,13 +37,17 @@ SocketGroups.join = function(socket, data, callback) {
|
||||
|
||||
async.parallel({
|
||||
isAdmin: async.apply(user.isAdministrator, socket.uid),
|
||||
isPrivate: async.apply(groups.isPrivate, data.groupName)
|
||||
}, function(err, checks) {
|
||||
groupData: async.apply(groups.getGroupData, data.groupName)
|
||||
}, function(err, results) {
|
||||
if (err) {
|
||||
return callback(err);
|
||||
}
|
||||
|
||||
if (!checks.isPrivate || checks.isAdmin) {
|
||||
if (results.groupData.private && results.groupData.disableJoinRequests) {
|
||||
return callback(new Error('[[error:join-requests-disabled]]'));
|
||||
}
|
||||
|
||||
if (!results.groupData.isPrivate || results.isAdmin) {
|
||||
groups.join(data.groupName, socket.uid, callback);
|
||||
} else {
|
||||
groups.requestMembership(data.groupName, socket.uid, callback);
|
||||
@@ -261,6 +265,6 @@ SocketGroups.cover.remove = function(socket, data, callback) {
|
||||
|
||||
groups.removeCover(data, callback);
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
module.exports = SocketGroups;
|
||||
|
||||
@@ -28,6 +28,14 @@
|
||||
<input id="change-group-label-color" placeholder="#0059b2" data-name="bgColor" value="{group.labelColor}" class="form-control" /><br />
|
||||
</fieldset>
|
||||
|
||||
<fieldset>
|
||||
<div class="checkbox">
|
||||
<label>
|
||||
<input id="group-userTitleEnabled" name="userTitleEnabled" type="checkbox"<!-- IF group.userTitleEnabled --> checked<!-- ENDIF group.userTitleEnabled -->> <strong>[[groups:details.userTitleEnabled]]</strong>
|
||||
</label>
|
||||
</div>
|
||||
</fieldset>
|
||||
|
||||
<fieldset>
|
||||
<div class="checkbox">
|
||||
<label>
|
||||
@@ -39,6 +47,14 @@
|
||||
</div>
|
||||
</fieldset>
|
||||
|
||||
<fieldset>
|
||||
<div class="checkbox">
|
||||
<label>
|
||||
<input id="group-disableJoinRequests" name="disableJoinRequests" type="checkbox"<!-- IF group.disableJoinRequests --> checked<!-- ENDIF group.disableJoinRequests -->> <strong>[[groups:details.disableJoinRequests]]</strong>
|
||||
</label>
|
||||
</div>
|
||||
</fieldset>
|
||||
|
||||
<fieldset>
|
||||
<div class="checkbox">
|
||||
<label>
|
||||
|
||||
Reference in New Issue
Block a user