diff --git a/admin-panel/admin/assets/js/admin-app.js b/admin-panel/admin/assets/js/admin-app.js index 3a0535d1..f3ca3f8f 100644 --- a/admin-panel/admin/assets/js/admin-app.js +++ b/admin-panel/admin/assets/js/admin-app.js @@ -119,17 +119,21 @@ const AdminPanel = { try { const formData = this.collectFormData(); + // Crear FormData para WordPress AJAX + const postData = new URLSearchParams(); + postData.append('action', 'apus_save_settings'); + postData.append('nonce', apusAdminData.nonce); + + // Agregar components como JSON string + postData.append('components', JSON.stringify(formData.components)); + const response = await axios({ method: 'POST', url: apusAdminData.ajaxUrl, headers: { - 'Content-Type': 'application/json' + 'Content-Type': 'application/x-www-form-urlencoded' }, - data: JSON.stringify({ - action: 'apus_save_settings', - nonce: apusAdminData.nonce, - ...formData - }) + data: postData }); if (response.data.success) { diff --git a/admin-panel/includes/class-settings-manager.php b/admin-panel/includes/class-settings-manager.php index d5bfa7bb..c1752d2a 100644 --- a/admin-panel/includes/class-settings-manager.php +++ b/admin-panel/includes/class-settings-manager.php @@ -144,7 +144,10 @@ class APUS_Settings_Manager { * AJAX: Obtener configuraciones */ public function ajax_get_settings() { - check_ajax_referer('apus_admin_nonce', 'nonce'); + // Verificar nonce + if (!isset($_POST['nonce']) || !wp_verify_nonce($_POST['nonce'], 'apus_admin_nonce')) { + wp_send_json_error('Nonce inválido'); + } if (!current_user_can('manage_options')) { wp_send_json_error('Permisos insuficientes'); @@ -158,18 +161,30 @@ class APUS_Settings_Manager { * AJAX: Guardar configuraciones */ public function ajax_save_settings() { - check_ajax_referer('apus_admin_nonce', 'nonce'); + // Verificar nonce + if (!isset($_POST['nonce']) || !wp_verify_nonce($_POST['nonce'], 'apus_admin_nonce')) { + wp_send_json_error('Nonce inválido'); + } if (!current_user_can('manage_options')) { wp_send_json_error('Permisos insuficientes'); } - $data = json_decode(file_get_contents('php://input'), true); - - if (!$data) { - wp_send_json_error('Datos inválidos'); + // Los datos vienen como JSON string en $_POST['components'] + if (!isset($_POST['components'])) { + wp_send_json_error('Datos inválidos - falta components'); } + $components = json_decode(stripslashes($_POST['components']), true); + + if (!is_array($components)) { + wp_send_json_error('Datos inválidos - components no es un array válido'); + } + + $data = array( + 'components' => $components + ); + $result = $this->save_settings($data); if ($result['success']) {