Le titre est peut-être un peu cryptique, mais le contexte est de convertir une catégorie en « privée » tout en ayant un moyen d’identifier tous les utilisateurs qui y ont participé dans le passé \\u003cintervalle de temps\\u003e et de les ajouter à un groupe afin qu’il puisse être défini comme ayant accès.
Supposons que le groupe puisse être créé avant cela.
Ce qui est actuellement pris en charge :
Créer un groupe
Assigner des autorisations pour un groupe à une catégorie
Modifier les autorisations de la catégorie
Ce qui manque, c’est un moyen de dire « assigner ces utilisateurs à un groupe », en fonction de leur interaction dans cette catégorie sur une période spécifique.
Peut-être existe-t-il une requête ou un code que je peux exécuter pour identifier ces utilisateurs et les assigner à un groupe ?
J’ai utilisé une requête Data Explorer pour déterminer qui a participé à un sujet en fonction de user_actions :
-- [params]
-- int :topic = 3620561
select user_id,
sum(action_type) actions,
sum(case action_type when 5 then 1 else 0 end) replies
from user_actions ua
join users u on u.id = ua.user_id
where target_topic_id = :topic
and moderator is false
and admin is false
group by ua.user_id
Cela inclut des actions telles que les réponses, les likes, les modifications et les mentions. J’ai également une requête qui inclut les réponses aux sondages. C’était pour collecter des prospects, mais je m’attends à ce que certaines des personnes qui ont fait autre chose que répondre aient un droit sur le sujet. Définir « participé » pourrait être un exercice utile.
Pour étendre à la catégorie entière, joignez avec topics t on target_topic_id = t.id et ajoutez category_id à la clause where. Il ne devrait pas être difficile de définir l’intervalle de temps en fonction de ua.created_at.
Merci @jericson, c’est exactement ce que je cherchais.
Je suppose que je pourrais alimenter les résultats dans une requête qui ajoute ensuite tous les utilisateurs à un groupe.
Quelqu’un a-t-il eu de l’expérience dans ce domaine ? Peut-être vaut-il mieux copier-coller brutalement les identifiants des utilisateurs et exécuter une fonction Ruby s’il y en a une de disponible ?
C’est généralement ma solution préférée. Mais il est probablement plus judicieux de s’inspirer des exemples d’opérations en masse et d’appliquer la clause where sur l’objet User dans Rails. (Avoir un environnement de test pour ce genre de moment aide !)
Selon le nombre, vous pouvez coller une liste séparée par des virgules dans la zone Ajouter des utilisateurs au groupe, si cela peut vous être utile ?
(Il existe également une automatisation pour ajouter des utilisateurs à un groupe en fonction d’un badge, pour laquelle vous pourriez utiliser cette requête SQL comme base. Cela pourrait être un peu compliqué si vous êtes satisfait de l’option Rails cependant)
Juste pour que la requête soit complète au cas où d’autres en auraient besoin :
select ua.user_id, u.username, sum(action_type) actions, sum(case action_type when 5 then 1 else 0 end) replies from user_actions ua
join users u on u.id = ua.user_id
join topics t on target_topic_id = t.id
where ua.created_at > 'YYYY-MM-DD'::date and t.category_id = CATEGORY_ID
group by ua.user_id, u.username;
Remplacez simplement YYY-MM-DD par votre date limite et CATEGORY_ID par votre ID de catégorie.
Le résultat affichera l’ID utilisateur, le nom d’utilisateur, les actions et les réponses.
Les options que j’ai suggérées sont disponibles dans l’interface utilisateur, bien que la seconde nécessite le plugin Discourse Automation (c’est un bon plugin cependant )
J’ai une liste d’identifiants d’utilisateur (ou même de noms d’utilisateur) et je dois les ajouter à un groupe.
Je ne vois dans les automatisations actuelles aucun cas d’utilisation qui pourrait m’aider. Il n’y a que l’ajout à un groupe basé sur des badges ou un champ personnalisé, mais cela ne signifie qu’ajouter une étape supplémentaire (ajouter un badge à tous ces utilisateurs ou ajouter un champ personnalisé aux utilisateurs, puis ajouter une valeur aux utilisateurs spécifiques que je veux).
N’y a-t-il pas une fonction bulk_add_user_to_group ou même une fonction add_user_to_group que je pourrais simplement appeler en boucle peut-être ?
Oui, ce serait un peu plus compliqué de faire comme ça. Mais si vous avez une liste assez courte, vous pouvez exporter les résultats de l’explorateur en CSV, ouvrir dans le Bloc-notes, et copier-coller dans la boîte Ajouter des utilisateurs :
Vous pourriez en faire 250 d’un coup, bien que je n’aie pas essayé avec autant. Une poignée de lots devrait suffire, sinon.
Il devrait également être possible via l’API en utilisant une requête PUT vers le point de terminaison par exemple /groups/49/members.json (vous aurez besoin de votre propre group_id) avec une liste de vos noms d’utilisateur/e-mails.