| Краткое описание | Позволяет авторизованным пользователям дублировать события/темы календаря (созданные через 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-й будний день месяца: сохраняет, например, “3-е субботу месяца”, даже если сдвиг попадает в другой месяц.
- Настраиваемое значение смещения: сдвиг вперед на любое количество месяцев (12, т.е. один год, по умолчанию), а не только ежегодно. Полезно для ежемесячных, ежеквартальных или других повторяющихся периодов. Можно переопределить для каждого запуска, с глобальным значением по умолчанию через новую настройку (ниже).
- Флаг “Дата TBD”: для событий, реальная дата которых еще не определена, пометьте строку. Настраиваемая аннотация (по умолчанию
(date TBD)) добавляется к заголовку темы и имени события. - Отслеживание дубликатов: предотвращает повторное дублирование одного и того же события (актуально, так как тема может иметь более одного тега серии). Уже продублированные темы помечаются и по умолчанию не выбираются на этапе проверки, с возможностью явного повторного выбора для принудительного дублирования. Удаление продублированной темы автоматически освобождает исходную для повторного дублирования, а восстановление — снова блокирует ее.
- Обратная связь после дублирования: успешно продублированные строки превращаются в ссылку на новую тему прямо в таблице проверки. Реальные ошибки сообщаются для каждой строки, а не прерывают всю партию.
Требования
- discourse-calendar должен быть установлен и включен. Этот плагин дублирует события, используя собственную разметку постов
[event ...]и модельDiscoursePostEvent::Eventdiscourse-calendar, вместо создания отдельного хранилища дат. - Тестировалось на Discourse 2026.7.0. Не проверено на более ранних версиях.
Настройка
Все настройки находятся в Админ → Настройки → Плагины, найдите event_duplicator:
| Настройка | По умолчанию | Описание |
|---|---|---|
event_duplicator_enabled |
выкл | Включает плагин. |
event_duplicator_allowed_groups |
staff | Группы (в дополнение к обычным правам создания тем в категории), которым разрешено дублировать события. Примечание: пустой список означает “никто”, а не “все”. Добавьте группу “все”, чтобы полностью открыть этот доступ. |
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].
Известные ограничения
- Редактирование дат на этапе проверки имеет точность только до дня (нет редактирования времени суток). Это осознанное решение по области применения: целевой сценарий — повторяющиеся даты гонок/событий, а не время.
Исходный код / проблемы
- GitHub: GitHub - louking/discourse-event-duplicator: discourse plugin to duplicate events · GitHub
- Проблемы/запросы функций: Issues · louking/discourse-event-duplicator · GitHub
- Наборы тестов для бэкенда (RSpec) и фронтенда (QUnit) включены и запускаются в CI при каждом пуше/PR.
Обновлено 2026-08-01: v1.1.0 добавляет настраиваемое смещение по месяцам, см. ниже

