add admin audit log (11), hide stacktraces via NODE_ENV=production (13), validate spam_interval_min>=1 (16)

This commit is contained in:
dev
2026-09-08 12:12:29 +03:00
parent 441bdfe0fe
commit e0cec0f943
7 changed files with 196 additions and 5 deletions
+3 -3
View File
@@ -21,12 +21,12 @@
<div class="ic">🛡️</div>
<h3>Защита от повторов</h3>
</div>
<p class="hint">Если ученик уже отправил ответ, следующая отправка от него будет отклонена в течение заданного времени. 0 — отключить.</p>
<p class="hint">Если ученик уже отправил ответ, следующая отправка от него будет отклонена в течение заданного времени. Минимальное значение — 1 минута.</p>
<div class="settings-row">
<div class="settings-field">
<label for="spamInterval">Интервал ожидания</label>
<div class="unit-row">
<input type="number" id="spamInterval" class="settings-input" min="0" max="1440" step="1">
<input type="number" id="spamInterval" class="settings-input" min="1" max="1440" step="1">
<span class="unit">минут</span>
</div>
</div>
@@ -136,7 +136,7 @@ async function loadSettings() {
async function saveSettings() {
const v = document.getElementById('spamInterval').value;
if (v === '' || Number(v) < 0) { alert('Введите число от 0'); return; }
if (v === '' || Number(v) < 1) { alert('Введите число от 1'); return; }
const btn = document.getElementById('saveBtn');
btn.dataset.loadingText = 'Сохранение...';
setBtnLoading(btn, true);