admin_url('admin-ajax.php'), 'nonce' => wp_create_nonce('aibui_nonce'), ) ); } // Charger les styles et scripts pour la page account du plugin AI Builder $current_screen = get_current_screen(); if ($current_screen && strpos($current_screen->id, 'aibui-assistant') !== false) { wp_enqueue_style( 'ai-builder-account-style', plugin_dir_url(__FILE__) . 'assets/css/account.css', [], filemtime(plugin_dir_path(__FILE__) . 'assets/css/account.css') ); wp_enqueue_script( 'ai-builder-config', plugin_dir_url(__FILE__) . 'config.js', [], AIBUI_VERSION, true ); wp_enqueue_script( 'ai-builder-account', plugin_dir_url(__FILE__) . 'assets/js/account.js', ['ai-builder-config'], AIBUI_VERSION, true ); // Injection des variables JS pour AJAX et le nonce wp_localize_script( 'ai-builder-account', 'aiBuilderVars', array( 'ajaxurl' => admin_url('admin-ajax.php'), 'nonce' => wp_create_nonce('aibui_nonce'), 'accountUrl' => admin_url('admin.php?page=aibui-account'), ) ); } else if ($current_screen && strpos($current_screen->id, 'aibui-credits') !== false) { wp_enqueue_script( 'ai-builder-credits', plugin_dir_url(__FILE__) . 'assets/js/credits.js', ['ai-builder-config'], AIBUI_VERSION, true ); // Injection des variables JS pour AJAX et le nonce wp_localize_script( 'ai-builder-credits', 'aiBuilderVars', array( 'ajaxurl' => admin_url('admin-ajax.php'), 'nonce' => wp_create_nonce('aibui_nonce'), ) ); wp_enqueue_style( 'ai-builder-credits-additional-style', plugin_dir_url(__FILE__) . 'assets/css/credits-additional.css', [], AIBUI_VERSION ); wp_enqueue_style( 'ai-builder-credits-style', plugin_dir_url(__FILE__) . 'assets/css/credits.css', [], AIBUI_VERSION ); wp_enqueue_script( 'ai-builder-config', plugin_dir_url(__FILE__) . 'config.js', [], AIBUI_VERSION, true ); } else if ($current_screen && strpos($current_screen->id, 'aibui-settings') !== false) { wp_enqueue_style( 'ai-builder-settings-style', plugin_dir_url(__FILE__) . 'assets/css/settings.css', [], AIBUI_VERSION ); wp_enqueue_script( 'ai-builder-config', plugin_dir_url(__FILE__) . 'config.js', [], AIBUI_VERSION, true ); wp_enqueue_script( 'ai-builder-settings', plugin_dir_url(__FILE__) . 'assets/js/settings.js', ['ai-builder-config'], AIBUI_VERSION, true ); // Injection des variables JS pour AJAX et le nonce wp_localize_script( 'ai-builder-settings', 'aiBuilderVars', array( 'ajaxurl' => admin_url('admin-ajax.php'), 'nonce' => wp_create_nonce('aibui_nonce'), ) ); } else if ($current_screen && strpos($current_screen->id, 'aibui-reset-password') !== false) { wp_enqueue_style( 'ai-builder-reset-password-style', plugin_dir_url(__FILE__) . 'assets/css/reset-password.css', [], AIBUI_VERSION ); wp_enqueue_script( 'ai-builder-config', plugin_dir_url(__FILE__) . 'config.js', [], AIBUI_VERSION, true ); wp_enqueue_script( 'ai-builder-reset-password', plugin_dir_url(__FILE__) . 'assets/js/reset-password.js', ['ai-builder-config'], AIBUI_VERSION, true ); // Injection des variables JS pour AJAX et le nonce wp_localize_script( 'ai-builder-reset-password', 'aiBuilderVars', array( 'ajaxurl' => admin_url('admin-ajax.php'), 'nonce' => wp_create_nonce('aibui_nonce'), 'accountUrl' => admin_url('admin.php?page=aibui-account'), ) ); } else if ($current_screen && strpos($current_screen->id, 'aibui-tuto') !== false) { wp_enqueue_style( 'ai-builder-tutorial-style', plugin_dir_url(__FILE__) . 'assets/css/tutorial.css', [], AIBUI_VERSION ); wp_enqueue_script( 'ai-builder-config', plugin_dir_url(__FILE__) . 'config.js', [], AIBUI_VERSION, true ); } }); add_action('wp_enqueue_scripts', function () { wp_enqueue_style( 'aibui-force-alignfull', plugin_dir_url(__FILE__) . 'assets/css/force-align-full.css', [], AIBUI_VERSION ); // Charger les styles CSS du bloc AI Image côté frontend wp_enqueue_style( 'ai-builder-ai-image-frontend', plugin_dir_url(__FILE__) . 'assets/js/build/index.css', [], filemtime(plugin_dir_path(__FILE__) . 'assets/js/build/index.css') ); // Frontend JS for carousel wp_enqueue_script( 'ai-builder-carousel-frontend', plugin_dir_url(__FILE__) . 'assets/js/carousel-frontend.js', [], AIBUI_VERSION, true ); // Ensure carousel CSS is present on frontend wp_enqueue_style( 'ai-builder-carousel-css', plugin_dir_url(__FILE__) . 'assets/css/carousel.css', [], AIBUI_VERSION ); // Ensure YouTube block CSS on frontend wp_enqueue_style( 'ai-builder-yt-video-css', plugin_dir_url(__FILE__) . 'assets/css/yt-video.css', [], AIBUI_VERSION ); // Tabs frontend JS wp_enqueue_script( 'ai-builder-tabs-frontend', plugin_dir_url(__FILE__) . 'assets/js/tabs-frontend.js', [], AIBUI_VERSION, true ); // Tabs CSS // Table CSS (frontend) wp_enqueue_style( 'ai-builder-table-css', plugin_dir_url(__FILE__) . 'assets/css/table.css', [], AIBUI_VERSION ); // Table Frontend JS wp_enqueue_script( 'ai-builder-table-frontend', plugin_dir_url(__FILE__) . 'assets/js/table-frontend.js', [], AIBUI_VERSION, true ); wp_enqueue_style( 'ai-builder-tabs-css', plugin_dir_url(__FILE__) . 'assets/css/tabs.css', [], AIBUI_VERSION ); // Stats tooltips (frontend) wp_enqueue_script( 'ai-builder-stats-tooltips', plugin_dir_url(__FILE__) . 'assets/js/stats-tooltips.js', [], AIBUI_VERSION, true ); }); // Enqueue contact form script only when the block is present add_action('wp_enqueue_scripts', function () { global $post; $should_load = false; // Check if current post has the block if (is_a($post, 'WP_Post') && has_block('ai-builder/aibui-contact-form', $post)) { $should_load = true; } // Fallback: check if we're on a page that might have the block if (!$should_load && (is_page() || is_single() || is_home() || is_front_page())) { $should_load = true; } if ($should_load) { wp_enqueue_script( 'ai-builder-contact-form', plugin_dir_url(__FILE__) . 'assets/js/contact-form.js', [], AIBUI_VERSION, true ); } }); add_action('enqueue_block_editor_assets', function () { wp_enqueue_style( 'aibui-force-alignfull-editor', plugin_dir_url(__FILE__) . 'assets/css/force-align-full.css', [], AIBUI_VERSION ); // Charger les styles build des blocs dans l'éditeur wp_enqueue_style( 'ai-builder-blocks-editor-build', plugin_dir_url(__FILE__) . 'assets/js/build/index.css', [], filemtime(plugin_dir_path(__FILE__) . 'assets/js/build/index.css') ); // Styles spécifiques d'aperçu du formulaire de contact wp_enqueue_style( 'ai-builder-contact-form-editor', plugin_dir_url(__FILE__) . 'assets/css/contact-form-editor.css', [], AIBUI_VERSION ); // Ensure carousel CSS in editor wp_enqueue_style( 'ai-builder-carousel-css-editor', plugin_dir_url(__FILE__) . 'assets/css/carousel.css', [], AIBUI_VERSION ); // Ensure YouTube CSS in editor wp_enqueue_style( 'ai-builder-yt-video-css-editor', plugin_dir_url(__FILE__) . 'assets/css/yt-video.css', [], AIBUI_VERSION ); // Tabs CSS in editor // Table CSS in editor wp_enqueue_style( 'ai-builder-table-css-editor', plugin_dir_url(__FILE__) . 'assets/css/table.css', [], AIBUI_VERSION ); wp_enqueue_style( 'ai-builder-tabs-css-editor', plugin_dir_url(__FILE__) . 'assets/css/tabs.css', [], AIBUI_VERSION ); // Stats tooltips in editor preview wp_enqueue_script( 'ai-builder-stats-tooltips-editor', plugin_dir_url(__FILE__) . 'assets/js/stats-tooltips.js', [], AIBUI_VERSION, true ); }); add_action('enqueue_block_editor_assets', function () { wp_enqueue_script( 'ai-builder-blocks', plugin_dir_url(__FILE__) . 'assets/js/build/index.js', [ 'wp-blocks', 'wp-block-editor', 'wp-element', 'wp-components', 'wp-i18n', 'wp-api-fetch', 'wp-hooks' ], filemtime(plugin_dir_path(__FILE__) . 'assets/js/build/index.js'), true ); // Injection des variables JS pour AJAX et le nonce (utilisées par les blocs éditeur) wp_localize_script( 'ai-builder-blocks', 'aiBuilderVars', array( 'ajaxurl' => admin_url('admin-ajax.php'), 'nonce' => wp_create_nonce('aibui_nonce'), ) ); }); // Enregistrer le bloc côté PHP add_action('init', function () { // Bloc AI Block register_block_type('ai-builder/ai-block', [ 'editor_script' => 'ai-builder-blocks', 'editor_style' => 'ai-builder-blocks-style', 'style' => 'ai-builder-blocks-style', 'render_callback' => function ($attributes) { // Le bloc AI Block ne s'affiche pas côté frontend car il est remplacé par le contenu généré return ''; } ]); // Bloc stat-bar (statique, pas de render_callback) register_block_type('ai-builder/stat-bar', [ 'editor_script' => 'ai-builder-blocks', 'editor_style' => 'ai-builder-blocks-style', 'style' => 'ai-builder-blocks-style', ]); // Bloc aibui-stats (rendu simple côté éditeur, frontend statique) register_block_type('ai-builder/aibui-stats', [ 'editor_script' => 'ai-builder-blocks', 'editor_style' => 'ai-builder-blocks-style', 'style' => 'ai-builder-blocks-style', ]); // Bloc aibui-carousel register_block_type('ai-builder/aibui-carousel', [ 'editor_script' => 'ai-builder-blocks', 'editor_style' => 'ai-builder-blocks-style', 'style' => 'ai-builder-blocks-style', ]); // Bloc aibui-yt-video register_block_type('ai-builder/aibui-yt-video', [ 'editor_script' => 'ai-builder-blocks', 'editor_style' => 'ai-builder-blocks-style', 'style' => 'ai-builder-blocks-style', ]); // Bloc aibui-tabs // Bloc aibui-table register_block_type('ai-builder/aibui-table', [ 'editor_script' => 'ai-builder-blocks', 'editor_style' => 'ai-builder-blocks-style', 'style' => 'ai-builder-blocks-style', ]); register_block_type('ai-builder/aibui-tabs', [ 'editor_script' => 'ai-builder-blocks', 'editor_style' => 'ai-builder-blocks-style', 'style' => 'ai-builder-blocks-style', ]); // Bloc aibui-contact-form (rendu via callback PHP pour sécurité) register_block_type('ai-builder/aibui-contact-form', [ 'editor_script' => 'ai-builder-blocks', 'editor_style' => 'ai-builder-blocks-style', 'style' => 'ai-builder-blocks-style', 'render_callback' => function ($attributes, $content, $block) { $recipient = isset($attributes['recipientEmail']) ? sanitize_email($attributes['recipientEmail']) : ''; if (empty($recipient) || !is_email($recipient)) { $recipient = sanitize_email(get_option('admin_email')); } if (empty($recipient) || !is_email($recipient)) { // Pas de destinataire valide disponible, n'arrête pas l'affichage, mais désactive l'envoi $recipient = ''; } $fields = isset($attributes['fields']) && is_array($attributes['fields']) ? $attributes['fields'] : []; $fields = array_slice($fields, 0, 5); $form_title = isset($attributes['formTitle']) ? wp_kses_post($attributes['formTitle']) : ''; $description = isset($attributes['description']) ? wp_kses_post($attributes['description']) : ''; $button_label = isset($attributes['buttonLabel']) ? sanitize_text_field($attributes['buttonLabel']) : __('Send', 'ai-builder'); $success_message = isset($attributes['successMessage']) ? sanitize_text_field($attributes['successMessage']) : __('Thank you, your message has been sent.', 'ai-builder'); $from_email_attr = isset($attributes['fromEmail']) ? sanitize_email($attributes['fromEmail']) : ''; $nonce = wp_create_nonce('aibui_contact_form'); $action = esc_url(admin_url('admin-ajax.php')); ob_start(); ?>

$field): $label = isset($field['label']) ? sanitize_text_field($field['label']) : ''; $type = isset($field['type']) ? sanitize_text_field($field['type']) : 'text'; $required = !empty($field['required']); $name = 'field_' . $idx; ?>