From 2a66aad0783ede0f346c1c2db25a6ab65786eb6c Mon Sep 17 00:00:00 2001 From: barisusakli Date: Tue, 13 Jan 2015 12:02:08 -0500 Subject: [PATCH] ability to add extra fields to user data, new hook filter:user.addFields --- src/user.js | 51 ++++++++++++++++++++++++++++++--------------------- 1 file changed, 30 insertions(+), 21 deletions(-) diff --git a/src/user.js b/src/user.js index e61dc00f72..a640b946d7 100644 --- a/src/user.js +++ b/src/user.js @@ -217,32 +217,41 @@ var async = require('async'), }; User.getUsers = function(uids, callback) { - async.parallel({ - userData: function(next) { - User.getMultipleUserFields(uids, ['uid', 'username', 'userslug', 'picture', 'status', 'banned', 'postcount', 'reputation', 'email:confirmed'], next); - }, - isAdmin: function(next) { - User.isAdministrator(uids, next); - }, - isOnline: function(next) { - require('./socket.io').isUsersOnline(uids, next); - } - }, function(err, results) { + var fields = ['uid', 'username', 'userslug', 'picture', 'status', 'banned', 'postcount', 'reputation', 'email:confirmed']; + plugins.fireHook('filter:users.addFields', {fields: fields}, function(err, data) { if (err) { return callback(err); } - - results.userData.forEach(function(user, index) { - if (!user) { - return; - } - user.status = User.getStatus(user.status, results.isOnline[index]); - user.administrator = results.isAdmin[index]; - user.banned = parseInt(user.banned, 10) === 1; - user['email:confirmed'] = parseInt(user['email:confirmed'], 10) === 1; + data.fields = data.fields.filter(function(field, index, array) { + return array.indexOf(field) === index; }); + async.parallel({ + userData: function(next) { + User.getMultipleUserFields(uids, data.fields, next); + }, + isAdmin: function(next) { + User.isAdministrator(uids, next); + }, + isOnline: function(next) { + require('./socket.io').isUsersOnline(uids, next); + } + }, function(err, results) { + if (err) { + return callback(err); + } - callback(null, results.userData); + results.userData.forEach(function(user, index) { + if (!user) { + return; + } + user.status = User.getStatus(user.status, results.isOnline[index]); + user.administrator = results.isAdmin[index]; + user.banned = parseInt(user.banned, 10) === 1; + user['email:confirmed'] = parseInt(user['email:confirmed'], 10) === 1; + }); + + callback(null, results.userData); + }); }); };