これは、未承認ポリシーのダッシュボードレポートのSQLバージョンです。
このレポートには、Discourse Policy プラグインが有効になっている必要があります。
このダッシュボードレポートは、特定のユーザーによって承認されていないポリシーを持つトピックを特定します。このレポートは、管理者がユーザーが投稿ポリシーを遵守していることを確認し、必須ポリシーを承認していないユーザーを特定し、フォーラムのルールを施行し、ポリシーの更新を管理し、ユーザーがガイドラインに同意したことを確認するのに役立ちます。
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
SQLクエリの説明
このクエリは、次の操作を実行します。
post_policies、post_policy_groups、posts、topics、group_usersテーブルを結合して、グループメンバーシップに基づいて投稿ポリシーの対象となるトピックとユーザーのリストを作成します。policy_usersテーブルとの左結合を使用して、ユーザーがポリシーを承認していないインスタンス(pu.id IS NULL)を見つけ、現在のポリシーの承認のみが考慮されるようにします(取り消されておらず、期限切れではなく、ポリシーの現在のバージョンと一致している)。- 承認されていないポリシーを持つトピックを示す、一意の
topic_idとuser_idのペアを選択します。
結果例
| トピック | ユーザー |
|---|---|
| ポリシー トピック 1 | user_1 |
| ポリシー トピック 1 | user_2 |
| ポリシー トピック 2 | user_1 |
| … | … |