Scheduler Content Moderation Integration
Proporciona integración entre el módulo Scheduler y el sistema de flujo de trabajo Content Moderation de Drupal, permitiendo transiciones de estado de moderación programadas.
scheduler_content_moderation_integration
Instalar
composer require 'drupal/scheduler_content_moderation_integration:^3.0'
composer require 'drupal/scheduler_content_moderation_integration:^2.0'
Overview
Scheduler Content Moderation Integration (SCMI) es un submódulo que conecta el módulo Scheduler con el sistema Content Moderation del núcleo de Drupal. Cuando necesitas programar contenido para publicar o despublicar mientras usas flujos de trabajo de moderación, este módulo es esencial.
El módulo añade dos nuevos campos a las entidades moderadas: "Estado de publicación" y "Estado de despublicación". Estos campos permiten a los editores de contenido especificar a qué estado de moderación debe transicionar el contenido cuando se alcance la fecha/hora programada de publicación o despublicación. Por ejemplo, en un flujo de trabajo típico "Borrador-Publicado-Archivado", un editor puede crear contenido en estado Borrador y programarlo para que transicione automáticamente al estado Publicado en una fecha futura.
Cuando llega el momento programado y se ejecuta cron, el módulo gestiona la transición del estado de moderación en lugar de la acción estándar de publicar/despublicar. Esto asegura que las reglas del flujo de trabajo, los permisos y las validaciones de transición se respeten durante las operaciones programadas.
Features
- Añade campos 'Estado de publicación' y 'Estado de despublicación' a todos los tipos de entidad que soportan tanto Scheduler como Content Moderation
- Valida las transiciones programadas contra las transiciones permitidas del flujo de trabajo para prevenir cambios de estado inválidos
- Valida los permisos de usuario para transiciones programadas, asegurando que los usuarios solo puedan programar transiciones a las que tienen acceso
- Genera dinámicamente las opciones de estado basándose en transiciones válidas desde el estado de moderación actual de la entidad
- Soporta múltiples tipos de entidad incluyendo nodes, media y cualquier otro tipo de entidad con plugins de Scheduler
- Oculta los campos de programación cuando no hay transiciones de moderación válidas disponibles para el usuario actual
- Gestiona la publicación inmediata a través de la función de publicar-inmediatamente de Scheduler con manejo adecuado del estado de moderación
- Se integra perfectamente con los flujos de trabajo existentes de Content Moderation sin requerir configuración adicional
Use Cases
Programar contenido en borrador para publicación futura
Un editor crea un artículo de noticias y lo guarda como Borrador. Quiere que se publique el próximo lunes a las 9 AM. Usando las Opciones de Programación, establece la fecha/hora de 'Publicar en' para el lunes a las 9 AM y selecciona 'Publicado' como el 'Estado de publicación'. Cuando cron se ejecuta después de ese momento, el contenido transiciona automáticamente de Borrador a Publicado.
Programar archivado automático de contenido temporal
Una página promocional necesita estar publicada solo durante una semana. El editor configura tanto la publicación como la despublicación programada: 'Publicar en' se establece a la fecha de inicio de la campaña con 'Estado de publicación' establecido en Publicado, y 'Despublicar en' se establece a la fecha de fin de la campaña con 'Estado de despublicación' establecido en Archivado. El contenido se publica automáticamente y se archiva sin intervención manual.
Preparar actualizaciones de contenido por adelantado
Un artículo existente Publicado necesita actualizaciones que deben publicarse en un momento específico. El editor edita el contenido, realiza los cambios y establece el estado actual a Borrador (creando una nueva revisión en borrador). Programa el Borrador para que transicione a Publicado en el momento deseado. La versión publicada original permanece visible hasta el momento programado cuando la nueva revisión se convierte en la versión publicada.
Flujo de trabajo de publicación multietapa
En una organización con un flujo de trabajo editorial (Borrador -> Revisión -> Publicado -> Archivado), el contenido necesita aprobación antes de programarse. Los editores crean contenido en Borrador, lo mueven a Revisión para aprobación. Una vez aprobado, pueden programar la transición a Publicado. El módulo valida que la transición de Revisión a Publicado es válida en el flujo de trabajo.
Programación de recursos multimedia
Los elementos multimedia (imágenes, videos, audio) que son parte de un flujo de trabajo de moderación también pueden programarse. Por ejemplo, un video promocional puede programarse para estar disponible (estado Publicado) en el lanzamiento de la campaña y archivarse automáticamente después.
Tips
- El módulo oculta automáticamente los campos de fecha de Scheduler cuando no hay transiciones de estado válidas disponibles, evitando confusión del usuario
- Usa los permisos 'use [workflow] transition [transition]' para controlar qué usuarios pueden programar transiciones específicas
- Tanto la publicación como la despublicación pueden programarse juntas - las opciones de unpublish_state se calculan basándose en qué estados son alcanzables desde el publish_state seleccionado
- El módulo funciona con cualquier flujo de trabajo personalizado de Content Moderation - no estás limitado al flujo de trabajo 'editorial' predeterminado
- Para pruebas, puedes activar las transiciones programadas inmediatamente usando 'drush scheduler:cron' en lugar de esperar al cron del sistema
Technical Details
Hooks 9
hook_scheduler_publish_process
Procesa la publicación programada para entidades moderadas. En lugar de la acción de publicación estándar de Scheduler, este hook transiciona la entidad al publish_state programado. Devuelve 1 si se procesó, -1 en caso de error, o 0 para que Scheduler lo gestione normalmente.
hook_scheduler_unpublish_process
Procesa la despublicación programada para entidades moderadas. Transiciona la entidad al unpublish_state programado (por ejemplo, 'archived' o 'draft'). Devuelve 1 si se procesó, -1 en caso de error, o 0 para que Scheduler lo gestione normalmente.
hook_scheduler_hide_publish_date
Oculta el campo de fecha publish_on de Scheduler cuando no hay transiciones de moderación válidas disponibles para publicar. Esto evita que los usuarios establezcan una fecha de publicación cuando no pueden transicionar a ningún estado publicado.
hook_scheduler_hide_unpublish_date
Oculta el campo de fecha unpublish_on de Scheduler cuando no hay transiciones de moderación válidas disponibles para despublicar. Esto evita que los usuarios establezcan una fecha de despublicación cuando no pueden transicionar a ningún estado no publicado.
hook_entity_base_field_info
Define los campos base publish_state y unpublish_state para todos los tipos de entidad que son soportados tanto por plugins de Scheduler como por moderación. Estos campos almacenan el estado de moderación objetivo para las transiciones programadas.
hook_entity_access
Deniega el acceso de actualización cuando un usuario no tiene permiso para las transiciones programadas. Valida que el usuario puede realizar las transiciones especificadas en los campos publish_state y unpublish_state.
hook_form_alter
Adjunta los campos publish_state y unpublish_state al grupo de configuración de Scheduler en los formularios de entidad. También oculta estos campos cuando la publicación/despublicación programada no está habilitada para el tipo de entidad.
hook_entity_presave
Evita que los estados de moderación publicados se guarden cuando el estado publicado de la entidad se establece en false por Scheduler. Esto asegura la consistencia entre el estado de moderación y el estado publicado de la entidad.
hook_modules_installed
Cuando se instala un nuevo módulo con un plugin de Scheduler, añade automáticamente los campos publish_state y unpublish_state a las tablas de base de datos del tipo de entidad correspondiente.
Troubleshooting 6
Verifica que: 1) El tipo de entidad está habilitado para programación en su configuración de Scheduler, 2) El tipo de entidad está añadido a un flujo de trabajo de Content Moderation, 3) El usuario actual tiene permiso para usar al menos una transición del flujo de trabajo. Si el flujo de trabajo no tiene transiciones válidas para el usuario, los campos se ocultan intencionalmente.
Asegúrate de que cron se está ejecutando correctamente. Verifica que la transición desde el estado actual de la entidad al estado programado es válida en la configuración de tu flujo de trabajo. Revisa el dblog para ver si hay errores durante el procesamiento programado.
El publish_state seleccionado no puede alcanzarse desde el estado de moderación actual de la entidad. Verifica la configuración de tu flujo de trabajo para asegurar que existe una transición entre el estado actual y el estado objetivo.
El usuario actual carece del permiso 'use [workflow] transition [transition_id]'. Otorga los permisos de transición apropiados al rol del usuario.
Esto ocurre cuando los tipos de entidad se eliminan de la moderación. Ejecuta el hook de actualización visitando update.php o ejecuta 'drush updb'. Alternativamente, ejecuta: drush ev '_scheduler_content_moderation_integration_remove_fields()'
Esto sucede cuando no existen transiciones válidas desde el estado actual de la entidad. Verifica que tu flujo de trabajo tiene transiciones definidas desde el estado actual a estados publicados/no publicados, y que el usuario tiene permiso para esas transiciones.
Security Notes 3
- El módulo valida los permisos de transición en el momento de guardar - los usuarios no pueden programar transiciones para las que no tienen permiso
- Las verificaciones de acceso también se realizan al cargar entidades con transiciones programadas, previniendo escalada de privilegios
- El módulo respeta los controles de acceso existentes de Content Moderation y no omite ninguna restricción del flujo de trabajo