mirror of
https://github.com/NodeBB/NodeBB.git
synced 2025-10-30 02:25:55 +01:00
closes #2440
This commit is contained in:
@@ -215,18 +215,18 @@ define('admin/manage/users', ['admin/modules/selectable'], function(selectable)
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
$('#search-user').on('keyup', function() {
|
$('#search-user-name, #search-user-email').on('keyup', function() {
|
||||||
if (timeoutId !== 0) {
|
if (timeoutId !== 0) {
|
||||||
clearTimeout(timeoutId);
|
clearTimeout(timeoutId);
|
||||||
timeoutId = 0;
|
timeoutId = 0;
|
||||||
}
|
}
|
||||||
|
var $this = $(this);
|
||||||
|
var type = $this.attr('id') === 'search-user-name' ? 'username' : 'email';
|
||||||
|
|
||||||
timeoutId = setTimeout(function() {
|
timeoutId = setTimeout(function() {
|
||||||
var username = $('#search-user').val();
|
|
||||||
|
|
||||||
$('.fa-spinner').removeClass('hidden');
|
$('.fa-spinner').removeClass('hidden');
|
||||||
|
|
||||||
socket.emit('admin.user.search', username, function(err, data) {
|
socket.emit('admin.user.search', {type: type, query: $this.val()}, function(err, data) {
|
||||||
if (err) {
|
if (err) {
|
||||||
return app.alertError(err.message);
|
return app.alertError(err.message);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -36,7 +36,7 @@ Categories.search = function(socket, data, callback) {
|
|||||||
var username = data.username,
|
var username = data.username,
|
||||||
cid = data.cid;
|
cid = data.cid;
|
||||||
|
|
||||||
user.search(username, function(err, data) {
|
user.search(username, 'username', function(err, data) {
|
||||||
if (err) {
|
if (err) {
|
||||||
return callback(err);
|
return callback(err);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -165,15 +165,15 @@ User.deleteUsers = function(socket, uids, callback) {
|
|||||||
}, callback);
|
}, callback);
|
||||||
};
|
};
|
||||||
|
|
||||||
User.search = function(socket, username, callback) {
|
User.search = function(socket, data, callback) {
|
||||||
user.search(username, function(err, data) {
|
user.search(data.query, data.type, function(err, data) {
|
||||||
function isAdmin(userData, next) {
|
function getEmail(userData, next) {
|
||||||
user.isAdministrator(userData.uid, function(err, isAdmin) {
|
user.getUserField(userData.uid, 'email', function(err, email) {
|
||||||
if (err) {
|
if (err) {
|
||||||
return next(err);
|
return next(err);
|
||||||
}
|
}
|
||||||
|
|
||||||
userData.administrator = isAdmin;
|
userData.email = email;
|
||||||
next();
|
next();
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@@ -182,7 +182,7 @@ User.search = function(socket, username, callback) {
|
|||||||
return callback(err);
|
return callback(err);
|
||||||
}
|
}
|
||||||
|
|
||||||
async.each(data.users, isAdmin, function(err) {
|
async.each(data.users, getEmail, function(err) {
|
||||||
callback(err, data);
|
callback(err, data);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -66,7 +66,7 @@ SocketUser.search = function(socket, username, callback) {
|
|||||||
if (!socket.uid) {
|
if (!socket.uid) {
|
||||||
return callback(new Error('[[error:not-logged-in]]'));
|
return callback(new Error('[[error:not-logged-in]]'));
|
||||||
}
|
}
|
||||||
user.search(username, callback);
|
user.search(username, 'username', callback);
|
||||||
};
|
};
|
||||||
|
|
||||||
// Password Reset
|
// Password Reset
|
||||||
|
|||||||
@@ -1,28 +1,34 @@
|
|||||||
|
|
||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
var db = require('./../database');
|
var db = require('../database');
|
||||||
|
|
||||||
module.exports = function(User) {
|
module.exports = function(User) {
|
||||||
User.search = function(query, callback) {
|
|
||||||
|
User.search = function(query, type, callback) {
|
||||||
if (!query || query.length === 0) {
|
if (!query || query.length === 0) {
|
||||||
return callback(null, {timing:0, users:[]});
|
return callback(null, {timing:0, users:[]});
|
||||||
}
|
}
|
||||||
var start = process.hrtime();
|
var start = process.hrtime();
|
||||||
|
|
||||||
db.getObject('username:uid', function(err, usernamesHash) {
|
var set = 'username:uid';
|
||||||
|
if (type === 'email') {
|
||||||
|
set = 'email:uid';
|
||||||
|
}
|
||||||
|
|
||||||
|
db.getObject(set, function(err, hash) {
|
||||||
if (err) {
|
if (err) {
|
||||||
return callback(null, {timing: 0, users:[]});
|
return callback(null, {timing: 0, users:[]});
|
||||||
}
|
}
|
||||||
|
|
||||||
query = query.toLowerCase();
|
query = query.toLowerCase();
|
||||||
|
|
||||||
var usernames = Object.keys(usernamesHash);
|
var values = Object.keys(hash);
|
||||||
var uids = [];
|
var uids = [];
|
||||||
|
|
||||||
for(var i=0; i<usernames.length; ++i) {
|
for(var i=0; i<values.length; ++i) {
|
||||||
if (usernames[i].toLowerCase().indexOf(query) === 0) {
|
if (values[i].toLowerCase().indexOf(query) === 0) {
|
||||||
uids.push(usernames[i]);
|
uids.push(values[i]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -31,7 +37,7 @@ module.exports = function(User) {
|
|||||||
return a > b;
|
return a > b;
|
||||||
})
|
})
|
||||||
.map(function(username) {
|
.map(function(username) {
|
||||||
return usernamesHash[username];
|
return hash[username];
|
||||||
});
|
});
|
||||||
|
|
||||||
User.getUsers(uids, function(err, userdata) {
|
User.getUsers(uids, function(err, userdata) {
|
||||||
|
|||||||
@@ -32,9 +32,16 @@
|
|||||||
<br />
|
<br />
|
||||||
|
|
||||||
<div class="search {search_display} well">
|
<div class="search {search_display} well">
|
||||||
<input class="form-control" id="search-user" type="text" placeholder="Enter a username to search"/><br />
|
<label>By User Name</label>
|
||||||
|
<input class="form-control" id="search-user-name" type="text" placeholder="Enter a username to search"/><br />
|
||||||
|
|
||||||
|
<label>By Email </label>
|
||||||
|
<input class="form-control" id="search-user-email" type="text" placeholder="Enter a email to search"/><br />
|
||||||
|
|
||||||
<i class="fa fa-spinner fa-spin hidden"></i>
|
<i class="fa fa-spinner fa-spin hidden"></i>
|
||||||
<span id="user-notfound-notify" class="label label-danger hide">User not found!</span><br/>
|
<span id="user-notfound-notify" class="label label-danger hide">User not found!</span><br/>
|
||||||
|
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
||||||
@@ -54,7 +61,10 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<a href="{relative_path}/user/{users.userslug}" target="_blank">{users.username} ({users.uid})</a>
|
<a href="{relative_path}/user/{users.userslug}" target="_blank">{users.username} ({users.uid})</a><br/>
|
||||||
|
<!-- IF users.email -->
|
||||||
|
<small><span title="{users.email}">{users.email}</span></small>
|
||||||
|
<!-- ENDIF users.email -->
|
||||||
</div>
|
</div>
|
||||||
<!-- END users -->
|
<!-- END users -->
|
||||||
</ul>
|
</ul>
|
||||||
|
|||||||
Reference in New Issue
Block a user