Event Duplicator:カレンダーのイベント/トピックを新しい期間に複製

:information_source: 概要 認可されたユーザーが、新しい期間にカレンダーイベント/トピック(Discourse Calendar and Events を通じて作成されたもの)を複製できるようにします。単一のトピックまたはタグ付きシリーズ全体(例:grand-prix タグが付いたすべてのトピック)に対して機能し、コミットする前に提案された日付を編集する確認ステップが含まれます。
:hammer_and_wrench: リポジトリリンク GitHub - louking/discourse-event-duplicator: discourse plugin to duplicate events · GitHub
:open_book: インストールガイド Discourse プラグインのインストール方法

概要

このプラグインは、毎年日付がずれて同じようなイベントが行われるランニングクラブのコミュニティのために開発されました。毎シーズン、各イベントのトピックを手動で再作成することは、[event ...] ブロックの複製、タイトルの修正、そしてすでに再作成されたものを特定する作業を意味しました。これは退屈で、エラーの元でした。Event Duplicator はこれを自動化します:ソースイベント、またはそれらのタグ付きシリーズ全体を選択し、提案された新しい日付を取得し、レビューまたは編集して、確認します。

ユーザー向けの完全な手順については、docs/USAGE.md を参照してください:誰が使用できるか、シリーズの複製と単一トピックの複製の違い、確認ステップの動作方法など。

機能

  • シリーズの複製: カテゴリと1つ以上のタグ(例:grand-prixsignature-race;一致は OR で論理和され、重複は除外されるため、複数の一致するタグを持つトピックは1回だけ表示されます)を選択し、オプションでソース日付範囲に制限し、確認する前に提案された次回発生日付をレビューします。
  • 単一イベントの複製: トピックの管理メニュー(レンチアイコン)から、1つのトピックごとに同じレビューと確認フローを実行します。
  • 編集可能な確認ステップ: 各行には、元の開始日付と編集可能な提案された新しい日付(日粒度)が表示され、タイトルも編集可能です。終了日付は常にソースイベントの期間から自動的に派生するため、編集された開始日付と同期が外れることはありません。
  • 2つのプラグイン可能な日付シフト戦略: 実行ごとに選択可能で、設定可能なデフォルトがあります:
    • 同じカレンダー日付: 設定された月数だけ前方にシフトします。
    • 月のN番目の曜日: シフトが別の月に落ちても、「月の第3土曜日」などの曜日を保持します。
  • 設定可能なシフト量: 12(つまり1年)など、任意の月数だけ前方にシフトします。月次、四半期、または他の定期的なリズムに有用です。実行ごとに上書き可能で、新しい設定(下記)によるサイト全体のデフォルトがあります。
  • 「日付未定」フラグ: 現実の日付が決まっていないイベントの場合、行にフラグを立てます。設定可能な注釈(デフォルト (date TBD))がトピックタイトルとイベント名に追加されます。
  • 複製の追跡: 同じイベントを2回複製することを防ぎます(トピックが複数のシリーズタグを持つ可能性があるため)。すでに複製されたトピックは確認でデフォルトでフラグが立てられ、未選択になりますが、チェックボックスを明示的に再チェックして強制することもできます。複製トピックを削除すると、自動的にソースが再複製用に解放され、削除を元に戻すと再ロックされます。
  • 複製後のフィードバック: 正常に複製された行は、確認テーブル内で新しいトピックへのリンクになります。本物の失敗はバッチ全体を中止するのではなく、行ごとに報告されます。

要件

  • discourse-calendar がインストールされ、有効になっている必要があります。このプラグインは、独自の [event ...] ポストマークアップと DiscoursePostEvent::Event モデルを介してイベントを複製し、別の日付ストレージを作成しません。
  • Discourse 2026.7.0 に対してテスト済み。以前のリリースでは検証されていません。

設定

すべての設定は 管理者 → 設定 → プラグイン にあり、event_duplicator で検索します:

設定 デフォルト 説明
event_duplicator_enabled off プラグインを有効にします。
event_duplicator_allowed_groups staff イベントを複製できるグループ(通常のカテゴリ別のトピック作成権限に加えて)。注意:空のリストは誰もという意味で、全員ではありません。完全に開放するには「everyone」グループを追加します。
event_duplicator_default_date_strategy 同じカレンダー日付 デフォルトの日付シフトルール;実行ごとに上書き可能。
event_duplicator_default_shift_months 12 デフォルトのシフト量(月単位);実行ごとに上書き可能。
event_duplicator_tbd_annotation (date TBD) 確認で TBD とフラグが立てられた場合、複製されたトピックのタイトル/イベント名に追加されるテキスト。注釈機能を完全に無効にするには空白にします。

認可は、通常の Discourse カテゴリ権限、event_duplicator_allowed_groups のメンバーシップ、および discourse-calendar の [event] ポストを作成する権限の3つのチェックの AND です。

既知の制限

  • 確認ステップの日付編集は日粒度のみです(時刻の編集は不可)。これは意図的なスコープの決定です:ターゲットユースケースは定期的なレース/イベントの日付であり、時刻ではありません。

ソース / 問題

2026-08-01 更新: v1.1.0 は設定可能な月ベースのシフトを追加しました。以下を参照

「いいね!」 4

素晴らしい仕事ですね!他者と共有していただき、ありがとうございます。これは calendar-and-events 機能の空白を効果的に埋めるものです。

ただ、月ごとの複製には設計されていないようですので、「年次イベント複製ツール」といった名称の方が適切ではないかとも思います。

月次ユースケースにも対応できるように拡張する意向はありますか?

私たちは、月、2ヶ月ごと、3ヶ月ごと(つまり四半期ごと)に開催されるイベントが多数あり、これらは月の「第X月曜日」などに設定されています。これらのイベントには多くのドキュメントやアップロードファイルが含まれており、コアの再発イベントメカニズムには適さないためです。

現在、これには相当な手動処理が必要であり、間違いも発生しています!!

より短い時間枠を考慮すると、これを機能させるには、現在のイベントが完了した時点で(タグが付けられている場合)、トピックの所有者や管理者に何らかの通知(例えばプライベートメッセージ)を送るようなプロンプト機能が必要になるでしょう。

「いいね!」 1

可能性はあります。一つの方法として、「重複イベントビュー」に「シフト(月)」コントロールを追加し、そのデフォルト値を新しい設定にするというものです。これがあなたが求めているものに近いでしょうか?

この件を追跡するために add n months shift support · Issue #19 · louking/discourse-event-duplicator · GitHub を作成しました。他に手がかりしている作業もあるため、優先順位がどうなるか確信が持てませんが、一見するとかなり素早く実装できそうです。

正直なところ、この部分の実装にはあまり興味ありません。イベントがシリーズとして構成されている場合(つまり、特定のタグ付けがされている場合)、プラグインはタグ付けされたイベントの中で最後に実行されたものを記憶し、シリーズの末尾に新しいイベントがタグ付けされたことを検知するなどしなければなりません。この通知に関するニーズは多様だと予想され、すべての可能性をカバーできるとは思いません。

「いいね!」 1

素晴らしいです。ありがとうございます。

[quote=“Lou, post:3, topic:409003”]
正直なところ、この部分についてはあまりやる気はありません。
[/quote]\nよくわかります!もう少し考えてみましたが、今なら簡単なブックマークでかなり簡単に実現できそうです。

@nathank 「Shift (months)」は v1.1.0 でリリースされました。

レビューページには、日付ルールドロップダウンの横に「Shift (months)」フィールドが追加されました。デフォルト値は 12 で、以前の動作と同じですが、実行ごとに上書きできます。また、サイト全体のデフォルト値を変更したい場合は、新しいサイト設定 event_duplicator_default_shift_months を使用できます。

これは両方の日付ルールと互換性があります。特定の平日が必要な月次または四半期シリーズは、固定された年ではなく、設定した月の間隔で「月の同じ曜日」として処理されます。

v1.1.0 にアップデートしてご利用ください(app.yml で特定のタグを固定している場合は再構築が必要です)。実装の詳細については、Issue #19 を参照してください。

最初の投稿(OP)も更新すべきだと思います。おそらく明日中には対応します。

「いいね!」 1