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)¶
- 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).
- Pasada 2 (PDF): el HTML se convierte en un PDF de una página con mPDF (
mpdf/mpdfv8). Salida vectorial de precisión. - 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 |
| 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 |