mirror of
https://github.com/NodeBB/NodeBB.git
synced 2025-11-01 11:35:55 +01:00
feat: show remote followers/following in user profile pages
This commit is contained in:
@@ -50,13 +50,22 @@ module.exports = function (User) {
|
||||
return [];
|
||||
}
|
||||
|
||||
uids = uids.map(uid => (isNaN(uid) ? 0 : parseInt(uid, 10)));
|
||||
uids = uids.map((uid) => {
|
||||
if (isFinite(uid)) {
|
||||
return parseInt(uid, 10);
|
||||
} else if (activitypub.helpers.isUri(uid)) {
|
||||
return uid;
|
||||
}
|
||||
|
||||
return 0;
|
||||
});
|
||||
|
||||
const fieldsToRemove = [];
|
||||
fields = fields.slice();
|
||||
ensureRequiredFields(fields, fieldsToRemove);
|
||||
|
||||
const uniqueUids = _.uniq(uids).filter(uid => uid > 0);
|
||||
const uniqueUids = _.uniq(uids).filter(uid => isFinite(uid) && uid > 0);
|
||||
const remoteIds = _.uniq(uids).filter(uid => !isFinite(uid));
|
||||
|
||||
const results = await plugins.hooks.fire('filter:user.whitelistFields', {
|
||||
uids: uids,
|
||||
@@ -69,7 +78,10 @@ module.exports = function (User) {
|
||||
fields = fields.filter(value => value !== 'password');
|
||||
}
|
||||
|
||||
const users = await db.getObjectsFields(uniqueUids.map(uid => `user:${uid}`), fields);
|
||||
const users = [
|
||||
...await db.getObjectsFields(uniqueUids.map(uid => `user:${uid}`), fields),
|
||||
...await activitypub.mockProfile(remoteIds, 0, fields),
|
||||
];
|
||||
const result = await plugins.hooks.fire('filter:user.getFields', {
|
||||
uids: uniqueUids,
|
||||
users: users,
|
||||
@@ -81,7 +93,7 @@ module.exports = function (User) {
|
||||
}
|
||||
});
|
||||
await modifyUserData(result.users, fields, fieldsToRemove);
|
||||
return uidsToUsers(uids, uniqueUids, result.users);
|
||||
return uidsToUsers(uids, [...uniqueUids, ...remoteIds], result.users);
|
||||
};
|
||||
|
||||
function ensureRequiredFields(fields, fieldsToRemove) {
|
||||
@@ -117,7 +129,7 @@ module.exports = function (User) {
|
||||
const uidToUser = _.zipObject(uniqueUids, usersData);
|
||||
const users = uids.map((uid) => {
|
||||
const user = uidToUser[uid] || { ...User.guestData };
|
||||
if (!parseInt(user.uid, 10)) {
|
||||
if (!parseInt(user.uid, 10) && !activitypub.helpers.isUri(user.uid)) {
|
||||
user.username = (user.hasOwnProperty('oldUid') && parseInt(user.oldUid, 10)) ? '[[global:former-user]]' : '[[global:guest]]';
|
||||
user.displayname = user.username;
|
||||
}
|
||||
@@ -192,6 +204,9 @@ module.exports = function (User) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (activitypub.helpers.isUri(String(user.uid))) {
|
||||
intFields.splice(intFields.indexOf('uid'), 1);
|
||||
}
|
||||
db.parseIntFields(user, intFields, requestedFields);
|
||||
|
||||
if (user.hasOwnProperty('username')) {
|
||||
@@ -203,7 +218,7 @@ module.exports = function (User) {
|
||||
user.email = validator.escape(user.email ? user.email.toString() : '');
|
||||
}
|
||||
|
||||
if (!parseInt(user.uid, 10)) {
|
||||
if (!parseInt(user.uid, 10) && !activitypub.helpers.isUri(user.uid)) {
|
||||
for (const [key, value] of Object.entries(User.guestData)) {
|
||||
user[key] = value;
|
||||
}
|
||||
|
||||
@@ -73,7 +73,15 @@ module.exports = function (User) {
|
||||
if (parseInt(uid, 10) <= 0) {
|
||||
return [];
|
||||
}
|
||||
const uids = await db.getSortedSetRevRange(`${type}:${uid}`, start, stop);
|
||||
const uids = await db.getSortedSetRevUnion({
|
||||
sets: [
|
||||
`${type}:${uid}`,
|
||||
`${type}Remote:${uid}`,
|
||||
],
|
||||
start,
|
||||
stop,
|
||||
});
|
||||
|
||||
const data = await plugins.hooks.fire(`filter:user.${type}`, {
|
||||
uids: uids,
|
||||
uid: uid,
|
||||
|
||||
Reference in New Issue
Block a user