Este é um relatório de painel em SQL para políticas não aceitas.
Este relatório requer que o plugin Discourse Policy esteja habilitado.
Este relatório de painel identifica tópicos com políticas que não foram aceitas por determinados usuários. Este relatório ajuda os administradores a garantir que os usuários cumpram as políticas de postagem, identificar quem não aceitou as políticas exigidas, impor as regras do fórum, gerenciar atualizações de políticas e confirmar que os usuários concordam com as diretrizes.
SELECT distinct t.id AS topic_id, gu.user_id AS user_id
FROM post_policies pp
JOIN post_policy_groups pg on pg.post_policy_id = pp.id
JOIN posts p ON p.id = pp.post_id AND p.deleted_at is null
JOIN topics t ON t.id = p.topic_id AND t.deleted_at is null
JOIN group_users gu ON gu.group_id = pg.group_id
LEFT JOIN policy_users pu ON
pu.user_id = gu.user_id AND
pu.post_policy_id = pp.id AND
pu.accepted_at IS NOT NULL AND
pu.revoked_at IS NULL AND
(pu.expired_at IS NULL OR pu.expired_at < pu.accepted_at) AND
((pu.version IS NULL AND pp.version IS NULL) OR
(pp.version IS NOT NULL AND pu.version IS NOT NULL AND pu.version = pp.version))
WHERE pu.id IS NULL
Explicação da Consulta SQL
Esta consulta executa as seguintes operações:
- Junta as tabelas
post_policies,post_policy_groups,posts,topicsegroup_userspara criar uma lista de tópicos e usuários que estão sujeitos a políticas de postagem com base na associação de seus grupos. - Usa um
LEFT JOINcom a tabelapolicy_userspara encontrar instâncias em que um usuário não aceitou a política (pu.id IS NULL), garantindo que apenas aceitações de políticas atuais e relevantes sejam consideradas (não revogadas, não expiradas e correspondendo à versão atual da política). - Seleciona pares distintos de
topic_ideuser_id, indicando tópicos com políticas que não foram aceitas por determinados usuários.
Exemplo de Resultados
| Tópico | Usuário |
|---|---|
| Tópico de Política 1 | usuário_1 |
| Tópico de Política 1 | usuário_2 |
| Tópico de Política 2 | usuário_1 |
| … | … |