126 lines
5.4 KiB
JavaScript
126 lines
5.4 KiB
JavaScript
|
document.addEventListener('DOMContentLoaded', function() {
|
|||
|
const newsletterTitle = document.getElementById("newsletter-title");
|
|||
|
const newsletterForm = document.getElementById("newsletter-form");
|
|||
|
const newsletterMessageInput = document.getElementById("newsletter-message");
|
|||
|
const newsletterButton = document.getElementById("newsletter-button");
|
|||
|
const newsletterModal = document.getElementById("newsletter-modal");
|
|||
|
const closeButton = document.querySelectorAll(".close-button");
|
|||
|
|
|||
|
// Проверка существования элементов перед добавлением обработчиков
|
|||
|
if (newsletterButton) {
|
|||
|
newsletterButton.addEventListener("click", () => {
|
|||
|
if (newsletterTitle && newsletterMessageInput && newsletterModal) {
|
|||
|
newsletterMessageInput.value = ""; // Очистить поле ввода
|
|||
|
newsletterTitle.textContent = "Рассылка";
|
|||
|
newsletterModal.classList.add("show"); // Показать модальное окно
|
|||
|
}
|
|||
|
});
|
|||
|
}
|
|||
|
|
|||
|
if (newsletterForm) {
|
|||
|
newsletterForm.addEventListener("submit", async (event) => {
|
|||
|
event.preventDefault();
|
|||
|
const message = newsletterMessageInput.value;
|
|||
|
|
|||
|
try {
|
|||
|
const response = await fetch(`/send-newsletter`, {
|
|||
|
method: "POST",
|
|||
|
headers: {
|
|||
|
"Content-Type": "application/json"
|
|||
|
},
|
|||
|
body: JSON.stringify({ message: message })
|
|||
|
});
|
|||
|
|
|||
|
// Парсим JSON-ответ
|
|||
|
const result = await response.json();
|
|||
|
|
|||
|
if (response.ok) {
|
|||
|
alert("Рассылка отправлена успешно!");
|
|||
|
if (newsletterModal) {
|
|||
|
newsletterModal.classList.remove("show"); // Скрыть модальное окно
|
|||
|
}
|
|||
|
} else {
|
|||
|
// Показать сообщение об ошибке, если оно есть
|
|||
|
const errorMessage = result.message || "Произошла ошибка, рассылка не была начата";
|
|||
|
alert(`Ошибка: ${errorMessage}`);
|
|||
|
if (newsletterModal) {
|
|||
|
newsletterModal.classList.remove("show"); // Скрыть модальное окно
|
|||
|
}
|
|||
|
}
|
|||
|
} catch (error) {
|
|||
|
console.error("Error:", error);
|
|||
|
alert("Произошла ошибка при отправке запроса.");
|
|||
|
}
|
|||
|
});
|
|||
|
}
|
|||
|
|
|||
|
if (closeButton.length > 0) {
|
|||
|
closeButton.forEach(button => {
|
|||
|
button.addEventListener("click", (event) => {
|
|||
|
const modalId = event.target.getAttribute("data-modal-id");
|
|||
|
const modal = document.getElementById(modalId);
|
|||
|
if (modal) {
|
|||
|
modal.classList.remove("show"); // Скрыть соответствующее модальное окно
|
|||
|
}
|
|||
|
});
|
|||
|
});
|
|||
|
}
|
|||
|
|
|||
|
function closeModal(event) {
|
|||
|
if (newsletterModal && event.target === newsletterModal) {
|
|||
|
newsletterModal.classList.remove("show"); // Скрыть модальное окно при клике вне его
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
window.addEventListener("click", closeModal);
|
|||
|
window.addEventListener("touchend", closeModal); // Обработка касания на мобильных устройствах
|
|||
|
|
|||
|
const statusToggles = document.querySelectorAll('.status-toggle');
|
|||
|
|
|||
|
statusToggles.forEach(toggle => {
|
|||
|
toggle.addEventListener('change', async function() {
|
|||
|
const userId = this.getAttribute('data-user-id');
|
|||
|
const status = this.checked ? 'enabled' : 'disabled';
|
|||
|
|
|||
|
try {
|
|||
|
const response = await fetch(`/update_status/${userId}`, {
|
|||
|
method: 'POST',
|
|||
|
headers: {
|
|||
|
'Content-Type': 'application/json',
|
|||
|
'X-CSRFToken': getCookie('csrftoken') // Получение CSRF токена
|
|||
|
},
|
|||
|
body: JSON.stringify({ status: status })
|
|||
|
});
|
|||
|
|
|||
|
if (response.ok) {
|
|||
|
const statusLabel = this.closest('.user-status').querySelector('.status-label');
|
|||
|
if (statusLabel) {
|
|||
|
statusLabel.textContent = this.checked ? 'Доступ открыт' : 'Доступ закрыт';
|
|||
|
}
|
|||
|
console.log('Status updated successfully');
|
|||
|
} else {
|
|||
|
console.error('Failed to update status');
|
|||
|
}
|
|||
|
} catch (error) {
|
|||
|
console.error('Error:', error);
|
|||
|
}
|
|||
|
});
|
|||
|
});
|
|||
|
});
|
|||
|
|
|||
|
// Функция для получения CSRF токена из cookie
|
|||
|
function getCookie(name) {
|
|||
|
let cookieValue = null;
|
|||
|
if (document.cookie && document.cookie !== '') {
|
|||
|
const cookies = document.cookie.split(';');
|
|||
|
for (let i = 0; i < cookies.length; i++) {
|
|||
|
const cookie = cookies[i].trim();
|
|||
|
if (cookie.substring(0, name.length + 1) === (name + '=')) {
|
|||
|
cookieValue = decodeURIComponent(cookie.substring(name.length + 1));
|
|||
|
break;
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
return cookieValue;
|
|||
|
}
|