| 摘要 | 允许授权用户将日历事件/主题(通过 Discourse Calendar and Events 创建)复制到新的时间段。支持单个主题或整个标签系列(例如所有标记为 grand-prix 的主题),并在提交前提供审核步骤以编辑建议的日期。 |
|
| 仓库链接 | GitHub - louking/discourse-event-duplicator: discourse plugin to duplicate events · GitHub | |
| 安装指南 | 如何在 Discourse 中安装插件 |
摘要
本插件是为一个跑步俱乐部社区开发的,该社区的日历中大部分事件每年都在偏移后的日期重复发生。每个季节手动重新创建每个事件的主题意味着要复制 [event ...] 代码块、修正标题,并查找哪些已经重新创建过。这既繁琐又容易出错。事件复制器(Event Duplicator)实现了自动化:选择源事件或整个标签系列,获取建议的新日期,进行审核或编辑,然后确认。
请参阅 docs/USAGE.md 获取面向用户的完整操作指南:谁可以使用它、复制系列与单个主题的区别、审核步骤如何工作。
功能
- 系列复制:选择一个类别和一个或多个标签(例如
grand-prix、signature-race;匹配结果取并集并去重,因此具有多个匹配标签的主题仅显示一次),可选择限制源日期范围,然后在确认前审核建议的下一次发生日期。 - 单事件复制:针对单个主题执行相同的审核和确认流程,通过该主题的管理菜单(扳手图标)访问。
- 可编辑的审核步骤:每一行显示原始开始日期旁边建议的新日期(可编辑,粒度为天),以及可编辑的标题。结束日期始终根据源事件自身的持续时间自动推导,因此不会因开始日期的编辑而不同步。
- 两种可插拔的日期偏移策略,每次运行时可选,并配有可配置默认值:
- 相同日历日期:按配置的月数向前偏移。
- 月份第 N 个星期几:即使偏移落在不同月份,也保留例如“每月第三个星期六”的规则。
- 可配置的偏移量:按任意月数向前偏移(默认为 12,即一年),不仅限于年度。适用于每月、每季度或其他重复周期。每次运行时可覆盖,并通过新设置(见下文)提供站点范围的默认值。
- “日期待定”标记:对于现实世界中日期尚未确定的事件,标记该行。可配置的注释(默认
(date TBD))将附加到主题标题和事件名称中。 - 复制跟踪:防止重复复制同一事件两次(相关因为一个主题可以携带多个系列标签)。已复制的主题在审核中默认被标记并取消选中,需明确重新勾选才能强制覆盖。删除复制后的主题会自动释放其源,以便重新复制;恢复删除则会重新锁定。
- 复制后反馈:成功复制的行会在审核表中直接变为指向新主题的链接。真正的失败会按行报告,而不是中止整个批次。
要求
- 必须安装并启用 discourse-calendar。本插件通过 discourse-calendar 自身的
[event ...]帖子标记和DiscoursePostEvent::Event模型来复制事件,而不是发明单独的日期存储。 - 针对 Discourse 2026.7.0 进行测试。未在更早版本中验证。
配置
所有设置均在 管理 → 设置 → 插件 下,搜索 event_duplicator:
| 设置 | 默认值 | 描述 |
|---|---|---|
event_duplicator_enabled |
关闭 | 启用插件。 |
event_duplicator_allowed_groups |
staff | 允许复制事件的组(除了正常的每类别主题创建权限)。注意:空列表表示无人,而非所有人。添加“everyone”组以完全开放此权限。 |
event_duplicator_default_date_strategy |
相同日历日期 | 默认日期偏移规则;每次运行时可覆盖。 |
event_duplicator_default_shift_months |
12 | 默认偏移量,以月为单位;每次运行时可覆盖。 |
event_duplicator_tbd_annotation |
(date TBD) |
在审核中标记为待定时,附加到复制后主题标题/事件名称的文本。留空以完全禁用注释功能。 |
授权是三项检查的“与”关系:正常的 Discourse 类别权限、event_duplicator_allowed_groups 的成员资格,以及 discourse-calendar 创建 [event] 帖子的权限。
已知限制
- 审核步骤的日期编辑仅支持天粒度(不支持具体时间编辑)。这是故意的范围决定:目标用例是重复的比赛/事件日期,而非时间。
源代码 / 问题反馈
- GitHub: GitHub - louking/discourse-event-duplicator: discourse plugin to duplicate events · GitHub
- 问题/功能请求: Issues · louking/discourse-event-duplicator · GitHub
- 包含后端 (RSpec) 和前端 (QUnit) 测试套件,并在每次推送/PR 时在 CI 中运行。
更新于 2026-08-01:v1.1.0 增加了基于月份的可配置偏移功能,见下文

