| 
									
										
										
										
											2014-02-26 21:04:20 -05:00
										 |  |  | 'use strict'; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-05-18 19:02:43 +03:00
										 |  |  | var	async = require('async'); | 
					
						
							| 
									
										
										
										
											2013-12-01 16:21:19 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-09-14 21:06:55 -04:00
										 |  |  | var groups = require('./groups'); | 
					
						
							| 
									
										
										
										
											2016-05-18 19:02:43 +03:00
										 |  |  | var plugins = require('./plugins'); | 
					
						
							|  |  |  | var db = require('./database'); | 
					
						
							|  |  |  | var topics = require('./topics'); | 
					
						
							|  |  |  | var privileges = require('./privileges'); | 
					
						
							| 
									
										
										
										
											2016-06-22 16:47:24 -04:00
										 |  |  | var meta = require('./meta'); | 
					
						
							| 
									
										
										
										
											2016-05-18 19:02:43 +03:00
										 |  |  | var utils = require('../public/src/utils'); | 
					
						
							| 
									
										
										
										
											2013-11-22 14:08:02 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-05-09 01:04:15 -04:00
										 |  |  | (function(User) { | 
					
						
							| 
									
										
										
										
											2014-02-26 21:04:20 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-03-12 20:53:42 -04:00
										 |  |  | 	User.email = require('./user/email'); | 
					
						
							|  |  |  | 	User.notifications = require('./user/notifications'); | 
					
						
							|  |  |  | 	User.reset = require('./user/reset'); | 
					
						
							| 
									
										
										
										
											2014-11-17 13:37:07 -05:00
										 |  |  | 	User.digest = require('./user/digest'); | 
					
						
							| 
									
										
										
										
											2014-03-12 20:53:42 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-09-25 17:08:00 -04:00
										 |  |  | 	require('./user/data')(User); | 
					
						
							| 
									
										
										
										
											2014-05-11 11:45:20 -04:00
										 |  |  | 	require('./user/auth')(User); | 
					
						
							| 
									
										
										
										
											2014-03-17 21:47:37 -04:00
										 |  |  | 	require('./user/create')(User); | 
					
						
							| 
									
										
										
										
											2014-11-14 21:47:24 -05:00
										 |  |  | 	require('./user/posts')(User); | 
					
						
							| 
									
										
										
										
											2016-05-18 19:02:43 +03:00
										 |  |  | 	require('./user/topics')(User); | 
					
						
							| 
									
										
										
										
											2015-09-25 17:08:00 -04:00
										 |  |  | 	require('./user/categories')(User); | 
					
						
							| 
									
										
										
										
											2014-03-12 20:53:42 -04:00
										 |  |  | 	require('./user/follow')(User); | 
					
						
							|  |  |  | 	require('./user/profile')(User); | 
					
						
							|  |  |  | 	require('./user/admin')(User); | 
					
						
							| 
									
										
										
										
											2014-03-15 15:09:54 -04:00
										 |  |  | 	require('./user/delete')(User); | 
					
						
							| 
									
										
										
										
											2014-03-12 20:53:42 -04:00
										 |  |  | 	require('./user/settings')(User); | 
					
						
							| 
									
										
										
										
											2014-03-12 22:11:48 -04:00
										 |  |  | 	require('./user/search')(User); | 
					
						
							| 
									
										
										
										
											2014-03-18 15:35:48 -04:00
										 |  |  | 	require('./user/jobs')(User); | 
					
						
							| 
									
										
										
										
											2015-04-13 15:01:38 -04:00
										 |  |  | 	require('./user/picture')(User); | 
					
						
							| 
									
										
										
										
											2015-06-27 21:26:19 -04:00
										 |  |  | 	require('./user/approval')(User); | 
					
						
							| 
									
										
										
										
											2015-06-28 21:54:21 -04:00
										 |  |  | 	require('./user/invite')(User); | 
					
						
							| 
									
										
										
										
											2015-10-09 17:52:55 -04:00
										 |  |  | 	require('./user/password')(User); | 
					
						
							| 
									
										
										
										
											2016-07-07 14:32:48 -04:00
										 |  |  | 	require('./user/info')(User); | 
					
						
							| 
									
										
										
										
											2013-08-23 13:14:36 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-02-12 17:16:16 -05:00
										 |  |  | 	User.updateLastOnlineTime = function(uid, callback) { | 
					
						
							| 
									
										
										
										
											2014-06-08 16:06:42 -04:00
										 |  |  | 		callback = callback || function() {}; | 
					
						
							| 
									
										
										
										
											2014-09-16 11:06:10 -04:00
										 |  |  | 		User.getUserFields(uid, ['status', 'lastonline'], function(err, userData) { | 
					
						
							| 
									
										
										
										
											2014-11-28 14:25:11 -05:00
										 |  |  | 			var now = Date.now(); | 
					
						
							| 
									
										
										
										
											2014-11-28 20:31:47 -05:00
										 |  |  | 			if (err || userData.status === 'offline' || now - parseInt(userData.lastonline, 10) < 300000) { | 
					
						
							| 
									
										
										
										
											2014-06-08 16:06:42 -04:00
										 |  |  | 				return callback(err); | 
					
						
							| 
									
										
										
										
											2014-02-12 17:16:16 -05:00
										 |  |  | 			} | 
					
						
							| 
									
										
										
										
											2014-11-28 14:25:11 -05:00
										 |  |  | 			User.setUserField(uid, 'lastonline', now, callback); | 
					
						
							| 
									
										
										
										
											2014-02-12 17:16:16 -05:00
										 |  |  | 		}); | 
					
						
							|  |  |  | 	}; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-11-28 20:31:47 -05:00
										 |  |  | 	User.updateOnlineUsers = function(uid, callback) { | 
					
						
							|  |  |  | 		callback = callback || function() {}; | 
					
						
							| 
									
										
										
										
											2015-02-12 12:23:13 -05:00
										 |  |  | 
 | 
					
						
							|  |  |  | 		var now = Date.now(); | 
					
						
							|  |  |  | 		async.waterfall([ | 
					
						
							|  |  |  | 			function(next) { | 
					
						
							|  |  |  | 				db.sortedSetScore('users:online', uid, next); | 
					
						
							|  |  |  | 			}, | 
					
						
							|  |  |  | 			function(userOnlineTime, next) { | 
					
						
							|  |  |  | 				if (now - parseInt(userOnlineTime, 10) < 300000) { | 
					
						
							|  |  |  | 					return callback(); | 
					
						
							| 
									
										
										
										
											2015-01-29 12:52:30 -05:00
										 |  |  | 				} | 
					
						
							| 
									
										
										
										
											2015-03-14 23:00:24 -04:00
										 |  |  | 				db.sortedSetAdd('users:online', now, uid, next); | 
					
						
							| 
									
										
										
										
											2015-02-12 12:23:13 -05:00
										 |  |  | 			}, | 
					
						
							|  |  |  | 			function(next) { | 
					
						
							|  |  |  | 				topics.pushUnreadCount(uid); | 
					
						
							| 
									
										
										
										
											2015-01-29 12:52:30 -05:00
										 |  |  | 				plugins.fireHook('action:user.online', {uid: uid, timestamp: now}); | 
					
						
							| 
									
										
										
										
											2015-02-12 12:23:13 -05:00
										 |  |  | 				next(); | 
					
						
							|  |  |  | 			} | 
					
						
							|  |  |  | 		], callback); | 
					
						
							| 
									
										
										
										
											2014-11-28 20:36:11 -05:00
										 |  |  | 	}; | 
					
						
							| 
									
										
										
										
											2014-11-28 20:31:47 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-11-28 14:25:11 -05:00
										 |  |  | 	User.getUidsFromSet = function(set, start, stop, callback) { | 
					
						
							|  |  |  | 		if (set === 'users:online') { | 
					
						
							|  |  |  | 			var count = parseInt(stop, 10) === -1 ? stop : stop - start + 1; | 
					
						
							|  |  |  | 			var now = Date.now(); | 
					
						
							| 
									
										
										
										
											2016-03-09 22:15:03 +02:00
										 |  |  | 			db.getSortedSetRevRangeByScore(set, start, count, '+inf', now - 300000, callback); | 
					
						
							| 
									
										
										
										
											2014-11-28 14:25:11 -05:00
										 |  |  | 		} else { | 
					
						
							| 
									
										
										
										
											2014-11-28 14:30:43 -05:00
										 |  |  | 			db.getSortedSetRevRange(set, start, stop, callback); | 
					
						
							| 
									
										
										
										
											2014-11-28 14:25:11 -05:00
										 |  |  | 		} | 
					
						
							|  |  |  | 	}; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-01-29 17:02:20 -05:00
										 |  |  | 	User.getUsersFromSet = function(set, uid, start, stop, callback) { | 
					
						
							| 
									
										
										
										
											2014-03-19 21:32:13 -04:00
										 |  |  | 		async.waterfall([ | 
					
						
							|  |  |  | 			function(next) { | 
					
						
							| 
									
										
										
										
											2014-11-28 14:25:11 -05:00
										 |  |  | 				User.getUidsFromSet(set, start, stop, next); | 
					
						
							| 
									
										
										
										
											2014-03-19 21:32:13 -04:00
										 |  |  | 			}, | 
					
						
							|  |  |  | 			function(uids, next) { | 
					
						
							| 
									
										
										
										
											2015-01-29 17:02:20 -05:00
										 |  |  | 				User.getUsers(uids, uid, next); | 
					
						
							| 
									
										
										
										
											2014-03-19 21:32:13 -04:00
										 |  |  | 			} | 
					
						
							|  |  |  | 		], callback); | 
					
						
							|  |  |  | 	}; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-01-29 17:02:20 -05:00
										 |  |  | 	User.getUsers = function(uids, uid, callback) { | 
					
						
							| 
									
										
										
										
											2016-07-04 17:49:02 +03:00
										 |  |  | 		var fields = ['uid', 'username', 'userslug', 'picture', 'status', 'flags', | 
					
						
							| 
									
										
										
										
											2016-08-11 09:31:10 +03:00
										 |  |  | 			'banned', 'banned:expire', 'joindate', 'postcount', 'reputation', 'email:confirmed', 'lastonline']; | 
					
						
							| 
									
										
										
										
											2014-08-06 12:39:14 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-11-05 15:53:54 -05:00
										 |  |  | 		async.waterfall([ | 
					
						
							|  |  |  | 			function (next) { | 
					
						
							|  |  |  | 				plugins.fireHook('filter:users.addFields', {fields: fields}, next); | 
					
						
							|  |  |  | 			}, | 
					
						
							|  |  |  | 			function (data, next) { | 
					
						
							|  |  |  | 				data.fields = data.fields.filter(function(field, index, array) { | 
					
						
							|  |  |  | 					return array.indexOf(field) === index; | 
					
						
							| 
									
										
										
										
											2015-01-13 12:02:08 -05:00
										 |  |  | 				}); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-11-05 15:53:54 -05:00
										 |  |  | 				async.parallel({ | 
					
						
							|  |  |  | 					userData: function(next) { | 
					
						
							|  |  |  | 						User.getUsersFields(uids, data.fields, next); | 
					
						
							|  |  |  | 					}, | 
					
						
							|  |  |  | 					isAdmin: function(next) { | 
					
						
							|  |  |  | 						User.isAdministrator(uids, next); | 
					
						
							|  |  |  | 					} | 
					
						
							|  |  |  | 				}, next); | 
					
						
							|  |  |  | 			}, | 
					
						
							|  |  |  | 			function (results, next) { | 
					
						
							|  |  |  | 				results.userData.forEach(function(user, index) { | 
					
						
							|  |  |  | 					if (user) { | 
					
						
							|  |  |  | 						user.status = User.getStatus(user); | 
					
						
							|  |  |  | 						user.joindateISO = utils.toISOString(user.joindate); | 
					
						
							|  |  |  | 						user.administrator = results.isAdmin[index]; | 
					
						
							|  |  |  | 						user.banned = parseInt(user.banned, 10) === 1; | 
					
						
							| 
									
										
										
										
											2016-08-11 09:31:10 +03:00
										 |  |  | 						user.banned_until = parseInt(user['banned:expire'], 10) || 0; | 
					
						
							|  |  |  | 						user.banned_until_readable = user.banned_until ? new Date(user.banned_until).toString() : 'Not Banned'; | 
					
						
							| 
									
										
										
										
											2015-11-05 15:53:54 -05:00
										 |  |  | 						user['email:confirmed'] = parseInt(user['email:confirmed'], 10) === 1; | 
					
						
							| 
									
										
										
										
											2016-01-14 18:43:00 +02:00
										 |  |  | 						user.lastonlineISO = utils.toISOString(user.lastonline) || user.joindateISO; | 
					
						
							| 
									
										
										
										
											2015-01-28 10:30:18 -05:00
										 |  |  | 					} | 
					
						
							|  |  |  | 				}); | 
					
						
							| 
									
										
										
										
											2015-11-05 15:53:54 -05:00
										 |  |  | 				plugins.fireHook('filter:userlist.get', {users: results.userData, uid: uid}, next); | 
					
						
							|  |  |  | 			}, | 
					
						
							|  |  |  | 			function (data, next) { | 
					
						
							|  |  |  | 				next(null, data.users); | 
					
						
							|  |  |  | 			} | 
					
						
							|  |  |  | 		], callback); | 
					
						
							| 
									
										
										
										
											2013-11-04 01:57:58 +02:00
										 |  |  | 	}; | 
					
						
							| 
									
										
										
										
											2013-05-09 01:04:15 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-11-05 12:34:39 -05:00
										 |  |  | 	User.getStatus = function(userData) { | 
					
						
							| 
									
										
										
										
											2016-09-19 11:40:46 +03:00
										 |  |  | 		var isOnline = (Date.now() - parseInt(userData.lastonline, 10)) < 300000; | 
					
						
							| 
									
										
										
										
											2015-11-05 12:34:39 -05:00
										 |  |  | 		return isOnline ? (userData.status || 'online') : 'offline'; | 
					
						
							|  |  |  | 	}; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	User.isOnline = function(uid, callback) { | 
					
						
							| 
									
										
										
										
											2015-12-16 11:15:43 +02:00
										 |  |  | 		if (Array.isArray(uid)) { | 
					
						
							|  |  |  | 			db.sortedSetScores('users:online', uid, function(err, lastonline) { | 
					
						
							|  |  |  | 				if (err) { | 
					
						
							|  |  |  | 					return callback(err); | 
					
						
							|  |  |  | 				} | 
					
						
							|  |  |  | 				var now = Date.now(); | 
					
						
							|  |  |  | 				var isOnline = uid.map(function(uid, index) { | 
					
						
							|  |  |  | 					return now - lastonline[index] < 300000; | 
					
						
							|  |  |  | 				}); | 
					
						
							|  |  |  | 				callback(null, isOnline); | 
					
						
							|  |  |  | 			}); | 
					
						
							|  |  |  | 		} else { | 
					
						
							|  |  |  | 			db.sortedSetScore('users:online', uid, function(err, lastonline) { | 
					
						
							|  |  |  | 				if (err) { | 
					
						
							|  |  |  | 					return callback(err); | 
					
						
							|  |  |  | 				} | 
					
						
							|  |  |  | 				var isOnline = Date.now() - parseInt(lastonline, 10) < 300000; | 
					
						
							|  |  |  | 				callback(null, isOnline); | 
					
						
							|  |  |  | 			}); | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-01-12 15:57:45 -05:00
										 |  |  | 	}; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-10-02 16:27:14 -04:00
										 |  |  | 	User.exists = function(uid, callback) { | 
					
						
							|  |  |  | 		db.isSortedSetMember('users:joindate', uid, callback); | 
					
						
							|  |  |  | 	}; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	User.existsBySlug = function(userslug, callback) { | 
					
						
							| 
									
										
										
										
											2013-10-30 18:31:36 -04:00
										 |  |  | 		User.getUidByUserslug(userslug, function(err, exists) { | 
					
						
							| 
									
										
										
										
											2014-01-16 16:50:41 -05:00
										 |  |  | 			callback(err, !! exists); | 
					
						
							| 
									
										
										
										
											2013-05-09 01:04:15 -04:00
										 |  |  | 		}); | 
					
						
							| 
									
										
										
										
											2015-10-09 17:52:55 -04:00
										 |  |  | 	}; | 
					
						
							| 
									
										
										
										
											2013-07-05 16:37:45 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-10-30 18:31:36 -04:00
										 |  |  | 	User.getUidByUsername = function(username, callback) { | 
					
						
							| 
									
										
										
										
											2014-12-01 17:59:38 -05:00
										 |  |  | 		if (!username) { | 
					
						
							| 
									
										
										
										
											2015-06-19 00:31:47 -04:00
										 |  |  | 			return callback(null, 0); | 
					
						
							| 
									
										
										
										
											2014-12-01 17:59:38 -05:00
										 |  |  | 		} | 
					
						
							| 
									
										
										
										
											2015-05-07 13:43:06 -04:00
										 |  |  | 		db.sortedSetScore('username:uid', username, callback); | 
					
						
							| 
									
										
										
										
											2013-11-04 01:57:58 +02:00
										 |  |  | 	}; | 
					
						
							| 
									
										
										
										
											2013-05-09 01:04:15 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-03-14 23:00:24 -04:00
										 |  |  | 	User.getUidsByUsernames = function(usernames, callback) { | 
					
						
							| 
									
										
										
										
											2015-05-07 13:43:06 -04:00
										 |  |  | 		db.sortedSetScores('username:uid', usernames, callback); | 
					
						
							| 
									
										
										
										
											2015-03-14 23:00:24 -04:00
										 |  |  | 	}; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-10-30 18:31:36 -04:00
										 |  |  | 	User.getUidByUserslug = function(userslug, callback) { | 
					
						
							| 
									
										
										
										
											2014-12-01 17:59:38 -05:00
										 |  |  | 		if (!userslug) { | 
					
						
							| 
									
										
										
										
											2015-06-19 00:31:47 -04:00
										 |  |  | 			return callback(null, 0); | 
					
						
							| 
									
										
										
										
											2014-12-01 17:59:38 -05:00
										 |  |  | 		} | 
					
						
							| 
									
										
										
										
											2015-05-07 13:43:06 -04:00
										 |  |  | 		db.sortedSetScore('userslug:uid', userslug, callback); | 
					
						
							| 
									
										
										
										
											2013-11-04 01:57:58 +02:00
										 |  |  | 	}; | 
					
						
							| 
									
										
										
										
											2013-06-24 14:33:53 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-10-30 18:31:36 -04:00
										 |  |  | 	User.getUsernamesByUids = function(uids, callback) { | 
					
						
							| 
									
										
										
										
											2015-09-25 17:38:58 -04:00
										 |  |  | 		User.getUsersFields(uids, ['username'], function(err, users) { | 
					
						
							| 
									
										
										
										
											2014-03-11 03:39:41 -04:00
										 |  |  | 			if (err) { | 
					
						
							|  |  |  | 				return callback(err); | 
					
						
							|  |  |  | 			} | 
					
						
							| 
									
										
										
										
											2013-05-17 13:28:34 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-03-11 03:39:41 -04:00
										 |  |  | 			users = users.map(function(user) { | 
					
						
							|  |  |  | 				return user.username; | 
					
						
							|  |  |  | 			}); | 
					
						
							| 
									
										
										
										
											2013-07-05 18:19:55 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-03-11 03:39:41 -04:00
										 |  |  | 			callback(null, users); | 
					
						
							|  |  |  | 		}); | 
					
						
							| 
									
										
										
										
											2013-11-04 01:57:58 +02:00
										 |  |  | 	}; | 
					
						
							| 
									
										
										
										
											2013-05-09 01:04:15 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-01-27 12:19:25 -05:00
										 |  |  | 	User.getUsernameByUserslug = function(slug, callback) { | 
					
						
							|  |  |  | 		async.waterfall([ | 
					
						
							|  |  |  | 			function(next) { | 
					
						
							|  |  |  | 				User.getUidByUserslug(slug, next); | 
					
						
							|  |  |  | 			}, | 
					
						
							|  |  |  | 			function(uid, next) { | 
					
						
							|  |  |  | 				User.getUserField(uid, 'username', next); | 
					
						
							|  |  |  | 			} | 
					
						
							|  |  |  | 		], callback); | 
					
						
							|  |  |  | 	}; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-10-30 18:31:36 -04:00
										 |  |  | 	User.getUidByEmail = function(email, callback) { | 
					
						
							| 
									
										
										
										
											2015-05-07 13:43:06 -04:00
										 |  |  | 		db.sortedSetScore('email:uid', email.toLowerCase(), callback); | 
					
						
							| 
									
										
										
										
											2013-11-04 01:57:58 +02:00
										 |  |  | 	}; | 
					
						
							| 
									
										
										
										
											2013-05-09 01:04:15 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-03-17 15:38:06 -04:00
										 |  |  | 	User.getUsernameByEmail = function(email, callback) { | 
					
						
							| 
									
										
										
										
											2015-05-07 13:43:06 -04:00
										 |  |  | 		db.sortedSetScore('email:uid', email.toLowerCase(), function(err, uid) { | 
					
						
							| 
									
										
										
										
											2014-03-17 15:46:53 -04:00
										 |  |  | 			if (err) { | 
					
						
							|  |  |  | 				return callback(err); | 
					
						
							|  |  |  | 			} | 
					
						
							| 
									
										
										
										
											2014-03-17 15:38:06 -04:00
										 |  |  | 			User.getUserField(uid, 'username', callback); | 
					
						
							|  |  |  | 		}); | 
					
						
							|  |  |  | 	}; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-05-16 12:49:39 -04:00
										 |  |  | 	User.isModerator = function(uid, cid, callback) { | 
					
						
							| 
									
										
										
										
											2015-09-25 17:08:00 -04:00
										 |  |  | 		privileges.users.isModerator(uid, cid, callback); | 
					
						
							| 
									
										
										
										
											2013-11-04 01:57:58 +02:00
										 |  |  | 	}; | 
					
						
							| 
									
										
										
										
											2013-05-17 21:14:58 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	User.isAdministrator = function(uid, callback) { | 
					
						
							| 
									
										
										
										
											2015-09-25 17:08:00 -04:00
										 |  |  | 		privileges.users.isAdministrator(uid, callback); | 
					
						
							| 
									
										
										
										
											2014-08-29 15:57:20 -04:00
										 |  |  | 	}; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-01-25 13:36:10 +02:00
										 |  |  | 	User.isGlobalModerator = function(uid, callback) { | 
					
						
							|  |  |  | 		privileges.users.isGlobalModerator(uid, callback); | 
					
						
							|  |  |  | 	}; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-02-03 18:21:34 +02:00
										 |  |  | 	User.isAdminOrGlobalMod = function(uid, callback) { | 
					
						
							|  |  |  | 		async.parallel({ | 
					
						
							|  |  |  | 			isAdmin: async.apply(User.isAdministrator, uid), | 
					
						
							|  |  |  | 			isGlobalMod: async.apply(User.isGlobalModerator, uid) | 
					
						
							|  |  |  | 		}, function(err, results) { | 
					
						
							|  |  |  | 			callback(err, results ? (results.isAdmin || results.isGlobalMod) : false); | 
					
						
							|  |  |  | 		}); | 
					
						
							|  |  |  | 	}; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-10-09 17:52:55 -04:00
										 |  |  | 	User.isAdminOrSelf = function(callerUid, uid, callback) { | 
					
						
							|  |  |  | 		if (parseInt(callerUid, 10) === parseInt(uid, 10)) { | 
					
						
							|  |  |  | 			return callback(); | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 		User.isAdministrator(callerUid, function(err, isAdmin) { | 
					
						
							|  |  |  | 			if (err || !isAdmin) { | 
					
						
							|  |  |  | 				return callback(err || new Error('[[error:no-privileges]]')); | 
					
						
							|  |  |  | 			} | 
					
						
							|  |  |  | 			callback(); | 
					
						
							|  |  |  | 		}); | 
					
						
							|  |  |  | 	}; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-09-14 21:06:55 -04:00
										 |  |  | 	User.getAdminsandGlobalMods = function(callback) { | 
					
						
							|  |  |  | 		async.parallel({ | 
					
						
							|  |  |  | 			admins: async.apply(groups.getMembers, 'administrators', 0, -1), | 
					
						
							|  |  |  | 			mods: async.apply(groups.getMembers, 'Global Moderators', 0, -1) | 
					
						
							|  |  |  | 		}, function(err, results) { | 
					
						
							|  |  |  | 			if (err) { | 
					
						
							|  |  |  | 				return callback(err); | 
					
						
							|  |  |  | 			} | 
					
						
							| 
									
										
										
										
											2016-09-16 00:17:43 +03:00
										 |  |  | 			var uids = results.admins.concat(results.mods).filter(function(uid, index, array) { | 
					
						
							|  |  |  | 				return uid && array.indexOf(uid) === index; | 
					
						
							|  |  |  | 			}); | 
					
						
							|  |  |  | 			User.getUsersData(uids, callback); | 
					
						
							| 
									
										
										
										
											2016-09-14 21:06:55 -04:00
										 |  |  | 		}); | 
					
						
							|  |  |  | 	}; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-06-22 16:47:24 -04:00
										 |  |  | 	User.addInterstitials = function(callback) { | 
					
						
							|  |  |  | 		plugins.registerHook('core', { | 
					
						
							|  |  |  | 			hook: 'filter:register.interstitial', | 
					
						
							|  |  |  | 			method: function(data, callback) { | 
					
						
							|  |  |  | 				if (meta.config.termsOfUse && !data.userData.acceptTos) { | 
					
						
							|  |  |  | 					data.interstitials.push({ | 
					
						
							|  |  |  | 						template: 'partials/acceptTos', | 
					
						
							|  |  |  | 						data: { | 
					
						
							|  |  |  | 							termsOfUse: meta.config.termsOfUse | 
					
						
							|  |  |  | 						}, | 
					
						
							|  |  |  | 						callback: function(userData, formData, next) { | 
					
						
							|  |  |  | 							if (formData['agree-terms'] === 'on') { | 
					
						
							|  |  |  | 								userData.acceptTos = true; | 
					
						
							|  |  |  | 							} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 							next(userData.acceptTos ? null : new Error('[[register:terms_of_use_error]]')); | 
					
						
							|  |  |  | 						} | 
					
						
							|  |  |  | 					}); | 
					
						
							|  |  |  | 				} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 				callback(null, data); | 
					
						
							|  |  |  | 			} | 
					
						
							|  |  |  | 		}); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		callback(); | 
					
						
							|  |  |  | 	}; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-02-11 23:38:25 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-11-30 13:13:18 -05:00
										 |  |  | }(exports)); |