Для нашего бегового клуба я координирую годовой челлендж с командным компонентом. Для каждой команды возрастной группы (по 10 лет) я создаю группу в Discourse, чтобы их можно было упоминать через @ и, возможно, вести собственные обсуждения, хотя я сильно сомневаюсь, что кто-то разберётся в этом. Таким образом, у меня есть семь групп для каждой возрастной команды, и мне приходится обновлять их вручную по мере регистрации участников.
Также я хочу создать супер-группу, которая включала бы всех участников челленджа. Это было бы гораздо проще, если бы большая группа «Челленджеры» просто содержала бы подгруппы для участников до 19 лет, 20–29 лет, 30–39 лет и так далее. Тогда мне нужно было бы управлять только подгруппами, и изменения автоматически отражались бы в супер-группе.
Существует ли (или может ли появиться) способ сделать это, или мне придётся вручную вводить каждое имя пользователя из подгрупп? (Всего, думаю, это будет несколько сотен человек, и это задача на еженедельной основе.)
Я постоянно путаюсь в ссылках «Добавить в группу массово», так как, насколько я могу судить, в интерфейсе их нет — скриншоты из темы 2015 года, на которую вы сослались, не совпадают с тем, что я вижу сейчас. Разве это то же самое, что использование диалогового окна «Добавить участников» внутри группы?
И как можно скопировать список участников одной группы, чтобы затем массово добавить их в другую? Лучший рабочий процесс, который я пока придумал, — это скопировать текст со страницы «Участники» и использовать grep с поддержкой стилей (в Nisus Writer Pro) для извлечения имен пользователей. Это возможно, но отнюдь не просто.
Здесь, на Meta, есть довольно много ссылок на функцию «Массовое добавление в группу», но я больше не вижу её активной по адресу https://discourse.example.org/admin/groups/bulk — там просто пустая страница (я проверил несколько сайтов, где у меня есть права администратора). Вы что-то видите там, @adamengst?
Думаю, это немного скрытая функция, но вы можете использовать массовую рассылку приглашений, чтобы добавить существующих пользователей в группы. Просто подготовьте CSV-файл с адресами электронной почты и названиями групп, как указано во всплывающем окне, и загрузите его. Пользователям не будут отправлены письма.
@tobiaseigen Ага! Вы случайно не знаете, обрабатывает ли это групповые обновления для существующих пользователей, если на указанный адрес электронной почты уже зарегистрирован аккаунт?
Спасибо! Это уже ближе к решению, хотя я отмечу, что привязка к адресу электронной почты часто работает неэффективно, так как у многих людей несколько адресов. Поэтому мне приходится заранее проверять, приглашаю ли я адрес, связанный с существующей учётной записью, или другой, который может запутать (и потенциально создать вторую учётную запись).
Я не знаю, как работает основа системы, но кажется, что самым простым решением было бы позволить группам содержать ссылки на другие группы.
Вы всегда можете экспортировать пользователей, а затем использовать полученный CSV-файл для создания нового списка, который можно импортировать обратно с помощью функции массового приглашения. Похоже, вам нужно сделать это один раз, чтобы настроить систему с вашими существующими пользователями, а затем вручную добавлять новых людей или обновлять их возрастную категорию.
Возможно, есть смысл написать кастомный код для частичной автоматизации этого процесса для вашего сообщества — если у вас есть бюджет, вы можете разместить запрос в канале Marketplace.
Хорошая мысль насчет экспорта пользователей — я не думал об этом как о способе заполнения списка аккаунтами на старте. Буду еще размышлять над этим и посмотрим, как это сработает.
Иерархические группы (группы как члены групп) имели бы дополнительное преимущество автоматического удаления членов из наследуемых групп.
Чтобы реализовать такую функцию «вручную», вам пришлось бы запоминать, была ли принадлежность к группе унаследована от иерархически вышестоящей группы или установлена напрямую.
Могли бы вы прокомментировать возможность использования внешнего сервиса каталогов пользователей (LDAP) для реализации функции иерархических групп?
Поскольку я начал эту тему, я хотел бы добавить, что мой запрос на иерархические группы по-прежнему полностью актуален.
Функция массового приглашения в группу в моём случае просто не применима, так как я добавляю людей в конкретные группы по возрасту и в общую группу, охватывающую все возрастные группы в течение четырёхмесячного периода по мере их регистрации в другой системе.
Я посмотрю, сможет ли мой разработчик автоматизировать этот процесс в этом году, теперь, когда я знаю, насколько утомительно делать это вручную каждую неделю.
Да, на самом деле мой разработчик смог синхронизировать данные из Webscorer, который мы используем для регистрации на гонки, с группами Discourse. Это требует совпадения имён, но он создал административную страницу, которая показывает, когда они не совпадают.
Иерархии нет, но мы автоматически заполняем несколько групп, что устраняет мою основную потребность.
Это код с открытым исходным кодом, поэтому я, вероятно, смогу поделиться им, если кому-то интересно увидеть, как это работает.
Мне тоже поступил прямой запрос на это, поэтому, если кто-то хочет посмотреть код @SteveDesmond.ca для записи в группы Discourse, он доступен по адресу:
Стив также сказал, что он с радостью ответит на любые вопросы по этому поводу.
(L36) получить всех пользователей во внешней системе
(L37) получить всех пользователей в Discourse
(L38-39) получить всех участников соответствующих групп (global в данном случае является «супергруппой»)
(L46-78) для каждого пользователя во внешней системе проверить, существует ли он в Discourse, и сопоставить, в какие группы он уже входит и в какие его нужно добавить