update
This commit is contained in:
35
.paul/phases/09-past-date-validation/09-01-PLAN.md
Normal file
35
.paul/phases/09-past-date-validation/09-01-PLAN.md
Normal file
@@ -0,0 +1,35 @@
|
||||
# PLAN 09-01: Blokada dat i godzin wstecznych
|
||||
|
||||
## Cel
|
||||
Uniemożliwić użytkownikowi wybranie daty/godziny z przeszłości w formularzach rezerwacji (modal + hero search form). Wyświetlić komunikat błędu jeśli wybrana data/godzina już minęła.
|
||||
|
||||
## Kontekst
|
||||
- Inputy `datetime-local`: `#carei-date-from`, `#carei-date-to` (modal), `#carei-search-date-from`, `#carei-search-date-to` (hero)
|
||||
- Widget PHP: `class-elementor-widget.php` linie 86, 93
|
||||
- JS: `carei-reservation.js` — walidacja w `validateForm()` (linia ~607), eventy w `initDynamicLoading()` (linia ~1073), search form `initSearchForm()` (linia ~1108)
|
||||
|
||||
## Taski
|
||||
|
||||
### Task 1: Ustawienie atrybutu `min` na inputach datetime-local
|
||||
**Plik:** `assets/js/carei-reservation.js`
|
||||
**Akcja:** Dodać funkcję `enforceDateMin()` która:
|
||||
1. Ustawia `min` na bieżący datetime (format `YYYY-MM-DDTHH:MM`) na inputach `dateFrom` i `searchDateFrom`
|
||||
2. Przy zmianie `dateFrom` ustawia `min` na `dateTo` = wartość `dateFrom`
|
||||
3. Analogicznie dla search form (`searchDateFrom` → `searchDateTo`)
|
||||
4. Wywoływana przy init modala i init search form
|
||||
**Weryfikacja:** Przeglądarka blokuje wybór dat wcześniejszych niż teraz
|
||||
**Done:** Atrybuty `min` dynamicznie ustawione na wszystkich 4 inputach
|
||||
|
||||
### Task 2: Walidacja w `validateForm()` — komunikat błędu
|
||||
**Plik:** `assets/js/carei-reservation.js`
|
||||
**Akcja:** W `validateForm()` po sprawdzeniu `dateTo > dateFrom` dodać sprawdzenie:
|
||||
- Jeśli `dateFrom < now` → error "Data lub godzina rozpoczęcia już minęły"
|
||||
- Jeśli `dateTo < now` → error "Data lub godzina zakończenia już minęły"
|
||||
**Weryfikacja:** Komunikat wyświetla się pod polem z czerwonym obramowaniem
|
||||
**Done:** Walidacja blokuje submit z datami wstecznymi + pokazuje polski komunikat
|
||||
|
||||
## Pliki do modyfikacji
|
||||
1. `wp-content/plugins/carei-reservation/assets/js/carei-reservation.js`
|
||||
|
||||
## Ryzyko
|
||||
- Brak — zmiana czysto frontendowa, walidacja klient-side
|
||||
32
.paul/phases/09-past-date-validation/09-01-SUMMARY.md
Normal file
32
.paul/phases/09-past-date-validation/09-01-SUMMARY.md
Normal file
@@ -0,0 +1,32 @@
|
||||
---
|
||||
phase:
|
||||
plan:
|
||||
completed: 2026-04-09T21:23:25.399Z
|
||||
---
|
||||
|
||||
# Phase 09-01 Summary
|
||||
|
||||
****
|
||||
|
||||
## Acceptance Criteria Results
|
||||
|
||||
| Criterion | Status |
|
||||
|-----------|--------|
|
||||
| Ustawienie atrybutu min na inputach datetime-local | Pass — enforceDateMin() ustawia min=now na dateFrom/dateTo w modalu, analogicznie w search form. Zmiana dateFrom aktualizuje min na dateTo. |
|
||||
| Walidacja w validateForm() — komunikat błędu | Pass — Dodano sprawdzenie dateFrom < now i dateTo < now z polskimi komunikatami błędów przed istniejącą walidacją dateTo > dateFrom. |
|
||||
|
||||
## Accomplishments
|
||||
|
||||
- Ustawienie atrybutu min na inputach datetime-local: enforceDateMin() ustawia min=now na dateFrom/dateTo w modalu, analogicznie w search form. Zmiana dateFrom aktualizuje min na dateTo.
|
||||
- Walidacja w validateForm() — komunikat błędu: Dodano sprawdzenie dateFrom < now i dateTo < now z polskimi komunikatami błędów przed istniejącą walidacją dateTo > dateFrom.
|
||||
|
||||
## Files Modified
|
||||
|
||||
|
||||
## Deviations
|
||||
|
||||
None — plan executed as specified.
|
||||
|
||||
---
|
||||
*Phase: , Plan: *
|
||||
*Completed: 2026-04-09*
|
||||
23
.paul/phases/09-past-date-validation/09-02-PLAN.md
Normal file
23
.paul/phases/09-past-date-validation/09-02-PLAN.md
Normal file
@@ -0,0 +1,23 @@
|
||||
# PLAN 09-02: Fix — walidacja godziny wstecznej w bieżącym dniu
|
||||
|
||||
## Problem
|
||||
Atrybut `min` na `datetime-local` nie jest konsekwentnie wymuszany przez przeglądarki dla części godzinowej. Użytkownik może wybrać dzisiejszą datę z godziną wcześniejszą niż teraz. Ponadto `enforceDateMin()` jest wywołane raz — `now` się starzeje.
|
||||
|
||||
## Rozwiązanie
|
||||
1. Przenieść `enforceDateMin()` poza `if (!dataLoaded)` — odświeżać `min` przy każdym otwarciu modala
|
||||
2. Dodać event listener `change` na inputach dat, który sprawdza czy wartość < now i jeśli tak — czyści pole + pokazuje komunikat
|
||||
3. Analogicznie w search form — odświeżanie min przy każdym `initSearchForm` run
|
||||
|
||||
## Taski
|
||||
|
||||
### Task 1: Odświeżanie min przy każdym otwarciu modala + walidacja on change
|
||||
**Plik:** `assets/js/carei-reservation.js`
|
||||
**Akcja:**
|
||||
- Przenieść `enforceDateMin()` za blok `if (!dataLoaded)`
|
||||
- W `enforceDateMin()` dodać listener `change` na dateFrom i dateTo sprawdzający `value < getNowLocal()` → markFieldError + clear value
|
||||
**Done:** Nie da się ustawić godziny wstecznej — pole reaguje natychmiast
|
||||
|
||||
### Task 2: Analogiczna walidacja on change w search form
|
||||
**Plik:** `assets/js/carei-reservation.js`
|
||||
**Akcja:** Dodać listener change na searchDateFrom/searchDateTo sprawdzający past time
|
||||
**Done:** Search form również blokuje godziny wsteczne
|
||||
32
.paul/phases/09-past-date-validation/09-02-SUMMARY.md
Normal file
32
.paul/phases/09-past-date-validation/09-02-SUMMARY.md
Normal file
@@ -0,0 +1,32 @@
|
||||
---
|
||||
phase:
|
||||
plan:
|
||||
completed: 2026-04-09T21:26:08.877Z
|
||||
---
|
||||
|
||||
# Phase 09-02 Summary
|
||||
|
||||
****
|
||||
|
||||
## Acceptance Criteria Results
|
||||
|
||||
| Criterion | Status |
|
||||
|-----------|--------|
|
||||
| Odświeżanie min przy każdym otwarciu modala + walidacja on change | Pass — enforceDateMin() przeniesione poza if(!dataLoaded) — min odświeżane przy każdym otwarciu. Listenery change na dateFrom/dateTo sprawdzają checkPastAndWarn() — czyści pole, pokazuje komunikat, dodaje error class. |
|
||||
| Analogiczna walidacja on change w search form | Pass — searchDateFrom i searchDateTo mają change listener z checkPastAndWarn(). Komunikat: 'Rozpoczęcie/Zakończenie — data lub godzina już minęły'. |
|
||||
|
||||
## Accomplishments
|
||||
|
||||
- Odświeżanie min przy każdym otwarciu modala + walidacja on change: enforceDateMin() przeniesione poza if(!dataLoaded) — min odświeżane przy każdym otwarciu. Listenery change na dateFrom/dateTo sprawdzają checkPastAndWarn() — czyści pole, pokazuje komunikat, dodaje error class.
|
||||
- Analogiczna walidacja on change w search form: searchDateFrom i searchDateTo mają change listener z checkPastAndWarn(). Komunikat: 'Rozpoczęcie/Zakończenie — data lub godzina już minęły'.
|
||||
|
||||
## Files Modified
|
||||
|
||||
|
||||
## Deviations
|
||||
|
||||
None — plan executed as specified.
|
||||
|
||||
---
|
||||
*Phase: , Plan: *
|
||||
*Completed: 2026-04-09*
|
||||
Reference in New Issue
Block a user