5.3 KiB
5.3 KiB
2026-05-06
Co zrobiono
- [Phase 9, Plan 01] UX/UI polish kalendarza: skos 45° na pierwszym/ostatnim dniu rezerwacji, ciemne ramki dni, paleta widgetu dopasowana do brandu strony (granat #0e2036, czerwień #bc1834)
- Edge detection po stronie klienta — porównanie sąsiadujących dni po booking_id+status, klasy
yacht-day-{booked|blocked}-{start|end|mid|single} - Gradient 135° na obu skrajnych dniach (parallelogram przez wiersz), single-day blokada renderowana jako pełen booked
- CSS variables
--yacht-available-bg/--yacht-booked-bgustawiane z JS na wrapperze — reuse w gradientach + legendzie - Nagłówki kolumn FullCalendar w granacie, ramki przez
--fc-border-color: #0e2036+ override 7 selektorów - Cyfry dni
#021526(past#6c757d) — przebicie globalnej regułybody a:not([href]) - Legenda rozszerzona o 3-ci swatch „Dzień odbioru / zwrotu" z gradientem
- Helper
test-add-booking.php(token-protected, akcje add/list/remove) do smoke testu — DO USUNIĘCIA z FTP po testach - [Phase 9, Plan 02] Globalna synchronizacja iCal — jeden wspólny Google Calendar dla całej floty z podziałem po prefiksie nazwy jachtu w tytule eventu
- Globalny iCal Export feed (
/yacht-ical-global/{token}.ics) — wszystkie rezerwacje w jednym pliku, każdy event z prefiksem"{nazwa_jachtu} - {klient}", anti-loop (pomija events z sourceical_import_global) - Globalny iCal Import URL — pobiera kalendarz Google admina, parser dopasowuje prefiks przed
" - "(mb_* dla polskich znaków, case-insensitive) dopost_titlelub_yacht_gcal_alias(priorytet alias) - Eventy bez separatora lub bez dopasowanego jachtu — ignorowane (logowane). Stale cleanup usuwa booking gdy event zniknął z GCal
- Cron godzinny
yacht_booking_ical_global_import+ manualny przycisk "Importuj teraz" - Pole
_yacht_gcal_aliasw yacht-edit (krótki alias, np. "Maja" zamiast "Marina Maja Sailing 35") - Settings UI: nowa sekcja "Globalna synchronizacja iCal" z export URL (kopiuj + regeneracja tokenu), import URL, instrukcja
- Per-yacht feedy iCal i OAuth push pozostają jako kompatybilność wsteczna (out of scope ich sprzątania)
- [Phase 9, Plan 03] Cleanup OAuth + per-yacht iCal — plugin sprowadzony do JEDNEGO mechanizmu sync (globalny iCal)
- Usunięte 3 pliki OAuth (
integrations/google-calendar/class-{sync-controller,gcal-service,oauth-handler}.php) + cały katalog - Wycięte z bootstrap: require + setup_cron + clear_cron Sync_Controller (yacht-booking-system.php, class-yacht-booking.php)
- Wycięte z admin: cała sekcja UI OAuth (Client ID/Secret, "Połącz", "Synchronizuj teraz", instrukcja),
handle_oauth_callback,save_gcal_credentials, callback/disconnect/credentials wprocess_settings_save, notice connected/disconnected - Wycięte per-yacht iCal:
IMPORT_SOURCE,run_import,import_for_yacht,get/set_import_url,get_existing_import_map,upsert_booking,get_last_import_time, cronyacht_booking_ical_import, rewrite rule^yacht-ical/(\d+)/...,output_ics,get_feed_token,regenerate_token,get_feed_url - Wycięte z yacht-edit: pola "Google Calendar ID", "iCal Import URL", "iCal Feed URL". Pozostaje tylko Alias.
- Wycięte z yacht-list-table: kolumna "Google Calendar"
- Yacht class: usunięte
get_gcal_id(),update_gcal_id() - Cleanup migration w
Installer::migrate()— version-gated (idempotent), kasuje 4 stale meta keys, 6 stale options OAuth, bookings z sourceical_import, 5 stale cron hooków. "Po cichu" — bez admin notice - uninstall.php zaktualizowany o globalne iCal opcje + defensywne legacy gcal_* delete
Zmienione pliki
wp-content/plugins/yacht-booking-system/frontend/assets/js/calendar.jswp-content/plugins/yacht-booking-system/frontend/assets/css/calendar.scsswp-content/plugins/yacht-booking-system/frontend/assets/css/calendar.csswp-content/plugins/yacht-booking-system/frontend/class-calendar-widget.phptest-add-booking.php(nowy, helper testowy).paul/phases/09-finalizacja/09-01-PLAN.md(nowy).paul/phases/09-finalizacja/09-01-SUMMARY.md(nowy).paul/phases/09-finalizacja/09-02-PLAN.md(nowy).paul/phases/09-finalizacja/09-02-SUMMARY.md(nowy).paul/phases/09-finalizacja/09-03-PLAN.md(nowy).paul/phases/09-finalizacja/09-03-SUMMARY.md(nowy)wp-content/plugins/yacht-booking-system/integrations/google-calendar/class-sync-controller.php(USUNIĘTY)wp-content/plugins/yacht-booking-system/integrations/google-calendar/class-gcal-service.php(USUNIĘTY)wp-content/plugins/yacht-booking-system/integrations/google-calendar/class-oauth-handler.php(USUNIĘTY)wp-content/plugins/yacht-booking-system/yacht-booking-system.phpwp-content/plugins/yacht-booking-system/includes/class-yacht-booking.phpwp-content/plugins/yacht-booking-system/integrations/ical/class-ical-feed.phpwp-content/plugins/yacht-booking-system/integrations/ical/class-ical-import.phpwp-content/plugins/yacht-booking-system/includes/class-yacht.phpwp-content/plugins/yacht-booking-system/includes/class-installer.phpwp-content/plugins/yacht-booking-system/admin/class-admin.phpwp-content/plugins/yacht-booking-system/admin/views/yacht-edit.phpwp-content/plugins/yacht-booking-system/admin/class-yacht-list-table.phpwp-content/plugins/yacht-booking-system/uninstall.php.paul/STATE.md.paul/ROADMAP.md