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:
@@ -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(),
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user