From 5826b21821819a0a02c283ac732333126f736a5a Mon Sep 17 00:00:00 2001 From: Scott Idem Date: Mon, 13 Apr 2026 18:01:47 -0400 Subject: [PATCH] feat(badges): allow public_access to print first-print badges Badge print kiosks authenticate at the public_access level (site-wide passcode). Previously the print gate was trusted_access, meaning kiosk operators had to sign in at the trusted level just to print. Changed in both the list view and the badge detail controls panel: - First print: public_access and above (kiosk use case) - Reprint: still requires trusted_access + edit_mode ae_comp__badge_obj_li.svelte: added is_public derived; updated can_print and the print button #if condition. ae_comp__badge_print_controls.svelte: added is_public derived; updated can_print comment and logic. Co-Authored-By: Claude Sonnet 4.6 --- .../[badge_id]/ae_comp__badge_print_controls.svelte | 8 ++++++-- .../(badges)/badges/ae_comp__badge_obj_li.svelte | 7 ++++--- 2 files changed, 10 insertions(+), 5 deletions(-) diff --git a/src/routes/events/[event_id]/(badges)/badges/[badge_id]/ae_comp__badge_print_controls.svelte b/src/routes/events/[event_id]/(badges)/badges/[badge_id]/ae_comp__badge_print_controls.svelte index 8235c5f9..490c8fc6 100644 --- a/src/routes/events/[event_id]/(badges)/badges/[badge_id]/ae_comp__badge_print_controls.svelte +++ b/src/routes/events/[event_id]/(badges)/badges/[badge_id]/ae_comp__badge_print_controls.svelte @@ -99,6 +99,9 @@ let { // trusted_access is true for Trusted and every level above it (Administrator, // Manager, Super). No need to OR in administrator_access — it's already covered. let is_trusted = $derived($ae_loc.trusted_access === true); +// public_access — site-wide passcode or higher. Badge print kiosks run at this level. +// Sufficient for first-print only; reprints require trusted + edit_mode. +let is_public = $derived($ae_loc.public_access === true); // Minimum bar to edit any field. Anonymous/public users see values but cannot edit. let is_auth = $derived($ae_loc.authenticated_access === true); @@ -200,8 +203,9 @@ function toggle_section(which: 'attendee' | 'staff') { let print_count = $derived($lq__event_badge_obj?.print_count ?? 0); let is_printed = $derived(print_count >= 1); -// Print is available to Trusted+ when: not yet printed, OR global edit mode is on (reprint). -let can_print = $derived(is_trusted && (!is_printed || is_global_edit_mode)); +// Print is available to Public+ for first prints (kiosk use case). +// Reprints require Trusted + global edit mode. +let can_print = $derived((is_public && !is_printed) || (is_trusted && is_global_edit_mode)); type PrintStatus = 'idle' | 'loading' | 'done' | 'error'; let print_status: PrintStatus = $state('idle'); diff --git a/src/routes/events/[event_id]/(badges)/badges/ae_comp__badge_obj_li.svelte b/src/routes/events/[event_id]/(badges)/badges/ae_comp__badge_obj_li.svelte index cfbfc28f..8aa939dd 100644 --- a/src/routes/events/[event_id]/(badges)/badges/ae_comp__badge_obj_li.svelte +++ b/src/routes/events/[event_id]/(badges)/badges/ae_comp__badge_obj_li.svelte @@ -40,6 +40,7 @@ let copy_status: Record = $state({}); // Access level shortcuts let is_trusted = $derived($ae_loc.trusted_access === true); +let is_public = $derived($ae_loc.public_access === true); // public passcode or higher — may print first prints let is_edit_mode = $derived($ae_loc.edit_mode === true); /** @@ -140,7 +141,7 @@ let visible_badge_obj_li = $derived( event_badge_obj?.full_name_override ?? event_badge_obj?.full_name ?? `${event_badge_obj?.given_name ?? ''} ${event_badge_obj?.family_name ?? ''}`.trim()} - {@const can_print = is_trusted && (!is_printed || is_edit_mode)} + {@const can_print = (is_public && !is_printed) || (is_trusted && is_edit_mode)} {@const print_href = `/events/${event_badge_obj?.event_id}/badges/${event_badge_obj?.event_badge_id}/print`} {@const review_href = build_review_url(event_badge_obj)} @@ -242,8 +243,8 @@ let visible_badge_obj_li = $derived(
- - {#if is_trusted && (!is_printed || is_edit_mode)} + + {#if (is_public && !is_printed) || (is_trusted && is_edit_mode)}