mirror of
https://github.com/NodeBB/NodeBB.git
synced 2026-02-16 11:37:37 +01:00
Merge remote-tracking branch 'origin/master' into develop
This commit is contained in:
@@ -136,6 +136,7 @@ Actors.topic = async function (req, res, next) {
|
||||
let collection;
|
||||
let pids;
|
||||
try {
|
||||
// pids are used in generation of digest only.
|
||||
([collection, pids] = await Promise.all([
|
||||
activitypub.helpers.generateCollection({
|
||||
set: `tid:${req.params.tid}:posts`,
|
||||
@@ -151,7 +152,6 @@ Actors.topic = async function (req, res, next) {
|
||||
}
|
||||
pids.push(mainPid);
|
||||
pids = pids.map(pid => (utils.isNumber(pid) ? `${nconf.get('url')}/post/${pid}` : pid));
|
||||
collection.totalItems += 1; // account for mainPid
|
||||
|
||||
// Generate digest for ETag
|
||||
const digest = activitypub.helpers.generateDigest(new Set(pids));
|
||||
@@ -168,15 +168,18 @@ Actors.topic = async function (req, res, next) {
|
||||
}
|
||||
res.set('ETag', digest);
|
||||
|
||||
// Convert pids to urls
|
||||
// Add OP to collection on first (or only) page
|
||||
if (page || collection.totalItems < perPage) {
|
||||
collection.orderedItems = collection.orderedItems || [];
|
||||
if (!page || page === 1) { // add OP to collection
|
||||
if (!page || page === 1) {
|
||||
collection.orderedItems.unshift(mainPid);
|
||||
collection.totalItems += 1;
|
||||
}
|
||||
collection.orderedItems = collection.orderedItems.map(pid => (utils.isNumber(pid) ? `${nconf.get('url')}/post/${pid}` : pid));
|
||||
}
|
||||
|
||||
// Convert pids to urls
|
||||
collection.orderedItems = collection.orderedItems.map(pid => (utils.isNumber(pid) ? `${nconf.get('url')}/post/${pid}` : pid));
|
||||
|
||||
const object = {
|
||||
'@context': 'https://www.w3.org/ns/activitystreams',
|
||||
id: `${nconf.get('url')}/topic/${req.params.tid}${collection.orderedItems && page ? `?page=${page}` : ''}`,
|
||||
|
||||
@@ -166,7 +166,7 @@ actions.buildCSS = async function buildCSS(data) {
|
||||
};
|
||||
if (data.minify) {
|
||||
opts.silenceDeprecations = [
|
||||
'legacy-js-api', 'mixed-decls', 'color-functions',
|
||||
'legacy-js-api', 'color-functions',
|
||||
'global-builtin', 'import',
|
||||
];
|
||||
}
|
||||
|
||||
@@ -9,6 +9,7 @@ const _ = require('lodash');
|
||||
|
||||
const db = require('./database');
|
||||
const User = require('./user');
|
||||
const categories = require('./categories');
|
||||
const posts = require('./posts');
|
||||
const groups = require('./groups');
|
||||
const meta = require('./meta');
|
||||
@@ -84,7 +85,24 @@ Notifications.getMultiple = async function (nids) {
|
||||
const notifications = await db.getObjects(keys);
|
||||
|
||||
const userKeys = notifications.map(n => n && n.from);
|
||||
const usersData = await User.getUsersFields(userKeys, ['username', 'userslug', 'picture']);
|
||||
let [usersData, categoriesData] = await Promise.all([
|
||||
User.getUsersFields(userKeys, ['username', 'userslug', 'picture']),
|
||||
categories.getCategoriesFields(userKeys, ['cid', 'name', 'slug', 'picture']),
|
||||
]);
|
||||
// Merge valid categoriesData into usersData
|
||||
usersData = usersData.map((userData, idx) => {
|
||||
const categoryData = categoriesData[idx];
|
||||
if (!userData.uid && categoryData.cid) {
|
||||
return {
|
||||
username: categoryData.slug,
|
||||
displayname: categoryData.name,
|
||||
userslug: categoryData.slug,
|
||||
picture: categoryData.picture,
|
||||
};
|
||||
}
|
||||
|
||||
return userData;
|
||||
});
|
||||
|
||||
notifications.forEach((notification, index) => {
|
||||
if (notification) {
|
||||
|
||||
@@ -94,7 +94,10 @@ SocketHelpers.sendNotificationToPostOwner = async function (pid, fromuid, comman
|
||||
return;
|
||||
}
|
||||
fromuid = utils.isNumber(fromuid) ? parseInt(fromuid, 10) : fromuid;
|
||||
const postData = await posts.getPostFields(pid, ['tid', 'uid', 'content']);
|
||||
const [postData, fromCategory] = await Promise.all([
|
||||
posts.getPostFields(pid, ['tid', 'uid', 'content']),
|
||||
!utils.isNumber(fromuid) && categories.exists(fromuid),
|
||||
]);
|
||||
const [canRead, isIgnoring] = await Promise.all([
|
||||
privileges.posts.can('topics:read', pid, postData.uid),
|
||||
topics.isIgnoring([postData.tid], postData.uid),
|
||||
@@ -103,19 +106,17 @@ SocketHelpers.sendNotificationToPostOwner = async function (pid, fromuid, comman
|
||||
return;
|
||||
}
|
||||
const [userData, topicTitle, postObj] = await Promise.all([
|
||||
user.getUserFields(fromuid, ['username']),
|
||||
fromCategory ? categories.getCategoryFields(fromuid, ['name']) : user.getUserFields(fromuid, ['username']),
|
||||
topics.getTopicField(postData.tid, 'title'),
|
||||
posts.parsePost(postData),
|
||||
]);
|
||||
|
||||
const { displayname } = userData;
|
||||
|
||||
const title = utils.decodeHTMLEntities(topicTitle);
|
||||
const titleEscaped = title.replace(/%/g, '%').replace(/,/g, ',');
|
||||
|
||||
const notifObj = await notifications.create({
|
||||
type: command,
|
||||
bodyShort: `[[${notification}, ${displayname}, ${titleEscaped}]]`,
|
||||
bodyShort: `[[${notification}, ${userData.displayname || userData.name}, ${titleEscaped}]]`,
|
||||
bodyLong: postObj.content,
|
||||
pid: pid,
|
||||
tid: postData.tid,
|
||||
|
||||
Reference in New Issue
Block a user