Saltar a contenido

Arquitectura — Convoca Enroll

Visión general

Convoca Enroll v2.7.20 es un plugin de WordPress para la gestión de actividades, con una Suite de Medios y Redes integrada para generar carteles de forma automática y publicar en redes sociales.

┌─────────────────────────────────────────────────────────┐
│                    WordPress                            │
│  ┌───────────────────────────────────────────────────┐  │
│  │              Convoca Core (v2.3.10)                │  │
│  │  Utils · Logger · Capabilities · Installer        │  │
│  └──────────┬────────────────────────────────────────┘  │
│             │ depende de                                │
│  ┌──────────▼────────────────────────────────────────┐  │
│  │              Convoca Enroll (v2.7.20)              │  │
│  │                                                    │  │
│  │  ┌─────────────┐  ┌──────────────┐  ┌──────────┐  │  │
│  │  │ Poster      │  │ Social       │  │ Admin    │  │  │
│  │  │ Engine      │  │ Publisher    │  │ UI       │  │  │
│  │  │ (media/)    │  │ (social/)    │  │ (admin/) │  │  │
│  │  └─────────────┘  └──────────────┘  └──────────┘  │  │
│  └────────────────────────────────────────────────────┘  │
└─────────────────────────────────────────────────────────┘

Esquema de base de datos (4 tablas propias)

Tabla Para qué sirve Columnas clave
wp_conv_media_templates Definiciones de plantillas de cartel (JSON) id, slug, config (LONGTEXT JSON), is_system
wp_conv_social_accounts Tokens OAuth (cifrados con openssl) id, network, access_token, refresh_token, token_expires_at
wp_conv_social_queue Cola de publicación en redes sociales id, status, scheduled_at, attempts, last_error
wp_conv_media_logs Registro de auditoría de todas las operaciones object_type, action, status, context, duration_ms

Cifrado de los tokens

Los tokens OAuth de las redes se cifran con openssl_encrypt() y AES-256-CBC.

$key = defined('CONVOCA_SOCIAL_KEY') ? CONVOCA_SOCIAL_KEY : wp_salt('auth');
$iv  = substr(wp_salt('nonce'), 0, 16);
$encrypted = base64_encode(openssl_encrypt($data, 'aes-256-cbc', $key, 0, $iv));

Motor de carteles — proceso en 3 pasadas (v3)

  1. Pasada 1 (composición HTML): los datos de la actividad (título, fecha, precio, QR, imagen principal) se inyectan en una plantilla HTML/CSS. Soporte completo de CSS3 (Flexbox, Grid, degradados, sombras).
  2. Pasada 2 (PDF): el HTML se convierte en un PDF de una página con mPDF (mpdf/mpdf v8). Salida vectorial de precisión.
  3. Pasada 3 (tramado): la página del PDF se abre con Imagick al DPI adecuado, se ajusta al formato final y se exporta como PNG/WebP/JPG. El PDF temporal se borra después.

Sistema de plantillas

  • Las plantillas son ficheros PHP en templates/html/ que generan HTML5 + CSS3.
  • Variables que reciben: $title, $date, $time, $location, $price, $hero_image, $qr_image, $logo_image, $primary_color, $accent_color, $org_name, $type_label, $type_icon, $format, $width, $height.
  • Las plantillas JSON antiguas de media/templates/ se usan como respaldo mediante un envoltorio HTML básico.

Dimensiones por formato

Formato Ancho Alto Para qué
square 1080 1080 Feed de Instagram
portrait 1080 1350 Retrato de Instagram
story 1080 1920 Historias de Instagram
facebook 1200 630 Open Graph
banner 1920 1080 Banner web
a4 2480 3508 Impresión

Integración con Action Scheduler

Toda la publicación en redes es asíncrona mediante Action Scheduler (incluido con WooCommerce).

save_post_actividad hook
  ↓
as_unschedule_all_actions()  (quita duplicados)
  ↓
as_schedule_single_action()  (encola)
  ↓
Action Scheduler worker
  ↓
convoca_publish_social_post hook
  ↓
Meta_Provider or GBP_Provider::publish()

Dependencias entre módulos

Módulo Depende de
Motor de carteles (media/) Convoca Core (Utils), Imagick/GD
Generador de QR chillerlan/php-qrcode (composer)
Publicador en redes (social/) Poster Engine, Action Scheduler, openssl
Interfaz de administración (admin/) Poster Engine, Social Publisher

Seguridad

  • Capacidades: conv_manage_media, conv_publish_social, conv_manage_social, conv_view_media_logs
  • Nonces: todos los puntos AJAX y REST exigen verificación de nonce
  • CSRF: los flujos OAuth usan wp_generate_password(32) state parameter with transient validation
  • Idempotencia: un bloqueo por transient (5 minutos) evita publicaciones duplicadas a la vez

Tablas de base de datos

Además de las tablas de Media/Social, Enroll crea:

Tabla Creada en
convoca_enroll_email_queue Email_Queue.php
convoca_enroll_webhook_queue Webhook_Dispatcher.php
convoca_reservation_codes Motor_Inscripcion.php