Options::OPT_API_BASE_URL, 'agenized_widget_api_base_url' => Options::OPT_WIDGET_API_BASE_URL, 'agenized_portal_base_url' => Options::OPT_PORTAL_BASE_URL, 'agenized_widget_script_url' => Options::OPT_WIDGET_SCRIPT_URL, 'agenized_signup_url' => Options::OPT_SIGNUP_URL, 'agenized_oauth_client_id' => Options::OPT_OAUTH_CLIENT_ID, 'agenized_oauth_client_secret' => Options::OPT_OAUTH_CLIENT_SECRET, 'agenized_oauth_scopes' => Options::OPT_OAUTH_SCOPES, 'agenized_access_token' => Options::OPT_ACCESS_TOKEN, 'agenized_refresh_token' => Options::OPT_REFRESH_TOKEN, 'agenized_token_expires_at' => Options::OPT_TOKEN_EXPIRES_AT, 'agenized_channel_id' => Options::OPT_CHANNEL_ID, 'agenized_channel_public_key' => Options::OPT_CHANNEL_PUBLIC_KEY, 'agenized_wc_action_connection_id' => Options::OPT_WC_ACTION_CONNECTION_ID, 'agenized_wc_key_id' => Options::OPT_WC_KEY_ID, 'agenized_orders_webhook_secret' => Options::OPT_ORDERS_WEBHOOK_SECRET, 'agenized_enable_context_events' => Options::OPT_ENABLE_CONTEXT_EVENTS, 'agenized_enable_order_webhooks' => Options::OPT_ENABLE_ORDER_WEBHOOKS, ]; foreach ($legacy_to_current as $legacy_key => $current_key) { $current_value = get_option($current_key, null); if (self::has_meaningful_value($current_value)) { continue; } if (!self::option_exists($legacy_key)) { continue; } $legacy_value = get_option($legacy_key, null); if ($legacy_value === null) { continue; } update_option($current_key, $legacy_value, false); } } private static function option_exists(string $key): bool { $sentinel = '__agenized_missing__'; $value = get_option($key, $sentinel); return $value !== $sentinel; } /** * Treat empty strings/null as not set; booleans/integers are meaningful. * * @param mixed $value Option value. */ private static function has_meaningful_value($value): bool { if ($value === null) { return false; } if (is_string($value)) { return trim($value) !== ''; } return true; } }