mirror of
https://github.com/NodeBB/NodeBB.git
synced 2026-02-28 01:21:13 +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 [];
|
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 = [];
|
const fieldsToRemove = [];
|
||||||
fields = fields.slice();
|
fields = fields.slice();
|
||||||
ensureRequiredFields(fields, fieldsToRemove);
|
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', {
|
const results = await plugins.hooks.fire('filter:user.whitelistFields', {
|
||||||
uids: uids,
|
uids: uids,
|
||||||
@@ -69,7 +78,10 @@ module.exports = function (User) {
|
|||||||
fields = fields.filter(value => value !== 'password');
|
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', {
|
const result = await plugins.hooks.fire('filter:user.getFields', {
|
||||||
uids: uniqueUids,
|
uids: uniqueUids,
|
||||||
users: users,
|
users: users,
|
||||||
@@ -81,7 +93,7 @@ module.exports = function (User) {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
await modifyUserData(result.users, fields, fieldsToRemove);
|
await modifyUserData(result.users, fields, fieldsToRemove);
|
||||||
return uidsToUsers(uids, uniqueUids, result.users);
|
return uidsToUsers(uids, [...uniqueUids, ...remoteIds], result.users);
|
||||||
};
|
};
|
||||||
|
|
||||||
function ensureRequiredFields(fields, fieldsToRemove) {
|
function ensureRequiredFields(fields, fieldsToRemove) {
|
||||||
@@ -117,7 +129,7 @@ module.exports = function (User) {
|
|||||||
const uidToUser = _.zipObject(uniqueUids, usersData);
|
const uidToUser = _.zipObject(uniqueUids, usersData);
|
||||||
const users = uids.map((uid) => {
|
const users = uids.map((uid) => {
|
||||||
const user = uidToUser[uid] || { ...User.guestData };
|
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.username = (user.hasOwnProperty('oldUid') && parseInt(user.oldUid, 10)) ? '[[global:former-user]]' : '[[global:guest]]';
|
||||||
user.displayname = user.username;
|
user.displayname = user.username;
|
||||||
}
|
}
|
||||||
@@ -192,6 +204,9 @@ module.exports = function (User) {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (activitypub.helpers.isUri(String(user.uid))) {
|
||||||
|
intFields.splice(intFields.indexOf('uid'), 1);
|
||||||
|
}
|
||||||
db.parseIntFields(user, intFields, requestedFields);
|
db.parseIntFields(user, intFields, requestedFields);
|
||||||
|
|
||||||
if (user.hasOwnProperty('username')) {
|
if (user.hasOwnProperty('username')) {
|
||||||
@@ -203,7 +218,7 @@ module.exports = function (User) {
|
|||||||
user.email = validator.escape(user.email ? user.email.toString() : '');
|
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)) {
|
for (const [key, value] of Object.entries(User.guestData)) {
|
||||||
user[key] = value;
|
user[key] = value;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -73,7 +73,15 @@ module.exports = function (User) {
|
|||||||
if (parseInt(uid, 10) <= 0) {
|
if (parseInt(uid, 10) <= 0) {
|
||||||
return [];
|
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}`, {
|
const data = await plugins.hooks.fire(`filter:user.${type}`, {
|
||||||
uids: uids,
|
uids: uids,
|
||||||
uid: uid,
|
uid: uid,
|
||||||
|
|||||||
Reference in New Issue
Block a user