mirror of
https://github.com/discourse/discourse.git
synced 2024-11-25 09:37:16 +08:00
129 lines
3.6 KiB
Ruby
129 lines
3.6 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
module Reports::PostEdits
|
|
extend ActiveSupport::Concern
|
|
|
|
class_methods do
|
|
def report_post_edits(report)
|
|
category_id, include_subcategories = report.add_category_filter
|
|
editor_username = report.filters["editor"]
|
|
|
|
report.modes = [:table]
|
|
|
|
report.labels = [
|
|
{
|
|
type: :date,
|
|
property: :created_at,
|
|
title: I18n.t("reports.post_edits.labels.edited_at"),
|
|
},
|
|
{
|
|
type: :post,
|
|
properties: {
|
|
topic_id: :topic_id,
|
|
number: :post_number,
|
|
truncated_raw: :post_raw,
|
|
},
|
|
title: I18n.t("reports.post_edits.labels.post"),
|
|
},
|
|
{
|
|
type: :user,
|
|
properties: {
|
|
username: :editor_username,
|
|
id: :editor_id,
|
|
avatar: :editor_avatar_template,
|
|
},
|
|
title: I18n.t("reports.post_edits.labels.editor"),
|
|
},
|
|
{
|
|
type: :user,
|
|
properties: {
|
|
username: :author_username,
|
|
id: :author_id,
|
|
avatar: :author_avatar_template,
|
|
},
|
|
title: I18n.t("reports.post_edits.labels.author"),
|
|
},
|
|
{
|
|
type: :text,
|
|
property: :edit_reason,
|
|
title: I18n.t("reports.post_edits.labels.edit_reason"),
|
|
},
|
|
]
|
|
|
|
report.data = []
|
|
|
|
builder = DB.build <<~SQL
|
|
SELECT
|
|
pr.user_id AS editor_id,
|
|
editor.username AS editor_username,
|
|
editor.uploaded_avatar_id AS editor_avatar_id,
|
|
p.user_id AS author_id,
|
|
author.username AS author_username,
|
|
author.uploaded_avatar_id AS author_avatar_id,
|
|
pr.number AS revision_version,
|
|
p.version AS post_version,
|
|
pr.post_id,
|
|
LEFT(p.raw, 40) AS post_raw,
|
|
p.topic_id,
|
|
p.post_number,
|
|
p.edit_reason,
|
|
pr.created_at
|
|
FROM post_revisions pr
|
|
JOIN posts p
|
|
ON p.id = pr.post_id
|
|
JOIN users author
|
|
ON author.id = p.user_id
|
|
JOIN users editor
|
|
ON editor.id = pr.user_id
|
|
/*join*/
|
|
/*where*/
|
|
ORDER BY pr.created_at ASC
|
|
/*limit*/
|
|
SQL
|
|
|
|
if category_id
|
|
builder.join "topics t ON t.id = p.topic_id"
|
|
if include_subcategories
|
|
builder.where("t.category_id IN (?)", Category.subcategory_ids(category_id))
|
|
else
|
|
builder.where("t.category_id = ?", category_id)
|
|
end
|
|
end
|
|
|
|
if editor_username
|
|
builder.where("editor.username = ?", editor_username)
|
|
else
|
|
builder.where("editor.id > 0 AND editor.id != author.id")
|
|
end
|
|
|
|
builder.where("pr.created_at >= :start_date", start_date: report.start_date)
|
|
builder.where("pr.created_at <= :end_date", end_date: report.end_date)
|
|
|
|
result = builder.query
|
|
|
|
result.each do |r|
|
|
revision = {}
|
|
revision[:editor_id] = r.editor_id
|
|
revision[:editor_username] = r.editor_username
|
|
revision[:editor_avatar_template] = User.avatar_template(
|
|
r.editor_username,
|
|
r.editor_avatar_id,
|
|
)
|
|
revision[:author_id] = r.author_id
|
|
revision[:author_username] = r.author_username
|
|
revision[:author_avatar_template] = User.avatar_template(
|
|
r.author_username,
|
|
r.author_avatar_id,
|
|
)
|
|
revision[:edit_reason] = r.revision_version == r.post_version ? r.edit_reason : nil
|
|
revision[:created_at] = r.created_at
|
|
revision[:post_raw] = r.post_raw
|
|
revision[:topic_id] = r.topic_id
|
|
revision[:post_number] = r.post_number
|
|
|
|
report.data << revision
|
|
end
|
|
end
|
|
end
|
|
end
|