diff --git a/public/templates/admin/header.tpl b/public/templates/admin/header.tpl
index 065996d200..21ef16da22 100644
--- a/public/templates/admin/header.tpl
+++ b/public/templates/admin/header.tpl
@@ -63,7 +63,7 @@
Home
Categories
- Users
+ Users
Topics
Themes
Settings
diff --git a/public/templates/admin/users.tpl b/public/templates/admin/users.tpl
index 8251eeef48..1b900b9255 100644
--- a/public/templates/admin/users.tpl
+++ b/public/templates/admin/users.tpl
@@ -1,7 +1,7 @@
Users
- - Latest Users
+ - Latest Users
- Top Posters
- Most Reputation
- Search
@@ -14,7 +14,7 @@
-
+
@@ -30,7 +30,11 @@
+
+
@@ -58,9 +62,19 @@
}
});
+ function isUserAdmin(element) {
+ var parent = $(element).parents('.users-box');
+ return (parent.attr('data-admin') !== "0");
+ }
+
+ function getUID(element) {
+ var parent = $(element).parents('.users-box');
+ return parent.attr('data-uid');
+ }
+
jQuery('.admin-btn').each(function(index, element) {
var adminBtn = $(element);
- var isAdmin = adminBtn.attr('data-admin') !== "0";
+ var isAdmin = isUserAdmin(adminBtn);
if(isAdmin)
adminBtn.addClass('btn-success');
@@ -69,30 +83,56 @@
});
+ jQuery('.delete-btn').each(function(index, element) {
+ var deleteBtn = $(element);
+ var isAdmin = isUserAdmin(deleteBtn);
+
+ if(isAdmin)
+ deleteBtn.addClass('disabled');
+ else
+ deleteBtn.show();
+ });
+
jQuery('.admin-btn').on('click', function() {
var adminBtn = $(this);
- var isAdmin = adminBtn.attr('data-admin') !== "0";
+ var isAdmin = isUserAdmin(adminBtn);
var parent = adminBtn.parents('.users-box');
-
- var uid = parent.attr('data-uid');
+ var uid = getUID(adminBtn);
if(isAdmin) {
socket.emit('api:admin.user.removeAdmin', uid);
adminBtn.removeClass('btn-success');
- adminBtn.attr('data-admin', 0);
+ parent.find('.delete-btn').removeClass('disabled');
+ parent.attr('data-admin', 0);
}
else {
- bootbox.confirm('Do you really want to make "' + adminBtn.attr('data-username') +'" an admin?', function(confirm) {
+ bootbox.confirm('Do you really want to make "' + parent.attr('data-username') +'" an admin?', function(confirm) {
if(confirm) {
socket.emit('api:admin.user.makeAdmin', uid);
adminBtn.addClass('btn-success');
- adminBtn.attr('data-admin', 1);
+ parent.find('.delete-btn').addClass('disabled');
+ parent.attr('data-admin', 1);
}
});
}
return false;
});
+
+ jQuery('.delete-btn').on('click', function() {
+ var deleteBtn = $(this);
+ var isAdmin = isUserAdmin(deleteBtn);
+ var parent = deleteBtn.parents('.users-box');
+ var uid = getUID(deleteBtn);
+
+ if(!isAdmin) {
+ bootbox.confirm('Do you really want to delete "' + parent.attr('data-username') +'"?', function(confirm) {
+ socket.emit('api:admin.user.deleteUser', uid);
+ });
+ }
+
+ return false;
+ });
});
diff --git a/src/admin/user.js b/src/admin/user.js
index 473fb0634c..f6c90725e9 100644
--- a/src/admin/user.js
+++ b/src/admin/user.js
@@ -35,5 +35,25 @@ var RDB = require('./../redis.js'),
});
};
+ UserAdmin.deleteUser = function(uid, theirid, socket) {
+ user.isAdministrator(uid, function(amIAdmin) {
+ user.isAdministrator(theirid, function(areTheyAdmin){
+ if(amIAdmin && !areTheyAdmin) {
+ user.delete(theirid, function(data) {
+
+ socket.emit('event:alert', {
+ title: 'User Deleted',
+ message: 'This user is deleted!',
+ type: 'success',
+ timeout: 2000
+ });
+ });
+ }
+ });
+
+
+ });
+ };
+
}(exports));
diff --git a/src/routes/admin.js b/src/routes/admin.js
index b40ec0b9d9..6074ee3bad 100644
--- a/src/routes/admin.js
+++ b/src/routes/admin.js
@@ -40,8 +40,33 @@ var user = require('./../user.js'),
case 'users' :
if (req.params.tab == 'search') {
res.json({search_display: 'block', users: []});
- } else {
- user.getUserList(function(data){
+ }
+ else if(req.params.tab == 'latest') {
+ user.getUserList(function(data) {
+ data = data.sort(function(a, b) {
+ return b.joindate - a.joindate;
+ });
+ res.json({search_display: 'none', users:data, yourid:req.user.uid});
+ });
+ }
+ else if(req.params.tab == 'sort-posts') {
+ user.getUserList(function(data) {
+ data = data.sort(function(a, b) {
+ return b.postcount - a.postcount;
+ });
+ res.json({search_display: 'none', users:data, yourid:req.user.uid});
+ });
+ }
+ else if(req.params.tab == 'sort-reputation') {
+ user.getUserList(function(data) {
+ data = data.sort(function(a, b) {
+ return b.reputation - a.reputation;
+ });
+ res.json({search_display: 'none', users:data, yourid:req.user.uid});
+ });
+ }
+ else {
+ user.getUserList(function(data) {
res.json({search_display: 'none', users:data, yourid:req.user.uid});
});
}
diff --git a/src/websockets.js b/src/websockets.js
index c7577c820a..4c4ba1508c 100644
--- a/src/websockets.js
+++ b/src/websockets.js
@@ -425,6 +425,12 @@ var SocketIO = require('socket.io').listen(global.server, { log:false }),
admin.user.removeAdmin(uid, theirid, socket);
}
});
+
+ socket.on('api:admin.user.deleteUser', function(theirid) {
+ if(uid && uid > 0) {
+ admin.user.deleteUser(uid, theirid, socket);
+ }
+ });
});
}(SocketIO));