O título pode ser um pouco enigmático, mas o contexto é converter uma categoria para “privada”, mas ter uma maneira de identificar todos os usuários que participaram dela no passado \\u003ctimeframe\\u003e e adicioná-los a um grupo para que ele possa ser definido como tendo acesso.
Vamos supor que o grupo possa ser criado antes disso.
O que é atualmente suportado:
Criar um grupo
Atribuir permissões para um grupo a uma categoria
Alterar as permissões da categoria
O que está faltando é uma maneira de dizer “atribuir estes usuários a um grupo”, com base em sua interação nesta categoria em um período específico.
Talvez exista uma consulta ou código que eu possa executar que possa identificar esses usuários e atribuí-los a um grupo?
Usei uma consulta no Data Explorer para descobrir quem participou de um tópico com base em 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
Isso inclui ações como respostas, curtidas, edições e menções. Eu também tenho uma consulta que inclui respostas de enquetes. Isso foi para coletar leads, mas espero que algumas das pessoas que fizeram algo além de responder possam ter uma reivindicação sobre o tópico. Definir “participou” pode ser um exercício útil.
Para expandir para a categoria inteira, junte-se a topics t on target_topic_id = t.id e adicione category_id à cláusula where. Não deve ser difícil definir o período com base em ua.created_at.
Obrigado @jericson, é exatamente o que eu estava procurando.
Imagino que eu poderia alimentar os resultados para uma consulta que adiciona todos os usuários a um grupo então.
Alguém tem experiência fazendo isso? Talvez seja melhor copiar e colar brutalmente os IDs de usuário e executar uma função Ruby se houver algo disponível?
Essa geralmente é minha solução preferida. Mas provavelmente faz mais sentido usar uma página dos exemplos de operações em massa e aplicar a cláusula where no objeto User no Rails. (Ter um ambiente de teste para um momento como este ajuda!)
Dependendo de quantos existem, você pode colar uma lista separada por vírgulas na caixa Adicionar usuários ao grupo, se isso for útil?
(Também existe uma Automação para adicionar usuários a um grupo com base em um crachá, para a qual você pode usar este SQL como base. Isso pode ser um pouco complicado se você estiver satisfeito com a opção Rails, no entanto)
Apenas para deixar a consulta completa caso outros precisem:
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;
Apenas substitua YYY-MM-DD pela sua data de corte e CATEGORY_ID pelo seu ID de categoria.
O resultado mostrará o user_id, username, actions e replies.
Eu tenho uma lista de IDs de usuário (ou até mesmo nomes de usuário) e preciso adicioná-los a um grupo.
Eu não vejo nas automações atuais um caso de uso que possa me ajudar. Existe apenas a adição a um grupo com base em distintivos ou campos personalizados, mas isso significa apenas adicionar uma etapa adicional (adicionar um distintivo a todos esses usuários ou adicionar um campo personalizado aos usuários e, em seguida, adicionar um valor aos usuários específicos que eu quero).
Não existe uma função bulk_add_user_to_group ou mesmo uma add_user_to_group que eu possa simplesmente chamar em um loop, talvez?
Sim, seria um pouco mais complicado fazer dessa forma. Mas se você tiver uma lista curta, pode exportar os resultados do explorador como um CSV, abrir no bloco de notas e copiar e colar na caixa Adicionar Usuários:
Você pode conseguir fazer 250 de uma vez, embora eu não tenha tentado com tantas. Um punhado de lotes deve cobrir, se não.
Também deve ser possível através da API usando uma requisição PUT para o endpoint eg /groups/49/members.json (você precisará do seu próprio group_id) com uma lista de seus nomes de usuário/e-mails.