mirror of
https://github.com/NodeBB/NodeBB.git
synced 2025-10-26 16:46:12 +01:00
@@ -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);
|
||||||
};
|
};
|
||||||
|
|||||||
Reference in New Issue
Block a user