'No tienes permisos para realizar esta accion.']); } $component = sanitize_text_field($_POST['component'] ?? ''); $settings = json_decode(stripslashes($_POST['settings'] ?? '{}'), true); if (empty($component) || empty($settings)) { wp_send_json_error(['message' => 'Datos incompletos.']); } // Obtener mapper del modulo correspondiente if ($this->fieldMapperRegistry === null || !$this->fieldMapperRegistry->hasMapper($component)) { wp_send_json_error([ 'message' => "No existe mapper para el componente: {$component}" ]); } $mapper = $this->fieldMapperRegistry->getMapper($component); $fieldMapping = $mapper->getFieldMapping(); // Mapear settings usando el mapper del modulo $mappedSettings = $this->mapSettings($settings, $fieldMapping); // Guardar usando Use Case if ($this->saveComponentSettingsUseCase !== null) { $updated = $this->saveComponentSettingsUseCase->execute($component, $mappedSettings); wp_send_json_success([ 'message' => sprintf('Se guardaron %d campos correctamente.', $updated) ]); } else { wp_send_json_error(['message' => 'Error: Use Case no disponible.']); } } /** * Mapea settings de field IDs a grupos/atributos */ private function mapSettings(array $settings, array $fieldMapping): array { $mappedSettings = []; foreach ($settings as $fieldId => $value) { if (!isset($fieldMapping[$fieldId])) { continue; } $mapping = $fieldMapping[$fieldId]; $groupName = $mapping['group']; $attributeName = $mapping['attribute']; if (!isset($mappedSettings[$groupName])) { $mappedSettings[$groupName] = []; } $mappedSettings[$groupName][$attributeName] = $value; } return $mappedSettings; } public function resetComponentDefaults(): void { // Verificar nonce check_ajax_referer('roi_admin_dashboard', 'nonce'); // Verificar permisos if (!current_user_can('manage_options')) { wp_send_json_error([ 'message' => 'No tienes permisos para realizar esta accion.' ]); } // Obtener componente $component = sanitize_text_field($_POST['component'] ?? ''); if (empty($component)) { wp_send_json_error([ 'message' => 'Componente no especificado.' ]); } // Ruta al schema JSON $schemaPath = get_template_directory() . '/Schemas/' . $component . '.json'; if (!file_exists($schemaPath)) { wp_send_json_error([ 'message' => 'Schema del componente no encontrado.' ]); } // Usar repositorio para restaurar valores if ($this->saveComponentSettingsUseCase !== null) { global $wpdb; $repository = new \ROITheme\Shared\Infrastructure\Persistence\Wordpress\WordPressComponentSettingsRepository($wpdb); $updated = $repository->resetToDefaults($component, $schemaPath); wp_send_json_success([ 'message' => sprintf('Se restauraron %d campos a sus valores por defecto.', $updated) ]); } else { wp_send_json_error([ 'message' => 'Error: Repositorio no disponible.' ]); } } }