* @license GPL-2.0-or-later https://www.gnu.org/licenses/gpl-2.0.html * @link https://github.com/natsenack/advanced-pdf-invoice-builder */ // Empêcher l'accès direct. if ( ! defined( 'ABSPATH' ) ) { exit( 'Direct access not allowed' ); } // Compatibilité: certaines installations chargent cette vue avant le loader. if ( ! function_exists( 'pdfib_db' ) ) { /** * Retourne l'instance $wpdb globale. * * @return \wpdb Instance de la base de données WordPress. */ function pdfib_db() { global $wpdb; return $wpdb; } } // Inclure TemplateDefaults si pas déjà chargé. if ( ! class_exists( 'PDFIB\TemplateDefaults' ) ) { // Chemin absolu vers TemplateDefaults.php. $pdfib_template_defaults_path = dirname( __DIR__, 2 ) . '/src/Core/TemplateDefaults.php'; if ( file_exists( $pdfib_template_defaults_path ) ) { include_once $pdfib_template_defaults_path; } elseif ( defined( 'PDFIB_PLUGIN_DIR' ) ) { // Fallback: essayer avec plugin_dir_path si disponible. $pdfib_template_defaults_path = PDFIB_PLUGIN_DIR . 'src/Core/TemplateDefaults.php'; if ( file_exists( $pdfib_template_defaults_path ) ) { include_once $pdfib_template_defaults_path; } } } // Nonce aligné avec les handlers AJAX des templates (action: pdfib_ajax). $pdfib_templates_nonce = wp_create_nonce( 'pdfib_ajax' ); if ( ! function_exists( 'pdfib_apply_canvas_setting_type' ) ) { /** * Filtre et convertit les valeurs d'un tableau de paramètres canvas. * * @param array $parsed Valeurs à traiter. * @param string $type Type de conversion ('int' ou 'string'). * * @return array Tableau filtré et converti. */ function pdfib_apply_canvas_setting_type( array $parsed, string $type ): array { $parsed = array_values( array_filter( $parsed, static function ( $v ) { return '' !== $v && null !== $v; } ) ); if ( 'int' === $type ) { return array_values( array_unique( array_map( 'intval', $parsed ) ) ); } return array_values( array_unique( array_map( 'strval', $parsed ) ) ); } } if ( ! function_exists( 'pdfib_parse_canvas_setting' ) ) { /** * Lit et analyse un paramètre de configuration canvas. * * @param string $setting_key Clé du paramètre. * @param mixed $default_value Valeur par défaut. * @param string $type Type attendu ('string' ou 'int'). * * @return array Valeurs analysées. */ function pdfib_parse_canvas_setting( string $setting_key, mixed $default_value, string $type = 'string' ): array { $settings = pdfib_get_option( 'pdfib_settings', array() ); $canvas_settings = pdfib_get_option( 'pdfib_canvas_settings', array() ); $canvas_key = strpos( $setting_key, 'pdfib_' ) === 0 ? substr( $setting_key, 6 ) : $setting_key; $legacy_canvas_key = strpos( $canvas_key, 'canvas_' ) === 0 ? substr( $canvas_key, 7 ) : $canvas_key; if ( isset( $canvas_settings[ $canvas_key ] ) ) { $val = $canvas_settings[ $canvas_key ]; } elseif ( isset( $canvas_settings[ $legacy_canvas_key ] ) ) { $val = $canvas_settings[ $legacy_canvas_key ]; } elseif ( isset( $settings[ $setting_key ] ) ) { $val = $settings[ $setting_key ]; } else { $legacy = get_option( $setting_key, null ); $val = null !== $legacy ? $legacy : $default_value; } if ( is_string( $val ) && strpos( $val, ',' ) !== false ) { $parsed = array_map( 'trim', explode( ',', $val ) ); } elseif ( is_array( $val ) ) { $parsed = $val; } else { $parsed = array( $val ); } return pdfib_apply_canvas_setting_type( $parsed, $type ); } } // Vérifier le statut Premium via le plugin PRO. $pdfib_license_manager = apply_filters( 'pdfib_license_manager_instance', null ); $pdfib_is_premium = \PDFIB\Admin\PdfBuilderAdmin::is_premium_active(); $pdfib_purchase_url = 'https://hub.threeaxe.fr/nos-produits/pdf-builder-pro-2'; // Compter les templates utilisateur. $pdfib_table_templates = \pdfib_db()->prefix . 'pdfib_templates'; $pdfib_template_columns = \pdfib_db()->get_col( \pdfib_db()->prepare( 'DESCRIBE %i', $pdfib_table_templates ), 0 ); $pdfib_template_columns = is_array( $pdfib_template_columns ) ? array_map( 'strval', $pdfib_template_columns ) : array(); $pdfib_template_schema = array( 'id' => in_array( 'id', $pdfib_template_columns, true ) ? 'id' : 'template_id', 'name' => in_array( 'name', $pdfib_template_columns, true ) ? 'name' : 'template_name', 'created_at' => in_array( 'created_at', $pdfib_template_columns, true ) ? 'created_at' : 'template_created', 'updated_at' => in_array( 'updated_at', $pdfib_template_columns, true ) ? 'updated_at' : 'template_modified', 'thumbnail' => in_array( 'thumbnail_url', $pdfib_template_columns, true ) ? 'thumbnail_url' : '', 'user_id' => in_array( 'user_id', $pdfib_template_columns, true ) ? 'user_id' : '', 'is_default' => in_array( 'is_default', $pdfib_template_columns, true ) ? 'is_default' : '', 'template_data' => in_array( 'template_data', $pdfib_template_columns, true ) ? 'template_data' : '', ); $pdfib_count_sql = \pdfib_db()->prepare( 'SELECT COUNT(*) FROM %i', $pdfib_table_templates ); if ( '' !== $pdfib_template_schema['user_id'] ) { $pdfib_count_sql = \pdfib_db()->prepare( 'SELECT COUNT(*) FROM %i WHERE %i = %d', $pdfib_table_templates, $pdfib_template_schema['user_id'], get_current_user_id() ); } $pdfib_templates_count = (int) \pdfib_db()->get_var( $pdfib_count_sql ); // Note: pas de création automatique de template par défaut pour les // utilisateurs gratuits, car tout template appartenant à l'utilisateur // consomme le quota de la version gratuite (1 template maximum). // Récupérer les DPI disponibles depuis les paramètres canvas. $pdfib_available_dpis = pdfib_parse_canvas_setting( 'pdfib_canvas_dpi', '72,96,150', 'int' ); // Récupérer les formats disponibles depuis les paramètres canvas. $pdfib_available_formats = pdfib_parse_canvas_setting( 'pdfib_canvas_formats', 'A4', 'string' ); // Récupérer les orientations disponibles depuis les paramètres canvas. $pdfib_available_orientations = pdfib_parse_canvas_setting( 'pdfib_canvas_orientations', 'portrait,landscape', 'string' ); // Définir les options DPI avec leurs labels. $pdfib_dpi_options = array( 72 => __( '72 DPI - Écran (faible qualité)', 'advanced-pdf-invoice-builder' ), 96 => __( '96 DPI - Web (qualité standard)', 'advanced-pdf-invoice-builder' ), 150 => __( '150 DPI - Impression moyenne', 'advanced-pdf-invoice-builder' ), 300 => __( '300 DPI - Haute qualité', 'advanced-pdf-invoice-builder' ), 600 => __( '600 DPI - Professionnel', 'advanced-pdf-invoice-builder' ), ); // Définir les options de format avec leurs labels. $pdfib_format_options = array( 'A4' => __( '📄 A4 (210×297mm)', 'advanced-pdf-invoice-builder' ), 'A3' => __( '📃 A3 (297×420mm)', 'advanced-pdf-invoice-builder' ), 'Letter' => __( '🇺🇸 Letter (8.5×11")', 'advanced-pdf-invoice-builder' ), 'Legal' => __( '⚖️ Legal (8.5×14")', 'advanced-pdf-invoice-builder' ), 'Label' => __( '📦 Étiquette Colis (100×150mm)', 'advanced-pdf-invoice-builder' ), ); // Définir les options d'orientation avec leurs labels. $pdfib_orientation_options = array( 'portrait' => __( '📱 Portrait (Vertical)', 'advanced-pdf-invoice-builder' ), 'landscape' => __( '🖥️ Paysage (Horizontal)', 'advanced-pdf-invoice-builder' ), ); ?> var pdfBuilderTemplatesNonce = ''; var ajaxurl = ''; var pdfBuilderAjax = { nonce: '', }; // Variables pour les DPI disponibles var availableDpis = ; var dpiOptions = ; // Variables pour les formats disponibles var availableFormats = ; var formatOptions = ; // Variables pour les orientations disponibles var availableOrientations = ; var orientationOptions = ;
Gérez vos templates personnalisés créés et modifiés.
prefix . 'pdfib_templates'; $pdfib_select_fields = array( "{$pdfib_template_schema['id']} AS id", "{$pdfib_template_schema['name']} AS name", "{$pdfib_template_schema['created_at']} AS created_at", "{$pdfib_template_schema['updated_at']} AS updated_at", '' !== $pdfib_template_schema['template_data'] ? "{$pdfib_template_schema['template_data']} AS template_data" : "'' AS template_data", '' !== $pdfib_template_schema['thumbnail'] ? "{$pdfib_template_schema['thumbnail']} AS thumbnail_url" : "'' AS thumbnail_url", '' !== $pdfib_template_schema['is_default'] ? "{$pdfib_template_schema['is_default']} AS is_default" : '0 AS is_default', ); $pdfib_select_str = implode( ', ', $pdfib_select_fields ); $pdfib_query = 'SELECT ' . $pdfib_select_str . ' FROM %i'; if ( '' !== $pdfib_template_schema['user_id'] ) { $pdfib_query = \pdfib_db()->prepare( $pdfib_query . ' WHERE %i = %d ORDER BY %i', $pdfib_table_templates, $pdfib_template_schema['user_id'], get_current_user_id(), $pdfib_template_schema['id'] ); } else { $pdfib_query = \pdfib_db()->prepare( $pdfib_query . ' ORDER BY %i', $pdfib_table_templates, $pdfib_template_schema['id'] ); } $pdfib_templates = \pdfib_db()->get_results( $pdfib_query, ARRAY_A ); if ( ! empty( $pdfib_templates ) ) { echo '' . esc_html( $pdfib_description ) . '
'; echo '' . esc_html__( 'Aucun template personnalisé trouvé pour le moment.', 'advanced-pdf-invoice-builder' ) . '