Skip to content

Commit

Permalink
fix: closes #12358, only load pending/invited for owners
Browse files Browse the repository at this point in the history
  • Loading branch information
barisusakli committed Feb 22, 2024
1 parent 4e51bf8 commit 3960d37
Show file tree
Hide file tree
Showing 4 changed files with 17 additions and 14 deletions.
1 change: 0 additions & 1 deletion src/controllers/admin/groups.js
Expand Up @@ -42,7 +42,6 @@ groupsController.get = async function (req, res, next) {
if (!group || groupName === groups.BANNED_USERS) {
return next();
}
group.isOwner = true;

const groupNameData = groupNames.map(name => ({
encodedName: encodeURIComponent(name),
Expand Down
1 change: 0 additions & 1 deletion src/controllers/groups.js
Expand Up @@ -72,7 +72,6 @@ groupsController.details = async function (req, res, next) {
if (!groupData) {
return next();
}
groupData.isOwner = groupData.isOwner || isAdmin || (isGlobalMod && !groupData.system);

res.render('groups/details', {
title: `[[pages:group, ${groupData.displayName}]]`,
Expand Down
20 changes: 14 additions & 6 deletions src/groups/index.js
Expand Up @@ -3,6 +3,7 @@
const user = require('../user');
const db = require('../database');
const plugins = require('../plugins');
const privileges = require('../privileges');
const slugify = require('../slugify');

const Groups = module.exports;
Expand Down Expand Up @@ -130,30 +131,37 @@ Groups.get = async function (groupName, options) {
stop = (parseInt(options.userListCount, 10) || 4) - 1;
}

const [groupData, members, pending, invited, isMember, isPending, isInvited, isOwner] = await Promise.all([
const [groupData, members, isMember, isPending, isInvited, isOwner, isAdmin, isGlobalMod] = await Promise.all([
Groups.getGroupData(groupName),
Groups.getOwnersAndMembers(groupName, options.uid, 0, stop),
Groups.getPending(groupName),
Groups.getInvites(groupName),
Groups.isMember(options.uid, groupName),
Groups.isPending(options.uid, groupName),
Groups.isInvited(options.uid, groupName),
Groups.ownership.isOwner(options.uid, groupName),
privileges.admin.can('admin:groups', options.uid),
user.isGlobalModerator(options.uid),
]);

if (!groupData) {
return null;
}

groupData.isOwner = isOwner || isAdmin || (isGlobalMod && !groupData.system);
if (groupData.isOwner) {
([groupData.pending, groupData.invited] = await Promise.all([
Groups.getPending(groupName),
Groups.getInvites(groupName),
]));
}


const descriptionParsed = await plugins.hooks.fire('filter:parse.raw', String(groupData.description || ''));
groupData.descriptionParsed = descriptionParsed;
groupData.members = members;
groupData.membersNextStart = stop + 1;
groupData.pending = pending.filter(Boolean);
groupData.invited = invited.filter(Boolean);
groupData.isMember = isMember;
groupData.isPending = isPending;
groupData.isInvited = isInvited;
groupData.isOwner = isOwner;
const results = await plugins.hooks.fire('filter:group.get', { group: groupData });
return results.group;
};
Expand Down
9 changes: 3 additions & 6 deletions src/groups/user.js
Expand Up @@ -4,13 +4,10 @@ const db = require('../database');
const user = require('../user');

module.exports = function (Groups) {
Groups.getUsersFromSet = async function (set, fields) {
Groups.getUsersFromSet = async function (set, fields = []) {
const uids = await db.getSetMembers(set);

if (fields) {
return await user.getUsersFields(uids, fields);
}
return await user.getUsersData(uids);
const userData = await user.getUsersFields(uids, fields);
return userData.filter(u => u && u.uid);
};

Groups.getUserGroups = async function (uids) {
Expand Down

0 comments on commit 3960d37

Please sign in to comment.