Skip to content

ban2zai/discourse-tag-subscriptions

Repository files navigation

discourse-tag-subscriptions

Discourse-плагин для удобного управления подписками на теги прямо со страницы настроек пользователя (/u/:username/preferences/notifications).

Что делает

Добавляет секцию «Подписки на теги» в настройки уведомлений каждого пользователя. Пользователь видит сгруппированный список тегов и может одним кликом выбрать уровень уведомлений:

  • 1 клик — уведомление о новой теме с тегом (watching_first_post)
  • 2 клика — уведомление о каждом ответе в теме с тегом (watching)

Изменения сохраняются вместе с нативной кнопкой «Сохранить изменения» Discourse — никаких отдельных кнопок.

Возможности

  • Группировка тегов по настроенным группам тегов Discourse
  • Закреплённые теги вне групп (секция «Иные теги» вверху списка)
  • Автовыбор родительского тега при выборе всех дочерних
  • Алфавитная сортировка тегов внутри групп
  • Порядок групп соответствует порядку в настройках плагина
  • Цветовая индикация уровня подписки (два настраиваемых цвета)
  • Кнопка «Скрыть» / «Показать» секцию (сохраняется в localStorage)
  • Staff видит все группы тегов; обычные пользователи — только доступные им
  • Поддержка кастомных display-имён тегов через CSS ::before темы

Требования

  • Discourse (актуальная stable-версия)
  • Теги и группы тегов должны быть включены в настройках форума

Установка

В app.yml в секцию hooks.after_code:

hooks:
  after_code:
    - exec:
        cd: $home/plugins
        cmd:
          - git clone https://github.com/ban2zai/discourse-tag-subscriptions.git

Затем пересборка контейнера:

./launcher rebuild app

Настройка

После установки перейди в Admin → Settings и найди настройки с префиксом tag_subscription:

Настройка Описание Пример
tag_subscription_groups Имена групп тегов через | в нужном порядке БГУ Разделы|ЗГУ Разделы|Техно Разделы
tag_subscription_gated_categories Категории, где уведомления по тегам управляются отдельными чекбоксами пользователя; порядок в настройке задаёт порядок в меню Тех. задание|Инструкции|Инструменты
tag_subscription_default_enabled_categories Gated-категории, где чекбокс уведомлений по тегам включён по умолчанию Инструкции|Инструменты
tag_subscription_category_checkbox_label Текст перед названием категории в чекбоксах уведомлений по категориям Получать уведомления по выбранным тегам в категории
tag_subscription_pinned_tags Теги через | для секции «Иные теги» вверху какой-раздел|общее
tag_subscription_level1_color Цвет (hex) для уровня «новая тема» #e5b000
tag_subscription_level2_color Цвет (hex) для уровня «все ответы» #cc5500
tag_subscription_level1_label Подпись в легенде для уровня 1 Уведомление о новой теме с тегом
tag_subscription_level2_label Подпись в легенде для уровня 2 Уведомление о каждом ответе в теме с тегом
tag_subscription_hint Подсказка под легендой Нажмите 1 раз — только новые темы, 2 раза — все ответы, 3 раза — отменить

Архитектура

Плагин состоит из двух частей:

Ruby (plugin.rb) — эндпоинты GET /tag-subscriptions/tag-groups.json и /tag-subscriptions/preferences.json, доступные залогиненным пользователям. Первый возвращает группы тегов с учётом прав доступа пользователя и поля parent_tag. Второй отдаёт категории, где пользователь может явно включить уведомления по выбранным тегам.

JavaScript/Handlebars — Glimmer-компонент в outlet user-preferences-notifications. Загружает группы через кастомный эндпоинт, текущие подписки через /u/:username.json, а category opt-in через /tag-subscriptions/preferences.json. При сохранении делает PUT /u/:username.json только с тег-полями и отдельно сохраняет category opt-in.

УведомленияPostAlerter расширяется через prepend: для gated-категорий tag-derived уведомления создаются только пользователям, которые включили категорию в настройках. Прямые упоминания, ответы, watched topic/category и видимость тем не меняются.

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors