This commit is contained in:
Barış Soner Uşaklı
2025-09-15 12:57:34 -04:00
2 changed files with 25 additions and 6 deletions

View File

@@ -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) {

View File

@@ -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,