mirror of
https://github.com/NodeBB/NodeBB.git
synced 2025-10-30 18:46:01 +01:00
optimized User.getUsers
This commit is contained in:
52
src/user.js
52
src/user.js
@@ -239,36 +239,32 @@ var bcrypt = require('bcryptjs'),
|
||||
};
|
||||
|
||||
User.getUsers = function(uids, callback) {
|
||||
function loadUserInfo(user, callback) {
|
||||
if (!user) {
|
||||
return callback(null, user);
|
||||
async.parallel({
|
||||
userData: function(next) {
|
||||
User.getMultipleUserFields(uids, ['uid', 'username', 'userslug', 'picture', 'status', 'banned', 'postcount', 'reputation'], next);
|
||||
},
|
||||
isAdmin: function(next) {
|
||||
User.isAdministrator(uids, next);
|
||||
},
|
||||
isOnline: function(next) {
|
||||
db.isSortedSetMembers('users:online', uids, next);
|
||||
}
|
||||
|
||||
async.waterfall([
|
||||
function(next) {
|
||||
User.isAdministrator(user.uid, next);
|
||||
},
|
||||
function(isAdmin, next) {
|
||||
user.status = !user.status ? 'online' : user.status;
|
||||
user.administrator = isAdmin;
|
||||
user.banned = parseInt(user.banned, 10) === 1;
|
||||
db.isSortedSetMember('users:online', user.uid, next);
|
||||
},
|
||||
function(isMember, next) {
|
||||
if (!isMember) {
|
||||
user.status = 'offline';
|
||||
}
|
||||
next(null, user);
|
||||
}
|
||||
], callback);
|
||||
}
|
||||
|
||||
User.getMultipleUserFields(uids, ['uid', 'username', 'userslug', 'picture', 'status', 'banned', 'postcount', 'reputation'], function(err, usersData) {
|
||||
}, function(err, results) {
|
||||
if (err) {
|
||||
return callback(err);
|
||||
}
|
||||
|
||||
async.map(usersData, loadUserInfo, callback);
|
||||
results.userData.forEach(function(user, index) {
|
||||
if (!user) {
|
||||
return;
|
||||
}
|
||||
user.status = !user.status ? 'online' : user.status;
|
||||
user.status = !results.isOnline[index] ? 'offline' : user.status;
|
||||
user.administrator = results.isAdmin[index];
|
||||
user.banned = parseInt(user.banned, 10) === 1;
|
||||
});
|
||||
|
||||
callback(err, results.userData);
|
||||
});
|
||||
};
|
||||
|
||||
@@ -410,7 +406,11 @@ var bcrypt = require('bcryptjs'),
|
||||
};
|
||||
|
||||
User.isAdministrator = function(uid, callback) {
|
||||
groups.isMember(uid, 'administrators', callback);
|
||||
if (Array.isArray(uid)) {
|
||||
groups.isMembers(uid, 'administrators', callback);
|
||||
} else {
|
||||
groups.isMember(uid, 'administrators', callback);
|
||||
}
|
||||
};
|
||||
|
||||
User.isOnline = function(uid, callback) {
|
||||
|
||||
Reference in New Issue
Block a user