mirror of
				https://github.com/NodeBB/NodeBB.git
				synced 2025-11-03 20:45:58 +01:00 
			
		
		
		
	
		
			
	
	
		
			233 lines
		
	
	
		
			6.3 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
		
		
			
		
	
	
			233 lines
		
	
	
		
			6.3 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| 
								 | 
							
								var topics = require('../topics'),
							 | 
						||
| 
								 | 
							
									threadTools = require('../threadTools'),
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									SocketTopics = {};
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								SocketTopics.post = function(data, sessionData) {
							 | 
						||
| 
								 | 
							
									if (sessionData.uid < 1 && parseInt(meta.config.allowGuestPosting, 10) === 0) {
							 | 
						||
| 
								 | 
							
										socket.emit('event:alert', {
							 | 
						||
| 
								 | 
							
											title: 'Post Unsuccessful',
							 | 
						||
| 
								 | 
							
											message: 'You don't seem to be logged in, so you cannot reply.',
							 | 
						||
| 
								 | 
							
											type: 'danger',
							 | 
						||
| 
								 | 
							
											timeout: 2000
							 | 
						||
| 
								 | 
							
										});
							 | 
						||
| 
								 | 
							
										return;
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									topics.post(sessionData.uid, data.title, data.content, data.category_id, function(err, result) {
							 | 
						||
| 
								 | 
							
										if(err) {
							 | 
						||
| 
								 | 
							
										 	if (err.message === 'title-too-short') {
							 | 
						||
| 
								 | 
							
												emitAlert(socket, 'Title too short', 'Please enter a longer title. At least ' + meta.config.minimumTitleLength + ' characters.');
							 | 
						||
| 
								 | 
							
											} else if (err.message === 'title-too-long') {
							 | 
						||
| 
								 | 
							
												emitAlert(socket, 'Title too long', 'Please enter a shorter title. Titles can\'t be longer than ' + meta.config.maximumTitleLength + ' characters.');
							 | 
						||
| 
								 | 
							
											} else if (err.message === 'content-too-short') {
							 | 
						||
| 
								 | 
							
												emitContentTooShortAlert(socket);
							 | 
						||
| 
								 | 
							
											} else if (err.message === 'too-many-posts') {
							 | 
						||
| 
								 | 
							
												emitTooManyPostsAlert(socket);
							 | 
						||
| 
								 | 
							
											} else if (err.message === 'no-privileges') {
							 | 
						||
| 
								 | 
							
												socket.emit('event:alert', {
							 | 
						||
| 
								 | 
							
													title: 'Unable to post',
							 | 
						||
| 
								 | 
							
													message: 'You do not have posting privileges in this category.',
							 | 
						||
| 
								 | 
							
													type: 'danger',
							 | 
						||
| 
								 | 
							
													timeout: 7500
							 | 
						||
| 
								 | 
							
												});
							 | 
						||
| 
								 | 
							
											} else {
							 | 
						||
| 
								 | 
							
												socket.emit('event:alert', {
							 | 
						||
| 
								 | 
							
													title: 'Error',
							 | 
						||
| 
								 | 
							
													message: err.message,
							 | 
						||
| 
								 | 
							
													type: 'warning',
							 | 
						||
| 
								 | 
							
													timeout: 7500
							 | 
						||
| 
								 | 
							
												});
							 | 
						||
| 
								 | 
							
											}
							 | 
						||
| 
								 | 
							
											return;
							 | 
						||
| 
								 | 
							
										}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
										if (result) {
							 | 
						||
| 
								 | 
							
											sessionData.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);
							 | 
						||
| 
								 | 
							
											sessionData.server.sockets.in('user/' + sessionData.uid).emit('event:new_post', {
							 | 
						||
| 
								 | 
							
												posts: result.postData
							 | 
						||
| 
								 | 
							
											});
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
											module.parent.exports.emitTopicPostStats();
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
											sessionData.socket.emit('event:alert', {
							 | 
						||
| 
								 | 
							
												title: 'Thank you for posting',
							 | 
						||
| 
								 | 
							
												message: 'You have successfully posted. Click here to view your post.',
							 | 
						||
| 
								 | 
							
												type: 'success',
							 | 
						||
| 
								 | 
							
												timeout: 2000
							 | 
						||
| 
								 | 
							
											});
							 | 
						||
| 
								 | 
							
										}
							 | 
						||
| 
								 | 
							
									});
							 | 
						||
| 
								 | 
							
								};
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								SocketTopics.postcount = function(tid, callback) {
							 | 
						||
| 
								 | 
							
									topics.getTopicField(tid, 'postcount', callback);
							 | 
						||
| 
								 | 
							
								};
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								SocketTopics.markAllRead = function(data, callback, sessionData) {
							 | 
						||
| 
								 | 
							
									topics.markAllRead(sessionData.uid, function(err, success) {
							 | 
						||
| 
								 | 
							
										if (!err && success) {
							 | 
						||
| 
								 | 
							
											callback(true);
							 | 
						||
| 
								 | 
							
										} else {
							 | 
						||
| 
								 | 
							
											callback(false);
							 | 
						||
| 
								 | 
							
										}
							 | 
						||
| 
								 | 
							
									});
							 | 
						||
| 
								 | 
							
								};
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								SocketTopics.delete = function(data, callback, sessionData) {
							 | 
						||
| 
								 | 
							
									threadTools.privileges(data.tid, sessionData.uid, function(err, privileges) {
							 | 
						||
| 
								 | 
							
										if (!err && privileges.editable) {
							 | 
						||
| 
								 | 
							
											threadTools.delete(data.tid, sessionData.uid, function(err) {
							 | 
						||
| 
								 | 
							
												if (!err) {
							 | 
						||
| 
								 | 
							
													module.parent.exports.emitTopicPostStats();
							 | 
						||
| 
								 | 
							
													if (callback) {
							 | 
						||
| 
								 | 
							
														callback('api:topic.delete', {
							 | 
						||
| 
								 | 
							
															status: 'ok',
							 | 
						||
| 
								 | 
							
															tid: data.tid
							 | 
						||
| 
								 | 
							
														});
							 | 
						||
| 
								 | 
							
													}
							 | 
						||
| 
								 | 
							
												}
							 | 
						||
| 
								 | 
							
											});
							 | 
						||
| 
								 | 
							
										}
							 | 
						||
| 
								 | 
							
									});
							 | 
						||
| 
								 | 
							
								};
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								SocketTopics.restore = function(data, callback, sessionData) {
							 | 
						||
| 
								 | 
							
									threadTools.privileges(data.tid, sessionData.uid, function(err, privileges) {
							 | 
						||
| 
								 | 
							
										if (!err && privileges.editable) {
							 | 
						||
| 
								 | 
							
											threadTools.restore(data.tid, sessionData.uid, function(err) {
							 | 
						||
| 
								 | 
							
												module.parent.exports.emitTopicPostStats();
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
												if (callback) {
							 | 
						||
| 
								 | 
							
													callback('api:topic.restore', {
							 | 
						||
| 
								 | 
							
														status: 'ok',
							 | 
						||
| 
								 | 
							
														tid: data.tid
							 | 
						||
| 
								 | 
							
													});
							 | 
						||
| 
								 | 
							
												}
							 | 
						||
| 
								 | 
							
											});
							 | 
						||
| 
								 | 
							
										}
							 | 
						||
| 
								 | 
							
									});
							 | 
						||
| 
								 | 
							
								};
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								SocketTopics.lock = function(data, callback, sessionData) {
							 | 
						||
| 
								 | 
							
									threadTools.privileges(data.tid, sessionData.uid, function(err, privileges) {
							 | 
						||
| 
								 | 
							
										if (!err && privileges.editable) {
							 | 
						||
| 
								 | 
							
											threadTools.lock(data.tid, callback);
							 | 
						||
| 
								 | 
							
										}
							 | 
						||
| 
								 | 
							
									});
							 | 
						||
| 
								 | 
							
								};
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								SocketTopics.unlock = function(data, callback, sessionData) {
							 | 
						||
| 
								 | 
							
									threadTools.privileges(data.tid, sessionData.uid, function(err, privileges) {
							 | 
						||
| 
								 | 
							
										if (!err && privileges.editable) {
							 | 
						||
| 
								 | 
							
											threadTools.unlock(data.tid, callback);
							 | 
						||
| 
								 | 
							
										}
							 | 
						||
| 
								 | 
							
									});
							 | 
						||
| 
								 | 
							
								};
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								SocketTopics.pin = function(data, callback, sessionData) {
							 | 
						||
| 
								 | 
							
									threadTools.privileges(data.tid, sessionData.uid, function(err, privileges) {
							 | 
						||
| 
								 | 
							
										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', {
							 | 
						||
| 
								 | 
							
											title: 'Can't fork',
							 | 
						||
| 
								 | 
							
											message: 'Guests can't fork topics!',
							 | 
						||
| 
								 | 
							
											type: 'warning',
							 | 
						||
| 
								 | 
							
											timeout: 2000
							 | 
						||
| 
								 | 
							
										});
							 | 
						||
| 
								 | 
							
										return;
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									topics.createTopicFromPosts(sessionData.uid, data.title, data.pids, function(err, data) {
							 | 
						||
| 
								 | 
							
										callback(err?{message:err.message}:null, data);
							 | 
						||
| 
								 | 
							
									});
							 | 
						||
| 
								 | 
							
								};
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								SocketTopics.movePost = function(data, callback, sessionData) {
							 | 
						||
| 
								 | 
							
									if(!sessionData.uid) {
							 | 
						||
| 
								 | 
							
										socket.emit('event:alert', {
							 | 
						||
| 
								 | 
							
											title: 'Can't fork',
							 | 
						||
| 
								 | 
							
											message: 'Guests can't fork topics!',
							 | 
						||
| 
								 | 
							
											type: 'warning',
							 | 
						||
| 
								 | 
							
											timeout: 2000
							 | 
						||
| 
								 | 
							
										});
							 | 
						||
| 
								 | 
							
										return;
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									topics.movePostToTopic(data.pid, data.tid, function(err, data) {
							 | 
						||
| 
								 | 
							
										callback(err?{message:err.message}:null, data);
							 | 
						||
| 
								 | 
							
									});
							 | 
						||
| 
								 | 
							
								};
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								SocketTopics.move = function(data) {
							 | 
						||
| 
								 | 
							
									threadTools.move(data.tid, data.cid, socket);
							 | 
						||
| 
								 | 
							
								};
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								SocketTopics.followCheck = function(tid, callback, sessionData) {
							 | 
						||
| 
								 | 
							
									threadTools.isFollowing(tid, sessionData.uid, function(following) {
							 | 
						||
| 
								 | 
							
										callback(following);
							 | 
						||
| 
								 | 
							
									});
							 | 
						||
| 
								 | 
							
								};
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								SocketTopics.follow = function(tid, callback, sessionData) {
							 | 
						||
| 
								 | 
							
									if (sessionData.uid && sessionData.uid > 0) {
							 | 
						||
| 
								 | 
							
										threadTools.toggleFollow(tid, sessionData.uid, function(follow) {
							 | 
						||
| 
								 | 
							
											if (follow.status === 'ok') callback(follow);
							 | 
						||
| 
								 | 
							
										});
							 | 
						||
| 
								 | 
							
									} else {
							 | 
						||
| 
								 | 
							
										callback({
							 | 
						||
| 
								 | 
							
											status: 'error',
							 | 
						||
| 
								 | 
							
											error: 'not-logged-in'
							 | 
						||
| 
								 | 
							
										});
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								};
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								SocketTopics.loadMore = function(data, callback, sessionData) {
							 | 
						||
| 
								 | 
							
									var start = data.after,
							 | 
						||
| 
								 | 
							
										end = start + 9;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									topics.getTopicPosts(data.tid, start, end, sessionData.uid, function(err, posts) {
							 | 
						||
| 
								 | 
							
										callback({
							 | 
						||
| 
								 | 
							
											posts: posts
							 | 
						||
| 
								 | 
							
										});
							 | 
						||
| 
								 | 
							
									});
							 | 
						||
| 
								 | 
							
								};
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								SocketTopics.loadMoreRecentTopics = function(data, callback, sessionData) {
							 | 
						||
| 
								 | 
							
									var start = data.after,
							 | 
						||
| 
								 | 
							
										end = start + 9;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									topics.getLatestTopics(sessionData.uid, start, end, data.term, function(err, latestTopics) {
							 | 
						||
| 
								 | 
							
										if (!err) {
							 | 
						||
| 
								 | 
							
											callback(latestTopics);
							 | 
						||
| 
								 | 
							
										} else {
							 | 
						||
| 
								 | 
							
											winston.error('[socket api:topics.loadMoreRecentTopics] ' + err.message);
							 | 
						||
| 
								 | 
							
										}
							 | 
						||
| 
								 | 
							
									});
							 | 
						||
| 
								 | 
							
								};
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								SocketTopics.loadMoreUnreadTopics = function(data, callback, sessionData) {
							 | 
						||
| 
								 | 
							
									var start = data.after,
							 | 
						||
| 
								 | 
							
										end = start + 9;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									topics.getUnreadTopics(sessionData.uid, start, end, function(unreadTopics) {
							 | 
						||
| 
								 | 
							
										callback(unreadTopics);
							 | 
						||
| 
								 | 
							
									});
							 | 
						||
| 
								 | 
							
								};
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								module.exports = SocketTopics;
							 |