Informe del panel - Políticas no aceptadas

Este es una versión SQL del Informe del Panel para Políticas No Aceptadas.

:discourse: Este informe requiere que el plugin Discourse Policy esté habilitado.

Este informe del panel identifica temas con políticas que no han sido aceptadas por ciertos usuarios. Este informe ayuda a los administradores a garantizar que los usuarios cumplan con las políticas de publicación, identificar quién no ha aceptado las políticas requeridas, hacer cumplir las reglas del foro, administrar las actualizaciones de políticas y confirmar que los usuarios aceptan las directrices.

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

Explicación de la Consulta SQL

Esta consulta realiza las siguientes operaciones:

  • Une las tablas post_policies, post_policy_groups, posts, topics y group_users para crear una lista de temas y usuarios que están sujetos a políticas de publicación según su membresía en el grupo.
  • Utiliza una unión izquierda con la tabla policy_users para encontrar instancias en las que un usuario no ha aceptado la política (pu.id IS NULL), asegurando que solo se consideren las aceptaciones de políticas actuales y relevantes (no revocadas, no expiradas y que coincidan con la versión actual de la política).
  • Selecciona pares distintos de topic_id y user_id, lo que indica temas con políticas que no han sido aceptadas por ciertos usuarios.

Resultados de Ejemplo

tema usuario
Tema de Política 1 usuario_1
Tema de Política 1 usuario_2
Tema de Política 2 usuario_1