New: Email Notifications page (π Notifications in admin menu) with 4 configurable email types
New: Appointment Reminder email β sent X hours before appointment (fully configurable), with editable subject, body, and template variables
New: Review Request email β sent X hours after appointment ends, includes a Google Review button (paste your Google Review link), with editable subject and body
New: Cancellation Notification email β sent when an appointment is cancelled, with editable subject and body
New: Reschedule Notification email β sent when an appointment is rescheduled, with editable subject and body
New: All 4 notification types include a “Send Test Email to Admin” button for easy preview
New: Admin Bookings page β Cancel button now shows a confirmation modal with “Notify customer by email” checkbox (checked by default)
New: Customer Portal β Cancel action now shows a confirmation modal with “Send me a confirmation email” checkbox
New: Customer Portal β Reschedule modal now includes a “Send me a confirmation email” checkbox
Fixed: Auto Sync cron was not rescheduling when sync interval was changed β hook was listening to wrong option name (sbs_sync_interval instead of yatoon_sync_interval)
Fixed: yatoon_sync_interval was being sanitized with absint(), converting string values like ‘daily’ to 0 and breaking the cron schedule β changed to sanitize_text_field()
Fixed: Toggling Auto Sync off now properly removes the cron event; toggling on re-schedules it
Fixed: Existing installs with a corrupted sync interval are automatically repaired on upgrade
1.1.7
i18n: Added full translations for Chinese Simplified (zh_CN), Vietnamese (vi), and Spanish (Spanish) (es_ES)
Added Business Address and Business Website fields to Contact Information settings
Booking confirmation screen now dynamically renders address/phone/website from settings (hidden when blank)
Unified business phone option key to yatoon_business_phone
1.1.6
Added i18n infrastructure: all user-facing strings wrapped with translation functions
Added languages/ directory with .pot template file
1.1.5
Fixed: All color option values in class-yatoon-frontend.php now wrapped with sanitize_hex_color() before CSS injection
Fixed: admin/views/bookings.php ABSPATH check moved before global $wpdb
1.1.3
Fixed: Replaced all $table_xxx variables in SQL queries with {$wpdb->prefix}tablename directly (resolves InterpolatedNotPrepared + UnescapedDBParameter)
Fixed: All date() calls replaced with gmdate() (25 instances)
Fixed: strip_tags() replaced with wp_strip_all_tags()
Fixed: Added phpcs:disable/enable to all view files for NonPrefixedVariableFound (view files are included partials, not global scope)
Fixed: Added nonce verification to ajax_get_staff_services and ajax_update_staff_services
Fixed: ExceptionNotEscaped in cron.php – exceptions are logged, not echoed to users
Fixed: UnfinishedPrepare – $placeholders and $ph contain %d format strings
Fixed: NonPrefixedFunctionFound – sbs_resolve_font renamed to yatoon_resolve_font
Fixed: SBS_* backward-compat constants annotated with phpcs:ignore