2.2 KiB
2.2 KiB
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}— publiczneGET /availability/{yacht_id}— publicznePOST /bookings— publiczne (wymaga X-WP-Nonce)GET /bookings,PUT /bookings/{id}/status— admin only
Testy
- Brak automatycznych testów — testy manualne przez pliki
test-*.phpw root projektu - Po każdej zmianie weryfikuj:
php -l <plik>(syntax check)
Deployment
- Edytuj pliki lokalnie w VS Code
- Deploy przez FTP (ftp-kr) — automatyczny przy zapisie lub ręczny
- 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)