Como posso conceder automaticamente um distintivo quando o usuário visita um link dentro do fórum Discourse?
ex: https://myforum.example.com?special_access=true
Que tal usar a tabela topic_link_clicks?
Acho que posso ter um selo manual que se beneficiaria disso.
Vou pensar a respeito.
Se for um link específico compartilhado em uma postagem específica, acho que este faria o trabalho:
SELECT DISTINCT tlc.user_id, MIN(tlc.created_at) granted_at
FROM badge_posts p
LEFT JOIN topic_links tl ON tl.post_id = p.id
LEFT JOIN topic_link_clicks tlc ON tlc.topic_link_id = tl.id
WHERE tl.post_id = 1246
AND tl.url = 'https://meta.discourse.org/'
AND tlc.user_id IS NOT NULL
GROUP BY tlc.user_id
Você precisaria pegar o post_id da sua postagem específica do JSON dela (ou executar uma consulta através do explorador de dados)
Eu acho que isso pode funcionar.
Eu só quero conceder este distintivo a membros do nosso curso.
Existe alguma maneira de ocultar um tópico do público em geral e torná-lo disponível apenas para aqueles que clicam nele através de um link?
Em segundo lugar, como isso pode ser feito usando o plugin Dfata explorer?
Não tenho 100% de certeza se estou a seguir o método que está a usar para isto? Pode querer verificar se não está a complicar demasiado a configuração.
Se verificar o JSON não é a sua praia, então uma consulta de pesquisa de post_id seria algo como isto:
-- [params]
-- topic_id :topic_id
-- int :post_number
SELECT id
FROM posts
WHERE topic_id = :topic_id
AND post_number = :post_number
Em seguida, pode usar o URL do post para extrair o ID do tópico e o número do post para introduzir nas caixas de parâmetros. por exemplo: https://meta.discourse.org/t/grant-badge-when-user-visits-link/276700/4 (vale a pena notar que o OP é sempre o post_number 1, mesmo que não esteja no link do tópico)
Na verdade, existe um parâmetro mágico que pode facilitar ainda mais a pesquisa de um post_id usando o explorador de dados…
-- [params]
-- post_id :url
SELECT id
FROM posts
WHERE id = :url
Cole o URL relevante para o post na caixa de parâmetros, et voila - ele mostra o post_id ![]()
O fundo vermelho me faz pensar que não é um URL de postagem completo. Se for um URL de tópico, você precisa adicionar /1 no final:
https://meta.discourse.org/t/grant-badge-when-user-visits-link/276700/1
Isso funcionou!
Estou assumindo que isso precisa ser substituído pelo URL da postagem incluindo o ‘/1’?
Esse trecho precisa ser substituído pelo link em que eles estão clicando dentro da postagem.
E o post_id é a postagem em que o link é colado/compartilhado.
Ah, entendi, então não há como apenas conceder o distintivo apenas por eles visitarem o link da postagem?
Eu acho que deveria haver, mas essa seria uma consulta diferente.
Esta concede um distintivo por clicar em um link específico em uma postagem de fórum específica.
Se você quiser conceder um distintivo para um usuário visitar um tópico específico, acho que seria:
SELECT DISTINCT tv.user_id, MIN(tv.viewed_at) granted_at
FROM topic_views tv
WHERE tv.topic_id = 728
GROUP BY tv.user_id
(Substituindo ‘728’ pelo topic_id relevante)
Ok, então eu tenho configurado assim:
Mas quando visito a publicação em questão (como Administrador), não recebo o distintivo. Estou fazendo algo errado aqui?
Como ele precisa do gatilho de atualização diária, ele será concedido na próxima vez que o trabalho de concessão de distintivos diários for executado. Você pode acionar manualmente Jobs::BadgeGrant em sua página /sidekiq/scheduler se quiser acelerar para verificar.
Como posso fazer com que ele atualize instantaneamente?
Os únicos gatilhos disponíveis são:
- Atualizar diariamente
- Quando um usuário edita ou cria uma postagem
- Quando um usuário é editado ou criado
- Quando um usuário age em uma postagem
- Quando um usuário é editado ou criado
- Quando um usuário muda o nível de confiança
Para ter um emblema concedido de forma mais instantânea, você precisaria trabalhar dentro dos limites dessas ações. Você pode ler mais neste tópico - Creating triggered custom badge queries
Eu fiz isso, mas ainda não foi concedido.
Para constar, funciona para mim.
Você o habilitou? E você tem certeza de que definiu o número correto do tópico?
Sim, está ativado. Deixe-me tentar em outro perfil. Talvez seja porque sou o administrador.
Em segundo lugar, você está apenas colando o link do tópico no seu navegador?
Ser administrador não faz diferença neste caso.
Você precisaria visitar o tópico para que ele seja registrado na tabela topic_views na qual esta medalha se baseia.





