feat: impression galerie utilisateur (enable/quota/max_copies)
🚀 Deploy — JH Photomaton / 🔍 Vérification (push) Has been cancelled
🚀 Deploy — JH Photomaton / 🍓 Deploy sur le Pi (push) Has been cancelled

This commit is contained in:
2026-07-17 17:44:47 +02:00
parent 4388503102
commit d6642c2519
3 changed files with 101 additions and 1 deletions
+58
View File
@@ -256,6 +256,51 @@
</div>
</div>
<!-- ── IMPRESSION GALERIE UTILISATEUR ───────────────────────────────── -->
<div>
<div class="section-title">👥 Impression galerie utilisateur</div>
<div class="mode-card">
<p class="mode-hint" style="margin-bottom:.85rem">
Autorise (ou non) les visiteurs de la galerie publique à demander l'impression d'une photo,
avec un quota et un nombre de copies maximum par demande.
</p>
<div style="display:flex;flex-direction:column;gap:.75rem">
<label style="display:flex;align-items:center;gap:.65rem;cursor:pointer;font-size:.95rem">
<input type="checkbox" id="uprint-enabled"
{% if config.print.user_print_enabled %}checked{% endif %}
style="accent-color:var(--primary);width:1.1rem;height:1.1rem">
Permettre aux utilisateurs de demander une impression
</label>
<div style="display:flex;gap:1.5rem;flex-wrap:wrap;align-items:flex-end">
<div class="form-group" style="margin:0">
<label class="mode-hint" style="display:block;margin-bottom:.3rem;font-weight:600">
Quota d'impressions par session
</label>
<div style="display:flex;align-items:center;gap:.5rem">
<input type="number" id="uprint-quota" class="copies-input"
value="{{ config.print.user_print_quota }}" min="0" max="99" style="width:70px">
<span class="mode-hint">0 = illimité</span>
</div>
</div>
<div class="form-group" style="margin:0">
<label class="mode-hint" style="display:block;margin-bottom:.3rem;font-weight:600">
Copies max par demande
</label>
<input type="number" id="uprint-max-copies" class="copies-input"
value="{{ config.print.user_print_max_copies }}" min="1" max="10" style="width:70px">
</div>
</div>
</div>
<button class="btn-sm btn-print" style="margin-top:.85rem" onclick="saveUserPrintConfig()">
💾 Sauvegarder
</button>
</div>
</div>
<!-- ── FILE D'ATTENTE ─────────────────────────────────────────────────── -->
<div>
<div class="queue-card">
@@ -486,6 +531,19 @@ async function cancelPrint(id) {
} catch(err) { showToast('Erreur', 'error'); }
}
// ── Config impression utilisateur ─────────────────────────────────────────────
async function saveUserPrintConfig() {
const payload = {
user_print_enabled: document.getElementById('uprint-enabled').checked,
user_print_quota: parseInt(document.getElementById('uprint-quota').value) || 0,
user_print_max_copies: parseInt(document.getElementById('uprint-max-copies').value) || 1,
};
try {
await api('POST', '/api/print/user-print-config', payload);
showToast('✅ Configuration sauvegardée', 'success');
} catch(e) { showToast('❌ Erreur : ' + e.message, 'error'); }
}
// ── WebSocket + auto-refresh ───────────────────────────────────────────────────
function onWsMessage(msg) {
if (['print_request','print_result','print_cancelled'].includes(msg.type)) {