2014-02-26 21:04:20 -05:00
|
|
|
'use strict';
|
|
|
|
|
|
2016-05-18 19:02:43 +03:00
|
|
|
var async = require('async');
|
2016-10-13 13:12:38 -04:00
|
|
|
var _ = require('underscore');
|
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');
|
2013-11-22 14:08:02 -05:00
|
|
|
|
2016-10-13 11:43:39 +02: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);
|
2016-10-27 14:14:54 -04:00
|
|
|
require('./user/bans')(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
|
|
|
|
2016-10-13 11:43:39 +02:00
|
|
|
User.updateLastOnlineTime = function (uid, callback) {
|
|
|
|
|
callback = callback || function () {};
|
|
|
|
|
db.getObjectFields('user:' + 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
|
|
|
});
|
|
|
|
|
};
|
|
|
|
|
|
2016-10-13 11:43:39 +02:00
|
|
|
User.updateOnlineUsers = function (uid, callback) {
|
|
|
|
|
callback = callback || function () {};
|
2015-02-12 12:23:13 -05:00
|
|
|
|
|
|
|
|
var now = Date.now();
|
|
|
|
|
async.waterfall([
|
2016-10-13 11:43:39 +02:00
|
|
|
function (next) {
|
2015-02-12 12:23:13 -05:00
|
|
|
db.sortedSetScore('users:online', uid, next);
|
|
|
|
|
},
|
2016-10-13 11:43:39 +02:00
|
|
|
function (userOnlineTime, next) {
|
2015-02-12 12:23:13 -05:00
|
|
|
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
|
|
|
},
|
2016-10-13 11:43:39 +02:00
|
|
|
function (next) {
|
2015-02-12 12:23:13 -05:00
|
|
|
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();
|
2017-02-17 19:31:21 -07:00
|
|
|
},
|
2015-02-12 12:23:13 -05:00
|
|
|
], callback);
|
2014-11-28 20:36:11 -05:00
|
|
|
};
|
2014-11-28 20:31:47 -05:00
|
|
|
|
2016-10-13 11:43:39 +02:00
|
|
|
User.getUidsFromSet = function (set, start, stop, callback) {
|
2014-11-28 14:25:11 -05:00
|
|
|
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
|
|
|
}
|
|
|
|
|
};
|
|
|
|
|
|
2016-10-13 11:43:39 +02:00
|
|
|
User.getUsersFromSet = function (set, uid, start, stop, callback) {
|
2014-03-19 21:32:13 -04:00
|
|
|
async.waterfall([
|
2016-10-13 11:43:39 +02:00
|
|
|
function (next) {
|
2014-11-28 14:25:11 -05:00
|
|
|
User.getUidsFromSet(set, start, stop, next);
|
2014-03-19 21:32:13 -04:00
|
|
|
},
|
2016-10-13 11:43:39 +02:00
|
|
|
function (uids, next) {
|
2015-01-29 17:02:20 -05:00
|
|
|
User.getUsers(uids, uid, next);
|
2017-02-17 19:31:21 -07:00
|
|
|
},
|
2014-03-19 21:32:13 -04:00
|
|
|
], callback);
|
|
|
|
|
};
|
|
|
|
|
|
2016-10-13 11:43:39 +02:00
|
|
|
User.getUsersWithFields = function (uids, fields, uid, callback) {
|
2015-11-05 15:53:54 -05:00
|
|
|
async.waterfall([
|
|
|
|
|
function (next) {
|
|
|
|
|
plugins.fireHook('filter:users.addFields', {fields: fields}, next);
|
|
|
|
|
},
|
|
|
|
|
function (data, next) {
|
2016-10-13 11:43:39 +02:00
|
|
|
data.fields = data.fields.filter(function (field, index, array) {
|
2015-11-05 15:53:54 -05:00
|
|
|
return array.indexOf(field) === index;
|
2015-01-13 12:02:08 -05:00
|
|
|
});
|
|
|
|
|
|
2015-11-05 15:53:54 -05:00
|
|
|
async.parallel({
|
2016-10-13 11:43:39 +02:00
|
|
|
userData: function (next) {
|
2015-11-05 15:53:54 -05:00
|
|
|
User.getUsersFields(uids, data.fields, next);
|
|
|
|
|
},
|
2016-10-13 11:43:39 +02:00
|
|
|
isAdmin: function (next) {
|
2015-11-05 15:53:54 -05:00
|
|
|
User.isAdministrator(uids, next);
|
2017-02-17 19:31:21 -07:00
|
|
|
},
|
2015-11-05 15:53:54 -05:00
|
|
|
}, next);
|
|
|
|
|
},
|
|
|
|
|
function (results, next) {
|
2016-10-13 11:43:39 +02:00
|
|
|
results.userData.forEach(function (user, index) {
|
2015-11-05 15:53:54 -05:00
|
|
|
if (user) {
|
|
|
|
|
user.status = User.getStatus(user);
|
|
|
|
|
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;
|
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);
|
2017-02-17 19:31:21 -07:00
|
|
|
},
|
2015-11-05 15:53:54 -05:00
|
|
|
], callback);
|
2013-11-04 01:57:58 +02:00
|
|
|
};
|
2013-05-09 01:04:15 -04:00
|
|
|
|
2016-10-13 11:43:39 +02:00
|
|
|
User.getUsers = function (uids, uid, callback) {
|
2016-10-07 17:35:24 +03:00
|
|
|
var fields = ['uid', 'username', 'userslug', 'picture', 'status', 'flags',
|
|
|
|
|
'banned', 'banned:expire', 'joindate', 'postcount', 'reputation', 'email:confirmed', 'lastonline'];
|
|
|
|
|
|
|
|
|
|
User.getUsersWithFields(uids, fields, uid, callback);
|
|
|
|
|
};
|
|
|
|
|
|
2016-10-13 11:43:39 +02: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';
|
|
|
|
|
};
|
|
|
|
|
|
2016-10-13 11:43:39 +02:00
|
|
|
User.isOnline = function (uid, callback) {
|
2015-12-16 11:15:43 +02:00
|
|
|
if (Array.isArray(uid)) {
|
2016-10-13 11:43:39 +02:00
|
|
|
db.sortedSetScores('users:online', uid, function (err, lastonline) {
|
2015-12-16 11:15:43 +02:00
|
|
|
if (err) {
|
|
|
|
|
return callback(err);
|
|
|
|
|
}
|
|
|
|
|
var now = Date.now();
|
2016-10-13 11:43:39 +02:00
|
|
|
var isOnline = uid.map(function (uid, index) {
|
2015-12-16 11:15:43 +02:00
|
|
|
return now - lastonline[index] < 300000;
|
|
|
|
|
});
|
|
|
|
|
callback(null, isOnline);
|
|
|
|
|
});
|
|
|
|
|
} else {
|
2016-10-13 11:43:39 +02:00
|
|
|
db.sortedSetScore('users:online', uid, function (err, lastonline) {
|
2015-12-16 11:15:43 +02:00
|
|
|
if (err) {
|
|
|
|
|
return callback(err);
|
|
|
|
|
}
|
|
|
|
|
var isOnline = Date.now() - parseInt(lastonline, 10) < 300000;
|
|
|
|
|
callback(null, isOnline);
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
|
2015-01-12 15:57:45 -05:00
|
|
|
};
|
|
|
|
|
|
2016-10-13 11:43:39 +02:00
|
|
|
User.exists = function (uid, callback) {
|
2015-10-02 16:27:14 -04:00
|
|
|
db.isSortedSetMember('users:joindate', uid, callback);
|
|
|
|
|
};
|
|
|
|
|
|
2016-10-13 11:43:39 +02:00
|
|
|
User.existsBySlug = function (userslug, callback) {
|
|
|
|
|
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
|
|
|
|
2016-10-13 11:43:39 +02: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
|
|
|
|
2016-10-13 11:43:39 +02: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
|
|
|
};
|
|
|
|
|
|
2016-10-13 11:43:39 +02: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
|
|
|
|
2016-10-13 11:43:39 +02:00
|
|
|
User.getUsernamesByUids = function (uids, callback) {
|
|
|
|
|
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
|
|
|
|
2016-10-13 11:43:39 +02:00
|
|
|
users = users.map(function (user) {
|
2014-03-11 03:39:41 -04:00
|
|
|
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
|
|
|
|
2016-10-13 11:43:39 +02:00
|
|
|
User.getUsernameByUserslug = function (slug, callback) {
|
2014-01-27 12:19:25 -05:00
|
|
|
async.waterfall([
|
2016-10-13 11:43:39 +02:00
|
|
|
function (next) {
|
2014-01-27 12:19:25 -05:00
|
|
|
User.getUidByUserslug(slug, next);
|
|
|
|
|
},
|
2016-10-13 11:43:39 +02:00
|
|
|
function (uid, next) {
|
2014-01-27 12:19:25 -05:00
|
|
|
User.getUserField(uid, 'username', next);
|
2017-02-17 19:31:21 -07:00
|
|
|
},
|
2014-01-27 12:19:25 -05:00
|
|
|
], callback);
|
|
|
|
|
};
|
|
|
|
|
|
2016-10-13 11:43:39 +02: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
|
|
|
|
2016-11-18 17:35:05 +03:00
|
|
|
User.getUidsByEmails = function (emails, callback) {
|
2016-11-18 17:40:55 +03:00
|
|
|
emails = emails.map(function (email) {
|
2016-11-18 17:35:05 +03:00
|
|
|
return email && email.toLowerCase();
|
|
|
|
|
});
|
|
|
|
|
db.sortedSetScores('email:uid', emails, callback);
|
|
|
|
|
};
|
|
|
|
|
|
2016-10-13 11:43:39 +02:00
|
|
|
User.getUsernameByEmail = function (email, callback) {
|
|
|
|
|
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);
|
|
|
|
|
});
|
|
|
|
|
};
|
|
|
|
|
|
2016-10-13 11:43:39 +02: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
|
|
|
|
2016-10-13 16:01:26 -04:00
|
|
|
User.isModeratorOfAnyCategory = function (uid, callback) {
|
2016-10-14 08:56:33 +03:00
|
|
|
User.getModeratedCids(uid, function (err, cids) {
|
|
|
|
|
callback(err, Array.isArray(cids) ? !!cids.length : false);
|
2016-10-13 13:12:38 -04:00
|
|
|
});
|
|
|
|
|
};
|
|
|
|
|
|
2016-10-13 11:43:39 +02: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-10-13 11:43:39 +02:00
|
|
|
User.isGlobalModerator = function (uid, callback) {
|
2016-01-25 13:36:10 +02:00
|
|
|
privileges.users.isGlobalModerator(uid, callback);
|
|
|
|
|
};
|
|
|
|
|
|
2016-10-13 11:43:39 +02:00
|
|
|
User.isAdminOrGlobalMod = function (uid, callback) {
|
2016-02-03 18:21:34 +02:00
|
|
|
async.parallel({
|
|
|
|
|
isAdmin: async.apply(User.isAdministrator, uid),
|
2017-02-17 19:31:21 -07:00
|
|
|
isGlobalMod: async.apply(User.isGlobalModerator, uid),
|
2016-10-13 11:43:39 +02:00
|
|
|
}, function (err, results) {
|
2016-02-03 18:21:34 +02:00
|
|
|
callback(err, results ? (results.isAdmin || results.isGlobalMod) : false);
|
|
|
|
|
});
|
|
|
|
|
};
|
|
|
|
|
|
2016-10-13 11:43:39 +02:00
|
|
|
User.isAdminOrSelf = function (callerUid, uid, callback) {
|
2015-10-09 17:52:55 -04:00
|
|
|
if (parseInt(callerUid, 10) === parseInt(uid, 10)) {
|
|
|
|
|
return callback();
|
|
|
|
|
}
|
2016-10-13 11:43:39 +02:00
|
|
|
User.isAdministrator(callerUid, function (err, isAdmin) {
|
2015-10-09 17:52:55 -04:00
|
|
|
if (err || !isAdmin) {
|
|
|
|
|
return callback(err || new Error('[[error:no-privileges]]'));
|
|
|
|
|
}
|
|
|
|
|
callback();
|
|
|
|
|
});
|
|
|
|
|
};
|
2016-12-28 19:00:14 +00:00
|
|
|
|
|
|
|
|
User.isAdminOrGlobalModOrSelf = function (callerUid, uid, callback) {
|
|
|
|
|
if (parseInt(callerUid, 10) === parseInt(uid, 10)) {
|
|
|
|
|
return callback();
|
|
|
|
|
}
|
|
|
|
|
User.isAdminOrGlobalMod(callerUid, function (err, isAdminOrGlobalMod) {
|
|
|
|
|
if (err || !isAdminOrGlobalMod) {
|
|
|
|
|
return callback(err || new Error('[[error:no-privileges]]'));
|
|
|
|
|
}
|
|
|
|
|
callback();
|
|
|
|
|
});
|
|
|
|
|
};
|
2015-10-09 17:52:55 -04:00
|
|
|
|
2016-10-13 11:43:39 +02:00
|
|
|
User.getAdminsandGlobalMods = function (callback) {
|
2016-09-14 21:06:55 -04:00
|
|
|
async.parallel({
|
|
|
|
|
admins: async.apply(groups.getMembers, 'administrators', 0, -1),
|
2017-02-17 19:31:21 -07:00
|
|
|
mods: async.apply(groups.getMembers, 'Global Moderators', 0, -1),
|
2016-10-13 11:43:39 +02:00
|
|
|
}, function (err, results) {
|
2016-09-14 21:06:55 -04:00
|
|
|
if (err) {
|
|
|
|
|
return callback(err);
|
|
|
|
|
}
|
2016-10-13 11:43:39 +02:00
|
|
|
var uids = results.admins.concat(results.mods).filter(function (uid, index, array) {
|
2016-09-16 00:17:43 +03:00
|
|
|
return uid && array.indexOf(uid) === index;
|
|
|
|
|
});
|
|
|
|
|
User.getUsersData(uids, callback);
|
2016-09-14 21:06:55 -04:00
|
|
|
});
|
|
|
|
|
};
|
|
|
|
|
|
2016-10-13 16:01:26 -04:00
|
|
|
User.getAdminsandGlobalModsandModerators = function (callback) {
|
2016-10-13 13:12:38 -04:00
|
|
|
async.parallel([
|
|
|
|
|
async.apply(groups.getMembers, 'administrators', 0, -1),
|
|
|
|
|
async.apply(groups.getMembers, 'Global Moderators', 0, -1),
|
2017-02-17 19:31:21 -07:00
|
|
|
async.apply(User.getModeratorUids),
|
2016-10-13 16:01:26 -04:00
|
|
|
], function (err, results) {
|
2016-10-13 13:12:38 -04:00
|
|
|
if (err) {
|
|
|
|
|
return callback(err);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
User.getUsersData(_.union.apply(_, results), callback);
|
|
|
|
|
});
|
|
|
|
|
};
|
|
|
|
|
|
2016-10-13 16:01:26 -04:00
|
|
|
User.getModeratorUids = function (callback) {
|
2016-10-13 13:12:38 -04:00
|
|
|
async.waterfall([
|
|
|
|
|
async.apply(db.getSortedSetRange, 'categories:cid', 0, -1),
|
2016-10-13 16:01:26 -04:00
|
|
|
function (cids, next) {
|
|
|
|
|
var groupNames = cids.map(function (cid) {
|
2016-10-13 13:12:38 -04:00
|
|
|
return 'cid:' + cid + ':privileges:mods';
|
|
|
|
|
});
|
|
|
|
|
|
2016-10-13 16:01:26 -04:00
|
|
|
groups.getMembersOfGroups(groupNames, function (err, memberSets) {
|
2016-10-13 13:12:38 -04:00
|
|
|
if (err) {
|
|
|
|
|
return next(err);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
next(null, _.union.apply(_, memberSets));
|
|
|
|
|
});
|
2017-02-17 19:31:21 -07:00
|
|
|
},
|
2016-10-13 13:12:38 -04:00
|
|
|
], callback);
|
|
|
|
|
};
|
|
|
|
|
|
2016-10-14 08:56:33 +03:00
|
|
|
User.getModeratedCids = function (uid, callback) {
|
|
|
|
|
var cids;
|
|
|
|
|
async.waterfall([
|
|
|
|
|
function (next) {
|
|
|
|
|
db.getSortedSetRange('categories:cid', 0, -1, next);
|
|
|
|
|
},
|
|
|
|
|
function (_cids, next) {
|
|
|
|
|
cids = _cids;
|
|
|
|
|
User.isModerator(uid, cids, next);
|
|
|
|
|
},
|
|
|
|
|
function (isMods, next) {
|
|
|
|
|
cids = cids.filter(function (cid, index) {
|
|
|
|
|
return cid && isMods[index];
|
|
|
|
|
});
|
|
|
|
|
next(null, cids);
|
2017-02-17 19:31:21 -07:00
|
|
|
},
|
2016-10-14 08:56:33 +03:00
|
|
|
], callback);
|
|
|
|
|
};
|
|
|
|
|
|
2016-10-13 11:43:39 +02:00
|
|
|
User.addInterstitials = function (callback) {
|
2016-06-22 16:47:24 -04:00
|
|
|
plugins.registerHook('core', {
|
|
|
|
|
hook: 'filter:register.interstitial',
|
2016-10-13 11:43:39 +02:00
|
|
|
method: function (data, callback) {
|
2016-06-22 16:47:24 -04:00
|
|
|
if (meta.config.termsOfUse && !data.userData.acceptTos) {
|
|
|
|
|
data.interstitials.push({
|
|
|
|
|
template: 'partials/acceptTos',
|
|
|
|
|
data: {
|
2017-02-17 19:31:21 -07:00
|
|
|
termsOfUse: meta.config.termsOfUse,
|
2016-06-22 16:47:24 -04:00
|
|
|
},
|
2016-10-13 11:43:39 +02:00
|
|
|
callback: function (userData, formData, next) {
|
2016-06-22 16:47:24 -04:00
|
|
|
if (formData['agree-terms'] === 'on') {
|
|
|
|
|
userData.acceptTos = true;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
next(userData.acceptTos ? null : new Error('[[register:terms_of_use_error]]'));
|
2017-02-17 19:31:21 -07:00
|
|
|
},
|
2016-06-22 16:47:24 -04:00
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
callback(null, data);
|
2017-02-17 19:31:21 -07:00
|
|
|
},
|
2016-06-22 16:47:24 -04:00
|
|
|
});
|
|
|
|
|
|
|
|
|
|
callback();
|
|
|
|
|
};
|
|
|
|
|
|
2014-02-11 23:38:25 -05:00
|
|
|
|
2013-11-30 13:13:18 -05:00
|
|
|
}(exports));
|