Files
NodeBB/src/socket.io/posts/move.js
Barış Soner Uşaklı 414caac01b fix: #8957
2020-11-26 12:45:02 -05:00

46 lines
1.3 KiB
JavaScript

'use strict';
const privileges = require('../../privileges');
const topics = require('../../topics');
const posts = require('../../posts');
const socketHelpers = require('../helpers');
module.exports = function (SocketPosts) {
SocketPosts.movePost = async function (socket, data) {
await SocketPosts.movePosts(socket, { pids: [data.pid], tid: data.tid });
};
SocketPosts.movePosts = async function (socket, data) {
if (!socket.uid) {
throw new Error('[[error:not-logged-in]]');
}
if (!data || !Array.isArray(data.pids) || !data.tid) {
throw new Error('[[error:invalid-data]]');
}
const canMove = await privileges.topics.isAdminOrMod(data.tid, socket.uid);
if (!canMove) {
throw new Error('[[error:no-privileges]]');
}
for (const pid of data.pids) {
/* eslint-disable no-await-in-loop */
const canMove = await privileges.posts.canMove(pid, socket.uid);
if (!canMove) {
throw new Error('[[error:no-privileges]]');
}
await topics.movePostToTopic(socket.uid, pid, data.tid);
const [postDeleted, topicDeleted] = await Promise.all([
posts.getPostField(pid, 'deleted'),
topics.getTopicField(data.tid, 'deleted'),
]);
if (!postDeleted && !topicDeleted) {
socketHelpers.sendNotificationToPostOwner(pid, socket.uid, 'move', 'notifications:moved_your_post');
}
}
};
};