Files
NodeBB/src/socket.io/posts/move.js

46 lines
1.3 KiB
JavaScript
Raw Normal View History

'use strict';
2019-09-09 19:19:56 -04:00
const privileges = require('../../privileges');
const topics = require('../../topics');
const posts = require('../../posts');
2019-09-09 19:19:56 -04:00
const socketHelpers = require('../helpers');
module.exports = function (SocketPosts) {
2019-09-09 19:19:56 -04:00
SocketPosts.movePost = async function (socket, data) {
await SocketPosts.movePosts(socket, { pids: [data.pid], tid: data.tid });
2018-04-03 14:20:07 -04:00
};
2019-09-09 19:19:56 -04:00
SocketPosts.movePosts = async function (socket, data) {
if (!socket.uid) {
2019-09-09 19:19:56 -04:00
throw new Error('[[error:not-logged-in]]');
}
2018-04-03 14:20:07 -04:00
if (!data || !Array.isArray(data.pids) || !data.tid) {
2019-09-09 19:19:56 -04:00
throw new Error('[[error:invalid-data]]');
}
2020-11-26 12:45:02 -05:00
const canMove = await privileges.topics.isAdminOrMod(data.tid, socket.uid);
if (!canMove) {
throw new Error('[[error:no-privileges]]');
}
2019-09-09 19:19:56 -04:00
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');
}
2019-09-09 19:19:56 -04:00
}
};
2017-02-18 02:30:48 -07:00
};