isset($value['evqra_date_format']) ? sanitize_text_field($value['evqra_date_format']) : 'Y-m-d', 'evqra_timezone' => isset($value['evqra_timezone']) && in_array($value['evqra_timezone'], timezone_identifiers_list(), true) ? $value['evqra_timezone'] : wp_timezone_string(), 'evqra_default_view' => isset($value['evqra_default_view']) && in_array($value['evqra_default_view'], $allowed_views, true) ? $value['evqra_default_view'] : 'month', 'evqra_events_per_page' => isset($value['evqra_events_per_page']) ? max(1, min(100, absint($value['evqra_events_per_page']))) : 10, ]; } public function sanitize_event_email_settings($value) { if (!is_array($value)) { return []; } $allowed_keys = [ 'user_registration', 'booking_pending', 'booking_confirmation', 'booking_cancellation', 'reset_password', 'booking_refund', 'frontend_submission', 'frontend_approval', ]; $sanitized = []; foreach ($allowed_keys as $key) { $item = isset($value[$key]) && is_array($value[$key]) ? $value[$key] : []; $sanitized[$key] = [ 'enabled' => !empty($item['enabled']) ? '1' : '0', 'subject' => isset($item['subject']) ? sanitize_text_field($item['subject']) : '', 'content' => isset($item['content']) ? sanitize_textarea_field($item['content']) : '', ]; } return $sanitized; } public function register_settings() { register_setting('evqra_event_settings_group', 'evqra_event_settings', ['type' => 'array', 'sanitize_callback' => [$this, 'sanitize_event_settings']]); add_settings_section('evqra_event_main', __('Main Settings', 'eventqora'), null, 'eventqora-event-settings'); add_settings_field( 'evqra_date_format', __('Date Format', 'eventqora'), [$this, 'render_date_format'], 'eventqora-event-settings', 'evqra_event_main' ); add_settings_field( 'evqra_timezone', __('Time Zone', 'eventqora'), [$this, 'render_timezone'], 'eventqora-event-settings', 'evqra_event_main' ); add_settings_field( 'evqra_default_view', __('Default View', 'eventqora'), [$this, 'render_default_view'], 'eventqora-event-settings', 'evqra_event_main' ); add_settings_field( 'evqra_events_per_page', __('Events Per Page', 'eventqora'), [$this, 'render_events_per_page'], 'eventqora-event-settings', 'evqra_event_main' ); // Register individual email options under 'evqra_event_email_settings' register_setting('evqra_event_settings_group', 'evqra_event_email_settings', ['type' => 'array', 'sanitize_callback' => [$this, 'sanitize_event_email_settings']]); add_settings_section('evqra_event_email', __('Email Notifications', 'eventqora'), null, 'eventqora-event-settings'); // Email types $email_keys = [ 'user_registration' => __('User Registration Email', 'eventqora'), 'booking_pending' => __('Booking Pending Email', 'eventqora'), 'booking_confirmation' => __('Booking Confirmation Email', 'eventqora'), 'booking_cancellation' => __('Booking Cancellation Email', 'eventqora'), 'reset_password' => __('Reset Password Email', 'eventqora'), 'booking_refund' => __('Booking Refund Email', 'eventqora'), 'frontend_submission' => __('Frontend Event Submission Email', 'eventqora'), 'frontend_approval' => __('Frontend Submission Approval Email', 'eventqora'), ]; foreach ($email_keys as $key => $label) { add_settings_field( 'email_' . $key, $label, [$this, 'render_email_field'], 'eventqora-event-settings', 'evqra_event_email', ['key' => $key] ); } // Global toggles add_settings_field( 'disable_admin_emails', __('Disable Admin Emails', 'eventqora'), [$this, 'render_disable_admin_emails'], 'eventqora-event-settings', 'evqra_event_email' ); add_settings_field( 'disable_frontend_emails', __('Disable Frontend Emails', 'eventqora'), [$this, 'render_disable_frontend_emails'], 'eventqora-event-settings', 'evqra_event_email' ); } public function render_settings_page() { ?>