requireAdminWithNonce('abj404_mode_toggle'); $container = ABJ_404_Solution_ServiceContainer::getInstance(); /** @var ABJ_404_Solution_RequestInputNormalizer $requestReader */ $requestReader = $container->has('request_input_normalizer') ? $container->get('request_input_normalizer') : abj_service('request_input_normalizer'); $mode = $requestReader->getPostOrGetSanitize('mode'); // Validate mode if ($mode !== 'simple' && $mode !== 'advanced') { wp_send_json_error(array('message' => __('Invalid mode', '404-solution')), 400); return; // @phpstan-ignore deadCode.unreachable } // Set the mode $result = abj_service('settings_mode_preference')->setMode($mode); if ($result !== false) { wp_send_json_success(array( 'mode' => $mode, 'message' => __('Settings mode updated', '404-solution') )); } else { global $wpdb; $dbError = isset($wpdb->last_error) && is_string($wpdb->last_error) ? trim($wpdb->last_error) : ''; $logger = abj_service('logging'); if ($logger !== null) { $logger->warn('Ajax_SettingsModeToggle::handleModeToggle: setSettingsMode("' . $mode . '") returned false (option write failed or value unchanged). Returning HTTP 500 to AJAX caller.'); } // Surface the wpdb-reported failure so the admin can self-diagnose // (corrupted user_meta table, read-only DB, etc.). When // update_user_meta() returns false because the value is unchanged // rather than because of a DB error, last_error is empty and the // framing message stands alone. $framing = __('Failed to update settings mode', '404-solution'); $message = $dbError !== '' ? $framing . ' (DB error: ' . $dbError . ')' : $framing; wp_send_json_error(array('message' => $message), 500); } } }