From 8afcf44732825e9069ce7c32e037984bda90e910 Mon Sep 17 00:00:00 2001 From: barisusakli Date: Sun, 4 May 2014 17:26:56 -0400 Subject: [PATCH] gravatars will be generated on demand changing the setting in ACP will affect all default gravatars now. --- src/posts.js | 2 +- src/routes/authentication.js | 3 +- src/topics.js | 9 ++-- src/user.js | 93 +++++++++++++++++++++++------------- src/user/profile.js | 2 +- 5 files changed, 69 insertions(+), 40 deletions(-) diff --git a/src/posts.js b/src/posts.js index 8a90b0d9d8..5236ce1118 100644 --- a/src/posts.js +++ b/src/posts.js @@ -283,7 +283,7 @@ var db = require('./database'), async.parallel({ user: function(next) { - user.getNameSlugPicture(post.uid, next); + user.getUserFields(post.uid, ['username', 'userslug', 'picture'], next); }, topicCategory: function(next) { topics.getTopicFields(post.tid, ['title', 'cid', 'slug', 'deleted'], function(err, topicData) { diff --git a/src/routes/authentication.js b/src/routes/authentication.js index 59896ca2b3..e557c49e83 100644 --- a/src/routes/authentication.js +++ b/src/routes/authentication.js @@ -10,6 +10,7 @@ meta = require('./../meta'), user = require('./../user'), plugins = require('./../plugins'), + db = require('../database'), utils = require('./../../public/src/utils'), login_strategies = []; @@ -174,7 +175,7 @@ return next(null, false, '[[error:no-user]]'); } - user.getUserFields(uid, ['password', 'banned'], function(err, userData) { + db.getObjectFields('user:' + uid, ['password', 'banned'], function(err, userData) { if (err) { return next(err); } diff --git a/src/topics.js b/src/topics.js index 63e2da86a7..37f5062df6 100644 --- a/src/topics.js +++ b/src/topics.js @@ -62,13 +62,13 @@ var async = require('async'), return callback(err || new Error('[[error:no-topic]]')); } - user.getNameSlugPicture(topic.uid, function(err, userData) { + user.getUserFields(topic.uid, ['username', 'userslug', 'picture'], function(err, userData) { if (err) { return callback(err); } topic.user = userData; - callback(err, topic); + callback(null, topic); }); }); }; @@ -211,8 +211,7 @@ var async = require('async'), if (userCache[topicData.uid]) { return next(null, userCache[topicData.uid]); } - - user.getNameSlugPicture(topicData.uid, next); + user.getUserFields(topicData.uid, ['username', 'userslug', 'picture'], next); } }, function(err, topicInfo) { if(err) { @@ -325,7 +324,7 @@ var async = require('async'), return callback(new Error('[[error:no-teaser]]')); } - user.getNameSlugPicture(postData.uid, function(err, userData) { + user.getUserFields(postData.uid, ['username', 'userslug', 'picture'], function(err, userData) { if (err) { return callback(err); } diff --git a/src/user.js b/src/user.js index a0eb7ed1c8..5d63582235 100644 --- a/src/user.js +++ b/src/user.js @@ -33,14 +33,25 @@ var bcrypt = require('bcryptjs'), require('./user/jobs')(User); User.getUserField = function(uid, field, callback) { - db.getObjectField('user:' + uid, field, callback); + User.getUserFields(uid, [field], function(err, user) { + callback(err, user ? user[field] : null); + }); }; User.getUserFields = function(uid, fields, callback) { - db.getObjectFields('user:' + uid, fields, callback); + User.getMultipleUserFields([uid], fields, function(err, users) { + callback(err, users ? users[0] : null); + }); }; User.getMultipleUserFields = function(uids, fields, callback) { + var fieldsToRemove = []; + function addField(field) { + if (fields.indexOf(field) === -1) { + fields.push(field); + fieldsToRemove.push(field); + } + } if (!Array.isArray(uids) || !uids.length) { return callback(null, []); @@ -50,7 +61,21 @@ var bcrypt = require('bcryptjs'), return 'user:' + uid; }); - db.getObjectsFields(keys, fields, callback); + addField('uid'); + + if (fields.indexOf('picture') !== -1) { + addField('email'); + addField('gravatarpicture'); + addField('uploadedpicture'); + } + + db.getObjectsFields(keys, fields, function(err, users) { + if (err) { + return callback(err); + } + + callback(null, modifyUserData(users, fieldsToRemove)); + }); }; User.getUserData = function(uid, callback) { @@ -74,24 +99,42 @@ var bcrypt = require('bcryptjs'), return callback(err); } - users.forEach(function(user) { - if (user) { - if (user.password) { - user.password = null; - user.hasPassword = true; - } else { - user.hasPassword = false; - } + callback(null, modifyUserData(users, [])); + }); + }; - if (user.picture === user.uploadedpicture) { - user.picture = nconf.get('relative_path') + user.picture; - } + function modifyUserData(users, fieldsToRemove) { + users.forEach(function(user) { + if (!user) { + return; + } + + user.hasPassword = !!user.password; + if (user.password) { + user.password = null; + } + + if (parseInt(user.uid, 10) === 0) { + user.username = '[[global:guest]]'; + user.userslug = ''; + } + + if (user.picture) { + if (user.picture === user.uploadedpicture) { + user.picture = nconf.get('relative_path') + user.picture; + } else { + user.picture = User.createGravatarURLFromEmail(user.email); } - }); + } else { + user.picture = User.createGravatarURLFromEmail(''); + } - callback(null, users); + for(var i=0; i