mirror of
				https://github.com/NodeBB/NodeBB.git
				synced 2025-10-31 19:15:58 +01:00 
			
		
		
		
	topics.js
This commit is contained in:
		| @@ -1,12 +1,11 @@ | |||||||
| var topics = require('../topics'), | var topics = require('../topics'), | ||||||
| 	threadTools = require('../threadTools'), | 	threadTools = require('../threadTools'), | ||||||
|  | 	index = require('./index'), | ||||||
| 	SocketTopics = {}; | 	SocketTopics = {}; | ||||||
|  |  | ||||||
| SocketTopics.post = function(data, callback, sessionData) { | SocketTopics.post = function(socket, data, callback) { | ||||||
| 	var socket = sessionData.socket; |  | ||||||
|  |  | ||||||
| 	if (sessionData.uid < 1 && parseInt(meta.config.allowGuestPosting, 10) === 0) { | 	if (socket.uid < 1 && parseInt(meta.config.allowGuestPosting, 10) === 0) { | ||||||
| 		socket.emit('event:alert', { | 		socket.emit('event:alert', { | ||||||
| 			title: 'Post Unsuccessful', | 			title: 'Post Unsuccessful', | ||||||
| 			message: 'You don't seem to be logged in, so you cannot reply.', | 			message: 'You don't seem to be logged in, so you cannot reply.', | ||||||
| @@ -16,7 +15,7 @@ SocketTopics.post = function(data, callback, sessionData) { | |||||||
| 		return; | 		return; | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	topics.post(sessionData.uid, data.title, data.content, data.category_id, function(err, result) { | 	topics.post(socket.uid, data.title, data.content, data.category_id, function(err, result) { | ||||||
| 		if(err) { | 		if(err) { | ||||||
| 		 	if (err.message === 'title-too-short') { | 		 	if (err.message === 'title-too-short') { | ||||||
| 				module.parent.exports.emitAlert(socket, 'Title too short', 'Please enter a longer title. At least ' + meta.config.minimumTitleLength + ' characters.'); | 				module.parent.exports.emitAlert(socket, 'Title too short', 'Please enter a longer title. At least ' + meta.config.minimumTitleLength + ' characters.'); | ||||||
| @@ -45,9 +44,9 @@ SocketTopics.post = function(data, callback, sessionData) { | |||||||
| 		} | 		} | ||||||
|  |  | ||||||
| 		if (result) { | 		if (result) { | ||||||
| 			sessionData.server.sockets.in('category_' + data.category_id).emit('event:new_topic', result.topicData); | 			index.server.sockets.in('category_' + data.category_id).emit('event:new_topic', result.topicData); | ||||||
| 			sessionData.server.sockets.in('recent_posts').emit('event:new_topic', result.topicData); | 			index.server.sockets.in('recent_posts').emit('event:new_topic', result.topicData); | ||||||
| 			sessionData.server.sockets.in('user/' + sessionData.uid).emit('event:new_post', { | 			index.server.sockets.in('user/' + socket.uid).emit('event:new_post', { | ||||||
| 				posts: result.postData | 				posts: result.postData | ||||||
| 			}); | 			}); | ||||||
|  |  | ||||||
| @@ -64,90 +63,131 @@ SocketTopics.post = function(data, callback, sessionData) { | |||||||
| 	}); | 	}); | ||||||
| }; | }; | ||||||
|  |  | ||||||
| SocketTopics.postcount = function(tid, callback) { | SocketTopics.postcount = function(socket, tid, callback) { | ||||||
| 	topics.getTopicField(tid, 'postcount', callback); | 	topics.getTopicField(tid, 'postcount', callback); | ||||||
| }; | }; | ||||||
|  |  | ||||||
| SocketTopics.markAllRead = function(data, callback, sessionData) { | SocketTopics.markAllRead = function(socket, data, callback) { | ||||||
| 	topics.markAllRead(sessionData.uid, function(err, success) { | 	topics.markAllRead(socket.uid, function(err, success) { | ||||||
| 		if (!err && success) { | 		if (!err && success) { | ||||||
| 			callback(true); | 			callback(true); | ||||||
| 			sessionData.server.sockets.in('uid_' + sessionData.uid).emit('event:unread.updateCount', 0); | 			index.server.sockets.in('uid_' + socket.uid).emit('event:unread.updateCount', 0); | ||||||
| 		} else { | 		} else { | ||||||
| 			callback(false); | 			callback(false); | ||||||
| 		} | 		} | ||||||
| 	}); | 	}); | ||||||
| }; | }; | ||||||
|  |  | ||||||
| SocketTopics.delete = function(data, callback, sessionData) { | SocketTopics.delete = function(socket, data, callback) { | ||||||
| 	threadTools.privileges(data.tid, sessionData.uid, function(err, privileges) { | 	threadTools.privileges(data.tid, socket.uid, function(err, privileges) { | ||||||
| 		if (!err && privileges.editable) { | 		if(err) { | ||||||
| 			threadTools.delete(data.tid, sessionData.uid, function(err) { | 			return callback(err); | ||||||
| 				if (!err) { | 		} | ||||||
| 					module.parent.exports.emitTopicPostStats(); |  | ||||||
| 					if (callback) { | 		if(!privileges.editable) { | ||||||
| 						callback('topic.delete', { | 			return callback(new Error('not-allowed')); | ||||||
| 							status: 'ok', | 		} | ||||||
| 							tid: data.tid |  | ||||||
| 						}); | 		threadTools.delete(data.tid, socket.uid, function(err) { | ||||||
| 					} | 			if(err) { | ||||||
| 				} | 				return callback(err); | ||||||
|  | 			} | ||||||
|  |  | ||||||
|  | 			module.parent.exports.emitTopicPostStats(); | ||||||
|  |  | ||||||
|  |  | ||||||
|  | 			callback(null, 'topic.delete', { | ||||||
|  | 				status: 'ok', | ||||||
|  | 				tid: data.tid | ||||||
| 			}); | 			}); | ||||||
| 		} | 		}); | ||||||
| 	}); | 	}); | ||||||
| }; | }; | ||||||
|  |  | ||||||
| SocketTopics.restore = function(data, callback, sessionData) { | SocketTopics.restore = function(socket, data, callback) { | ||||||
| 	threadTools.privileges(data.tid, sessionData.uid, function(err, privileges) { | 	threadTools.privileges(data.tid, socket.uid, function(err, privileges) { | ||||||
| 		if (!err && privileges.editable) { | 		if(err) { | ||||||
| 			threadTools.restore(data.tid, sessionData.uid, function(err) { | 			return callback(err); | ||||||
| 				module.parent.exports.emitTopicPostStats(); | 		} | ||||||
|  |  | ||||||
| 				if (callback) { | 		if(!privileges.editable) { | ||||||
| 					callback('topic.restore', { | 			return callback(new Error('not-allowed')); | ||||||
| 						status: 'ok', | 		} | ||||||
| 						tid: data.tid |  | ||||||
| 					}); | 		threadTools.restore(data.tid, socket.uid, function(err) { | ||||||
| 				} | 			if(err) { | ||||||
|  | 				return callback(err); | ||||||
|  | 			} | ||||||
|  |  | ||||||
|  | 			module.parent.exports.emitTopicPostStats(); | ||||||
|  |  | ||||||
|  | 			callback(null, 'topic.restore', { | ||||||
|  | 				status: 'ok', | ||||||
|  | 				tid: data.tid | ||||||
| 			}); | 			}); | ||||||
| 		} | 		}); | ||||||
|  |  | ||||||
| 	}); | 	}); | ||||||
| }; | }; | ||||||
|  |  | ||||||
| SocketTopics.lock = function(data, callback, sessionData) { | SocketTopics.lock = function(socket, data, callback) { | ||||||
|  | 	threadTools.privileges(data.tid, socket.uid, function(err, privileges) { | ||||||
|  | 		if(err) { | ||||||
|  | 			return callback(err); | ||||||
|  | 		} | ||||||
|  |  | ||||||
|  | 		if (!privileges.editable) { | ||||||
|  | 			return callback(new Error('not-allowed')); | ||||||
|  | 		} | ||||||
|  |  | ||||||
|  | 		threadTools.lock(data.tid, callback); | ||||||
|  | 	}); | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | SocketTopics.unlock = function(socket, data, callback) { | ||||||
|  | 	threadTools.privileges(data.tid, socket.uid, function(err, privileges) { | ||||||
|  | 		if(err) { | ||||||
|  | 			return callback(err); | ||||||
|  | 		} | ||||||
|  |  | ||||||
|  | 		if (!privileges.editable) { | ||||||
|  | 			return callback(new Error('not-allowed')); | ||||||
|  | 		} | ||||||
|  |  | ||||||
|  | 		threadTools.unlock(data.tid, callback); | ||||||
|  | 	}); | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | SocketTopics.pin = function(socket, data, callback) { | ||||||
| 	threadTools.privileges(data.tid, sessionData.uid, function(err, privileges) { | 	threadTools.privileges(data.tid, sessionData.uid, function(err, privileges) { | ||||||
| 		if (!err && privileges.editable) { | 		if(err) { | ||||||
| 			threadTools.lock(data.tid, callback); | 			return callback(err); | ||||||
| 		} | 		} | ||||||
|  |  | ||||||
|  | 		if (!privileges.editable) { | ||||||
|  | 			return callback(new Error('not-allowed')); | ||||||
|  | 		} | ||||||
|  |  | ||||||
|  | 		threadTools.pin(data.tid, callback); | ||||||
| 	}); | 	}); | ||||||
| }; | }; | ||||||
|  |  | ||||||
| SocketTopics.unlock = function(data, callback, sessionData) { | SocketTopics.unpin = function(socket, data, callback) { | ||||||
| 	threadTools.privileges(data.tid, sessionData.uid, function(err, privileges) { | 	threadTools.privileges(data.tid, socket.uid, function(err, privileges) { | ||||||
| 		if (!err && privileges.editable) { | 		if(err) { | ||||||
| 			threadTools.unlock(data.tid, callback); | 			return callback(err); | ||||||
| 		} | 		} | ||||||
|  |  | ||||||
|  | 		if (!privileges.editable) { | ||||||
|  | 			return callback(new Error('not-allowed')); | ||||||
|  | 		} | ||||||
|  |  | ||||||
|  | 		threadTools.unpin(data.tid, callback); | ||||||
| 	}); | 	}); | ||||||
| }; | }; | ||||||
|  |  | ||||||
| SocketTopics.pin = function(data, callback, sessionData) { | SocketTopics.createTopicFromPosts = function(socket, data, callback) { | ||||||
| 	threadTools.privileges(data.tid, sessionData.uid, function(err, privileges) { | 	if(!socket.uid) { | ||||||
| 		if (!err && privileges.editable) { |  | ||||||
| 			threadTools.pin(data.tid, callback); |  | ||||||
| 		} |  | ||||||
| 	}); |  | ||||||
| }; |  | ||||||
|  |  | ||||||
| SocketTopics.unpin = function(data, callback, sessionData) { |  | ||||||
| 	threadTools.privileges(data.tid, sessionData.uid, function(err, privileges) { |  | ||||||
| 		if (!err && privileges.editable) { |  | ||||||
| 			threadTools.unpin(data.tid, callback); |  | ||||||
| 		} |  | ||||||
| 	}); |  | ||||||
| }; |  | ||||||
|  |  | ||||||
| SocketTopics.createTopicFromPosts = function(data, callback, sessionData) { |  | ||||||
| 	if(!sessionData.uid) { |  | ||||||
| 		socket.emit('event:alert', { | 		socket.emit('event:alert', { | ||||||
| 			title: 'Can't fork', | 			title: 'Can't fork', | ||||||
| 			message: 'Guests can't fork topics!', | 			message: 'Guests can't fork topics!', | ||||||
| @@ -157,13 +197,13 @@ SocketTopics.createTopicFromPosts = function(data, callback, sessionData) { | |||||||
| 		return; | 		return; | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	topics.createTopicFromPosts(sessionData.uid, data.title, data.pids, function(err, data) { | 	topics.createTopicFromPosts(socket.uid, data.title, data.pids, function(err, data) { | ||||||
| 		callback(err?{message:err.message}:null, data); | 		callback(err, data); | ||||||
| 	}); | 	}); | ||||||
| }; | }; | ||||||
|  |  | ||||||
| SocketTopics.movePost = function(data, callback, sessionData) { | SocketTopics.movePost = function(socket, data, callback) { | ||||||
| 	if(!sessionData.uid) { | 	if(!socket.uid) { | ||||||
| 		socket.emit('event:alert', { | 		socket.emit('event:alert', { | ||||||
| 			title: 'Can't fork', | 			title: 'Can't fork', | ||||||
| 			message: 'Guests can't fork topics!', | 			message: 'Guests can't fork topics!', | ||||||
| @@ -174,24 +214,34 @@ SocketTopics.movePost = function(data, callback, sessionData) { | |||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	topics.movePostToTopic(data.pid, data.tid, function(err, data) { | 	topics.movePostToTopic(data.pid, data.tid, function(err, data) { | ||||||
| 		callback(err?{message:err.message}:null, data); | 		callback(err, data); | ||||||
| 	}); | 	}); | ||||||
| }; | }; | ||||||
|  |  | ||||||
| SocketTopics.move = function(data, callback, sessionData) { | SocketTopics.move = function(socket, data, callback) { | ||||||
| 	threadTools.move(data.tid, data.cid, callback, sessionData); | 	threadTools.move(data.tid, data.cid, function(err) { | ||||||
|  | 		if(err) { | ||||||
|  | 			return callback(err); | ||||||
|  | 		} | ||||||
|  |  | ||||||
|  | 		index.server.sockets.in('topic_' + data.tid).emit('event:topic_moved', { | ||||||
|  | 			tid: tid | ||||||
|  | 		}); | ||||||
|  | 	}); | ||||||
| }; | }; | ||||||
|  |  | ||||||
| SocketTopics.followCheck = function(tid, callback, sessionData) { | SocketTopics.followCheck = function(socket, tid, callback) { | ||||||
| 	threadTools.isFollowing(tid, sessionData.uid, function(following) { | 	threadTools.isFollowing(tid, socket.uid, function(following) { | ||||||
| 		callback(following); | 		callback(following); | ||||||
| 	}); | 	}); | ||||||
| }; | }; | ||||||
|  |  | ||||||
| SocketTopics.follow = function(tid, callback, sessionData) { | SocketTopics.follow = function(socket, tid, callback) { | ||||||
| 	if (sessionData.uid && sessionData.uid > 0) { | 	if (socket.uid) { | ||||||
| 		threadTools.toggleFollow(tid, sessionData.uid, function(follow) { | 		threadTools.toggleFollow(tid, socket.uid, function(follow) { | ||||||
| 			if (follow.status === 'ok') callback(follow); | 			if (follow.status === 'ok') { | ||||||
|  | 				callback(follow); | ||||||
|  | 			} | ||||||
| 		}); | 		}); | ||||||
| 	} else { | 	} else { | ||||||
| 		callback({ | 		callback({ | ||||||
| @@ -201,36 +251,40 @@ SocketTopics.follow = function(tid, callback, sessionData) { | |||||||
| 	} | 	} | ||||||
| }; | }; | ||||||
|  |  | ||||||
| SocketTopics.loadMore = function(data, callback, sessionData) { | SocketTopics.loadMore = function(socket, data, callback) { | ||||||
| 	var start = data.after, | 	var start = data.after, | ||||||
| 		end = start + 9; | 		end = start + 9; | ||||||
|  |  | ||||||
| 	topics.getTopicPosts(data.tid, start, end, sessionData.uid, function(err, posts) { | 	topics.getTopicPosts(data.tid, start, end, socket.uid, function(err, posts) { | ||||||
| 		callback({ | 		if(err) { | ||||||
|  | 			return callback(err); | ||||||
|  |  | ||||||
|  | 		} | ||||||
|  | 		callback(null, { | ||||||
| 			posts: posts | 			posts: posts | ||||||
| 		}); | 		}); | ||||||
| 	}); | 	}); | ||||||
| }; | }; | ||||||
|  |  | ||||||
| SocketTopics.loadMoreRecentTopics = function(data, callback, sessionData) { | SocketTopics.loadMoreRecentTopics = function(socket, data, callback) { | ||||||
| 	var start = data.after, | 	var start = data.after, | ||||||
| 		end = start + 9; | 		end = start + 9; | ||||||
|  |  | ||||||
| 	topics.getLatestTopics(sessionData.uid, start, end, data.term, function(err, latestTopics) { | 	topics.getLatestTopics(socket.uid, start, end, data.term, function(err, latestTopics) { | ||||||
| 		if (!err) { | 		if(err) { | ||||||
| 			callback(latestTopics); | 			return callback(err); | ||||||
| 		} else { |  | ||||||
| 			winston.error('[socket topics.loadMoreRecentTopics] ' + err.message); |  | ||||||
| 		} | 		} | ||||||
|  |  | ||||||
|  | 		callback(null, latestTopics); | ||||||
| 	}); | 	}); | ||||||
| }; | }; | ||||||
|  |  | ||||||
| SocketTopics.loadMoreUnreadTopics = function(data, callback, sessionData) { | SocketTopics.loadMoreUnreadTopics = function(socket, data, callback) { | ||||||
| 	var start = data.after, | 	var start = data.after, | ||||||
| 		end = start + 9; | 		end = start + 9; | ||||||
|  |  | ||||||
| 	topics.getUnreadTopics(sessionData.uid, start, end, function(unreadTopics) { | 	topics.getUnreadTopics(socket.uid, start, end, function(unreadTopics) { | ||||||
| 		callback(unreadTopics); | 		callback(null, unreadTopics); | ||||||
| 	}); | 	}); | ||||||
| }; | }; | ||||||
|  |  | ||||||
|   | |||||||
| @@ -167,7 +167,7 @@ var winston = require('winston'), | |||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	ThreadTools.move = function(tid, cid, callback, sessionData) { | 	ThreadTools.move = function(tid, cid, callback) { | ||||||
| 		topics.getTopicFields(tid, ['cid', 'lastposttime'], function(err, topicData) { | 		topics.getTopicFields(tid, ['cid', 'lastposttime'], function(err, topicData) { | ||||||
| 			var oldCid = topicData.cid; | 			var oldCid = topicData.cid; | ||||||
|  |  | ||||||
| @@ -197,9 +197,6 @@ var winston = require('winston'), | |||||||
| 						status: 'ok' | 						status: 'ok' | ||||||
| 					}); | 					}); | ||||||
|  |  | ||||||
| 					sessionData.server.sockets.in('topic_' + tid).emit('event:topic_moved', { |  | ||||||
| 						tid: tid |  | ||||||
| 					}); |  | ||||||
| 				}); | 				}); | ||||||
| 			}); | 			}); | ||||||
| 		}); | 		}); | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user