Event Duplicator: duplica eventi/argomenti del calendario in un nuovo periodo

:information_source: Riepilogo Consente agli utenti autorizzati di duplicare eventi/argomenti del calendario (creati tramite Discourse Calendar and Events ) in un nuovo periodo di tempo. Funziona su un singolo argomento o su un’intera serie taggata (ad esempio, ogni argomento con il tag `grand-prix`), con una fase di revisione per modificare le date proposte prima di confermarle.
:hammer_and_wrench: Link al Repository GitHub - louking/discourse-event-duplicator: discourse plugin to duplicate events · GitHub
:open_book: Guida all’installazione Come installare i plugin in Discourse

Riepilogo

Questo plugin è stato creato per una comunità di un club di corsa il cui calendario è composto principalmente dagli stessi eventi che si ripetono ogni anno con una data spostata. Ricreare manualmente l’argomento di ogni evento ogni stagione significava duplicare il blocco [event ...], correggere il titolo e cercare quali erano già stati rifatti. Era un processo noioso e soggetto a errori. Event Duplicator automatizza il tutto: scegli un evento sorgente, o un’intera serie taggata di eventi, ottieni una nuova data proposta, rivedila o modificala e conferma.

Consulta docs/USAGE.md per una guida completa all’uso: chi può utilizzarlo, duplicazione di una serie rispetto a un singolo argomento, come funziona la fase di revisione.

Caratteristiche

  • Duplicazione di serie: scegli una categoria e uno o più tag (ad esempio grand-prix, signature-race; le corrispondenze sono combinate con OR e deduplicate, quindi un argomento con più tag corrispondenti appare solo una volta), eventualmente limitato a un intervallo di date sorgente, quindi rivedi le date proposte per la prossima occorrenza prima di confermare.
  • Duplicazione di singolo evento: lo stesso flusso di revisione e conferma per un argomento alla volta, dal menu amministratore dell’argomento (icona chiave inglese).
  • Fase di revisione modificabile: ogni riga mostra la data di inizio originale accanto a una nuova data proposta che puoi modificare (con granularità giornaliera), più un titolo modificabile. La data di fine è sempre derivata automaticamente dalla durata dell’evento sorgente, quindi non può andare fuori sincrono con una data di inizio modificata.
  • Due strategie di spostamento delle date plug-in, selezionabili per ogni esecuzione con un’impostazione predefinita configurabile:
    • Stessa data del calendario: sposta in avanti del numero di mesi configurato.
    • N-esimo giorno della settimana del mese: preserva ad esempio “3° sabato del mese” anche quando lo spostamento cade in un mese diverso.
  • Importo dello spostamento configurabile: sposta in avanti di qualsiasi numero di mesi (12, cioè un anno, per impostazione predefinita), non solo annualmente. Utile per cadenze mensili, trimestrali o altre ricorrenti. Sovrascrivibile per ogni esecuzione, con un’impostazione predefinita a livello di sito tramite una nuova impostazione (di seguito).
  • Flag “Data da definire”: per gli eventi la cui data reale non è ancora stabilita, contrassegna una riga. Un’annotazione configurabile (predefinita (date TBD)) viene aggiunta sia al titolo dell’argomento che al nome dell’evento.
  • Tracciamento delle duplicazioni: impedisce di duplicare lo stesso evento due volte (rilevante poiché un argomento può avere più di un tag di serie). Gli argomenti già duplicati sono contrassegnati e deselezionati per impostazione predefinita nella revisione, con un’esplicita opzione di ri-selezione per forzare comunque l’operazione. Eliminare un argomento duplicato libera automaticamente la sua sorgente per una nuova duplicazione, e ripristinarlo lo blocca di nuovo.
  • Feedback post-duplicazione: le righe duplicate con successo si trasformano in un link al nuovo argomento direttamente nella tabella di revisione. I veri errori vengono segnalati per riga invece di interrompere l’intero batch.

Requisiti

  • discourse-calendar deve essere installato e abilitato. Questo plugin duplica gli eventi utilizzando la markup [event ...] dei post di discourse-calendar e il modello DiscoursePostEvent::Event invece di inventare un archiviazione delle date separata.
  • Testato con Discourse 2026.7.0. Non verificato su versioni precedenti.

Configurazione

Tutte le impostazioni si trovano in Admin → Impostazioni → Plugin, cerca event_duplicator:

Impostazione Predefinito Descrizione
event_duplicator_enabled off Abilita il plugin.
event_duplicator_allowed_groups staff Gruppi (in aggiunta alle normali autorizzazioni di creazione argomenti per categoria) autorizzati a duplicare gli eventi. Nota: un elenco vuoto significa nessuno, non tutti. Aggiungi il gruppo “tutti” per aprirlo completamente.
event_duplicator_default_date_strategy Stessa data del calendario Regola predefinita di spostamento della data; sovrascrivibile per ogni esecuzione.
event_duplicator_default_shift_months 12 Importo predefinito dello spostamento, in mesi; sovrascrivibile per ogni esecuzione.
event_duplicator_tbd_annotation (date TBD) Testo aggiunto al titolo dell’argomento/nome dell’evento duplicato quando è contrassegnato come da definire nella revisione. Lascia vuoto per disabilitare completamente la funzione di annotazione.

L’autorizzazione è un AND di tre controlli: normali autorizzazioni della categoria Discourse, appartenenza a event_duplicator_allowed_groups e l’autorizzazione di discourse-calendar per creare post [event] in generale.

Limitazioni note

  • La modifica delle date nella fase di revisione ha solo granularità giornaliera (nessuna modifica dell’ora del giorno). Questa è una decisione deliberata di ambito: il caso d’uso target sono le date ricorrenti di gare/eventi, non gli orari.

Sorgente / problemi

Aggiornato il 2026-08-01: la v1.1.0 aggiunge lo spostamento basato sui mesi configurabile, vedi di seguito

4 Mi Piace

Ottimo lavoro! E grazie per averlo condiviso con gli altri. Colma efficacemente una lacuna nella funzionalità calendar-and-events.

Mi chiedo se non sarebbe meglio chiamarlo “Duplicatore di eventi annuali”, dato che non sembra progettato per duplicazioni mensili.

Saresti disposto a estenderlo per coprire anche un caso d’uso mensile?

Abbiamo molti eventi mensili, bimestrali e trimestrali (cioè quadrimestrali) che cadono nel X° lunedì (ecc.) del mese. Contengono una notevole quantità di documentazione/caricamenti, il che li rende inadatti al meccanismo principale degli eventi ricorrenti.

Al momento, questo richiede una buona dose di gestione manuale, e gli errori capitano!!

A causa degli intervalli di tempo più stretti, per farlo funzionare probabilmente servirebbe qualche tipo di promemoria (come un MP al proprietario dell’argomento +/- agli amministratori) una volta terminato l’evento corrente (se è taggato).

1 Mi Piace

Forse. Una possibilità sarebbe quella di far sì che la vista degli eventi duplicati avesse un controllo “sposta (mesi)”, il cui valore predefinito sarebbe una nuova impostazione. È questo quello che stai cercando?

Ho aggiunto add n months shift support · Issue #19 · louking/discourse-event-duplicator · GitHub per tenere traccia di questa richiesta. Ho altri lavori in corso, quindi non sono sicuro quale sarà la priorità. In superficie, però, sembra che sarebbe una modifica piuttosto rapida.

Questa parte, francamente, mi interessa meno. Se gli eventi fossero in una serie (cioè, taggati in un certo modo), il plugin dovrebbe ricordare quale fosse l’ultimo tra gli eventi taggati, notare se un nuovo evento fosse stato taggato alla fine della serie, ecc. Mi aspetto che le esigenze per questa notifica siano diverse e non credo di poter coprire tutte le possibilità.

1 Mi Piace

Fantastico, grazie.

Capisco! Riflettendoci un po’ di più, ora penso che si possa ottenere abbastanza facilmente con un semplice segnalibro.

@nathank Shift (mesi) è stato rilasciato nella v1.1.0.

La pagina di revisione ora include un campo “Shift (mesi)” accanto al menu a tendina della regola Data. Il valore predefinito è 12, mantenendo lo stesso comportamento di prima, ma puoi sovrascriverlo per ogni esecuzione. È presente anche una nuova impostazione di sito event_duplicator_default_shift_months se desideri un valore predefinito diverso a livello di sito.

Funziona con entrambe le regole di data. Una serie mensile o trimestrale che richiede un giorno della settimana specifico riceve comunque il trattamento “stesso giorno della settimana del mese”, semplicemente all’intervallo di mesi che hai impostato invece di un anno fisso.

Aggiorna alla v1.1.0 per ottenerlo (effettua un rebuild se il tuo file app.yml fissa un tag specifico). L’issue #19 contiene i dettagli dell’implementazione se sei curioso.

Penso che abbia senso aggiornare anche il post originale. Ci penserò entro domani, probabilmente.