Require bookings to be at least 5 days ahead

Guests could previously book for the same day or tomorrow. The earliest
selectable date is now today + 5 days, configured in one place via the
BOOKING_MIN_LEAD_DAYS constant.

- constants.php: new BOOKING_MIN_LEAD_DAYS define (5)
- Service_model::getAvailableTimes(): optional $minLeadDays param, returns
  no slots for dates closer than that; defaults to 0 so existing callers
  are unaffected
- Pages::ajax(): guest actions (getAvailableTimes, isTimeAvailable) pass the
  constant. The admin action getAvailableTimeOptions deliberately does not,
  so staff can still enter phone bookings for tomorrow.
- Pages::booking_process(): rejects an early booking_date POST and redirects
  back to /booking, guarding against a stale page or a crafted request
- booking-form.php: datepicker minDate/defaultDate and the hidden
  booking_date default all derive from the constant

Deployed and verified on test, dev and prod.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01MyYsTAAA1kJLMLCResmgTE
This commit is contained in:
Astral04
2026-08-06 11:01:44 +00:00
co-authored by Claude Opus 5
parent 4e1a69c8d4
commit 69ec9e62a6
4 changed files with 31 additions and 5 deletions
+12
View File
@@ -83,3 +83,15 @@ defined('EXIT_USER_INPUT') OR define('EXIT_USER_INPUT', 7); // invalid user
defined('EXIT_DATABASE') OR define('EXIT_DATABASE', 8); // database error
defined('EXIT__AUTO_MIN') OR define('EXIT__AUTO_MIN', 9); // lowest automatically-assigned error code
defined('EXIT__AUTO_MAX') OR define('EXIT__AUTO_MAX', 125); // highest automatically-assigned error code
/*
|--------------------------------------------------------------------------
| Booking lead time
|--------------------------------------------------------------------------
|
| Minimum number of days ahead a guest can book a job. 5 means the earliest
| selectable date is today + 5 days. Applies to the public booking form only
| - the admin portal can still book any date.
|
*/
defined('BOOKING_MIN_LEAD_DAYS') OR define('BOOKING_MIN_LEAD_DAYS', 5);