From ccf58ed40e09336a38a1cce8eb77d351a1adb30f Mon Sep 17 00:00:00 2001 From: barisusakli Date: Mon, 6 Oct 2014 13:11:12 -0400 Subject: [PATCH] closes #2213 --- public/src/forum/admin/manage/users.js | 14 ++++++++++++++ src/controllers/admin/users.js | 6 ++++-- src/socket.io/admin/user.js | 14 ++++++++++++++ src/user.js | 3 ++- src/views/admin/manage/users.tpl | 9 ++++++++- 5 files changed, 42 insertions(+), 4 deletions(-) diff --git a/public/src/forum/admin/manage/users.js b/public/src/forum/admin/manage/users.js index bfbbacb666..70439e5f55 100644 --- a/public/src/forum/admin/manage/users.js +++ b/public/src/forum/admin/manage/users.js @@ -110,6 +110,20 @@ define('forum/admin/manage/users', ['admin/selectable'], function(selectable) { return false; }); + $('.validate-email').on('click', function() { + var uids = getSelectedUids(); + if (!uids.length) { + return; + } + + bootbox.confirm('Do you want to validate email(s) of these user(s)?', function(confirm) { + if (confirm) { + socket.emit('admin.user.validateEmail', uids, done('Emails validated', '.notvalidated', false)); + } + }); + return false; + }); + $('.delete-user').on('click', function() { var uids = getSelectedUids(); if (!uids.length) { diff --git a/src/controllers/admin/users.js b/src/controllers/admin/users.js index 4af06fed33..597e87f16c 100644 --- a/src/controllers/admin/users.js +++ b/src/controllers/admin/users.js @@ -1,6 +1,7 @@ "use strict"; -var user = require('./../../user'); +var user = require('../../user'), + meta = require('../../meta'); var usersController = {}; @@ -38,7 +39,8 @@ function getUsers(set, req, res, next) { search_display: 'hidden', loadmore_display: 'block', users: users, - yourid: req.user.uid + yourid: req.user.uid, + requireEmailConfirmation: parseInt(meta.config.requireEmailConfirmation, 10) === 1 }); }); } diff --git a/src/socket.io/admin/user.js b/src/socket.io/admin/user.js index a9459e81cc..0647b1397b 100644 --- a/src/socket.io/admin/user.js +++ b/src/socket.io/admin/user.js @@ -104,6 +104,20 @@ User.resetLockouts = function(socket, uids, callback) { async.each(uids, user.auth.resetLockout, callback); }; +User.validateEmail = function(socket, uids, callback) { + if (!Array.isArray(uids)) { + return callback(new Error('[[error:invalid-data]]')); + } + + uids = uids.filter(function(uid) { + return parseInt(uid, 10); + }); + + async.each(uids, function(uid, next) { + user.setUserField(uid, 'email:confirmed', 1, next); + }, callback); +}; + User.deleteUsers = function(socket, uids, callback) { if(!Array.isArray(uids)) { return callback(new Error('[[error:invalid-data]]')); diff --git a/src/user.js b/src/user.js index c5373a9d6c..62259f90ee 100644 --- a/src/user.js +++ b/src/user.js @@ -241,7 +241,7 @@ var async = require('async'), User.getUsers = function(uids, callback) { async.parallel({ userData: function(next) { - User.getMultipleUserFields(uids, ['uid', 'username', 'userslug', 'picture', 'status', 'banned', 'postcount', 'reputation'], next); + User.getMultipleUserFields(uids, ['uid', 'username', 'userslug', 'picture', 'status', 'banned', 'postcount', 'reputation', 'email:confirmed'], next); }, isAdmin: function(next) { User.isAdministrator(uids, next); @@ -262,6 +262,7 @@ var async = require('async'), user.status = !results.isOnline[index] ? 'offline' : user.status; user.administrator = results.isAdmin[index]; user.banned = parseInt(user.banned, 10) === 1; + user['email:confirmed'] = parseInt(user['email:confirmed'], 10) === 1; }); callback(err, results.userData); diff --git a/src/views/admin/manage/users.tpl b/src/views/admin/manage/users.tpl index b5b372beeb..056ae48ad7 100644 --- a/src/views/admin/manage/users.tpl +++ b/src/views/admin/manage/users.tpl @@ -17,6 +17,8 @@
  • Make Admin
  • Remove Admin
  • +
  • Validate Email
  • +
  • Ban User
  • Unban User
  • Reset Lockout
  • @@ -41,11 +43,16 @@
    + + + Not Validated + + Admin Banned
    - + {users.username} ({users.uid})