fix: #13228, use timestamp from mainpost/lastpost

when forking a topic
This commit is contained in:
Barış Soner Uşaklı
2025-03-05 11:30:46 -05:00
parent 34414f168a
commit 48f0f47a2e

View File

@@ -38,25 +38,29 @@ module.exports = function (Topics) {
cid = await posts.getCidByPid(mainPid); cid = await posts.getCidByPid(mainPid);
} }
const [postData, isAdminOrMod] = await Promise.all([ const [mainPost, isAdminOrMod] = await Promise.all([
posts.getPostData(mainPid), posts.getPostData(mainPid),
privileges.categories.isAdminOrMod(cid, uid), privileges.categories.isAdminOrMod(cid, uid),
]); ]);
let lastPost = mainPost;
if (pids.length > 1) {
lastPost = await posts.getPostData(pids[pids.length - 1]);
}
if (!isAdminOrMod) { if (!isAdminOrMod) {
throw new Error('[[error:no-privileges]]'); throw new Error('[[error:no-privileges]]');
} }
const now = Date.now();
const scheduled = postData.timestamp > Date.now(); const scheduled = mainPost.timestamp > now;
const params = { const params = {
uid: postData.uid, uid: mainPost.uid,
title: title, title: title,
cid: cid, cid: cid,
timestamp: scheduled && postData.timestamp, timestamp: mainPost.timestamp,
}; };
const result = await plugins.hooks.fire('filter:topic.fork', { const result = await plugins.hooks.fire('filter:topic.fork', {
params: params, params: params,
tid: postData.tid, tid: mainPost.tid,
}); });
const tid = await Topics.create(result.params); const tid = await Topics.create(result.params);
@@ -71,21 +75,21 @@ module.exports = function (Topics) {
await Topics.movePostToTopic(uid, pid, tid, scheduled); await Topics.movePostToTopic(uid, pid, tid, scheduled);
} }
await Topics.updateLastPostTime(tid, scheduled ? (postData.timestamp + 1) : Date.now()); await Topics.updateLastPostTime(tid, scheduled ? (mainPost.timestamp + 1) : lastPost.timestamp);
await Promise.all([ await Promise.all([
Topics.setTopicFields(tid, { Topics.setTopicFields(tid, {
upvotes: postData.upvotes, upvotes: mainPost.upvotes,
downvotes: postData.downvotes, downvotes: mainPost.downvotes,
forkedFromTid: fromTid, forkedFromTid: fromTid,
forkerUid: uid, forkerUid: uid,
forkTimestamp: Date.now(), forkTimestamp: now,
}), }),
db.sortedSetsAdd(['topics:votes', `cid:${cid}:tids:votes`], postData.votes, tid), db.sortedSetsAdd(['topics:votes', `cid:${cid}:tids:votes`], mainPost.votes, tid),
Topics.events.log(fromTid, { type: 'fork', uid, href: `/topic/${tid}` }), Topics.events.log(fromTid, { type: 'fork', uid, href: `/topic/${tid}` }),
]); ]);
plugins.hooks.fire('action:topic.fork', { tid: tid, fromTid: fromTid, uid: uid }); plugins.hooks.fire('action:topic.fork', { tid, fromTid, uid });
return await Topics.getTopicData(tid); return await Topics.getTopicData(tid);
}; };