feat: impression galerie utilisateur (enable/quota/max_copies)
This commit is contained in:
@@ -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)) {
|
||||
|
||||
Reference in New Issue
Block a user