| 
									
										
										
										
											2014-03-02 23:07:16 -05:00
										 |  |  | "use strict"; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-02-28 15:58:29 -05:00
										 |  |  | var usersController = {}; | 
					
						
							| 
									
										
										
										
											2014-02-28 14:04:21 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-02-28 15:33:25 -05:00
										 |  |  | var async = require('async'), | 
					
						
							| 
									
										
										
										
											2014-09-12 18:31:04 -04:00
										 |  |  | 	user = require('../user'), | 
					
						
							| 
									
										
										
										
											2015-01-12 15:57:45 -05:00
										 |  |  | 	meta = require('../meta'), | 
					
						
							| 
									
										
										
										
											2015-01-27 16:39:33 -05:00
										 |  |  | 	plugins = require('../plugins'), | 
					
						
							| 
									
										
										
										
											2014-09-12 18:31:04 -04:00
										 |  |  | 	db = require('../database'); | 
					
						
							| 
									
										
										
										
											2014-02-28 14:04:21 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-02-28 14:19:43 -05:00
										 |  |  | usersController.getOnlineUsers = function(req, res, next) { | 
					
						
							|  |  |  | 	var	websockets = require('../socket.io'); | 
					
						
							| 
									
										
										
										
											2014-09-12 18:31:04 -04:00
										 |  |  | 	var uid = req.user ? req.user.uid : 0; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	async.parallel({ | 
					
						
							|  |  |  | 		users: function(next) { | 
					
						
							| 
									
										
										
										
											2015-01-29 17:02:20 -05:00
										 |  |  | 			user.getUsersFromSet('users:online', uid, 0, 49, next); | 
					
						
							| 
									
										
										
										
											2014-09-12 18:31:04 -04:00
										 |  |  | 		}, | 
					
						
							|  |  |  | 		count: function(next) { | 
					
						
							| 
									
										
										
										
											2014-11-28 14:25:11 -05:00
										 |  |  | 			var now = Date.now(); | 
					
						
							|  |  |  | 			db.sortedSetCount('users:online', now - 300000, now, next); | 
					
						
							| 
									
										
										
										
											2014-09-12 18:31:04 -04:00
										 |  |  | 		}, | 
					
						
							|  |  |  | 		isAdministrator: function(next) { | 
					
						
							|  |  |  | 			user.isAdministrator(uid, next); | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 	}, function(err, results) { | 
					
						
							|  |  |  | 		if (err) { | 
					
						
							| 
									
										
										
										
											2014-02-28 14:19:43 -05:00
										 |  |  | 			return next(err); | 
					
						
							|  |  |  | 		} | 
					
						
							| 
									
										
										
										
											2014-09-01 23:33:32 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-09-12 18:31:04 -04:00
										 |  |  | 		if (!results.isAdministrator) { | 
					
						
							|  |  |  | 			results.users = results.users.filter(function(user) { | 
					
						
							|  |  |  | 				return user && user.status !== 'offline'; | 
					
						
							|  |  |  | 			}); | 
					
						
							|  |  |  | 		} | 
					
						
							| 
									
										
										
										
											2014-02-28 14:19:43 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-09-12 18:31:04 -04:00
										 |  |  | 		var anonymousUserCount = websockets.getOnlineAnonCount(); | 
					
						
							| 
									
										
										
										
											2014-04-27 17:32:24 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-09-12 18:31:04 -04:00
										 |  |  | 		var userData = { | 
					
						
							| 
									
										
										
										
											2014-09-25 15:13:54 -04:00
										 |  |  | 			search_display: 'hidden', | 
					
						
							| 
									
										
										
										
											2014-09-12 18:31:04 -04:00
										 |  |  | 			loadmore_display: results.count > 50 ? 'block' : 'hide', | 
					
						
							|  |  |  | 			users: results.users, | 
					
						
							|  |  |  | 			anonymousUserCount: anonymousUserCount, | 
					
						
							|  |  |  | 			show_anon: anonymousUserCount ? '' : 'hide' | 
					
						
							|  |  |  | 		}; | 
					
						
							| 
									
										
										
										
											2014-02-28 14:19:43 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-01-27 17:37:21 -05:00
										 |  |  | 		res.render('users', userData); | 
					
						
							| 
									
										
										
										
											2014-02-28 14:19:43 -05:00
										 |  |  | 	}); | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | usersController.getUsersSortedByPosts = function(req, res, next) { | 
					
						
							| 
									
										
										
										
											2015-01-27 16:39:33 -05:00
										 |  |  | 	usersController.getUsers('users:postcount', 50, req, res, next); | 
					
						
							| 
									
										
										
										
											2014-02-28 14:19:43 -05:00
										 |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | usersController.getUsersSortedByReputation = function(req, res, next) { | 
					
						
							| 
									
										
										
										
											2015-01-27 16:39:33 -05:00
										 |  |  | 	usersController.getUsers('users:reputation', 50, req, res, next); | 
					
						
							| 
									
										
										
										
											2014-02-28 14:19:43 -05:00
										 |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | usersController.getUsersSortedByJoinDate = function(req, res, next) { | 
					
						
							| 
									
										
										
										
											2015-01-27 16:39:33 -05:00
										 |  |  | 	usersController.getUsers('users:joindate', 50, req, res, next); | 
					
						
							| 
									
										
										
										
											2014-03-15 16:18:03 -04:00
										 |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-01-27 16:39:33 -05:00
										 |  |  | usersController.getUsers = function(set, count, req, res, next) { | 
					
						
							|  |  |  | 	var uid = req.user ? req.user.uid : 0; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-01-29 17:02:20 -05:00
										 |  |  | 	getUsersAndCount(set, uid, count, function(err, data) { | 
					
						
							| 
									
										
										
										
											2015-01-12 15:57:45 -05:00
										 |  |  | 		if (err) { | 
					
						
							|  |  |  | 			return next(err); | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 		var userData = { | 
					
						
							|  |  |  | 			search_display: 'hidden', | 
					
						
							| 
									
										
										
										
											2015-01-27 16:03:57 -05:00
										 |  |  | 			loadmore_display: data.count > count ? 'block' : 'hide', | 
					
						
							| 
									
										
										
										
											2015-01-12 15:57:45 -05:00
										 |  |  | 			users: data.users, | 
					
						
							|  |  |  | 			show_anon: 'hide' | 
					
						
							|  |  |  | 		}; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-01-27 17:37:21 -05:00
										 |  |  | 		res.render('users', userData); | 
					
						
							| 
									
										
										
										
											2015-01-12 15:57:45 -05:00
										 |  |  | 	}); | 
					
						
							| 
									
										
										
										
											2015-01-27 16:03:57 -05:00
										 |  |  | }; | 
					
						
							| 
									
										
										
										
											2015-01-12 15:57:45 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-01-29 17:02:20 -05:00
										 |  |  | function getUsersAndCount(set, uid, count, callback) { | 
					
						
							| 
									
										
										
										
											2014-09-12 18:31:04 -04:00
										 |  |  | 	async.parallel({ | 
					
						
							|  |  |  | 		users: function(next) { | 
					
						
							| 
									
										
										
										
											2015-01-29 17:02:20 -05:00
										 |  |  | 			user.getUsersFromSet(set, uid, 0, count - 1, next); | 
					
						
							| 
									
										
										
										
											2014-09-12 18:31:04 -04:00
										 |  |  | 		}, | 
					
						
							|  |  |  | 		count: function(next) { | 
					
						
							| 
									
										
										
										
											2014-10-14 23:12:47 -04:00
										 |  |  | 			db.getObjectField('global', 'userCount', next); | 
					
						
							| 
									
										
										
										
											2014-09-12 18:31:04 -04:00
										 |  |  | 		} | 
					
						
							|  |  |  | 	}, function(err, results) { | 
					
						
							| 
									
										
										
										
											2014-03-15 16:18:03 -04:00
										 |  |  | 		if (err) { | 
					
						
							| 
									
										
										
										
											2015-01-12 15:57:45 -05:00
										 |  |  | 			return callback(err); | 
					
						
							| 
									
										
										
										
											2014-03-15 16:18:03 -04:00
										 |  |  | 		} | 
					
						
							| 
									
										
										
										
											2014-09-12 18:31:04 -04:00
										 |  |  | 		results.users = results.users.filter(function(user) { | 
					
						
							| 
									
										
										
										
											2014-09-12 18:05:09 -04:00
										 |  |  | 			return user && parseInt(user.uid, 10); | 
					
						
							|  |  |  | 		}); | 
					
						
							| 
									
										
										
										
											2014-09-12 18:31:04 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-01-12 15:57:45 -05:00
										 |  |  | 		callback(null, {users: results.users, count: results.count}); | 
					
						
							| 
									
										
										
										
											2014-02-28 14:19:43 -05:00
										 |  |  | 	}); | 
					
						
							| 
									
										
										
										
											2014-03-15 16:18:03 -04:00
										 |  |  | } | 
					
						
							| 
									
										
										
										
											2014-02-28 14:19:43 -05:00
										 |  |  | 
 | 
					
						
							|  |  |  | usersController.getUsersForSearch = function(req, res, next) { | 
					
						
							| 
									
										
										
										
											2015-01-27 16:39:33 -05:00
										 |  |  | 	var resultsPerPage = parseInt(meta.config.userSearchResultsPerPage, 10) || 20, | 
					
						
							|  |  |  | 		uid = req.user ? req.user.uid : 0; | 
					
						
							| 
									
										
										
										
											2015-01-27 16:51:48 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-01-29 17:02:20 -05:00
										 |  |  | 	getUsersAndCount('users:joindate', uid, resultsPerPage, function(err, data) { | 
					
						
							| 
									
										
										
										
											2015-01-12 15:57:45 -05:00
										 |  |  | 		if (err) { | 
					
						
							|  |  |  | 			return next(err); | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-01-27 16:39:33 -05:00
										 |  |  | 		var userData = { | 
					
						
							| 
									
										
										
										
											2015-01-12 15:57:45 -05:00
										 |  |  | 			search_display: 'block', | 
					
						
							|  |  |  | 			loadmore_display: 'hidden', | 
					
						
							|  |  |  | 			users: data.users, | 
					
						
							|  |  |  | 			show_anon: 'hide' | 
					
						
							|  |  |  | 		}; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-01-27 17:37:21 -05:00
										 |  |  | 		res.render('users', userData); | 
					
						
							| 
									
										
										
										
											2015-01-12 15:57:45 -05:00
										 |  |  | 	}); | 
					
						
							| 
									
										
										
										
											2014-02-28 14:19:43 -05:00
										 |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-02-28 14:04:21 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-04-10 20:31:57 +01:00
										 |  |  | module.exports = usersController; |