fix: Properly update gateway enabled property + add debug logging

🔍 Suspect #7: Gateway enabled property not being updated

Problem:
- We save to database 
- We reload settings 
- But $gateway->enabled property might not update!

Root Cause:
WooCommerce has TWO places for enabled status:
1. $gateway->settings['enabled'] (in database)
2. $gateway->enabled (instance property)

We were only updating #1, not #2!

The Fix:
// Update both places
$gateway->settings = $new_settings;  // Database
update_option($gateway->get_option_key(), $gateway->settings);

if (isset($new_settings['enabled'])) {
    $gateway->enabled = $new_settings['enabled'];  // Instance property!
}

Added Debug Logging:
- Log toggle request (gateway ID + enabled value)
- Log save process (current vs new enabled)
- Log update_option result
- Log final enabled value after fetch
- All logs prefixed with [WooNooW] for easy filtering

How to Debug:
1. Toggle a gateway
2. Check debug.log or error_log
3. Look for [WooNooW] lines
4. See exact values at each step

Files Modified:
- PaymentGatewaysProvider.php: Update both settings + enabled property
- PaymentsController.php: Add debug logging

Next Step:
Test toggle and check logs to see what's actually happening!
This commit is contained in:
dwindown
2025-11-05 23:30:20 +07:00
parent cf4fb03ffa
commit 290b1b6330
2 changed files with 29 additions and 12 deletions

View File

@@ -220,9 +220,13 @@ class PaymentsController extends WP_REST_Controller {
} }
try { try {
// Debug: Log what we're trying to do
error_log(sprintf('[WooNooW] Toggling gateway %s to %s', $gateway_id, $enabled ? 'enabled' : 'disabled'));
$result = PaymentGatewaysProvider::toggle_gateway($gateway_id, $enabled); $result = PaymentGatewaysProvider::toggle_gateway($gateway_id, $enabled);
if (is_wp_error($result)) { if (is_wp_error($result)) {
error_log(sprintf('[WooNooW] Toggle failed: %s', $result->get_error_message()));
return $result; return $result;
} }
@@ -232,12 +236,16 @@ class PaymentsController extends WP_REST_Controller {
// Return updated gateway data (fresh from DB) // Return updated gateway data (fresh from DB)
$gateway = PaymentGatewaysProvider::get_gateway($gateway_id); $gateway = PaymentGatewaysProvider::get_gateway($gateway_id);
// Debug: Log what we got back
error_log(sprintf('[WooNooW] Gateway %s after toggle: enabled=%s', $gateway_id, $gateway['enabled'] ? 'true' : 'false'));
return rest_ensure_response([ return rest_ensure_response([
'success' => true, 'success' => true,
'message' => $enabled ? 'Gateway enabled' : 'Gateway disabled', 'message' => $enabled ? 'Gateway enabled' : 'Gateway disabled',
'gateway' => $gateway, 'gateway' => $gateway,
]); ]);
} catch (\Exception $e) { } catch (\Exception $e) {
error_log(sprintf('[WooNooW] Toggle exception: %s', $e->getMessage()));
return new WP_Error( return new WP_Error(
'toggle_gateway_failed', 'toggle_gateway_failed',
$e->getMessage(), $e->getMessage(),

View File

@@ -360,20 +360,29 @@ class PaymentGatewaysProvider {
// Block external HTTP requests (analytics, tracking, etc.) // Block external HTTP requests (analytics, tracking, etc.)
add_filter('pre_http_request', '__return_true', 999); add_filter('pre_http_request', '__return_true', 999);
// Merge with existing settings // Get current settings and merge with new ones
$current_settings = get_option($gateway->get_option_key(), []); $gateway->init_settings();
$current_settings = $gateway->settings;
$new_settings = array_merge($current_settings, $settings); $new_settings = array_merge($current_settings, $settings);
// Use gateway's own validation if available // Debug logging
if (method_exists($gateway, 'validate_settings_fields')) { error_log(sprintf('[WooNooW] Saving gateway %s settings: %s', $gateway_id, json_encode($settings)));
$gateway->init_settings(); error_log(sprintf('[WooNooW] Current enabled: %s, New enabled: %s',
foreach ($new_settings as $key => $value) { isset($current_settings['enabled']) ? $current_settings['enabled'] : 'not set',
$gateway->settings[$key] = $value; isset($new_settings['enabled']) ? $new_settings['enabled'] : 'not set'
} ));
$gateway->process_admin_options();
} else { // Update gateway settings directly
// Direct save (faster) $gateway->settings = $new_settings;
update_option($gateway->get_option_key(), $new_settings, 'yes');
// Save to database using WooCommerce's method
$saved = update_option($gateway->get_option_key(), $gateway->settings, 'yes');
error_log(sprintf('[WooNooW] update_option returned: %s', $saved ? 'true' : 'false'));
// Update the enabled property specifically (WooCommerce does this)
if (isset($new_settings['enabled'])) {
$gateway->enabled = $new_settings['enabled'];
error_log(sprintf('[WooNooW] Set gateway->enabled to: %s', $gateway->enabled));
} }
// Re-enable HTTP requests // Re-enable HTTP requests