$s['ai_provider'] ?? 'none', 'ai_key_set' => ! empty( $s['ai_key'] ), // boolean — raw key never leaves PHP 'ai_model' => $s['ai_model'] ?? '', 'scan_schedule' => $s['scan_schedule'] ?? 'weekly', 'default_rulesets' => $default_rulesets, 'email_alerts' => $s['email_alerts'] ?? true, ]; } /** * Save settings. If $raw_key is empty the previously stored key is preserved. */ public static function save( string $provider, string $raw_key, string $model, string $schedule, array $default_rulesets = [ 'wcag22aa' ], bool $email_alerts = true ): void { $current = get_option( self::OPTION_KEY, [] ); $default_rulesets = array_values( array_unique( array_intersect( $default_rulesets, self::VALID_RULESETS ) ) ); if ( empty( $default_rulesets ) ) { $default_rulesets = [ 'wcag22aa' ]; } update_option( self::OPTION_KEY, [ 'ai_provider' => $provider, 'ai_key' => $raw_key ? AccessMate_AI_Proxy::encrypt_key( $raw_key ) : ( $current['ai_key'] ?? '' ), 'ai_model' => $model, 'scan_schedule' => $schedule, 'default_rulesets' => $default_rulesets, 'email_alerts' => $email_alerts, ]); } public static function get_raw_key(): string { $s = get_option( self::OPTION_KEY, [] ); if ( empty( $s['ai_key'] ) ) return ''; return AccessMate_AI_Proxy::decrypt_key( $s['ai_key'] ); } }