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; | 			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() { | 		$('.delete-user').on('click', function() { | ||||||
| 			var uids = getSelectedUids(); | 			var uids = getSelectedUids(); | ||||||
| 			if (!uids.length) { | 			if (!uids.length) { | ||||||
|   | |||||||
| @@ -1,6 +1,7 @@ | |||||||
| "use strict"; | "use strict"; | ||||||
|  |  | ||||||
| var user = require('./../../user'); | var user = require('../../user'), | ||||||
|  | 	meta = require('../../meta'); | ||||||
|  |  | ||||||
|  |  | ||||||
| var usersController = {}; | var usersController = {}; | ||||||
| @@ -38,7 +39,8 @@ function getUsers(set, req, res, next) { | |||||||
| 			search_display: 'hidden', | 			search_display: 'hidden', | ||||||
| 			loadmore_display: 'block', | 			loadmore_display: 'block', | ||||||
| 			users: users, | 			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); | 	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) { | User.deleteUsers = function(socket, uids, callback) { | ||||||
| 	if(!Array.isArray(uids)) { | 	if(!Array.isArray(uids)) { | ||||||
| 		return callback(new Error('[[error:invalid-data]]')); | 		return callback(new Error('[[error:invalid-data]]')); | ||||||
|   | |||||||
| @@ -241,7 +241,7 @@ var	async = require('async'), | |||||||
| 	User.getUsers = function(uids, callback) { | 	User.getUsers = function(uids, callback) { | ||||||
| 		async.parallel({ | 		async.parallel({ | ||||||
| 			userData: function(next) { | 			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) { | 			isAdmin: function(next) { | ||||||
| 				User.isAdministrator(uids, next); | 				User.isAdministrator(uids, next); | ||||||
| @@ -262,6 +262,7 @@ var	async = require('async'), | |||||||
| 				user.status = !results.isOnline[index] ? 'offline' : user.status; | 				user.status = !results.isOnline[index] ? 'offline' : user.status; | ||||||
| 				user.administrator = results.isAdmin[index]; | 				user.administrator = results.isAdmin[index]; | ||||||
| 				user.banned = parseInt(user.banned, 10) === 1; | 				user.banned = parseInt(user.banned, 10) === 1; | ||||||
|  | 				user['email:confirmed'] = parseInt(user['email:confirmed'], 10) === 1; | ||||||
| 			}); | 			}); | ||||||
|  |  | ||||||
| 			callback(err, results.userData); | 			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="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><a href="#" class="remove-admin-user"><i class="fa fa-fw fa-ban"></i> Remove Admin</a></li> | ||||||
| 							<li class="divider"></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="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="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> | 							<li><a href="#" class="reset-lockout"><i class="fa fa-fw fa-unlock"></i> Reset Lockout</a></li> | ||||||
| @@ -41,6 +43,11 @@ | |||||||
| 						<div class="user-image"> | 						<div class="user-image"> | ||||||
| 							<img src="{users.picture}" class="img-thumbnail user-selectable"/> | 							<img src="{users.picture}" class="img-thumbnail user-selectable"/> | ||||||
| 							<div class="labels"> | 							<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="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> | 								<span class="ban label label-danger <!-- IF !users.banned -->hide<!-- ENDIF !users.banned -->">Banned</span> | ||||||
| 							</div> | 							</div> | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user