Duplicador de eventos: duplica eventos/temas del calendario en un nuevo período

:information_source: Resumen Permite a los usuarios autorizados duplicar eventos/temas del calendario (creados a través de Discourse Calendar and Events ) en un nuevo período de tiempo. Funciona con un solo tema o con una serie completa etiquetada (por ejemplo, todos los temas etiquetados como `grand-prix`), con una etapa de revisión para editar las fechas propuestas antes de confirmar.
:hammer_and_wrench: Enlace al repositorio GitHub - louking/discourse-event-duplicator: discourse plugin to duplicate events · GitHub
:open_book: Guía de instalación Cómo instalar plugins en Discourse

Resumen

Este plugin se desarrolló para una comunidad de un club de running cuyo calendario consiste principalmente en los mismos eventos que ocurren cada año en una fecha desplazada. Recrear el tema de cada evento a mano cada temporada implicaba duplicar el bloque [event ...], corregir el título y buscar cuáles ya se habían hecho. Eso era tedioso y propenso a errores. Event Duplicator lo automatiza: selecciona un evento de origen, o una serie completa etiquetada de ellos, obtén una nueva fecha propuesta, revísala o edítala y confirma.

Consulta docs/USAGE.md para una guía completa orientada al usuario: quién puede usarlo, duplicar una serie frente a un solo tema, cómo funciona la etapa de revisión.

Características

  • Duplicación de series: selecciona una categoría y una o más etiquetas (por ejemplo, grand-prix, signature-race; las coincidencias se combinan con OR y se deduplican, por lo que un tema con múltiples etiquetas coincidentes solo aparece una vez), opcionalmente restringido a un rango de fechas de origen, y luego revisa las fechas propuestas de la siguiente ocurrencia antes de confirmar.
  • Duplicación de un solo evento: el mismo flujo de revisión y confirmación para un tema a la vez, desde el menú de administración de ese tema (icono de llave inglesa).
  • Etapa de revisión editable: cada fila muestra la fecha de inicio original junto a una nueva fecha propuesta que puedes editar (con granularidad de día), más un título editable. La fecha de finalización siempre se deriva automáticamente de la duración del evento de origen, por lo que no puede desincronizarse con una fecha de inicio editada.
  • Dos estrategias de desplazamiento de fecha conectables, seleccionables por ejecución con un valor predeterminado configurable:
    • Misma fecha del calendario: desplaza hacia adelante por el número de meses configurado.
    • Nº día de la semana del mes: conserva, por ejemplo, “el 3º sábado del mes” incluso cuando el desplazamiento cae en un mes diferente.
  • Cantidad de desplazamiento configurable: desplaza hacia adelante por cualquier número de meses (12, es decir, un año, por defecto), no solo anualmente. Útil para cadencias mensuales, trimestrales u otras recurrentes. Anulable por ejecución, con un valor predeterminado a nivel de sitio a través de una nueva configuración (abajo).
  • Marcado de “Fecha por determinar”: para eventos cuya fecha en el mundo real aún no está definida, marca una fila. Una anotación configurable (predeterminada (date TBD)) se agrega tanto al título del tema como al nombre del evento.
  • Seguimiento de duplicados: evita duplicar el mismo evento dos veces (relevante ya que un tema puede tener más de una etiqueta de serie). Los temas ya duplicados se marcan y se desmarcan por defecto en la revisión, con una opción explícita de volver a marcar la casilla para forzarlo de todos modos. Eliminar un tema duplicado libera automáticamente su origen para una nueva duplicación, y restaurarlo lo vuelve a bloquear.
  • Retroalimentación posterior a la duplicación: las filas duplicadas con éxito se convierten en un enlace al nuevo tema directamente en la tabla de revisión. Los fallos genuinos se informan por fila en lugar de abortar todo el lote.

Requisitos

  • discourse-calendar debe estar instalado y habilitado. Este plugin duplica eventos utilizando la propia marca de publicación [event ...] de discourse-calendar y el modelo DiscoursePostEvent::Event en lugar de crear un almacenamiento de fechas separado.
  • Probado con Discourse 2026.7.0. No verificado en versiones anteriores.

Configuración

Todas las configuraciones están en Admin → Settings → Plugins, busca event_duplicator:

Configuración Predeterminado Descripción
event_duplicator_enabled desactivado Habilita el plugin.
event_duplicator_allowed_groups staff Grupos (además del permiso normal de creación de temas por categoría) autorizados para duplicar eventos. Nota: una lista vacía significa nadie, no todos. Agrega el grupo “everyone” para abrirlo completamente.
event_duplicator_default_date_strategy Same calendar date Regla de desplazamiento de fecha predeterminada; anulable por ejecución.
event_duplicator_default_shift_months 12 Cantidad de desplazamiento predeterminada, en meses; anulable por ejecución.
event_duplicator_tbd_annotation (date TBD) Texto agregado al título/nombre del evento de un tema duplicado cuando se marca como TBD en la revisión. Déjalo en blanco para deshabilitar completamente la función de anotación.

La autorización es una combinación AND de tres verificaciones: permisos normales de categoría de Discourse, membresía en event_duplicator_allowed_groups y el permiso propio de discourse-calendar para crear publicaciones [event] en absoluto.

Limitaciones conocidas

  • La edición de fechas en la etapa de revisión es solo con granularidad de día (sin edición de hora del día). Esa es una decisión deliberada de alcance: el caso de uso objetivo son fechas de carreras/eventos recurrentes, no horas.

Código fuente / incidencias

Actualizado 2026-08-01: v1.1.0 agrega desplazamiento basado en meses configurable, ver abajo

4 Me gusta

¡Buen trabajo! Y gracias por compartirlo con los demás. Cubre eficazmente un vacío en la funcionalidad de #calendario-y-eventos.

Me pregunto si no sería mejor llamarlo «Duplicador de eventos anuales», ya que no parece diseñado para duplicaciones mensuales.

¿Estarías dispuesto a ampliarlo para cubrir un caso de uso mensual?

Tenemos muchos eventos mensuales, bimestrales y trimestrales (es decir, cuatrimestrales) que caen en el Xº lunes (etc.) del mes. Estos llevan consigo una cantidad importante de documentación y archivos adjuntos, lo que los hace inadecuados para el mecanismo central de eventos recurrentes.

Por el momento, esto requiere bastante trabajo manual, ¡y se cometen errores!

Debido a los plazos más ajustados, para que esto funcione probablemente necesitaría algún tipo de aviso (como un mensaje privado al propietario del tema y/o a los administradores) una vez que haya finalizado el evento actual (si está etiquetado).

1 me gusta

Quizás. Una posibilidad sería que la vista de eventos duplicados tuviera un control de «desplazamiento (meses)», cuyo valor predeterminado sería una nueva configuración. ¿Es esto más o menos lo que buscas?

He añadido add n months shift support · Issue #19 · louking/discourse-event-duplicator · GitHub para llevar un seguimiento de esto. Tengo otras tareas pendientes, así que no estoy seguro de cuál será la prioridad. A primera vista, sin embargo, parece que sería una modificación bastante rápida.

Séamos francos: esta parte me interesa menos. Si los eventos formaran una serie (es decir, estuvieran etiquetados de cierta manera), el complemento tendría que recordar cuál fue el último de los eventos etiquetados, detectar si se había etiquetado un nuevo evento al final de la serie, etc. Supongo que las necesidades para esta notificación serían diversas y no creo que pueda cubrir todas las posibilidades.

1 me gusta

Genial, gracias.

¡Comprensible! Ahora que lo pienso un poco más, también se podría lograr bastante fácilmente con un simple marcador.

@nathank El cambio (meses) se lanzó en la versión 1.1.0.

La página de revisión ahora tiene un campo de Cambio (meses) junto al menú desplegable de la regla de Fecha. Por defecto es 12, con el mismo comportamiento que antes, pero puedes anularlo por ejecución. También hay una nueva configuración de sitio event_duplicator_default_shift_months si deseas un valor predeterminado diferente para todo el sitio.

Funciona con ambas reglas de fecha. Una serie mensual o trimestral que necesite un día específico de la semana sigue recibiendo el tratamiento de “mismo día de la semana del mes”, solo que en el intervalo de mes que establezcas en lugar de un año fijo.

Actualiza a la versión 1.1.0 para obtenerlo (reconstruye si tu app.yml fija una etiqueta específica). El problema #19 tiene los detalles de implementación si tienes curiosidad.

Creo que tiene sentido actualizar también la publicación original. Me encargaré de eso para mañana, probablemente.

1 me gusta