mirror of
				https://github.com/NodeBB/NodeBB.git
				synced 2025-10-31 02:55:58 +01:00 
			
		
		
		
	closes #2213
This commit is contained in:
		| @@ -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) { | ||||
|   | ||||
| @@ -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 | ||||
| 		}); | ||||
| 	}); | ||||
| } | ||||
|   | ||||
| @@ -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]]')); | ||||
|   | ||||
| @@ -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); | ||||
|   | ||||
| @@ -17,6 +17,8 @@ | ||||
| 							<li><a href="#" class="admin-user"><i class="fa fa-fw fa-shield"></i> Make Admin</a></li> | ||||
| 							<li><a href="#" class="remove-admin-user"><i class="fa fa-fw fa-ban"></i> Remove Admin</a></li> | ||||
| 							<li class="divider"></li> | ||||
| 							<li><a href="#" class="validate-email"><i class="fa fa-fw fa-check"></i> Validate Email</a></li> | ||||
| 							<li class="divider"></li> | ||||
| 							<li><a href="#" class="ban-user"><i class="fa fa-fw fa-gavel"></i> Ban User</a></li> | ||||
| 							<li><a href="#" class="unban-user"><i class="fa fa-fw fa-comment-o"></i> Unban User</a></li> | ||||
| 							<li><a href="#" class="reset-lockout"><i class="fa fa-fw fa-unlock"></i> Reset Lockout</a></li> | ||||
| @@ -41,11 +43,16 @@ | ||||
| 						<div class="user-image"> | ||||
| 							<img src="{users.picture}" class="img-thumbnail user-selectable"/> | ||||
| 							<div class="labels"> | ||||
| 								<!-- IF requireEmailConfirmation --> | ||||
| 								<!-- IF !users.email:confirmed --> | ||||
| 								<span class="notvalidated label label-danger">Not Validated</span> | ||||
| 								<!-- ENDIF !users.email:confirmed --> | ||||
| 								<!-- ENDIF requireEmailConfirmation --> | ||||
| 								<span class="administrator label label-primary <!-- IF !users.administrator -->hide<!-- ENDIF !users.administrator -->">Admin</span> | ||||
| 								<span class="ban label label-danger <!-- IF !users.banned -->hide<!-- ENDIF !users.banned -->">Banned</span> | ||||
| 							</div> | ||||
| 						</div> | ||||
| 						 | ||||
|  | ||||
| 						<a href="{relative_path}/user/{users.userslug}" target="_blank">{users.username} ({users.uid})</a> | ||||
| 					</div> | ||||
| 					<!-- END users --> | ||||
|   | ||||
		Reference in New Issue
	
	Block a user