diff --git a/src/user/data.js b/src/user/data.js index 1fd101a8a9..6bc1f9055b 100644 --- a/src/user/data.js +++ b/src/user/data.js @@ -37,12 +37,14 @@ module.exports = function (User) { User.guestData = { uid: 0, username: '[[global:guest]]', + displayname: '[[global:guest]]', userslug: '', fullname: '[[global:guest]]', email: '', 'icon:text': '?', 'icon:bgColor': '#aaa', groupTitle: '', + groupTitleArray: [], status: 'offline', reputation: 0, 'email:confirmed': 0, @@ -68,14 +70,19 @@ module.exports = function (User) { 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', { uids: uniqueUids, users: users, fields: fields, }); - users = uidsToUsers(uids, uniqueUids, result.users); - return await modifyUserData(users, fields, fieldsToRemove); + result.users.forEach((user, index) => { + 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) { @@ -110,12 +117,13 @@ module.exports = function (User) { function uidsToUsers(uids, uniqueUids, usersData) { const uidToUser = _.zipObject(uniqueUids, usersData); const users = uids.map(function (uid) { - const returnPayload = uidToUser[uid] || { ...User.guestData }; - if (uid > 0 && !returnPayload.uid) { - returnPayload.oldUid = parseInt(uid, 10); + const user = uidToUser[uid] || { ...User.guestData }; + if (!parseInt(user.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; } @@ -142,19 +150,14 @@ module.exports = function (User) { async function modifyUserData(users, requestedFields, fieldsToRemove) { let uidToSettings = {}; 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( uids.map(uid => 'user:' + uid + ':settings'), ['showfullname'] )); } - const uidToUser = {}; - users.forEach(function (user) { - uidToUser[user.uid] = user; - }); - await Promise.all(Object.keys(uidToUser).map(async function (uid) { - const user = uidToUser[uid]; + await Promise.all(users.map(async function (user) { if (!user) { return; } @@ -171,14 +174,10 @@ module.exports = function (User) { } if (!parseInt(user.uid, 10)) { - user.uid = 0; - user.username = (user.hasOwnProperty('oldUid') && parseInt(user.oldUid, 10)) ? '[[global:former_user]]' : '[[global:guest]]'; - user.displayname = user.username; - user.userslug = ''; + for (const [key, value] of Object.entries(User.guestData)) { + user[key] = value; + } user.picture = User.getDefaultAvatar(); - user['icon:text'] = '?'; - user['icon:bgColor'] = '#aaa'; - user.groupTitle = ''; } if (user.hasOwnProperty('groupTitle')) {