|
|
|
@ -3,13 +3,13 @@
|
|
|
|
|
define('admin/manage/users', [
|
|
|
|
|
'translator', 'benchpress', 'autocomplete', 'api', 'slugify', 'bootbox', 'accounts/invite',
|
|
|
|
|
], function (translator, Benchpress, autocomplete, api, slugify, bootbox, AccountInvite) {
|
|
|
|
|
var Users = {};
|
|
|
|
|
const Users = {};
|
|
|
|
|
|
|
|
|
|
Users.init = function () {
|
|
|
|
|
$('#results-per-page').val(ajaxify.data.resultsPerPage).on('change', function () {
|
|
|
|
|
var query = utils.params();
|
|
|
|
|
const query = utils.params();
|
|
|
|
|
query.resultsPerPage = $('#results-per-page').val();
|
|
|
|
|
var qs = buildSearchQuery(query);
|
|
|
|
|
const qs = buildSearchQuery(query);
|
|
|
|
|
ajaxify.go(window.location.pathname + '?' + qs);
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
@ -42,7 +42,7 @@ define('admin/manage/users', [
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
function getSelectedUids() {
|
|
|
|
|
var uids = [];
|
|
|
|
|
const uids = [];
|
|
|
|
|
|
|
|
|
|
$('.users-table [component="user/select/single"]').each(function () {
|
|
|
|
|
if ($(this).is(':checked')) {
|
|
|
|
@ -99,7 +99,7 @@ define('admin/manage/users', [
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
$('.manage-groups').on('click', function () {
|
|
|
|
|
var uids = getSelectedUids();
|
|
|
|
|
const uids = getSelectedUids();
|
|
|
|
|
if (!uids.length) {
|
|
|
|
|
app.alertError('[[error:no-users-selected]]');
|
|
|
|
|
return false;
|
|
|
|
@ -109,14 +109,14 @@ define('admin/manage/users', [
|
|
|
|
|
return app.alertError(err);
|
|
|
|
|
}
|
|
|
|
|
Benchpress.render('admin/partials/manage_user_groups', data).then(function (html) {
|
|
|
|
|
var modal = bootbox.dialog({
|
|
|
|
|
const modal = bootbox.dialog({
|
|
|
|
|
message: html,
|
|
|
|
|
title: '[[admin/manage/users:manage-groups]]',
|
|
|
|
|
onEscape: true,
|
|
|
|
|
});
|
|
|
|
|
modal.on('shown.bs.modal', function () {
|
|
|
|
|
autocomplete.group(modal.find('.group-search'), function (ev, ui) {
|
|
|
|
|
var uid = $(ev.target).attr('data-uid');
|
|
|
|
|
const uid = $(ev.target).attr('data-uid');
|
|
|
|
|
api.put('/groups/' + ui.item.group.slug + '/membership/' + uid, undefined).then(() => {
|
|
|
|
|
ui.item.group.nameEscaped = translator.escape(ui.item.group.displayName);
|
|
|
|
|
app.parseAndTranslate('admin/partials/manage_user_groups', { users: [{ groups: [ui.item.group] }] }, function (html) {
|
|
|
|
@ -129,9 +129,9 @@ define('admin/manage/users', [
|
|
|
|
|
modal.modal('hide');
|
|
|
|
|
});
|
|
|
|
|
modal.on('click', '.remove-group-icon', function () {
|
|
|
|
|
var groupCard = $(this).parents('[data-group-name]');
|
|
|
|
|
var groupName = groupCard.attr('data-group-name');
|
|
|
|
|
var uid = $(this).parents('[data-uid]').attr('data-uid');
|
|
|
|
|
const groupCard = $(this).parents('[data-group-name]');
|
|
|
|
|
const groupName = groupCard.attr('data-group-name');
|
|
|
|
|
const uid = $(this).parents('[data-uid]').attr('data-uid');
|
|
|
|
|
api.del('/groups/' + slugify(groupName) + '/membership/' + uid).then(() => {
|
|
|
|
|
groupCard.remove();
|
|
|
|
|
}).catch(app.alertError);
|
|
|
|
@ -142,7 +142,7 @@ define('admin/manage/users', [
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
$('.ban-user').on('click', function () {
|
|
|
|
|
var uids = getSelectedUids();
|
|
|
|
|
const uids = getSelectedUids();
|
|
|
|
|
if (!uids.length) {
|
|
|
|
|
app.alertError('[[error:no-users-selected]]');
|
|
|
|
|
return false; // specifically to keep the menu open
|
|
|
|
@ -160,7 +160,7 @@ define('admin/manage/users', [
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
$('.ban-user-temporary').on('click', function () {
|
|
|
|
|
var uids = getSelectedUids();
|
|
|
|
|
const uids = getSelectedUids();
|
|
|
|
|
if (!uids.length) {
|
|
|
|
|
app.alertError('[[error:no-users-selected]]');
|
|
|
|
|
return false; // specifically to keep the menu open
|
|
|
|
@ -180,11 +180,11 @@ define('admin/manage/users', [
|
|
|
|
|
submit: {
|
|
|
|
|
label: '[[admin/manage/users:alerts.button-ban-x, ' + uids.length + ']]',
|
|
|
|
|
callback: function () {
|
|
|
|
|
var formData = $('.ban-modal form').serializeArray().reduce(function (data, cur) {
|
|
|
|
|
const formData = $('.ban-modal form').serializeArray().reduce(function (data, cur) {
|
|
|
|
|
data[cur.name] = cur.value;
|
|
|
|
|
return data;
|
|
|
|
|
}, {});
|
|
|
|
|
var until = formData.length > 0 ? (
|
|
|
|
|
const until = formData.length > 0 ? (
|
|
|
|
|
Date.now() + (formData.length * 1000 * 60 * 60 * (parseInt(formData.unit, 10) ? 24 : 1))
|
|
|
|
|
) : 0;
|
|
|
|
|
|
|
|
|
@ -204,7 +204,7 @@ define('admin/manage/users', [
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
$('.unban-user').on('click', function () {
|
|
|
|
|
var uids = getSelectedUids();
|
|
|
|
|
const uids = getSelectedUids();
|
|
|
|
|
if (!uids.length) {
|
|
|
|
|
app.alertError('[[error:no-users-selected]]');
|
|
|
|
|
return false; // specifically to keep the menu open
|
|
|
|
@ -218,7 +218,7 @@ define('admin/manage/users', [
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
$('.reset-lockout').on('click', function () {
|
|
|
|
|
var uids = getSelectedUids();
|
|
|
|
|
const uids = getSelectedUids();
|
|
|
|
|
if (!uids.length) {
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
@ -227,7 +227,7 @@ define('admin/manage/users', [
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
$('.validate-email').on('click', function () {
|
|
|
|
|
var uids = getSelectedUids();
|
|
|
|
|
const uids = getSelectedUids();
|
|
|
|
|
if (!uids.length) {
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
@ -249,7 +249,7 @@ define('admin/manage/users', [
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
$('.send-validation-email').on('click', function () {
|
|
|
|
|
var uids = getSelectedUids();
|
|
|
|
|
const uids = getSelectedUids();
|
|
|
|
|
if (!uids.length) {
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
@ -262,7 +262,7 @@ define('admin/manage/users', [
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
$('.password-reset-email').on('click', function () {
|
|
|
|
|
var uids = getSelectedUids();
|
|
|
|
|
const uids = getSelectedUids();
|
|
|
|
|
if (!uids.length) {
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
@ -275,7 +275,7 @@ define('admin/manage/users', [
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
$('.force-password-reset').on('click', function () {
|
|
|
|
|
var uids = getSelectedUids();
|
|
|
|
|
const uids = getSelectedUids();
|
|
|
|
|
if (!uids.length) {
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
@ -304,7 +304,7 @@ define('admin/manage/users', [
|
|
|
|
|
tableEl.addEventListener('change', (e) => {
|
|
|
|
|
const subselector = e.target.closest('[component="user/select/single"]') || e.target.closest('[component="user/select/all"]');
|
|
|
|
|
if (subselector) {
|
|
|
|
|
var uids = getSelectedUids();
|
|
|
|
|
const uids = getSelectedUids();
|
|
|
|
|
if (uids.length) {
|
|
|
|
|
actionBtn.removeAttribute('disabled');
|
|
|
|
|
} else {
|
|
|
|
@ -314,7 +314,7 @@ define('admin/manage/users', [
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
function handleDelete(confirmMsg, path) {
|
|
|
|
|
var uids = getSelectedUids();
|
|
|
|
|
const uids = getSelectedUids();
|
|
|
|
|
if (!uids.length) {
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
@ -347,7 +347,7 @@ define('admin/manage/users', [
|
|
|
|
|
function handleUserCreate() {
|
|
|
|
|
$('[data-action="create"]').on('click', function () {
|
|
|
|
|
Benchpress.render('admin/partials/create_user_modal', {}).then(function (html) {
|
|
|
|
|
var modal = bootbox.dialog({
|
|
|
|
|
const modal = bootbox.dialog({
|
|
|
|
|
message: html,
|
|
|
|
|
title: '[[admin/manage/users:alerts.create]]',
|
|
|
|
|
onEscape: true,
|
|
|
|
@ -375,19 +375,19 @@ define('admin/manage/users', [
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
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;
|
|
|
|
|
const modal = this;
|
|
|
|
|
const username = document.getElementById('create-user-name').value;
|
|
|
|
|
const email = document.getElementById('create-user-email').value;
|
|
|
|
|
const password = document.getElementById('create-user-password').value;
|
|
|
|
|
const passwordAgain = document.getElementById('create-user-password-again').value;
|
|
|
|
|
|
|
|
|
|
var errorEl = $('#create-modal-error');
|
|
|
|
|
const 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 = {
|
|
|
|
|
const user = {
|
|
|
|
|
username: username,
|
|
|
|
|
email: email,
|
|
|
|
|
password: password,
|
|
|
|
@ -425,12 +425,12 @@ define('admin/manage/users', [
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function loadSearchPage(query) {
|
|
|
|
|
var params = utils.params();
|
|
|
|
|
const params = utils.params();
|
|
|
|
|
params.searchBy = query.searchBy;
|
|
|
|
|
params.query = query.query;
|
|
|
|
|
params.page = query.page;
|
|
|
|
|
params.sortBy = params.sortBy || 'lastonline';
|
|
|
|
|
var qs = decodeURIComponent($.param(params));
|
|
|
|
|
const qs = decodeURIComponent($.param(params));
|
|
|
|
|
$.get(config.relative_path + '/api/admin/manage/users?' + qs, function (data) {
|
|
|
|
|
renderSearchResults(data);
|
|
|
|
|
const url = config.relative_path + '/admin/manage/users?' + qs;
|
|
|
|
@ -488,12 +488,12 @@ define('admin/manage/users', [
|
|
|
|
|
|
|
|
|
|
function handleSort() {
|
|
|
|
|
$('.users-table thead th').on('click', function () {
|
|
|
|
|
var $this = $(this);
|
|
|
|
|
var sortBy = $this.attr('data-sort');
|
|
|
|
|
const $this = $(this);
|
|
|
|
|
const sortBy = $this.attr('data-sort');
|
|
|
|
|
if (!sortBy) {
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
var params = utils.params();
|
|
|
|
|
const params = utils.params();
|
|
|
|
|
params.sortBy = sortBy;
|
|
|
|
|
if (ajaxify.data.sortBy === sortBy) {
|
|
|
|
|
params.sortDirection = ajaxify.data.reverse ? 'asc' : 'desc';
|
|
|
|
@ -501,13 +501,13 @@ define('admin/manage/users', [
|
|
|
|
|
params.sortDirection = 'desc';
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
var qs = buildSearchQuery(params);
|
|
|
|
|
const qs = buildSearchQuery(params);
|
|
|
|
|
ajaxify.go('admin/manage/users?' + qs);
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function getFilters() {
|
|
|
|
|
var filters = [];
|
|
|
|
|
const filters = [];
|
|
|
|
|
$('#filter-by').find('[data-filter-by]').each(function () {
|
|
|
|
|
if ($(this).find('.fa-check').length) {
|
|
|
|
|
filters.push($(this).attr('data-filter-by'));
|
|
|
|
@ -517,16 +517,16 @@ define('admin/manage/users', [
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function handleFilter() {
|
|
|
|
|
var currentFilters = getFilters();
|
|
|
|
|
let currentFilters = getFilters();
|
|
|
|
|
$('#filter-by').on('click', 'li', function () {
|
|
|
|
|
var $this = $(this);
|
|
|
|
|
const $this = $(this);
|
|
|
|
|
$this.find('i').toggleClass('fa-check', !$this.find('i').hasClass('fa-check'));
|
|
|
|
|
return false;
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
$('#filter-by').on('hidden.bs.dropdown', function () {
|
|
|
|
|
var filters = getFilters();
|
|
|
|
|
var changed = filters.length !== currentFilters.length;
|
|
|
|
|
const filters = getFilters();
|
|
|
|
|
let changed = filters.length !== currentFilters.length;
|
|
|
|
|
if (filters.length === currentFilters.length) {
|
|
|
|
|
filters.forEach(function (filter, i) {
|
|
|
|
|
if (filter !== currentFilters[i]) {
|
|
|
|
@ -536,9 +536,9 @@ define('admin/manage/users', [
|
|
|
|
|
}
|
|
|
|
|
currentFilters = getFilters();
|
|
|
|
|
if (changed) {
|
|
|
|
|
var params = utils.params();
|
|
|
|
|
const params = utils.params();
|
|
|
|
|
params.filters = filters;
|
|
|
|
|
var qs = buildSearchQuery(params);
|
|
|
|
|
const qs = buildSearchQuery(params);
|
|
|
|
|
ajaxify.go('admin/manage/users?' + qs);
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|