Add missing implementation files and planning docs:
- Phase 04: Shortcode handler and date helpers for form rendering
- Phase 05: Planning documentation for volume calculations
- Phase 06: Email generator for legacy HTML table format
These complete the form rendering, calculation, and email system.
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
Phase 7 implementation complete:
- Created captcha verification class
- Added inline form validation
- Integrated captcha with form
- Added error styling
- Updated all documentation
All 7 phases now complete! Plugin ready for testing.
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
- Verify captcha after nonce check
- Support all three providers
- Store captcha errors in transient
- Redirect back to form on verification failure
- German error message for failed captcha
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
- Render validation errors from transient at form top
- Display error summary with red border
- Integrate captcha widget in submit section
- Position captcha above submit button
- Delete transient after displaying errors
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
- Client-side validation on blur and submit
- Email format validation
- Required field validation
- Furniture items validation (at least one)
- Date field validation
- Inline error messages (no JavaScript alerts)
- Auto-scroll to first error
- Error clearing on field input
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
- Support for reCAPTCHA v2, v3, and hCaptcha
- Server-side verification with wp_remote_post
- Automatic script enqueuing based on provider
- Widget rendering for all three providers
- reCAPTCHA v3 score checking (>= 0.5)
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
Tasks completed: 3/3
- Settings class with WordPress Settings API
- Settings sections and fields with German labels
- Settings save confirmation
SUMMARY: .planning/phases/03-settings/03-01-SUMMARY.md
- Added settings_errors() call to display WordPress admin notices
- get_option() helper method already implemented for clean API access
- Settings now show success message after save
- All settings validated and persisted via WordPress Settings API
- Three sections: Email, Captcha, Form settings
- Email: receiver address field with validation
- Captcha: provider dropdown (none/reCAPTCHA v2/v3/hCaptcha) with dynamic key fields
- Form: thank you URL field
- JavaScript to show/hide captcha keys based on provider selection
- All labels and descriptions in German
- Settings class with singleton pattern
- Registered 5 settings: receiver_email, captcha_provider, captcha_site_key, captcha_secret_key, thankyou_url
- Proper sanitization callbacks for each setting type
- Helper method get_option() for clean API access
- Integrated with admin menu structure
- Added 6 additional work sections: Montage, Schrank, Elektriker, Dübelarbeiten, Packarbeiten, Anfahrt
- Each section includes label, fields with type information
- Field types: checkbox, abbau_aufbau, checkbox_anzahl, text
- Total: 32 additional work fields across 6 sections
- Preserves exact field names and structure from legacy
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
- Created Umzugsliste_Furniture_Data class with singleton pattern
- Extracted all 118 furniture items from 7 rooms with exact cbm values
- Preserved exact item names and order from legacy liste.php
- Room structure: wohnzimmer (32), schlafzimmer (15), arbeitszimmer (11), bad (3), kueche_esszimmer (18), kinderzimmer (18), keller (21)
- All items have name, cbm (float), and montage (boolean) properties
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
- CPT init hook was being added from within parent init hook
- Changed to call register_post_type() directly from main init
- Removed redundant hook from CPT constructor
- Fixes CPT not registering on plugin activation
Tasks completed: 3/3
- Create main plugin file with bootstrap code
- Register Custom Post Type for form submissions
- Create admin menu structure
SUMMARY: .planning/phases/01-foundation/01-01-SUMMARY.md
- Created Umzugsliste_Admin_Menu class with singleton pattern
- Top-level menu 'Umzugsliste' with dashicons-list-view icon
- Position 25 (below Comments, above Appearance)
- Capability: edit_posts (editors and above)
- Submenu 'Einträge' links to CPT list view
- Submenu 'Einstellungen' shows placeholder (Phase 3)
- Removed duplicate top-level menu item
- Created Umzugsliste_CPT class with singleton pattern
- Registered umzugsliste_entry post type
- German labels (Einträge, Eintrag)
- Settings: public=false, show_ui=true, show_in_menu=false
- Supports title field only (custom fields in Phase 6)
- Registered on init hook
- WordPress plugin header with proper metadata
- Plugin version constants and paths
- Main Umzugsliste class with singleton pattern
- Activation/deactivation hooks with flush_rewrite_rules
- Autoloader for includes/ directory
- Init hook to initialize plugin components
WordPress plugin for digital moving list form with legacy email format preservation.
Phases:
1. Foundation: Plugin infrastructure, CPT, admin menu
2. Legacy Data Extraction: Extract furniture data from legacy PHP
3. Settings System: Admin settings with email and captcha config
4. Form Rendering: Shortcode and form frontend matching legacy
5. Volume Calculations: cbm calculations matching legacy logic
6. Email System: Legacy HTML table format and wp_mail()
7. Captcha & Validation: reCAPTCHA v2/v3, hCaptcha, i18n
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>