- Fix: Marketing events now display in Staff notifications tab
- Reorganize: Move Coupons to Marketing/Coupons for better organization
- Add: Comprehensive email/phone validation with extensible filter hooks
- Email validation with regex pattern (xxxx@xxxx.xx)
- Phone validation with WhatsApp verification support
- Filter hooks for external API integration (QuickEmailVerification, etc.)
- Fix: Newsletter template routes now use centralized notification email builder
- Add: Validation.php class for reusable validation logic
- Add: VALIDATION_HOOKS.md documentation with integration examples
- Add: NEWSLETTER_CAMPAIGN_PLAN.md architecture for future campaign system
- Fix: API delete method call in Newsletter.tsx (delete -> del)
- Remove: Duplicate EmailTemplates.tsx (using notification system instead)
- Update: Newsletter controller to use centralized Validation class
Breaking changes:
- Coupons routes moved from /routes/Coupons to /routes/Marketing/Coupons
- Legacy /coupons routes maintained for backward compatibility
- Add WishlistController with full CRUD API
- Create wishlist page in My Account
- Add heart icon to all product card layouts (always visible)
- Implement useWishlist hook for state management
- Add wishlist toggle in admin Settings > Customer
- Fix wishlist menu visibility based on admin settings
- Fix double navigation in wishlist page
- Fix variable product navigation to use React Router
- Add TypeScript type casting fix for addresses
- Add AddressController with full CRUD API for saved addresses
- Implement address management UI in My Account > Addresses
- Add modal-based address selector in checkout (Tokopedia-style)
- Hide checkout forms when saved address is selected
- Add search functionality in address modal
- Auto-select default addresses on page load
- Fix variable products to show 'Select Options' instead of 'Add to Cart'
- Add admin toggle for multiple addresses feature
- Clean up debug logs and fix TypeScript errors
Moved 'Register as site member' from order-level to site-level setting
Frontend Changes:
1. Customer Settings - Added new General section
- Auto-register customers as site members toggle
- Clear description of functionality
- Saved to backend via existing API
2. OrderForm - Removed checkbox
- Removed registerAsMember state
- Removed checkbox UI
- Removed register_as_member from payload
- Backend now uses site setting
Backend Changes:
1. CustomerSettingsProvider.php
- Added auto_register_members setting
- Default: false (no)
- Stored as woonoow_auto_register_members option
- Included in get_settings()
- Handled in update_settings()
2. OrdersController.php
- Removed register_as_member parameter
- Now reads from CustomerSettingsProvider
- Site-level setting applies to all orders
- Consistent behavior across all order creation
Benefits:
✅ Site-level control (not per-order)
✅ Consistent customer experience
✅ Easier to manage (one setting)
✅ No UI clutter in order form
✅ Setting persists across all orders
Migration:
- Old orders with checkbox: No impact
- New orders: Use site setting
- Default: Disabled (safe default)
Result:
Admins can now control customer registration site-wide from Customer Settings instead of per-order checkbox