let currentPage = 1;
let totalPages = 1;
const perPage = 20;
// Функция загрузки пользователей
function loadUsers(page) {
if (page < 1 || page > totalPages) return;
currentPage = page;
fetch(`/telezab/rest/api/users?page=${currentPage}&per_page=${perPage}`)
.then(response => response.json())
.then(data => {
totalPages = data.total_pages;
updateUsersTable(data.users);
updatePagination(data.current_page, data.total_pages);
})
.catch(error => {
console.error('Error fetching users:', error);
});
}
// Функция обновления таблицы пользователей
function updateUsersTable(users) {
const tableBody = document.getElementById('users-table').querySelector('tbody');
tableBody.innerHTML = '';
users.forEach(user => {
const row = document.createElement('tr');
row.innerHTML = `
${user.id} |
${user.username} |
${user.email} |
${user.subscriptions.join(', ') || 'Нет подписок'} |
${user.disaster_only} |
${user.status} |
|
`;
tableBody.appendChild(row);
});
setupEditButtons();
}
// Функция для обработки кнопок "Редактировать"
function setupEditButtons() {
document.querySelectorAll(".editUserBtn").forEach(button => {
button.addEventListener("click", function () {
const userId = this.dataset.id;
openUserModal(userId);
});
});
}
// Функция открытия модального окна
function openUserModal(userId) {
fetch(`/telezab/rest/api/users/${userId}`)
.then(response => response.json())
.then(data => {
document.getElementById("userId").innerText = data.id;
document.getElementById("username").innerText = data.username;
document.getElementById("userEmail").innerText = data.email;
const blockBtn = document.getElementById("toggleBlockUser");
blockBtn.innerText = data.blocked ? "Разблокировать" : "Заблокировать";
blockBtn.onclick = function () {
toggleUserBlock(userId);
};
document.getElementById("viewUserEvents").onclick = function () {
viewUserEvents(userId);
};
document.getElementById("deleteUser").onclick = function () {
deleteUser(userId);
};
// Использование Bootstrap для показа модального окна
var myModal = new bootstrap.Modal(document.getElementById('userModal'), {
keyboard: false
});
myModal.show(); // Открытие модального окна
})
.catch(error => {
console.error('Error fetching user data:', error);
});
}
// Обработчик закрытия модального окна
document.querySelector(".btn-close").addEventListener("click", function () {
var myModal = new bootstrap.Modal(document.getElementById('userModal'));
myModal.hide(); // Закрытие модального окна
});
// Функция для блокировки/разблокировки пользователя
function toggleUserBlock(userId) {
fetch(`/telezab/rest/api/users/${userId}/block`, { method: "POST" })
.then(() => {
alert("Статус пользователя изменён");
// Скрыть модальное окно с помощью Bootstrap (это не отменяет событий закрытия)
var myModal = new bootstrap.Modal(document.getElementById('userModal'));
myModal.hide(); // Закрытие модального окна
loadUsers(currentPage); // Перезагрузите список пользователей
})
.catch(error => {
console.error("Ошибка при изменении статуса пользователя:", error);
});
}
// Функция просмотра действий пользователя
function viewUserEvents(userId) {
window.location.href = `/telezab/rest/api/users/${userId}/events`;
}
// Функция для удаления пользователя
function deleteUser(userId) {
if (confirm("Вы уверены, что хотите удалить пользователя?")) {
fetch(`/telezab/rest/api/users/${userId}`, { method: "DELETE" })
.then(() => {
alert("Пользователь удалён");
var myModal = new bootstrap.Modal(document.getElementById('userModal'));
myModal.hide();
loadUsers(currentPage); // Перезагрузите список пользователей
});
}
}
window.onclick = function (event) {
if (event.target === document.getElementById("userModal")) {
$('#userModal').modal('hide'); // Закрываем модальное окно с помощью Bootstrap
}
};
// Функция обновления пагинации
function updatePagination(currentPage, totalPages) {
const paginationContainer = document.getElementById('pagination');
paginationContainer.innerHTML = '';
const prevButton = document.createElement('li');
prevButton.classList.add('page-item');
prevButton.classList.toggle('disabled', currentPage === 1);
prevButton.innerHTML = `«`;
paginationContainer.appendChild(prevButton);
for (let page = 1; page <= totalPages; page++) {
const pageItem = document.createElement('li');
pageItem.classList.add('page-item');
pageItem.classList.toggle('active', page === currentPage);
const pageLink = document.createElement('a');
pageLink.classList.add('page-link');
pageLink.href = "#";
pageLink.textContent = page;
pageLink.onclick = () => loadUsers(page);
pageItem.appendChild(pageLink);
paginationContainer.appendChild(pageItem);
}
const nextButton = document.createElement('li');
nextButton.classList.add('page-item');
nextButton.classList.toggle('disabled', currentPage === totalPages);
nextButton.innerHTML = `»`;
paginationContainer.appendChild(nextButton);
}
// Запуск загрузки данных
document.addEventListener("DOMContentLoaded", () => {
loadUsers(currentPage);
});