From 0a6cfb37c22421499d1f0bec0bf5dcf3cf5d15bc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bar=C4=B1=C5=9F=20Soner=20U=C5=9Fakl=C4=B1?= Date: Tue, 9 Jul 2019 17:30:27 -0400 Subject: [PATCH] feat: #7743, posts/user.js --- src/posts/user.js | 219 ++++++++++++++++++---------------------------- 1 file changed, 85 insertions(+), 134 deletions(-) diff --git a/src/posts/user.js b/src/posts/user.js index 46c86f57ee..922204745b 100644 --- a/src/posts/user.js +++ b/src/posts/user.js @@ -11,163 +11,114 @@ var plugins = require('../plugins'); var privileges = require('../privileges'); module.exports = function (Posts) { - Posts.getUserInfoForPosts = function (uids, uid, callback) { - var groupsMap = {}; - var userData; - var userSettings; - var canUseSignature; + Posts.getUserInfoForPosts = async function (uids, uid) { + const [userData, userSettings, canUseSignature] = await Promise.all([ + getUserData(uids, uid), + user.getMultipleUserSettings(uids), + privileges.global.can('signature', uid), + ]); - async.waterfall([ - function (next) { - async.parallel({ - userData: function (next) { - getUserData(uids, uid, next); - }, - userSettings: function (next) { - user.getMultipleUserSettings(uids, next); - }, - canUseSignature: function (next) { - privileges.global.can('signature', uid, next); - }, - }, next); - }, - function (results, next) { - userData = results.userData; - userSettings = results.userSettings; - canUseSignature = results.canUseSignature; - var groupTitles = userData.map(function (userData) { - return userData && userData.groupTitleArray; - }); - groupTitles = _.uniq(_.flatten(groupTitles)); + var groupTitles = _.uniq(_.flatten(userData.map(u => u && u.groupTitleArray))); + const groupsMap = {}; + const groupsData = await groups.getGroupsData(groupTitles); + groupsData.forEach(function (group) { + if (group && group.userTitleEnabled && !group.hidden) { + groupsMap[group.name] = { + name: group.name, + slug: group.slug, + labelColor: group.labelColor, + textColor: group.textColor, + icon: group.icon, + userTitle: group.userTitle, + }; + } + }); - groups.getGroupsData(groupTitles, next); - }, - function (groupsData, next) { - groupsData.forEach(function (group) { - if (group && group.userTitleEnabled && !group.hidden) { - groupsMap[group.name] = { - name: group.name, - slug: group.slug, - labelColor: group.labelColor, - textColor: group.textColor, - icon: group.icon, - userTitle: group.userTitle, - }; - } - }); + userData.forEach(function (userData, index) { + userData.uid = userData.uid || 0; + userData.username = userData.username || '[[global:guest]]'; + userData.userslug = userData.userslug || ''; + userData.reputation = userData.reputation || 0; + userData.postcount = userData.postcount || 0; + userData.banned = userData.banned === 1; + userData.picture = userData.picture || ''; + userData.status = user.getStatus(userData); + userData.signature = validator.escape(String(userData.signature || '')); + userData.fullname = userSettings[index].showfullname ? validator.escape(String(userData.fullname || '')) : undefined; + userData.selectedGroups = []; - userData.forEach(function (userData, index) { - userData.uid = userData.uid || 0; - userData.username = userData.username || '[[global:guest]]'; - userData.userslug = userData.userslug || ''; - userData.reputation = userData.reputation || 0; - userData.postcount = userData.postcount || 0; - userData.banned = userData.banned === 1; - userData.picture = userData.picture || ''; - userData.status = user.getStatus(userData); - userData.signature = validator.escape(String(userData.signature || '')); - userData.fullname = userSettings[index].showfullname ? validator.escape(String(userData.fullname || '')) : undefined; - userData.selectedGroups = []; + if (meta.config.hideFullname) { + userData.fullname = undefined; + } + }); - if (meta.config.hideFullname) { - userData.fullname = undefined; + return await async.map(userData, async function (userData) { + const results = await async.parallel({ + isMemberOfGroups: function (next) { + if (!Array.isArray(userData.groupTitleArray) || !userData.groupTitleArray.length) { + return next(); } - }); + groups.isMemberOfGroups(userData.uid, userData.groupTitleArray, next); + }, + signature: function (next) { + if (!userData.signature || !canUseSignature || meta.config.disableSignatures) { + userData.signature = ''; + return next(); + } + Posts.parseSignature(userData, uid, next); + }, + customProfileInfo: function (next) { + plugins.fireHook('filter:posts.custom_profile_info', { profile: [], uid: userData.uid }, next); + }, + }); - async.map(userData, function (userData, next) { - async.waterfall([ - function (next) { - async.parallel({ - isMemberOfGroups: function (next) { - if (!Array.isArray(userData.groupTitleArray) || !userData.groupTitleArray.length) { - return next(); - } - groups.isMemberOfGroups(userData.uid, userData.groupTitleArray, next); - }, - signature: function (next) { - if (!userData.signature || !canUseSignature || meta.config.disableSignatures) { - userData.signature = ''; - return next(); - } - Posts.parseSignature(userData, uid, next); - }, - customProfileInfo: function (next) { - plugins.fireHook('filter:posts.custom_profile_info', { profile: [], uid: userData.uid }, next); - }, - }, next); - }, - function (results, next) { - if (results.isMemberOfGroups && userData.groupTitleArray) { - userData.groupTitleArray.forEach(function (userGroup, index) { - if (results.isMemberOfGroups[index] && groupsMap[userGroup]) { - userData.selectedGroups.push(groupsMap[userGroup]); - } - }); - } + if (results.isMemberOfGroups && userData.groupTitleArray) { + userData.groupTitleArray.forEach(function (userGroup, index) { + if (results.isMemberOfGroups[index] && groupsMap[userGroup]) { + userData.selectedGroups.push(groupsMap[userGroup]); + } + }); + } - userData.custom_profile_info = results.customProfileInfo.profile; + userData.custom_profile_info = results.customProfileInfo.profile; - plugins.fireHook('filter:posts.modifyUserInfo', userData, next); - }, - ], next); - }, next); - }, - ], callback); + const result = await plugins.fireHook('filter:posts.modifyUserInfo', userData); + return result; + }); }; - function getUserData(uids, uid, callback) { + async function getUserData(uids, uid) { const fields = [ 'uid', 'username', 'fullname', 'userslug', 'reputation', 'postcount', 'topiccount', 'picture', 'signature', 'banned', 'banned:expire', 'status', 'lastonline', 'groupTitle', ]; - async.waterfall([ - function (next) { - plugins.fireHook('filter:posts.addUserFields', { - fields: fields, - uid: uid, - uids: uids, - }, next); - }, - function (result, next) { - user.getUsersFields(result.uids, _.uniq(result.fields), next); - }, - ], callback); + const result = await plugins.fireHook('filter:posts.addUserFields', { + fields: fields, + uid: uid, + uids: uids, + }); + return await user.getUsersFields(result.uids, _.uniq(result.fields)); } - Posts.isOwner = function (pid, uid, callback) { + Posts.isOwner = async function (pids, uid) { uid = parseInt(uid, 10); - if (Array.isArray(pid)) { - if (uid <= 0) { - return setImmediate(callback, null, pid.map(() => false)); - } - Posts.getPostsFields(pid, ['uid'], function (err, posts) { - if (err) { - return callback(err); - } - posts = posts.map(post => post && post.uid === uid); - callback(null, posts); - }); - } else { - if (uid <= 0) { - return setImmediate(callback, null, false); - } - Posts.getPostField(pid, 'uid', function (err, author) { - callback(err, author === uid); - }); + const isArray = Array.isArray(pids); + pids = isArray ? pids : [pids]; + if (uid <= 0) { + return isArray ? pids.map(() => false) : false; } + const postData = await Posts.getPostsFields(pids, ['uid']); + const result = postData.map(post => post && post.uid === uid); + return isArray ? result : result[0]; }; - Posts.isModerator = function (pids, uid, callback) { + Posts.isModerator = async function (pids, uid) { if (parseInt(uid, 10) <= 0) { - return setImmediate(callback, null, pids.map(() => false)); + return pids.map(() => false); } - Posts.getCidsByPids(pids, function (err, cids) { - if (err) { - return callback(err); - } - user.isModerator(uid, cids, callback); - }); + const cids = await Posts.getCidsByPids(pids); + return await user.isModerator(uid, cids); }; };