mirror of
				https://github.com/NodeBB/NodeBB.git
				synced 2025-11-03 20:45:58 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			234 lines
		
	
	
		
			6.4 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			234 lines
		
	
	
		
			6.4 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
var topics = require('../topics'),
 | 
						|
	threadTools = require('../threadTools'),
 | 
						|
 | 
						|
	SocketTopics = {};
 | 
						|
 | 
						|
SocketTopics.post = function(data, callback, 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') {
 | 
						|
				module.parent.exports.emitAlert(socket, 'Title too short', 'Please enter a longer title. At least ' + meta.config.minimumTitleLength + ' characters.');
 | 
						|
			} else if (err.message === 'title-too-long') {
 | 
						|
				module.parent.exports.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') {
 | 
						|
				module.parent.exports.emitContentTooShortAlert(socket);
 | 
						|
			} else if (err.message === 'too-many-posts') {
 | 
						|
				module.parent.exports.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
 | 
						|
			});
 | 
						|
			callback();
 | 
						|
		}
 | 
						|
	});
 | 
						|
};
 | 
						|
 | 
						|
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; |