Files
NodeBB/public/src/admin/manage/users.js

386 lines
11 KiB
JavaScript
Raw Normal View History

"use strict";
2016-01-20 16:12:57 +02:00
define('admin/manage/users', ['translator'], function (translator) {
var Users = {};
Users.init = function () {
2016-08-27 14:25:30 +03:00
var navPills = $('.nav-pills li');
var pathname = window.location.pathname;
if (!navPills.find('a[href="' + pathname + '"]').length) {
pathname = config.relative_path + '/admin/manage/users/latest';
}
navPills.removeClass('active').find('a[href="' + pathname + '"]').parent().addClass('active');
function getSelectedUids() {
var uids = [];
2016-10-07 17:35:24 +03:00
$('.users-table [component="user/select/single"]').each(function () {
2016-10-07 17:35:24 +03:00
if ($(this).is(':checked')) {
uids.push($(this).attr('data-uid'));
}
});
return uids;
}
function update(className, state) {
$('.users-table [component="user/select/single"]:checked').parents('.user-row').find(className).each(function () {
2016-10-07 17:35:24 +03:00
$(this).toggleClass('hidden', !state);
});
}
function unselectAll() {
2016-10-07 17:35:24 +03:00
$('.users-table [component="user/select/single"]').prop('checked', false);
$('.users-table [component="user/select/all"]').prop('checked', false);
}
function removeSelected() {
2016-10-07 17:35:24 +03:00
$('.users-table [component="user/select/single"]:checked').parents('.user-row').remove();
}
function done(successMessage, className, flag) {
return function (err) {
if (err) {
return app.alertError(err.message);
}
app.alertSuccess(successMessage);
if (className) {
update(className, flag);
}
unselectAll();
};
}
$('[component="user/select/all"]').on('click', function () {
2016-10-07 17:35:24 +03:00
if ($(this).is(':checked')) {
$('.users-table [component="user/select/single"]').prop('checked', true);
} else {
$('.users-table [component="user/select/single"]').prop('checked', false);
}
});
$('.ban-user').on('click', function () {
var uids = getSelectedUids();
if (!uids.length) {
app.alertError('[[error:no-users-selected]]');
return false; // specifically to keep the menu open
}
bootbox.confirm((uids.length > 1 ? '[[admin/manage/users:alerts.confirm-ban-multi]]' : '[[admin/manage/users:alerts.confirm-ban]]'), function (confirm) {
if (confirm) {
socket.emit('user.banUsers', { uids: uids, reason: '' }, done('[[admin/manage/users:alerts.ban-success]]', '.ban', true));
}
});
});
$('.ban-user-temporary').on('click', function () {
var uids = getSelectedUids();
if (!uids.length) {
app.alertError('[[error:no-users-selected]]');
return false; // specifically to keep the menu open
}
templates.parse('admin/partials/temporary-ban', {}, function (html) {
2016-07-05 10:33:13 -04:00
bootbox.dialog({
className: 'ban-modal',
title: '[[user:ban_account]]',
message: html,
show: true,
buttons: {
close: {
label: '[[global:close]]',
2017-02-17 19:31:21 -07:00
className: 'btn-link',
},
submit: {
label: '[[admin/manage/users:alerts.button-ban-x, ' + uids.length + ']]',
callback: function () {
var formData = $('.ban-modal form').serializeArray().reduce(function (data, cur) {
data[cur.name] = cur.value;
return data;
}, {});
2017-02-18 01:51:11 -07:00
var until = formData.length ? (Date.now() + (formData.length * 1000 * 60 * 60 * (parseInt(formData.unit, 10) ? 24 : 1))) : 0;
socket.emit('user.banUsers', { uids: uids, until: until, reason: formData.reason }, done('[[admin/manage/users:alerts.ban-success]]', '.ban', true));
2017-02-17 19:31:21 -07:00
},
},
},
});
});
});
$('.unban-user').on('click', function () {
var uids = getSelectedUids();
if (!uids.length) {
app.alertError('[[error:no-users-selected]]');
return false; // specifically to keep the menu open
}
socket.emit('user.unbanUsers', uids, done('[[admin/manage/users:alerts.unban-success]]', '.ban', false));
});
$('.reset-lockout').on('click', function () {
var uids = getSelectedUids();
if (!uids.length) {
return;
}
socket.emit('admin.user.resetLockouts', uids, done('[[admin/manage/users:alerts.lockout-reset-success]]'));
});
$('.reset-flags').on('click', function () {
2014-12-21 16:29:32 -05:00
var uids = getSelectedUids();
if (!uids.length) {
return;
}
socket.emit('admin.user.resetFlags', uids, done('[[admin/manage/users:alerts.flag-reset-success]]'));
2014-12-21 16:29:32 -05:00
});
$('.admin-user').on('click', function () {
var uids = getSelectedUids();
if (!uids.length) {
return;
}
2015-11-29 16:49:07 -05:00
if (uids.indexOf(app.user.uid.toString()) !== -1) {
app.alertError('[[admin/manage/users:alerts.no-remove-yourself-admin]]');
} else {
socket.emit('admin.user.makeAdmins', uids, done('[[admin/manage/users:alerts.make-admin-success]]', '.administrator', true));
}
});
$('.remove-admin-user').on('click', function () {
var uids = getSelectedUids();
if (!uids.length) {
return;
}
2015-11-29 16:49:07 -05:00
if (uids.indexOf(app.user.uid.toString()) !== -1) {
app.alertError('[[admin/manage/users:alerts.no-remove-yourself-admin]]');
} else {
bootbox.confirm('[[admin/manage/users:alerts.confirm-remove-admin]]', function (confirm) {
if (confirm) {
socket.emit('admin.user.removeAdmins', uids, done('[[admin/manage/users:alerts.remove-admin-success]]', '.administrator', false));
}
});
}
});
$('.validate-email').on('click', function () {
var uids = getSelectedUids();
if (!uids.length) {
return;
}
bootbox.confirm('[[admin/manage/users:alerts.confirm-validate-email]]', function (confirm) {
2016-10-07 17:35:24 +03:00
if (!confirm) {
return;
}
socket.emit('admin.user.validateEmail', uids, function (err) {
2016-10-07 17:35:24 +03:00
if (err) {
return app.alertError(err.message);
}
app.alertSuccess('[[admin/manage/users:alerts.validate-email-success]]');
2016-10-07 17:35:24 +03:00
update('.notvalidated', false);
update('.validated', true);
unselectAll();
});
});
});
$('.send-validation-email').on('click', function () {
2015-02-11 14:44:56 -05:00
var uids = getSelectedUids();
if (!uids.length) {
return;
}
socket.emit('admin.user.sendValidationEmail', uids, function (err) {
2015-02-11 14:44:56 -05:00
if (err) {
return app.alertError(err.message);
}
app.alertSuccess('[[notifications:email-confirm-sent]]');
});
2015-02-25 19:05:29 -05:00
});
2015-02-11 14:44:56 -05:00
$('.password-reset-email').on('click', function () {
2014-11-03 15:31:41 -05:00
var uids = getSelectedUids();
if (!uids.length) {
return;
}
bootbox.confirm('[[admin/manage/users:alerts.password-reset-confirm]]', function (confirm) {
2014-11-03 15:31:41 -05:00
if (confirm) {
socket.emit('admin.user.sendPasswordResetEmail', uids, done('[[notifications:email-confirm-sent]]'));
2014-11-03 15:31:41 -05:00
}
});
});
$('.delete-user').on('click', function () {
var uids = getSelectedUids();
if (!uids.length) {
return;
}
bootbox.confirm('[[admin/manage/users:alerts.confirm-delete]]', function (confirm) {
if (confirm) {
socket.emit('admin.user.deleteUsers', uids, function (err) {
if (err) {
return app.alertError(err.message);
2016-08-12 01:55:38 +03:00
}
app.alertSuccess('[[admin/manage/users:alerts.delete-success]]');
2016-08-12 01:55:38 +03:00
removeSelected();
unselectAll();
});
}
});
});
$('.delete-user-and-content').on('click', function () {
2016-08-12 01:55:38 +03:00
var uids = getSelectedUids();
if (!uids.length) {
return;
}
bootbox.confirm('[[admin/manage/users:alerts.confirm-purge]]', function (confirm) {
2016-08-12 01:55:38 +03:00
if (confirm) {
socket.emit('admin.user.deleteUsersAndContent', uids, function (err) {
2016-08-12 01:55:38 +03:00
if (err) {
return app.alertError(err.message);
}
app.alertSuccess('[[admin/manage/users:alerts.delete-success]]');
removeSelected();
unselectAll();
});
}
});
});
function handleUserCreate() {
$('#createUser').on('click', function () {
templates.parse('admin/partials/create_user_modal', {}, function (html) {
bootbox.dialog({
message: html,
title: '[[admin/manage/users:alerts.create]]',
onEscape: true,
buttons: {
cancel: {
label: '[[admin/manage/users:alerts.button-cancel]]',
2017-02-17 19:31:21 -07:00
className: 'btn-link',
},
create: {
label: '[[admin/manage/users:alerts.button-create]]',
className: 'btn-primary',
callback: function () {
createUser.call(this);
return false;
2017-02-17 19:31:21 -07:00
},
},
},
});
});
});
}
function createUser() {
var modal = this;
var username = document.getElementById('create-user-name').value;
var email = document.getElementById('create-user-email').value;
var password = document.getElementById('create-user-password').value;
var passwordAgain = document.getElementById('create-user-password-again').value;
var errorEl = $('#create-modal-error');
if (password !== passwordAgain) {
return errorEl.translateHtml('[[admin/manage/users:alerts.error-x, [[admin/manage/users:alerts.error-passwords-different]]]]').removeClass('hide');
}
var user = {
username: username,
email: email,
2017-02-17 19:31:21 -07:00
password: password,
};
socket.emit('admin.user.createUser', user, function (err) {
if (err) {
return errorEl.translateHtml('[[admin/manage/users:alerts.error-x, ' + err.message + ']]').removeClass('hide');
}
modal.modal('hide');
modal.on('hidden.bs.modal', function () {
ajaxify.refresh();
});
app.alertSuccess('[[admin/manage/users:alerts.create-success]]');
});
}
2016-01-20 16:12:57 +02:00
var timeoutId = 0;
$('#search-user-name, #search-user-email, #search-user-ip').on('keyup', function () {
if (timeoutId !== 0) {
clearTimeout(timeoutId);
timeoutId = 0;
}
2014-12-02 12:38:53 -05:00
2014-11-28 15:49:16 -05:00
var $this = $(this);
var type = $this.attr('data-search-type');
timeoutId = setTimeout(function () {
$('.fa-spinner').removeClass('hidden');
socket.emit('admin.user.search', {searchBy: type, query: $this.val()}, function (err, data) {
if (err) {
return app.alertError(err.message);
}
templates.parse('admin/manage/users', 'users', data, function (html) {
translator.translate(html, function (html) {
html = $(html);
$('.users-table tr').not(':first').remove();
$('.users-table tr').first().after(html);
html.find('.timeago').timeago();
$('.fa-spinner').addClass('hidden');
if (data && data.users.length === 0) {
$('#user-notfound-notify').translateHtml('[[admin/manage/users:search.not-found]]')
.removeClass('hide')
.addClass('label-danger')
.removeClass('label-success');
} else {
$('#user-notfound-notify').translateHtml(translator.compile('admin/manage/users:alerts.x-users-found', data.users.length, data.timing))
.removeClass('hide')
.addClass('label-success')
.removeClass('label-danger');
}
});
});
});
}, 250);
});
handleUserCreate();
2016-04-27 11:01:27 +03:00
handleInvite();
};
2016-04-27 11:01:27 +03:00
function handleInvite() {
$('[component="user/invite"]').on('click', function () {
bootbox.prompt('[[admin/manage/users:alerts.prompt-email]]', function (email) {
2016-04-27 11:01:27 +03:00
if (!email) {
return;
}
socket.emit('user.invite', email, function (err) {
2016-04-27 11:01:27 +03:00
if (err) {
return app.alertError(err.message);
}
app.alertSuccess('[[admin/manage/users:alerts.email-sent-to, ' + email + ']]');
2016-04-27 11:01:27 +03:00
});
});
});
}
return Users;
});