(function ($) { 'use strict'; $(function () { // Bouton de test de connexion sur la page de configuration var $testBtn = $('#esi-peppol-test-connection'); if ($testBtn.length && typeof window.esiPeppolAdmin !== 'undefined') { var $result = $('#esi-peppol-test-result'); $testBtn.on('click', function (e) { e.preventDefault(); var apiKey = $('#esi_peppol_api_key').val(); var password = $('#esi_peppol_password').val(); $result.removeClass().empty(); if (!apiKey || !password) { var msgMissing = window.esiPeppolAdmin.i18n_missing || "Veuillez renseigner l'API Key et le Password avant de tester la connexion."; $result .addClass('notice notice-error') .html('

' + msgMissing + '

'); return; } $testBtn.prop('disabled', true).addClass('updating-message'); $.post(window.esiPeppolAdmin.ajax_url, { action: 'esi_peppol_test_connection', nonce: window.esiPeppolAdmin.nonce, api_key: apiKey, password: password }) .done(function (response) { if (response && response.success) { var msg = (response.data && response.data.message) ? response.data.message : (window.esiPeppolAdmin.i18n_success || "Connexion réussie à l'API ESIPeppol."); $result .addClass('notice notice-success is-dismissible') .html('

' + msg + '

'); } else { var errMsg = (response && response.data && response.data.message) ? response.data.message : (window.esiPeppolAdmin.i18n_error || 'La connexion a échoué.'); $result .addClass('notice notice-error') .html('

' + errMsg + '

'); } }) .fail(function () { var msgNetwork = window.esiPeppolAdmin.i18n_network || 'Erreur de communication avec le serveur WordPress.'; $result .addClass('notice notice-error') .html('

' + msgNetwork + '

'); }) .always(function () { $testBtn.prop('disabled', false).removeClass('updating-message'); }); }); } // DataTables pour le tableau du journal des échanges (invoices / documents envoyés) var $logsTable = $('#esi-peppol-logs-table'); if ($logsTable.length && $.fn.DataTable) { $logsTable.DataTable({ pageLength: 25, order: [[0, 'desc']], language: { url: 'https://cdn.datatables.net/plug-ins/1.13.8/i18n/fr-FR.json' } }); } // Actions AJAX sur la page de logs : renvoyer / vérifier le statut if ($logsTable.length && typeof window.esiPeppolAdmin !== 'undefined') { var $logsResult = $('#esi-peppol-logs-result'); var showLogsNotice = function (type, title, message, detail) { var classes = 'notice'; if (type === 'success') { classes += ' notice-success is-dismissible'; } else if (type === 'error') { classes += ' notice-error'; } else { classes += ' notice-info'; } var html = '
'; if (title) { html += '

' + title + ' ' + (message || '') + '

'; } else if (message) { html += '

' + message + '

'; } if (detail) { html += '

' + (window.esiPeppolAdmin.i18n_logs_detail_lbl || "Détail retour API") + ': ' + detail + '

'; } html += '
'; $logsResult .empty() .append(html); }; $logsTable.on('click', '.esi-peppol-log-resend', function (e) { e.preventDefault(); var $btn = $(this); var orderId = $btn.data('order-id'); if (!orderId) { return; } $btn.prop('disabled', true).addClass('updating-message'); $.post(window.esiPeppolAdmin.ajax_url, { action: 'esi_peppol_resend_invoice', nonce: window.esiPeppolAdmin.logs_nonce_resend, order_id: orderId }) .done(function (response) { var data = response && response.data ? response.data : {}; var ok = !!(response && response.success); var title = ok ? (window.esiPeppolAdmin.i18n_logs_ok_title || 'OK') : (window.esiPeppolAdmin.i18n_logs_ko_title || 'Pas OK'); var message = data.message || (ok ? (window.esiPeppolAdmin.i18n_logs_resend_ok || 'Document renvoyé avec succès.') : (window.esiPeppolAdmin.i18n_logs_resend_ko || 'L\'envoi du document a échoué.')); var detail = data.detail || ''; showLogsNotice(ok ? 'success' : 'error', title, message, detail); }) .fail(function () { showLogsNotice( 'error', window.esiPeppolAdmin.i18n_logs_ko_title || 'Pas OK', window.esiPeppolAdmin.i18n_network || 'Erreur de communication avec le serveur WordPress.', '' ); }) .always(function () { $btn.prop('disabled', false).removeClass('updating-message'); }); }); $logsTable.on('click', '.esi-peppol-log-status', function (e) { e.preventDefault(); var $btn = $(this); var orderId = $btn.data('order-id'); if (!orderId) { return; } $btn.prop('disabled', true).addClass('updating-message'); $.post(window.esiPeppolAdmin.ajax_url, { action: 'esi_peppol_check_invoice_status', nonce: window.esiPeppolAdmin.logs_nonce_status, order_id: orderId }) .done(function (response) { var data = response && response.data ? response.data : {}; var ok = !!(response && response.success); var title = ok ? (window.esiPeppolAdmin.i18n_logs_ok_title || 'OK') : (window.esiPeppolAdmin.i18n_logs_ko_title || 'Pas OK'); var message = data.message || (window.esiPeppolAdmin.i18n_logs_status_lbl || 'Statut actuel du document'); var detail = data.detail || ''; showLogsNotice(ok ? 'success' : 'error', title, message, detail); }) .fail(function () { showLogsNotice( 'error', window.esiPeppolAdmin.i18n_logs_ko_title || 'Pas OK', window.esiPeppolAdmin.i18n_network || 'Erreur de communication avec le serveur WordPress.', '' ); }) .always(function () { $btn.prop('disabled', false).removeClass('updating-message'); }); }); } // Toggle affichage du mot de passe sur la page de configuration $('.esi-peppol-password-toggle').on('click', function () { var $btn = $(this); var targetSelector = $btn.data('target'); var $input = $(targetSelector); if (!$input.length) { return; } var isPassword = $input.attr('type') === 'password'; $input.attr('type', isPassword ? 'text' : 'password'); // Texte du bouton $btn.text(isPassword ? 'Masquer' : 'Afficher'); }); // Gestion du logo email avec la médiathèque WordPress var $uploadLogoBtn = $('#esi-peppol-upload-logo'); var $removeLogoBtn = $('#esi-peppol-remove-logo'); var $logoPreview = $('#esi-peppol-logo-preview'); var $logoIdInput = $('#esi_peppol_logo_email_id'); if ($uploadLogoBtn.length && typeof wp !== 'undefined' && wp.media) { var mediaUploader; $uploadLogoBtn.on('click', function (e) { e.preventDefault(); // Si le sélecteur existe déjà, on le réutilise if (mediaUploader) { mediaUploader.open(); return; } // Créer le sélecteur de média mediaUploader = wp.media({ title: 'Choisir un logo', button: { text: 'Utiliser ce logo' }, multiple: false, library: { type: 'image' } }); // Quand une image est sélectionnée mediaUploader.on('select', function () { var attachment = mediaUploader.state().get('selection').first().toJSON(); // Mettre à jour l'input hidden avec l'ID $logoIdInput.val(attachment.id); // Afficher la preview var imageUrl = attachment.sizes && attachment.sizes.medium ? attachment.sizes.medium.url : attachment.url; $logoPreview.html('Logo email').show(); $removeLogoBtn.show(); }); // Ouvrir le sélecteur mediaUploader.open(); }); // Bouton pour supprimer le logo $removeLogoBtn.on('click', function (e) { e.preventDefault(); $logoIdInput.val(''); $logoPreview.empty().hide(); $removeLogoBtn.hide(); }); } }); })(jQuery);