Files
studiobeve.no/application/views/pages/includes/booking-error-form-en.php
T
UbuntuandClaude Opus 5 ce7400578a Apply the worker capability filter to the manage-booking flow
The per-worker service allow-list was only enforced on the new-booking form.
On the guest manage-booking page a worker could still be offered for services
they do not perform:

- manage_booking() branched on $firstService, which was never assigned - the
  resolve loop above it used $resolvedService - so the guarded branch was dead
  and the worker list fell through to getActiveWorkers(), filtered by vertical
  only. Assigning it activates both the category filter and the capability
  check, and with it the $isOtherCategory checkbox disabling in the view.
- The page's own getAvailableWorkersByServiceCategorySlug() never sent
  service_ids, so re-picking services asked for a category-only worker list.
  It now mirrors the booking form, including the empty-result message.
- setWorker() clears any time already chosen: changing worker or services left
  a stale selection with the submit button still enabled.

manage_booking_process() did re-check capability server-side, but every
rejection there answered with raw JSON, which this non-AJAX form renders as an
unstyled blob in the guest's browser. All eight rejections, plus the
cancellation cutoff, now go through _booking_error(), which takes an optional
back URL so the guest returns to their own manage page rather than an empty
booking form. Adds the cutoff_passed message in all three languages and makes
the error title and button label reflect which flow failed.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01TYGSbK1erKv7VG1pvdPEjG
2026-08-24 17:06:08 +00:00

44 lines
3.0 KiB
PHP
Executable File

<?php
$bookingErrorMessages = array(
'slot_taken' => 'This time slot was taken while you were filling in the form. Please choose another time.',
'worker_unavailable' => 'The selected staff member is not working on this day. Please choose another day.',
'outside_schedule' => 'The selected time is outside the staff member\'s working hours. Please choose another time.',
'alternate_week' => 'The selected staff member only works every second week. Please choose another day.',
'after_hours' => 'The treatment would not finish before closing time. Please choose an earlier time.',
'too_far' => 'Bookings can only be made up to 3 months in advance.',
'category_mismatch' => 'The selected staff member does not perform the chosen services. Please start again.',
'service_not_offered' => 'The selected staff member does not perform all of the chosen treatments. Please pick another staff member or change the treatments.',
'single_service_only' => 'Only one treatment can be booked at a time. Please select just one.',
'invalid_email' => 'That e-mail address does not look valid. Please check it - your confirmation and the link to manage your booking are sent there.',
'cutoff_passed' => 'Your booking is within 24 hours and can no longer be changed or cancelled. Please contact the salon.',
'no_service' => 'No service was selected. Please choose at least one service.',
'default' => 'Something went wrong with your booking. Please try again.',
);
$shownError = isset($bookingErrorCode) && isset($bookingErrorMessages[$bookingErrorCode])
? $bookingErrorMessages[$bookingErrorCode]
: $bookingErrorMessages['default'];
$backSubpage = isset($subpage) && $subpage != '' ? $subpage : 'barber';
// _booking_error() passes a back URL when the error came from the
// manage-booking flow; that guest must return to their own booking page
// rather than being dropped into an empty new-booking form.
$isManageError = isset($bookingBackUrl) && $bookingBackUrl !== '';
$backUrl = $isManageError ? $bookingBackUrl : SITEURL.'en/booking/'.$backSubpage;
$backLabel = $isManageError ? 'Back to your booking' : 'Back to booking';
if(isset($bookingErrorCode) && $bookingErrorCode === 'slot_taken'){
$errorTitle = 'This time is no longer available';
} else {
$errorTitle = $isManageError ? 'Your booking could not be changed' : 'Your booking could not be completed';
}
?>
<div class="bookingContainer" style="min-height:500px;">
<div class="bookingThankYouTitle"><?php echo $errorTitle;?></div>
<div class="bookingThankYouMessageTitle"><?php echo $shownError;?></div>
<div style="text-align:center; margin-top:30px;">
<a href="<?php echo $backUrl;?>" style="display:inline-block; padding:12px 28px; background:#000; color:#fff; text-decoration:none; border-radius:5px; font-size:16px;"><?php echo $backLabel;?></a>
</div>
</div>