diff --git a/public/src/forum/admin/users.js b/public/src/forum/admin/users.js index 44504f021c..32a0649146 100644 --- a/public/src/forum/admin/users.js +++ b/public/src/forum/admin/users.js @@ -64,6 +64,39 @@ define(function() { }); } + function handleUserCreate() { + $('#createUser').on('click', function() { + $('#create-modal').modal('show'); + }); + + $('#create-modal-go').on('click', function() { + var username = $('#create-user-name').val(), + email = $('#create-user-email').val(), + password = $('#create-user-password').val(), + passwordAgain = $('#create-user-password-again').val(), + errorEl = $('#create-modal-error'); + + if(password !== passwordAgain) { + return errorEl.html('<strong>Error</strong><p>Passwords must match!</p>').removeClass('hide'); + } + + var user = { + username: username, + email: email, + password: password + }; + + socket.emit('api:admin.user.createUser', user, function(err, data) { + if(err) { + return errorEl.html('<strong>Error</strong><p>' + err + '</p>').removeClass('hide'); + } + $('#create-modal').modal('hide'); + app.alert(); + }); + + }); + } + jQuery('document').ready(function() { @@ -99,6 +132,8 @@ define(function() { initUsers(); + handleUserCreate(); + socket.removeAllListeners('api:admin.user.search'); socket.on('api:admin.user.search', function(data) { diff --git a/public/src/forum/register.js b/public/src/forum/register.js index d4b1781134..65c698c263 100644 --- a/public/src/forum/register.js +++ b/public/src/forum/register.js @@ -41,10 +41,11 @@ define(function() { if (!utils.isEmailValid(emailEl.val())) { showError(email_notify, 'Invalid email address.'); - } else + } else { socket.emit('user.email.exists', { email: emailEl.val() }); + } } emailEl.on('blur', function() { diff --git a/public/templates/admin/users.tpl b/public/templates/admin/users.tpl index e0909de9be..b2507828d3 100644 --- a/public/templates/admin/users.tpl +++ b/public/templates/admin/users.tpl @@ -1,4 +1,6 @@ <h1>Users</h1> + +<button id="createUser" class="btn btn-primary">Create User</button> <hr /> <ul class="nav nav-pills"> <li class='active'><a href='/admin/users/latest'>Latest Users</a></li> @@ -38,6 +40,47 @@ <!-- END users --> </ul> +<div class="modal fade" id="create-modal"> + <div class="modal-dialog"> + <div class="modal-content"> + <div class="modal-header"> + <button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button> + <h4 class="modal-title">Create User</h4> + </div> + <div class="modal-body"> + <div class="alert alert-danger hide" id="create-modal-error"></div> + <form> + <div class="form-group"> + <label for="group-name">User Name</label> + <input type="text" class="form-control" id="create-user-name" placeholder="User Name" /> + </div> + <div class="form-group"> + <label for="group-name">Email</label> + <input type="text" class="form-control" id="create-user-email" placeholder="Email of this user" /> + </div> + + <div class="form-group"> + <label for="group-name">Password</label> + <input type="password" class="form-control" id="create-user-password" placeholder="Password" /> + </div> + + <div class="form-group"> + <label for="group-name">Password Confirm</label> + <input type="password" class="form-control" id="create-user-password-again" placeholder="Password" /> + </div> + + </form> + </div> + <div class="modal-footer"> + <button type="button" class="btn btn-default" data-dismiss="modal">Close</button> + <button type="button" class="btn btn-primary" id="create-modal-go">Create</button> + </div> + </div> + </div> +</div> + + + <div class="text-center {loadmore_display}"> <button id="load-more-users-btn" class="btn btn-primary">Load More</button> </div> diff --git a/src/admin/user.js b/src/admin/user.js index 0f37d8590e..8e754ab1a4 100644 --- a/src/admin/user.js +++ b/src/admin/user.js @@ -4,6 +4,21 @@ var utils = require('../../public/src/utils'), (function(UserAdmin) { + UserAdmin.createUser = function(uid, userData, callback) { + user.isAdministrator(uid, function(err, isAdmin) { + if (isAdmin) { + user.create(userData.username, userData.password, userData.email, function(err) { + if(err) { + return callback(err.message); + } + callback(null); + }); + } else { + callback(new Error('You are not an administrator')); + } + }); + } + UserAdmin.makeAdmin = function(uid, theirid, socket) { user.isAdministrator(uid, function(err, isAdmin) { if (isAdmin) { diff --git a/src/websockets.js b/src/websockets.js index 307abf80ec..6fb17b1f92 100644 --- a/src/websockets.js +++ b/src/websockets.js @@ -960,9 +960,10 @@ websockets.init = function(io) { } }); - socket.on('api:admin.user.deleteUser', function(theirid) { + socket.on('api:admin.user.createUser', function(user, callback) { + console.log('heeerp'); if (uid && uid > 0) { - admin.user.deleteUser(uid, theirid, socket); + admin.user.createUser(uid, user, callback); } });