diff --git a/public/language/en-GB/admin/manage/users.json b/public/language/en-GB/admin/manage/users.json
index f1651a814b..5b68fcdc91 100644
--- a/public/language/en-GB/admin/manage/users.json
+++ b/public/language/en-GB/admin/manage/users.json
@@ -27,6 +27,8 @@
"pills.banned": "Banned",
"pills.search": "User Search",
+ "search.uid": "By User ID",
+ "search.uid-placeholder": "Enter a user ID to search",
"search.username": "By User Name",
"search.username-placeholder": "Enter a username to search",
"search.email": "By Email",
diff --git a/public/src/admin/manage/users.js b/public/src/admin/manage/users.js
index 8c22a65720..b6c7b7aa03 100644
--- a/public/src/admin/manage/users.js
+++ b/public/src/admin/manage/users.js
@@ -306,7 +306,7 @@ define('admin/manage/users', ['translator', 'benchpress'], function (translator,
var timeoutId = 0;
- $('#search-user-name, #search-user-email, #search-user-ip').on('keyup', function () {
+ $('#search-user-uid, #search-user-name, #search-user-email, #search-user-ip').on('keyup', function () {
if (timeoutId !== 0) {
clearTimeout(timeoutId);
timeoutId = 0;
diff --git a/src/socket.io/admin/user.js b/src/socket.io/admin/user.js
index 3fb4dfb9ff..d8d9a0f282 100644
--- a/src/socket.io/admin/user.js
+++ b/src/socket.io/admin/user.js
@@ -183,7 +183,11 @@ User.search = function (socket, data, callback) {
var searchData;
async.waterfall([
function (next) {
- user.search({ query: data.query, searchBy: data.searchBy, uid: socket.uid }, next);
+ user.search({
+ query: data.query,
+ searchBy: data.searchBy,
+ uid: socket.uid,
+ }, next);
},
function (_searchData, next) {
searchData = _searchData;
diff --git a/src/user/search.js b/src/user/search.js
index 37549232cd..198b027266 100644
--- a/src/user/search.js
+++ b/src/user/search.js
@@ -14,17 +14,19 @@ module.exports = function (User) {
var uid = data.uid || 0;
var paginate = data.hasOwnProperty('paginate') ? data.paginate : true;
- if (searchBy === 'ip') {
- return searchByIP(query, uid, callback);
- }
-
var startTime = process.hrtime();
var searchResult = {};
async.waterfall([
function (next) {
- var searchMethod = data.findUids || findUids;
- searchMethod(query, searchBy, data.hardCap, next);
+ if (searchBy === 'ip') {
+ searchByIP(query, next);
+ } else if (searchBy === 'uid') {
+ next(null, [query]);
+ } else {
+ var searchMethod = data.findUids || findUids;
+ searchMethod(query, searchBy, data.hardCap, next);
+ }
},
function (uids, next) {
filterAndSortUids(uids, data, next);
@@ -153,20 +155,7 @@ module.exports = function (User) {
}
}
- function searchByIP(ip, uid, callback) {
- var start = process.hrtime();
- async.waterfall([
- function (next) {
- db.getSortedSetRevRange('ip:' + ip + ':uid', 0, -1, next);
- },
- function (uids, next) {
- User.getUsers(uids, uid, next);
- },
- function (users, next) {
- var diff = process.hrtime(start);
- var timing = ((diff[0] * 1e3) + (diff[1] / 1e6)).toFixed(1);
- next(null, { timing: timing, users: users });
- },
- ], callback);
+ function searchByIP(ip, callback) {
+ db.getSortedSetRevRange('ip:' + ip + ':uid', 0, -1, callback);
}
};
diff --git a/src/views/admin/manage/users.tpl b/src/views/admin/manage/users.tpl
index bebded1a5e..3eca4f998d 100644
--- a/src/views/admin/manage/users.tpl
+++ b/src/views/admin/manage/users.tpl
@@ -49,6 +49,9 @@