diff --git a/CLAUDE.md b/CLAUDE.md index 86775e9..6e9560e 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -260,6 +260,8 @@ wp-bnb/ │ │ ├── Calculator.php # Price calculation │ │ ├── PricingTier.php # Pricing tier enum │ │ └── Season.php # Seasonal pricing +│ ├── Integration/ # Third-party integrations +│ │ └── CF7.php # Contact Form 7 integration │ └── Taxonomies/ # Custom taxonomies │ ├── Amenity.php # Amenity taxonomy (tags) │ └── RoomType.php # Room type taxonomy (categories) @@ -270,10 +272,12 @@ wp-bnb/ │ ├── css/ │ │ ├── admin.css # Admin styles │ │ ├── blocks-editor.css # Gutenberg editor styles +│ │ ├── cf7-integration.css # CF7 form styles │ │ └── frontend.css # Frontend styles (~1250 lines) │ └── js/ │ ├── admin.js # Admin scripts │ ├── blocks-editor.js # Gutenberg editor scripts +│ ├── cf7-integration.js # CF7 form scripts │ └── frontend.js # Frontend scripts (~825 lines) ├── templates/ # Twig templates (future) ├── languages/ # Translation files (future) @@ -742,3 +746,65 @@ Admin features always work; frontend requires valid license. - `use_block_editor_for_post_type` filter disables Gutenberg per post type - Post types with `show_in_rest => true` get Gutenberg by default, which hides traditional meta boxes - Form-based admin interfaces (data entry) should use classic editor, not block editor + +### 2026-02-03 - Version 0.7.0 (Contact Form 7 Integration) + +**Completed:** + +- Created `src/Integration/CF7.php` (~750 lines) + - Custom form tags: `[bnb_building_select]`, `[bnb_room_select]`, `[bnb_date_checkin]`, `[bnb_date_checkout]`, `[bnb_guests]` + - Server-side validation for all custom tags + - Availability validation in `wpcf7_before_send_mail` hook + - Automatic booking creation on form submission via `wpcf7_mail_sent` + - Guest record creation/linking using `find_or_create_guest()` pattern + - Custom mail tags: `[_bnb_room_name]`, `[_bnb_building_name]`, `[_bnb_calculated_price]`, `[_bnb_nights]`, `[_bnb_booking_reference]` + - Form type detection via CSS class `wp-bnb-booking-form` +- Created `assets/js/cf7-integration.js` (~230 lines) + - Building-based room filtering (rooms dropdown updates when building selected) + - Date validation (check-out after check-in, no past dates) + - Guest capacity validation against room limits + - AJAX availability checking with status display + - AJAX price calculation with formatted display + - Debounced updates to prevent excessive requests +- Created `assets/css/cf7-integration.css` (~200 lines) + - Two-column responsive form layout + - Availability status indicators (checking spinner, available checkmark, unavailable X) + - Price display formatting + - Capacity warning styling + - Dark mode support via `prefers-color-scheme` + - Print styles (hide interactive elements) +- Updated `src/Plugin.php` + - Added `use Magdev\WpBnb\Integration\CF7` import + - CF7 initialization in `init_frontend()` when WPCF7 class exists + - CF7 assets enqueuing with localized i18n strings +- Updated `README.md` with comprehensive CF7 documentation + - Custom form tags reference with options + - Example booking form template + - Example inquiry form template + - Custom mail tags documentation + +**Files Created:** + +- `src/Integration/CF7.php` - Main CF7 integration class +- `assets/js/cf7-integration.js` - Frontend JavaScript +- `assets/css/cf7-integration.css` - Form styling + +**Learnings:** + +- CF7 custom tags registered via `wpcf7_add_form_tag()` with callback functions +- Validation filters follow pattern `wpcf7_validate_{tag_name}` +- `wpcf7_before_send_mail` can abort submission by setting `$abort` to true and adding validation error +- `wpcf7_mail_sent` fires after successful email, ideal for booking creation +- Custom mail tags via `wpcf7_special_mail_tags` filter receive submission data +- Form type detection by CSS class more reliable than checking for specific tags +- Room dropdown with `data-building` attributes enables client-side filtering +- AJAX endpoints reuse existing `wp_bnb_get_availability` and `wp_bnb_calculate_price` actions +- CF7 assets should depend on `contact-form-7` script/style handles +- Guest linking uses email as unique identifier for find-or-create pattern + +**Released:** + +- Committed: `28350aa` on dev branch +- Merged to main (fast-forward) +- Tagged: `v0.7.0` +- Pushed to origin: dev, main, v0.7.0