65 lines
2.2 KiB
Markdown
65 lines
2.2 KiB
Markdown
# 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 <plik>` (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)
|