fix: Channel toggle and event defaults issues
## 🐛 Critical Fixes ### Issue 1: Toggle Refuses to Disable **Problem:** Channels always return `enabled: true` even after toggling off **Root Cause:** Response didn't include actual saved state **Fix:** Added verification and return actual state in response **Changes:** ```php // Update option update_option($option_key, (bool) $enabled, false); // Verify the update $verified = get_option($option_key); // Return verified state return [ 'channelId' => $channel_id, 'enabled' => (bool) $verified, ]; ``` ### Issue 2: Wrong Event Channel Defaults **Problem:** - Email showing as enabled by default in frontend - Push showing as disabled in frontend - Mismatch between frontend and backend **Root Cause:** 1. Wrong path: `$settings['event_id']` instead of `$settings['event_id']['channels']` 2. Defaults set to `true` instead of `false` **Fix:** ```php // Before 'channels' => $settings['order_placed'] ?? ['email' => ['enabled' => true, ...]] // After 'channels' => $settings['order_placed']['channels'] ?? [ 'email' => ['enabled' => false, 'recipient' => 'admin'], 'push' => ['enabled' => false, 'recipient' => 'admin'] ] ``` ### What Was Fixed 1. ✅ Channel toggle now saves correctly 2. ✅ Response includes verified state 3. ✅ Event channels default to `false` (disabled) 4. ✅ Both email and push included in defaults 5. ✅ Correct path to saved settings 6. ✅ Consistent behavior across all events ### Testing - [ ] Toggle email off → stays off - [ ] Toggle push off → stays off - [ ] Reload page → state persists - [ ] Events page shows correct defaults (all disabled) - [ ] Enable per-event channel → saves correctly --- **Toggles should now work properly!** ✅
This commit is contained in:
@@ -203,7 +203,7 @@ class NotificationsController {
|
||||
'category' => 'orders',
|
||||
'wc_email' => 'new_order',
|
||||
'enabled' => true,
|
||||
'channels' => $settings['order_placed'] ?? ['email' => ['enabled' => true, 'recipient' => 'admin']],
|
||||
'channels' => $settings['order_placed']['channels'] ?? ['email' => ['enabled' => false, 'recipient' => 'admin'], 'push' => ['enabled' => false, 'recipient' => 'admin']],
|
||||
],
|
||||
[
|
||||
'id' => 'order_processing',
|
||||
@@ -212,7 +212,7 @@ class NotificationsController {
|
||||
'category' => 'orders',
|
||||
'wc_email' => 'customer_processing_order',
|
||||
'enabled' => true,
|
||||
'channels' => $settings['order_processing'] ?? ['email' => ['enabled' => true, 'recipient' => 'customer']],
|
||||
'channels' => $settings['order_processing']['channels'] ?? ['email' => ['enabled' => false, 'recipient' => 'customer'], 'push' => ['enabled' => false, 'recipient' => 'customer']],
|
||||
],
|
||||
[
|
||||
'id' => 'order_completed',
|
||||
@@ -221,7 +221,7 @@ class NotificationsController {
|
||||
'category' => 'orders',
|
||||
'wc_email' => 'customer_completed_order',
|
||||
'enabled' => true,
|
||||
'channels' => $settings['order_completed'] ?? ['email' => ['enabled' => true, 'recipient' => 'customer']],
|
||||
'channels' => $settings['order_completed']['channels'] ?? ['email' => ['enabled' => false, 'recipient' => 'customer'], 'push' => ['enabled' => false, 'recipient' => 'customer']],
|
||||
],
|
||||
[
|
||||
'id' => 'order_cancelled',
|
||||
@@ -230,7 +230,7 @@ class NotificationsController {
|
||||
'category' => 'orders',
|
||||
'wc_email' => 'cancelled_order',
|
||||
'enabled' => true,
|
||||
'channels' => $settings['order_cancelled'] ?? ['email' => ['enabled' => true, 'recipient' => 'admin']],
|
||||
'channels' => $settings['order_cancelled']['channels'] ?? ['email' => ['enabled' => false, 'recipient' => 'admin'], 'push' => ['enabled' => false, 'recipient' => 'admin']],
|
||||
],
|
||||
[
|
||||
'id' => 'order_refunded',
|
||||
@@ -239,7 +239,7 @@ class NotificationsController {
|
||||
'category' => 'orders',
|
||||
'wc_email' => 'customer_refunded_order',
|
||||
'enabled' => true,
|
||||
'channels' => $settings['order_refunded'] ?? ['email' => ['enabled' => true, 'recipient' => 'customer']],
|
||||
'channels' => $settings['order_refunded']['channels'] ?? ['email' => ['enabled' => false, 'recipient' => 'customer'], 'push' => ['enabled' => false, 'recipient' => 'customer']],
|
||||
],
|
||||
],
|
||||
'products' => [
|
||||
@@ -250,7 +250,7 @@ class NotificationsController {
|
||||
'category' => 'products',
|
||||
'wc_email' => 'low_stock',
|
||||
'enabled' => true,
|
||||
'channels' => $settings['low_stock'] ?? ['email' => ['enabled' => true, 'recipient' => 'admin']],
|
||||
'channels' => $settings['low_stock']['channels'] ?? ['email' => ['enabled' => false, 'recipient' => 'admin'], 'push' => ['enabled' => false, 'recipient' => 'admin']],
|
||||
],
|
||||
[
|
||||
'id' => 'out_of_stock',
|
||||
@@ -259,7 +259,7 @@ class NotificationsController {
|
||||
'category' => 'products',
|
||||
'wc_email' => 'no_stock',
|
||||
'enabled' => true,
|
||||
'channels' => $settings['out_of_stock'] ?? ['email' => ['enabled' => true, 'recipient' => 'admin']],
|
||||
'channels' => $settings['out_of_stock']['channels'] ?? ['email' => ['enabled' => false, 'recipient' => 'admin'], 'push' => ['enabled' => false, 'recipient' => 'admin']],
|
||||
],
|
||||
],
|
||||
'customers' => [
|
||||
@@ -270,7 +270,7 @@ class NotificationsController {
|
||||
'category' => 'customers',
|
||||
'wc_email' => 'customer_new_account',
|
||||
'enabled' => true,
|
||||
'channels' => $settings['new_customer'] ?? ['email' => ['enabled' => true, 'recipient' => 'customer']],
|
||||
'channels' => $settings['new_customer']['channels'] ?? ['email' => ['enabled' => false, 'recipient' => 'customer'], 'push' => ['enabled' => false, 'recipient' => 'customer']],
|
||||
],
|
||||
[
|
||||
'id' => 'customer_note',
|
||||
@@ -279,7 +279,7 @@ class NotificationsController {
|
||||
'category' => 'customers',
|
||||
'wc_email' => 'customer_note',
|
||||
'enabled' => true,
|
||||
'channels' => $settings['customer_note'] ?? ['email' => ['enabled' => true, 'recipient' => 'customer']],
|
||||
'channels' => $settings['customer_note']['channels'] ?? ['email' => ['enabled' => false, 'recipient' => 'customer'], 'push' => ['enabled' => false, 'recipient' => 'customer']],
|
||||
],
|
||||
],
|
||||
];
|
||||
@@ -574,10 +574,11 @@ class NotificationsController {
|
||||
}
|
||||
|
||||
// Only allow toggling built-in channels
|
||||
$option_key = '';
|
||||
if ($channel_id === 'email') {
|
||||
update_option('woonoow_email_notifications_enabled', (bool) $enabled);
|
||||
$option_key = 'woonoow_email_notifications_enabled';
|
||||
} elseif ($channel_id === 'push') {
|
||||
update_option('woonoow_push_notifications_enabled', (bool) $enabled);
|
||||
$option_key = 'woonoow_push_notifications_enabled';
|
||||
} else {
|
||||
return new WP_Error(
|
||||
'invalid_channel',
|
||||
@@ -586,6 +587,12 @@ class NotificationsController {
|
||||
);
|
||||
}
|
||||
|
||||
// Update the option
|
||||
update_option($option_key, (bool) $enabled, false); // false = don't autoload
|
||||
|
||||
// Verify the update
|
||||
$verified = get_option($option_key);
|
||||
|
||||
return new WP_REST_Response([
|
||||
'success' => true,
|
||||
'message' => sprintf(
|
||||
@@ -593,6 +600,8 @@ class NotificationsController {
|
||||
$channel_id === 'email' ? __('Email', 'woonoow') : __('Push', 'woonoow'),
|
||||
$enabled ? __('enabled', 'woonoow') : __('disabled', 'woonoow')
|
||||
),
|
||||
'channelId' => $channel_id,
|
||||
'enabled' => (bool) $verified,
|
||||
], 200);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user