input( 'api_key', 'post', '' ) ); // If user left it masked (contains asterisks), keep existing key if ( str_contains( $api_key, '****' ) ) { $api_key = $settings['api_key'] ?? ''; } $settings['provider'] = sanitize_key( $request->input( 'provider', 'post', 'gemini' ) ); $settings['api_key'] = trim( $api_key ); $settings['model'] = sanitize_text_field( $request->input( 'model', 'post', 'gemini-3.6-flash' ) ); $settings['image_model'] = sanitize_text_field( $request->input( 'image_model', 'post', 'imagen-3.0-generate-002' ) ); $settings['default_tone'] = sanitize_key( $request->input( 'default_tone', 'post', 'promotional' ) ); $settings['image_size'] = sanitize_text_field( $request->input( 'image_size', 'post', '300x250' ) ); if ( 'gemini-2.0-flash' === $settings['model'] ) { $settings['model'] = 'gemini-3.6-flash'; } update_option( self::OPTION_KEY, $settings ); wp_send_json_success( array( 'message' => __( 'AI Settings saved successfully.', 'ad-fuz' ) ) ); } public static function aiTabData( array $tabData ): array { $settings = get_option( self::OPTION_KEY, array() ); $raw_key = $settings['api_key'] ?? ''; $model = $settings['model'] ?? 'gemini-3.6-flash'; if ( 'gemini-2.0-flash' === $model ) { $model = 'gemini-3.6-flash'; } $tabData['provider'] = $settings['provider'] ?? 'gemini'; $tabData['api_key'] = $raw_key; $tabData['has_api_key'] = ! empty( $raw_key ); $tabData['model'] = $model; $tabData['image_model'] = $settings['image_model'] ?? 'imagen-3.0-generate-002'; $tabData['default_tone'] = $settings['default_tone'] ?? 'promotional'; $tabData['image_size'] = $settings['image_size'] ?? '300x250'; return $tabData; } public static function testConnection(): void { Common::checkCapability( array( 'manage_options' ) ); Common::verifyNonce(); $request = static::request(); $api_key = trim( sanitize_text_field( $request->input( 'api_key', 'post', '' ) ) ); $settings = get_option( self::OPTION_KEY, array() ); if ( empty( $api_key ) || str_contains( $api_key, '****' ) ) { $api_key = $settings['api_key'] ?? ''; } if ( empty( $api_key ) ) { wp_send_json_error( array( 'message' => __( 'Please enter an API key to test.', 'ad-fuz' ) ) ); } $provider = sanitize_key( $request->input( 'provider', 'post', 'gemini' ) ); $result = AIService::testApiKey( $api_key, $provider ); if ( is_wp_error( $result ) ) { wp_send_json_error( array( 'message' => $result->get_error_message() ) ); } wp_send_json_success( array( 'message' => __( 'Connection successful! API key is valid.', 'ad-fuz' ) ) ); } protected static function getModel(): string { return ''; } }