Динамические группы в Discourse

:information_source: Краткое описание Автоматическое управление членством в группах
:hammer_and_wrench: Ссылка на репозиторий https://github.com/communiteq/discourse-dynamic-groups
:open_book: Руководство по установке Как установить плагины в Discourse

:warning: Этот плагин следует считать бета-версией :warning:

Возможности

Сообщества Discourse часто нуждаются в автоматизации членства в группах на основе таких условий, как наличие значков или текущего членства в других группах.

Типичные сценарии использования включают:

  • Пользователи, не входящие в группу ‘subscribers’

  • Пользователи, не заблокированные для публикации в Marketplace

  • Пользователи с уровнем доверия TL0 или TL1, но не TL2

  • Пользователи, завершившие обучение новых участников, или состоящие в сообществе более года

  • Пользователи, принадлежащие к client_1, client_2 или client_3, и не являющиеся стажёрами

Ранее для решения этой задачи требовались пользовательские скрипты, периодически синхронизирующие группы. Плагин Dynamic Groups устраняет эту необходимость.

Этот плагин добавляет поле для булевых выражений в настройки группы, позволяя администраторам определять правила динамического управления членством.

Примеры:

  • Пользователи, не входящие в группу ‘subscribers’
    trust_level_0 AND NOT subscribers

  • Пользователи, не заблокированные для публикации в Marketplace
    trust_level_2 AND NOT banned_users

  • Пользователи с уровнем доверия TL0 или TL1, но не TL2
    trust_level_0 AND NOT trust_level_2

  • Пользователи, завершившие обучение новых участников или состоящие в сообществе более года
    badge:certified OR badge:anniversary

  • Пользователи, принадлежащие к client_1, client_2 или client_3, и не являющиеся стажёрами
    (client_1 OR client_2 OR client_3) AND NOT interns

Настройка

После установки и включения плагина в интерфейсе администратора групп появится новая вкладка:

При вводе или обновлении булева выражения системе потребуется несколько моментов для наполнения группы подходящими пользователями. С этого момента членство в группе будет автоматически обновляться при изменении статуса пользователя.

Важно:
При определении правила группа помечается как автоматическая, что отключает возможность ручного изменения состава. Чтобы вернуть группу к ручному управлению, просто очистите поле выражения. Существующие участники останутся в группе, и вы снова получите возможность управлять составом вручную.

27 лайков

Вау! Отличная работа, Ричард!

Это восполняет значительный пробел в управлении группами в Discourse. Я очень рад и с нетерпением жду возможности опробовать это в деле.

Я буду использовать его в первую очередь для создания функциональных подгрупп.

4 лайка

Определённо желанное дополнение к возможностям Discourse!

2 лайка

7 сообщений были объединены в существующую тему: Работает только первая запись при использовании полей с множественным выбором и триггера «При первом входе пользователя»

Привет, спасибо за разработку этого очень полезного плагина!

Сейчас я использую Discourse Dynamic Groups для автоматического добавления всех неанонимных пользователей в специальную группу. Мое булево выражение:

NOT anonymous_users

Ожидаемое поведение:
Когда регистрируется новый пользователь (который не состоит в группе anonymous_users), он должен автоматически добавляться в эту группу без какого-либо ручного вмешательства.

Фактическое поведение:
Новые пользователи не добавляются в группу сразу после регистрации. Они попадают в группу только после того, как я вручную пересохраняю булево выражение в настройках группы.
Это означает, что группа не обновляется автоматически по мере присоединения пользователей, если я не инициирую ручную синхронизацию.

1 лайк

Хм… хорошее замечание. И я согласен, что это должно быть ожидаемым поведением.

С технической точки зрения плагин пересматривает членство в группе только при двух условиях:

  1. Когда булево выражение в настройках группы сохраняется.
  2. Если пользователь добавляется или удаляется из группы, упомянутой в булевом выражении.

Когда регистрируется новый пользователь, ни одно из этих условий не выполняется.

Попробуйте изменить выражение на trust_level_0 AND NOT anonymous_users и сообщите, решит ли это проблему.

3 лайка

Привет,

Когда я пытаюсь использовать выражение

trust_level_0 AND NOT anonymous_users

получаю ошибку:
Неизвестное ключевое слово, группа или значок: 'anonymous_users'

Если я заменю имя группы на название моей реальной группы, например:

trust_level_0 AND NOT interns

то всё равно получаю:
Неизвестное ключевое слово, группа или значок: 'interns'

Я дважды проверил и копирую уникальное имя группы напрямую со страницы администратора групп, поэтому опечаток нет.
Может быть, я что-то упускаю, или есть ещё какие-то настройки, которые нужно выполнить, чтобы пользовательские группы распознавались в выражении?

4 лайка

Спасибо за сообщение об этой проблеме.

В процессе попыток воспроизвести ошибку я выявил два бага, и, вероятно, один из них затронул вас.
Пожалуйста, обновите плагин до последней версии 59640f1 и проверьте, решит ли это проблему.

Плагин по-прежнему некорректно обрабатывает переименование групп. Если вы переименовываете группу, необходимо сохранить правила всех групп, которые зависят от неё (просто добавьте пробел после булева выражения, а затем удалите его, чтобы активировать кнопку «Сохранить»). Эта проблема будет исправлена в более поздней версии.

3 лайка

Это работает с вашим плагином «Ограничитель категорий» или функционирует независимо от него?

Крутой плагин, чтобы восполнить пробелы.

Это работает независимо.

1 лайк

Привет,

Я использую плагин Dynamic Groups и установил критерии следующим образом:

trust_level_0 AND NOT anon_group

Однако я заметил, что пользователи с trust_level_1, которые не входят в anon_group, также добавляются в эту динамическую группу.

Пожалуйста, подтвердите, является ли это ожидаемым поведением или это ошибка?

Пользователи с уровнем доверия 1 также являются членами группы с уровнем доверия 0. Таким образом, такое поведение ожидаемо. Вы можете исключить группу с уровнем доверия 1, чтобы получить только пользователей TL0. Аналогично примеру из первого сообщения:

2 лайка

Спасибо за уточнение

Я абсолютно :heart: этот плагин — он невероятно полезен для нескольких сценариев использования. Ещё раз спасибо команде Communiteq за то, что поделились и поддерживают его!

Вопрос по UX — не лучше ли скрывать только ключевые поля, а не всю вкладку «Членство»?

Я заметил, что скрывается вкладка «Членство» на страницах групп. Вот она:

Хотя я понимаю причину, это создаёт некоторые проблемы, когда нужно поиграть с «Заголовком по умолчанию», «Пометкой» и «Эффектом».

Это можно обойти, либо показав вкладку в консоли браузера, либо удалив выражение на вкладке «Динамические группы», обновив страницу, внеся изменения, вставив выражение обратно и снова обновив страницу.

Но мне интересно, не лучше ли просто скрывать те поля, которые не нужны, вместо того чтобы скрывать всю вкладку. Что-то вроде этого:

Я согласен с вашим предложением, но…

Это базовая функциональность.
Если динамическая группа помечена как «автоматическая», вкладка «Участники» исчезает.

Это не сработает, так как ядро Discourse вообще не выводит эту вкладку. Она не скрыта — её просто нет.

1 лайк

Да, я сам это выяснил за время между моим постом и вашим ответом! Я не оценил, что вы интегрируетесь в базовую функциональность с его помощью — сделано очень изящно.

Я зачеркнул своё неверное предложение.

Похоже, тогда другое обходное решение, которое я описал, вполне подходит.

1 лайк

Я тоже об этом не знал!

В течение ближайшего месяца или около того мы проведём плановое обслуживание всех плагинов. Возможно, стоит пересмотреть флаг «автоматический», поскольку, насколько я помню, он был просто быстрым способом отключить функционал добавления/удаления участников. Все остальные последствия, вероятно, являются нежелательными побочными эффектами.

2 лайка