mirror of
https://github.com/NodeBB/NodeBB.git
synced 2025-11-09 23:45:45 +01:00
fix: #9177, handled multiple deleted users properly
This commit is contained in:
@@ -37,12 +37,14 @@ module.exports = function (User) {
|
|||||||
User.guestData = {
|
User.guestData = {
|
||||||
uid: 0,
|
uid: 0,
|
||||||
username: '[[global:guest]]',
|
username: '[[global:guest]]',
|
||||||
|
displayname: '[[global:guest]]',
|
||||||
userslug: '',
|
userslug: '',
|
||||||
fullname: '[[global:guest]]',
|
fullname: '[[global:guest]]',
|
||||||
email: '',
|
email: '',
|
||||||
'icon:text': '?',
|
'icon:text': '?',
|
||||||
'icon:bgColor': '#aaa',
|
'icon:bgColor': '#aaa',
|
||||||
groupTitle: '',
|
groupTitle: '',
|
||||||
|
groupTitleArray: [],
|
||||||
status: 'offline',
|
status: 'offline',
|
||||||
reputation: 0,
|
reputation: 0,
|
||||||
'email:confirmed': 0,
|
'email:confirmed': 0,
|
||||||
@@ -68,14 +70,19 @@ module.exports = function (User) {
|
|||||||
fields = fields.filter(value => value !== 'password');
|
fields = fields.filter(value => value !== 'password');
|
||||||
}
|
}
|
||||||
|
|
||||||
let users = await db.getObjectsFields(uniqueUids.map(uid => 'user:' + uid), fields);
|
const users = await db.getObjectsFields(uniqueUids.map(uid => 'user:' + uid), fields);
|
||||||
const result = await plugins.hooks.fire('filter:user.getFields', {
|
const result = await plugins.hooks.fire('filter:user.getFields', {
|
||||||
uids: uniqueUids,
|
uids: uniqueUids,
|
||||||
users: users,
|
users: users,
|
||||||
fields: fields,
|
fields: fields,
|
||||||
});
|
});
|
||||||
users = uidsToUsers(uids, uniqueUids, result.users);
|
result.users.forEach((user, index) => {
|
||||||
return await modifyUserData(users, fields, fieldsToRemove);
|
if (uniqueUids[index] > 0 && !user.uid) {
|
||||||
|
user.oldUid = uniqueUids[index];
|
||||||
|
}
|
||||||
|
});
|
||||||
|
await modifyUserData(result.users, fields, fieldsToRemove);
|
||||||
|
return uidsToUsers(uids, uniqueUids, result.users);
|
||||||
};
|
};
|
||||||
|
|
||||||
function ensureRequiredFields(fields, fieldsToRemove) {
|
function ensureRequiredFields(fields, fieldsToRemove) {
|
||||||
@@ -110,12 +117,13 @@ module.exports = function (User) {
|
|||||||
function uidsToUsers(uids, uniqueUids, usersData) {
|
function uidsToUsers(uids, uniqueUids, usersData) {
|
||||||
const uidToUser = _.zipObject(uniqueUids, usersData);
|
const uidToUser = _.zipObject(uniqueUids, usersData);
|
||||||
const users = uids.map(function (uid) {
|
const users = uids.map(function (uid) {
|
||||||
const returnPayload = uidToUser[uid] || { ...User.guestData };
|
const user = uidToUser[uid] || { ...User.guestData };
|
||||||
if (uid > 0 && !returnPayload.uid) {
|
if (!parseInt(user.uid, 10)) {
|
||||||
returnPayload.oldUid = parseInt(uid, 10);
|
user.username = (user.hasOwnProperty('oldUid') && parseInt(user.oldUid, 10)) ? '[[global:former_user]]' : '[[global:guest]]';
|
||||||
|
user.displayname = user.username;
|
||||||
}
|
}
|
||||||
|
|
||||||
return returnPayload;
|
return user;
|
||||||
});
|
});
|
||||||
return users;
|
return users;
|
||||||
}
|
}
|
||||||
@@ -142,19 +150,14 @@ module.exports = function (User) {
|
|||||||
async function modifyUserData(users, requestedFields, fieldsToRemove) {
|
async function modifyUserData(users, requestedFields, fieldsToRemove) {
|
||||||
let uidToSettings = {};
|
let uidToSettings = {};
|
||||||
if (meta.config.showFullnameAsDisplayName) {
|
if (meta.config.showFullnameAsDisplayName) {
|
||||||
const uids = _.uniq(users.map(user => user.uid));
|
const uids = users.map(user => user.uid);
|
||||||
uidToSettings = _.zipObject(uids, await db.getObjectsFields(
|
uidToSettings = _.zipObject(uids, await db.getObjectsFields(
|
||||||
uids.map(uid => 'user:' + uid + ':settings'),
|
uids.map(uid => 'user:' + uid + ':settings'),
|
||||||
['showfullname']
|
['showfullname']
|
||||||
));
|
));
|
||||||
}
|
}
|
||||||
const uidToUser = {};
|
|
||||||
users.forEach(function (user) {
|
|
||||||
uidToUser[user.uid] = user;
|
|
||||||
});
|
|
||||||
|
|
||||||
await Promise.all(Object.keys(uidToUser).map(async function (uid) {
|
await Promise.all(users.map(async function (user) {
|
||||||
const user = uidToUser[uid];
|
|
||||||
if (!user) {
|
if (!user) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -171,14 +174,10 @@ module.exports = function (User) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (!parseInt(user.uid, 10)) {
|
if (!parseInt(user.uid, 10)) {
|
||||||
user.uid = 0;
|
for (const [key, value] of Object.entries(User.guestData)) {
|
||||||
user.username = (user.hasOwnProperty('oldUid') && parseInt(user.oldUid, 10)) ? '[[global:former_user]]' : '[[global:guest]]';
|
user[key] = value;
|
||||||
user.displayname = user.username;
|
}
|
||||||
user.userslug = '';
|
|
||||||
user.picture = User.getDefaultAvatar();
|
user.picture = User.getDefaultAvatar();
|
||||||
user['icon:text'] = '?';
|
|
||||||
user['icon:bgColor'] = '#aaa';
|
|
||||||
user.groupTitle = '';
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (user.hasOwnProperty('groupTitle')) {
|
if (user.hasOwnProperty('groupTitle')) {
|
||||||
|
|||||||
Reference in New Issue
Block a user