Merge branch 'master' into develop

This commit is contained in:
Barış Soner Uşaklı
2024-06-24 22:25:34 -04:00
5 changed files with 70 additions and 17 deletions

View File

@@ -104,10 +104,10 @@
"nodebb-plugin-ntfy": "1.7.4",
"nodebb-plugin-spam-be-gone": "2.2.2",
"nodebb-rewards-essentials": "1.0.0",
"nodebb-theme-harmony": "1.2.61",
"nodebb-theme-harmony": "1.2.63",
"nodebb-theme-lavender": "7.1.8",
"nodebb-theme-peace": "2.2.5",
"nodebb-theme-persona": "13.3.23",
"nodebb-theme-peace": "2.2.6",
"nodebb-theme-persona": "13.3.24",
"nodebb-widget-essentials": "7.0.16",
"nodemailer": "6.9.14",
"nprogress": "0.2.0",

View File

@@ -38,5 +38,6 @@
"remove-selected": "Remove Selected",
"remove-selected-confirm": "Do you want to remove %1 selected posts?",
"bulk-accept-success": "%1 posts accepted",
"bulk-reject-success": "%1 posts rejected"
"bulk-reject-success": "%1 posts rejected",
"links-in-this-post": "Links in this post"
}

View File

@@ -29,8 +29,23 @@ define('forum/post-queue', [
});
$('[component="post/content"] img:not(.not-responsive)').addClass('img-fluid');
showLinksInPosts();
};
function showLinksInPosts() {
$('.posts-list [data-id]').each((idx, el) => {
const $el = $(el);
const linkContainer = $el.find('[component="post-queue/link-container"]');
const linkList = linkContainer.find('[component="post-queue/link-container/list"]');
const linksInPost = $el.find('.post-content a');
linksInPost.each((idx, link) => {
const href = $(link).attr('href');
linkList.append(`<li><a href="${href}">${href}</a></li>`);
});
linkContainer.toggleClass('hidden', !linksInPost.length);
});
}
function confirmReject(msg) {
return new Promise((resolve) => {
bootbox.confirm(msg, resolve);

View File

@@ -120,7 +120,11 @@ Events.get = async (tid, uid, reverse = false) => {
const timestamps = eventIds.map(obj => obj.score);
eventIds = eventIds.map(obj => obj.value);
let events = await db.getObjects(keys);
events = await modifyEvent({ tid, uid, eventIds, timestamps, events });
events.forEach((e, idx) => {
e.timestamp = timestamps[idx];
});
await addEventsFromPostQueue(tid, uid, events);
events = await modifyEvent({ uid, events });
if (reverse) {
events.reverse();
}
@@ -144,8 +148,7 @@ async function getCategoryInfo(cids) {
return _.zipObject(uniqCids, catData);
}
async function modifyEvent({ tid, uid, eventIds, timestamps, events }) {
// Add posts from post queue
async function addEventsFromPostQueue(tid, uid, events) {
const isPrivileged = await user.isPrivileged(uid);
if (isPrivileged) {
const queuedPosts = await posts.getQueuedPosts({ tid }, { metadata: false });
@@ -155,11 +158,10 @@ async function modifyEvent({ tid, uid, eventIds, timestamps, events }) {
timestamp: item.data.timestamp || Date.now(),
uid: item.data.uid,
})));
queuedPosts.forEach((item) => {
timestamps.push(item.data.timestamp || Date.now());
});
}
}
async function modifyEvent({ uid, events }) {
const [users, fromCategories, userSettings] = await Promise.all([
getUserInfo(events.map(event => event.uid).filter(Boolean)),
getCategoryInfo(events.map(event => event.fromCid).filter(Boolean)),
@@ -183,10 +185,8 @@ async function modifyEvent({ tid, uid, eventIds, timestamps, events }) {
events = events.filter(event => Events._types.hasOwnProperty(event.type));
// Add user & metadata
events.forEach((event, idx) => {
event.id = parseInt(eventIds[idx], 10);
event.timestamp = timestamps[idx];
event.timestampISO = new Date(timestamps[idx]).toISOString();
events.forEach((event) => {
event.timestampISO = utils.toISOString(event.timestamp);
if (event.hasOwnProperty('uid')) {
event.user = users.get(event.uid === 'system' ? 'system' : parseInt(event.uid, 10));
}
@@ -221,16 +221,15 @@ Events.log = async (tid, payload) => {
}
const eventId = await db.incrObjectField('global', 'nextTopicEventId');
payload.id = eventId;
await Promise.all([
db.setObject(`topicEvent:${eventId}`, payload),
db.sortedSetAdd(`topic:${tid}:events`, timestamp, eventId),
]);
payload.timestamp = timestamp;
let events = await modifyEvent({
uid: payload.uid,
eventIds: [eventId],
timestamps: [timestamp],
events: [payload],
});

View File

@@ -0,0 +1,38 @@
/* eslint-disable no-await-in-loop */
'use strict';
const db = require('../../database');
const batch = require('../../batch');
module.exports = {
name: 'Add id field to all topic events',
timestamp: Date.UTC(2024, 5, 24),
method: async function () {
const { progress } = this;
let nextId = await db.getObjectField('global', 'nextTopicEventId');
nextId = parseInt(nextId, 10) || 0;
const ids = [];
for (let i = 1; i < nextId; i++) {
ids.push(i);
}
await batch.processArray(ids, async (eids) => {
const eventData = await db.getObjects(eids.map(eid => `topicEvent:${eid}`));
const bulkSet = [];
eventData.forEach((event, idx) => {
if (event && event.type) {
const id = eids[idx];
bulkSet.push(
[`topicEvent:${id}`, { id: id }]
);
}
});
await db.setObjectBulk(bulkSet);
progress.incr(eids.length);
}, {
batch: 500,
progress,
});
},
};