'use strict'; var async = require('async'); var winston = require('winston'); var topics = require('../topics'); var privileges = require('../privileges'); var plugins = require('../plugins'); var websockets = require('./index'); var user = require('../user'); var apiController = require('../controllers/api'); var SocketTopics = {}; require('./topics/unread')(SocketTopics); require('./topics/move')(SocketTopics); require('./topics/tools')(SocketTopics); require('./topics/infinitescroll')(SocketTopics); require('./topics/tags')(SocketTopics); SocketTopics.post = function(socket, data, callback) { if (!data) { return callback(new Error('[[error:invalid-data]]')); } topics.post({ uid: socket.uid, handle: data.handle, title: data.title, content: data.content, cid: data.category_id, thumb: data.topic_thumb, tags: data.tags, req: websockets.reqFromSocket(socket) }, function(err, result) { if (err) { return callback(err); } if (data.lock) { SocketTopics.doTopicAction('lock', 'event:topic_locked', socket, {tids: [result.topicData.tid], cid: result.topicData.cid}); } callback(null, result.topicData); socket.emit('event:new_post', {posts: [result.postData]}); socket.emit('event:new_topic', result.topicData); async.waterfall([ function(next) { user.getUidsFromSet('users:online', 0, -1, next); }, function(uids, next) { privileges.categories.filterUids('read', result.topicData.cid, uids, next); }, function(uids, next) { plugins.fireHook('filter:sockets.sendNewPostToUids', {uidsTo: uids, uidFrom: data.uid, type: 'newTopic'}, next); } ], function(err, data) { if (err) { return winston.error(err.stack); } var uids = data.uidsTo; for(var i=0; i