Сообщества 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
Настройка
После установки и включения плагина в интерфейсе администратора групп появится новая вкладка:
При вводе или обновлении булева выражения системе потребуется несколько моментов для наполнения группы подходящими пользователями. С этого момента членство в группе будет автоматически обновляться при изменении статуса пользователя.
Важно:
При определении правила группа помечается как автоматическая, что отключает возможность ручного изменения состава. Чтобы вернуть группу к ручному управлению, просто очистите поле выражения. Существующие участники останутся в группе, и вы снова получите возможность управлять составом вручную.
Привет, спасибо за разработку этого очень полезного плагина!
Сейчас я использую Discourse Dynamic Groups для автоматического добавления всех неанонимных пользователей в специальную группу. Мое булево выражение:
NOT anonymous_users
Ожидаемое поведение:
Когда регистрируется новый пользователь (который не состоит в группе anonymous_users), он должен автоматически добавляться в эту группу без какого-либо ручного вмешательства.
Фактическое поведение:
Новые пользователи не добавляются в группу сразу после регистрации. Они попадают в группу только после того, как я вручную пересохраняю булево выражение в настройках группы.
Это означает, что группа не обновляется автоматически по мере присоединения пользователей, если я не инициирую ручную синхронизацию.
получаю ошибку: Неизвестное ключевое слово, группа или значок: 'anonymous_users'
Если я заменю имя группы на название моей реальной группы, например:
trust_level_0 AND NOT interns
то всё равно получаю: Неизвестное ключевое слово, группа или значок: 'interns'
Я дважды проверил и копирую уникальное имя группы напрямую со страницы администратора групп, поэтому опечаток нет.
Может быть, я что-то упускаю, или есть ещё какие-то настройки, которые нужно выполнить, чтобы пользовательские группы распознавались в выражении?
В процессе попыток воспроизвести ошибку я выявил два бага, и, вероятно, один из них затронул вас.
Пожалуйста, обновите плагин до последней версии 59640f1 и проверьте, решит ли это проблему.
Плагин по-прежнему некорректно обрабатывает переименование групп. Если вы переименовываете группу, необходимо сохранить правила всех групп, которые зависят от неё (просто добавьте пробел после булева выражения, а затем удалите его, чтобы активировать кнопку «Сохранить»). Эта проблема будет исправлена в более поздней версии.
Пользователи с уровнем доверия 1 также являются членами группы с уровнем доверия 0. Таким образом, такое поведение ожидаемо. Вы можете исключить группу с уровнем доверия 1, чтобы получить только пользователей TL0. Аналогично примеру из первого сообщения:
Я абсолютно этот плагин — он невероятно полезен для нескольких сценариев использования. Ещё раз спасибо команде Communiteq за то, что поделились и поддерживают его!
Вопрос по UX — не лучше ли скрывать только ключевые поля, а не всю вкладку «Членство»?
Я заметил, что скрывается вкладка «Членство» на страницах групп. Вот она:
Хотя я понимаю причину, это создаёт некоторые проблемы, когда нужно поиграть с «Заголовком по умолчанию», «Пометкой» и «Эффектом».
Это можно обойти, либо показав вкладку в консоли браузера, либо удалив выражение на вкладке «Динамические группы», обновив страницу, внеся изменения, вставив выражение обратно и снова обновив страницу.
Но мне интересно, не лучше ли просто скрывать те поля, которые не нужны, вместо того чтобы скрывать всю вкладку. Что-то вроде этого:
Да, я сам это выяснил за время между моим постом и вашим ответом! Я не оценил, что вы интегрируетесь в базовую функциональность с его помощью — сделано очень изящно.
Я зачеркнул своё неверное предложение.
Похоже, тогда другое обходное решение, которое я описал, вполне подходит.
В течение ближайшего месяца или около того мы проведём плановое обслуживание всех плагинов. Возможно, стоит пересмотреть флаг «автоматический», поскольку, насколько я помню, он был просто быстрым способом отключить функционал добавления/удаления участников. Все остальные последствия, вероятно, являются нежелательными побочными эффектами.