Der Titel ist vielleicht etwas kryptisch, aber der Kontext ist, eine Kategorie in „privat“ umzuwandeln, aber eine Möglichkeit zu haben, alle Benutzer zu identifizieren, die in der Vergangenheit in einem bestimmten \\u003ctimeframe\\u003e daran teilgenommen haben, und sie einer Gruppe hinzuzufügen, damit diese als zugriffsberechtigt festgelegt werden kann.
Nehmen wir an, die Gruppe kann vorher erstellt werden.
Was derzeit unterstützt wird:
Eine Gruppe erstellen
Berechtigungen für eine Gruppe für eine Kategorie zuweisen
Die Berechtigungen der Kategorie ändern
Was fehlt, ist eine Möglichkeit zu sagen „diese Benutzer einer Gruppe zuweisen“, basierend auf ihrer Interaktion in dieser Kategorie in einem bestimmten Zeitraum.
Gibt es vielleicht eine Abfrage oder einen Code, den ich ausführen kann, um diese Benutzer zu identifizieren und ihnen eine Gruppe zuzuweisen?
Ich habe eine Data Explorer-Abfrage verwendet, um herauszufinden, wer an einem Thema basierend auf user_actions teilgenommen hat:
-- [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
Das schließt Aktionen wie Antworten, Likes, Bearbeitungen und Erwähnungen ein. Ich habe auch eine Abfrage, die Umfrag responses einschließt. Dies diente dem Sammeln von Leads, aber ich erwarte, dass einige der Leute, die etwas anderes als eine Antwort getan haben, einen Anspruch auf das Thema haben könnten. Die Definition von „teilgenommen“ könnte eine nützliche Übung sein.
Um sich auf die gesamte Kategorie auszuweiten, verbinden Sie sich mit topics t on target_topic_id = t.id und fügen Sie category_id zur WHERE-Klausel hinzu. Es sollte nicht schwer sein, den Zeitrahmen basierend auf ua.created_at zu definieren.
Danke @jericson, das ist genau das, wonach ich gesucht habe.
Ich vermute, dass ich die Ergebnisse an eine Abfrage weiterleiten könnte, die dann alle Benutzer zu einer Gruppe hinzufügt.
Hat jemand Erfahrung damit? Vielleicht ist es besser, die Benutzer-IDs brutal zu kopieren und eine Ruby-Funktion auszuführen, wenn etwas verfügbar ist?
Das ist normalerweise meine bevorzugte Lösung. Aber es ist wahrscheinlich sinnvoller, eine Seite aus den Beispielen für Massenvorgänge zu nehmen und die where-Klausel auf das User-Objekt in Rails anzuwenden. (Eine Testumgebung für eine solche Situation ist hilfreich!)
Je nachdem, wie viele es sind, können Sie eine durch Kommas getrennte Liste in das Feld „Benutzer zur Gruppe hinzufügen“ einfügen, falls das von Nutzen ist?
(Es gibt auch eine Automatisierung, um Benutzer basierend auf einem Badge zu einer Gruppe hinzuzufügen, für die Sie diese SQL als Basis verwenden könnten. Das ist jedoch möglicherweise etwas umständlich, wenn Sie mit der Rails-Option zufrieden sind.)
Nur um die Abfrage abzuschließen, falls andere sie benötigen:
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;
Ersetzen Sie einfach YYY-MM-DD durch Ihr Stichtagsdatum und CATEGORY_ID durch Ihre Kategorie-ID.
Das Ergebnis zeigt die user_id, den Benutzernamen, die Aktionen und die Antworten an.
Die von mir vorgeschlagenen Optionen sind in der Benutzeroberfläche verfügbar, obwohl für die zweite Option das Plugin Discourse Automation benötigt wird (es ist jedoch ein gutes Plugin ).
Ich habe eine Liste von Benutzer-IDs (oder sogar Benutzernamen) und muss sie zu einer Gruppe hinzufügen.
Ich sehe in den aktuellen Automatisierungen keinen Anwendungsfall, der mir helfen könnte. Es gibt nur das Hinzufügen zu einer Gruppe basierend auf Abzeichen oder benutzerdefinierten Feldern, aber das bedeutet nur einen weiteren Schritt (Hinzufügen eines Abzeichens zu all diesen Benutzern oder Hinzufügen eines benutzerdefinierten Feldes zu Benutzern und dann Hinzufügen eines Wertes zu den spezifischen Benutzern, die ich möchte).
Gibt es keine bulk_add_user_to_group-Funktion oder sogar eine add_user_to_group, die ich vielleicht einfach in einer Schleife aufrufen kann?
Ja, es wäre auf diese Weise etwas umständlicher. Aber wenn Sie eine eher kurze Liste haben, können Sie die Explorer-Ergebnisse als CSV exportieren, in Notepad öffnen und sie in das Feld „Benutzer hinzufügen“ kopieren und einfügen:
Sie könnten wahrscheinlich 250 auf einmal schaffen, obwohl ich es noch nicht mit so vielen versucht habe. Eine Handvoll Stapel sollte es jedoch abdecken, wenn nicht.
Es sollte auch über die API mittels einer PUT-Anfrage an den Endpunkt z. B. /groups/49/members.json (Sie benötigen Ihre eigene group_id) mit einer Liste Ihrer Benutzernamen/E-Mail-Adressen möglich sein.