403 ) ); } RequestGuard::unique_query( array( 'language', 'disposition', '_wpnonce' ) ); if ( ! wp_verify_nonce( RequestGuard::nonce( 'lmcc_basic_pdf_preview' ), 'lmcc_basic_pdf_preview' ) ) { RequestGuard::reject( 403 ); } if ( ! is_string( $_GET['language'] ?? null ) || ! is_string( $_GET['disposition'] ?? 'inline' ) ) { RequestGuard::reject( 400 ); } $language = isset( $_GET['language'] ) ? sanitize_key( wp_unslash( $_GET['language'] ) ) : ''; $disposition = isset( $_GET['disposition'] ) ? sanitize_key( wp_unslash( $_GET['disposition'] ) ) : 'inline'; $settings = $this->settings->get_settings(); $enabled = array_values( array_intersect( LanguageCatalog::supported_codes(), array_map( 'strval', (array) ( $settings['languages']['enabled_customer_languages'] ?? array() ) ) ) ); if ( ! in_array( $language, $enabled, true ) || ! in_array( $disposition, array( 'inline', 'attachment' ), true ) ) { wp_die( esc_html__( 'The requested preview language or download mode is not available.', 'leanmerce-commerce-assistant' ), '', array( 'response' => 400 ) ); } $pdf = $this->preview->render( $language ); if ( function_exists( 'nocache_headers' ) ) { nocache_headers(); } header( 'Content-Type: application/pdf' ); header( 'X-Content-Type-Options: nosniff' ); header( 'Content-Disposition: ' . $disposition . '; filename="leanmerce-order-sample-' . $language . '.pdf"' ); header( 'Content-Length: ' . strlen( $pdf ) ); echo $pdf; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped -- Binary PDF generated by the internal renderer. exit; } public static function url( string $language, string $disposition ): string { return wp_nonce_url( add_query_arg( array( 'action' => 'lmcc_basic_pdf_preview', 'language' => $language, 'disposition' => $disposition, ), admin_url( 'admin-post.php' ) ), 'lmcc_basic_pdf_preview' ); } }