SUPPORT TOOLS WP 1.1.0 — ARQUITECTURA Este código se escribió para una solución nueva. El ZIP de AIO Support Center se usa únicamente como evidencia funcional, fuera del directorio distribuible. FLUJO DE UN COMANDO Formulario con nonce / API autenticada / gateway firmado -> Tickets::execute(actor autenticado, intención, adjuntos) -> validación de tipos, tamaños, pertenencia y UUID -> transacción InnoDB, bloqueos de actor/cuota/ticket -> comprobación de recibo previo y huella de la intención -> autorización y comprobación de versión -> cambio de ticket, mensaje, archivos, auditoría, outbox y recibo -> COMMIT; en cualquier fallo de persistencia: ROLLBACK de todo el conjunto. No se envía correo dentro de esa transacción. Un trabajador separado reclama cada trabajo con lease e incrementa intentos antes del transporte externo. MÓDULOS support-tools-wp.php: metadatos, carga explícita, activación y composición. Database: esquema, consultas verificadas, transacciones y bloqueos de filas. Settings: configuración y diagnósticos operativos sin contenido de tickets. MiPluginPreferences: ajustes del módulo, validación/importación/exportación JSON, idioma por dominio, notificaciones administrativas y footer. Su única opción nueva es mi_plugin_support_tools_preferences; las claves stwp_ existentes se conservan para evitar una migración destructiva de conversaciones o permisos. Policy: una política común para consultas, comandos, REST y archivos. Tickets: casos de uso y transiciones de estado; historial e idempotencia. Attachments: inspección de bytes, cuotas y acceso privado. Notifications: outbox, recuperación de envíos y resultado del transporte. Automation: recordatorios, cierre por inactividad, retención y depuración. Privacy: exportación, supresión y política al eliminar cuentas. Api: adaptador REST y validación criptográfica del correo entrante. Portal: presentación y formularios progresivos, con salida escapada. Admin: catálogo de equipos/prioridades, respuestas guardadas y ajustes. Plugin: registro de hooks y programación; no contiene reglas de conversación. DATOS Tablas con prefijo de WordPress + stwp_: - tickets: titular, departamento, prioridad, asignado, colaboradores, estado, valoración, fechas y contador de versión. - messages: ticket, autor, texto, visibilidad y fecha. - files: ticket/mensaje/autor, nombre, MIME, tamaño y bytes codificados. - events: ticket, actor, tipo y fecha. Sin copias del contenido. - commands: actor, UUID, huella, ticket y fecha, con restricción única actor/UUID. - jobs: destinatario, estado, intentos, vencimiento y lease de entrega. - locks: filas de coordinación de actores, configuración y cuotas. Configuración pequeña y catálogos en una opción no autoload de WordPress. Los archivos de conversación no se registran como adjuntos públicos de WordPress. Los recursos visuales de marca que se creen sí deben registrarse en Medios. PERMISOS Los usuarios con read y pertenencia al sitio pueden abrir tickets propios. stwp_handle_tickets identifica operadores. No se sustituyen roles existentes. Un operador ve tickets asignados, donde colabora o dentro de su departamento. El administrador conserva acceso global. Un equipo restringido sin agentes no se convierte automáticamente en acceso abierto para todos los operadores. Las notas internas necesitan permiso de operación, no basta ser titular. Los identificadores, UUID y nonces no sustituyen estos permisos. CONCURRENCIA Los bloqueos de actor tienen orden numérico para crear por cuenta de otra persona. Las cuotas de archivos se comprueban bajo un bloqueo de cuota transaccional. La fila del ticket serializa cambios. version rechaza formularios obsoletos. Un UUID repetido con igual intención devuelve el resultado previo; con un mensaje o archivo distinto se rechaza. La versión no forma parte de la intención para permitir reintentos de gateways después de que cambie el ticket. Las consultas fallidas no se interpretan como cero uso, ausencia de filas o éxito. LÍMITES DEL DISEÑO Una transacción local no hace transaccional a SMTP ni a la caché de un CDN. El servicio de correo debe autenticar realmente al remitente antes de firmar el webhook. El plugin no trata una cabecera From como prueba de identidad. No se ofrece compatibilidad binaria, importación automática, IMAP, publicación de tickets ni carga de addons del plugin antiguo. No se anuncia soporte multisite. Los catálogos y consultas de conversación están acotados; la asignación por carga elige un mínimo observado y no garantiza reparto exactamente equitativo simultáneo. PUNTOS DE EXTENSIÓN Un integrador puede llamar Tickets::execute y recibir resultado o WP_Error, sin dependencia del controlador HTML. La política es común a todos los adaptadores. El modelo permite añadir un repositorio de colaboradores indexado, más transportes de aviso o un importador revisable sin llevar esas decisiones a las plantillas. DOCUMENTACIÓN PRIMARIA CONSULTADA https://developer.wordpress.org/plugins/creating-tables-with-plugins/ https://developer.wordpress.org/rest-api/extending-the-rest-api/adding-custom-endpoints/ https://developer.wordpress.org/plugins/privacy/