little tweak to user search show timing and 10 users, sort after slicing

v1.18.x
Baris Soner Usakli 11 years ago
parent 1d666bf7f0
commit f3bdc55348

@ -127,16 +127,16 @@ define(function() {
foundUserLabel = foundUser.getElementsByTagName('span')[0]; foundUserLabel = foundUser.getElementsByTagName('span')[0];
socket.emit('admin.user.search', searchText, function(err, results) { socket.emit('admin.user.search', searchText, function(err, results) {
if (!err && results && results.length > 0) { if (!err && results && results.users.length > 0) {
var numResults = results.length, var numResults = results.users.length,
resultsSlug = document.createDocumentFragment(), resultsSlug = document.createDocumentFragment(),
x; x;
if (numResults > 4) numResults = 4; if (numResults > 4) numResults = 4;
for (x = 0; x < numResults; x++) { for (x = 0; x < numResults; x++) {
foundUserImg.src = results[x].picture; foundUserImg.src = results.users[x].picture;
foundUserLabel.innerHTML = results[x].username; foundUserLabel.innerHTML = results.users[x].username;
foundUser.setAttribute('title', results[x].username); foundUser.setAttribute('title', results.users[x].username);
foundUser.setAttribute('data-uid', results[x].uid); foundUser.setAttribute('data-uid', results.users[x].uid);
resultsSlug.appendChild(foundUser.cloneNode(true)); resultsSlug.appendChild(foundUser.cloneNode(true));
} }

@ -196,23 +196,23 @@ define(function() {
socket.emit('admin.user.search', username, function(err, data) { socket.emit('admin.user.search', username, function(err, data) {
if(err) { if(err) {
return app.alertError(err.message); return app.alertError(err.message);
}console.log(data) }
var html = templates.prepare(templates['admin/users'].blocks['users']).parse({ var html = templates.prepare(templates['admin/users'].blocks['users']).parse({
users: data users: data.users
}), }),
userListEl = document.querySelector('.users'); userListEl = document.querySelector('.users');
userListEl.innerHTML = html; userListEl.innerHTML = html;
jQuery('.fa-spinner').addClass('none'); jQuery('.fa-spinner').addClass('none');
if (data && data.length === 0) { if (data && data.users.length === 0) {
$('#user-notfound-notify').html('User not found!') $('#user-notfound-notify').html('User not found!')
.show() .show()
.addClass('label-danger') .addClass('label-danger')
.removeClass('label-success'); .removeClass('label-success');
} else { } else {
$('#user-notfound-notify').html(data.length + ' user' + (data.length > 1 ? 's' : '') + ' found!') $('#user-notfound-notify').html(data.users.length + ' user' + (data.users.length > 1 ? 's' : '') + ' found! Search took ' + data.timing + ' ms.')
.show() .show()
.addClass('label-success') .addClass('label-success')
.removeClass('label-danger'); .removeClass('label-danger');

@ -52,6 +52,8 @@ define(function() {
return app.alert(err.message); return app.alert(err.message);
} }
console.log(data);
if (!data) { if (!data) {
$('#user-notfound-notify').html('You need to be logged in to search!'); $('#user-notfound-notify').html('You need to be logged in to search!');
$('#user-notfound-notify').parent().addClass('btn-warning label-warning'); $('#user-notfound-notify').parent().addClass('btn-warning label-warning');
@ -59,18 +61,18 @@ define(function() {
} }
var html = templates.prepare(templates['users'].blocks['users']).parse({ var html = templates.prepare(templates['users'].blocks['users']).parse({
users: data users: data.users
}), }),
userListEl = $('#users-container'); userListEl = $('#users-container');
userListEl.html(html); userListEl.html(html);
if (data && data.length === 0) { if (data && data.users.length === 0) {
$('#user-notfound-notify').html('User not found!'); $('#user-notfound-notify').html('User not found!');
$('#user-notfound-notify').parent().addClass('btn-warning label-warning'); $('#user-notfound-notify').parent().addClass('btn-warning label-warning');
} else { } else {
$('#user-notfound-notify').html(data.length + ' user' + (data.length > 1 ? 's' : '') + ' found!'); $('#user-notfound-notify').html(data.users.length + ' user' + (data.users.length > 1 ? 's' : '') + ' found! Search took ' + data.timing + ' ms.');
$('#user-notfound-notify').parent().addClass('btn-success label-success'); $('#user-notfound-notify').parent().addClass('btn-success label-success');
} }

@ -91,7 +91,7 @@ SocketAdmin.user.search = function(socket, username, callback) {
}); });
} }
async.each(data, isAdmin, function(err) { async.each(data.users, isAdmin, function(err) {
callback(err, data); callback(err, data);
}); });
}); });
@ -126,7 +126,7 @@ SocketAdmin.categories.search = function(socket, data, callback) {
cid = data.cid; cid = data.cid;
user.search(username, function(err, data) { user.search(username, function(err, data) {
async.map(data, function(userObj, next) { async.map(data.users, function(userObj, next) {
CategoryTools.privileges(cid, userObj.uid, function(err, privileges) { CategoryTools.privileges(cid, userObj.uid, function(err, privileges) {
if(err) { if(err) {
return next(err); return next(err);

@ -490,34 +490,36 @@ var bcrypt = require('bcrypt'),
User.search = function(query, callback) { User.search = function(query, callback) {
if (!query || query.length === 0) { if (!query || query.length === 0) {
return callback(null, []); return callback(null, {timing:0, users:[]});
} }
var start = process.hrtime();
// TODO: Have this use db.getObjectKeys (doesn't exist yet)
db.getObject('username:uid', function(err, usernamesHash) { db.getObject('username:uid', function(err, usernamesHash) {
if (err) { if (err) {
return callback(null, []); return callback(null, {timing: 0, users:[]});
} }
query = query.toLowerCase();
var usernames = Object.keys(usernamesHash), var usernames = Object.keys(usernamesHash),
results = []; results = [];
results = usernames.filter(function(username) { // Remove non-matches results = usernames.filter(function(username) {
return username.indexOf(query) === 0; return username.toLowerCase().indexOf(query) === 0;
}).sort(function(a, b) { // Sort alphabetically })
.slice(0, 10)
.sort(function(a, b) {
return a > b; return a > b;
}).slice(0, 5) // Limit 5 })
.map(function(username) { // Translate to uids .map(function(username) {
return usernamesHash[username]; return usernamesHash[username];
}); });
if (results && results.length) { User.getDataForUsers(results, function(userdata) {
User.getDataForUsers(results, function(userdata) { var diff = process.hrtime(start);
callback(null, userdata); var timing = (diff[0] * 1e3 + diff[1] / 1e6).toFixed(1);
}); callback(null, {timing: timing, users: userdata});
} else { });
callback(null, []);
}
}); });
}; };

Loading…
Cancel
Save