# Projektowe zasady dla jachty3.pagedev.pl ## Stack - **Język:** PHP 7.4+ - **CMS:** WordPress 6.x - **Page Builder:** Elementor Pro - **Frontend:** FullCalendar.js v6 (CDN), jQuery - **Baza danych:** MySQL — WordPress CPT + custom tabela `wp_yacht_availability` - **Integracja:** Google Calendar API v3 (OAuth 2.0, natywna implementacja) - **Deployment:** FTP via ftp-kr (VS Code extension) ## Główny plugin `wp-content/plugins/yacht-booking-system/` — namespace `YachtBooking\` ## Zasady kodu PHP - WordPress Coding Standards (nie PSR-12) - Nazewnictwo: PascalCase dla klas, snake_case dla metod i zmiennych - Singleton pattern dla głównych klas - Security: nonce verification + sanitize + escape na wyjściu - Każda operacja DB przez `$wpdb->prepare()` — bez surowych zapytań SQL ## Baza danych - Custom tabela: `wp_yacht_availability` (yacht_id, date, status, booking_id) - CPT: `yacht` (meta: capacity, price_per_day, gcal_id, features) - CPT: `yacht_booking` (meta: yacht_id, start_date, end_date, status, customer_*, total_price, gcal_event_id) - Schemat dokumentowany w `.paul/codebase/db_schema.md` - Zmiany schematu przez klasę `Installer` (incremental upgrades) ## REST API Namespace: `/wp-json/yacht-booking/v1/` - `GET /yachts`, `GET /yachts/{id}` — publiczne - `GET /availability/{yacht_id}` — publiczne - `POST /bookings` — publiczne (wymaga X-WP-Nonce) - `GET /bookings`, `PUT /bookings/{id}/status` — admin only ## Testy - Brak automatycznych testów — testy manualne przez pliki `test-*.php` w root projektu - Po każdej zmianie weryfikuj: `php -l ` (syntax check) ## Deployment 1. Edytuj pliki lokalnie w VS Code 2. Deploy przez FTP (ftp-kr) — automatyczny przy zapisie lub ręczny 3. Konfiguracja FTP: `.vscode/ftp-kr.json` ## Frontend - Elementor widget: `frontend/class-calendar-widget.php` - Shortcode: `[yacht_calendar yacht_id="X"]` - JavaScript: IIFE pattern `(function($) {...})(jQuery)` - CSS: mobile-first, BEM-like nazewnictwo klas - Nie używaj npm/webpack — zasoby statyczne lub CDN ## Wdrażanie zmian Google Calendar - OAuth tokens w `wp_options` (klucze: `yacht_booking_*`) - Auto-refresh tokenów w `class-oauth-handler.php` - Sync: `class-sync-controller.php` (hooks + cron)