Rapport Tableau de bord - Politiques non acceptées

Ceci est une version SQL du rapport de tableau de bord pour les politiques non acceptées.

:discourse: Ce rapport nécessite que le plugin Discourse Policy soit activé.

Ce rapport de tableau de bord identifie les sujets contenant des politiques qui n’ont pas été acceptées par certains utilisateurs. Ce rapport aide les administrateurs à s’assurer que les utilisateurs respectent les politiques de publication, à identifier qui n’a pas accepté les politiques requises, à appliquer les règles du forum, à gérer les mises à jour des politiques et à confirmer que les utilisateurs acceptent les directives.

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

Explication de la requête SQL

Cette requête effectue les opérations suivantes :

  • Joint les tables post_policies, post_policy_groups, posts, topics et group_users pour créer une liste de sujets et d’utilisateurs soumis aux politiques de publication en fonction de leur appartenance à un groupe.
  • Utilise une jointure externe gauche avec la table policy_users pour trouver les cas où un utilisateur n’a pas accepté la politique (pu.id IS NULL), en s’assurant que seules les acceptations de politique actuelles et pertinentes sont prises en compte (non révoquées, non expirées et correspondant à la version actuelle de la politique).
  • Sélectionne des paires distinctes de topic_id et user_id, indiquant les sujets avec des politiques que certains utilisateurs n’ont pas acceptées.

Exemple de résultats

sujet utilisateur
Sujet de politique 1 utilisateur_1
Sujet de politique 1 utilisateur_2
Sujet de politique 2 utilisateur_1