Fix #4972: Display report counters in user profiles

* Add ability to search modreports by reported user.
* Display "received:N submitted:N" modreport counters in profiles.
This commit is contained in:
evazion
2022-01-31 21:58:14 -06:00
parent bb65a95a86
commit 770a6c339a
3 changed files with 22 additions and 0 deletions

View File

@@ -113,10 +113,20 @@ class ModerationReport < ApplicationRecord
end
end
def self.received_by(user)
where(model: Comment.where(creator: user)).or(where(model: ForumPost.where(creator: user))).or(where(model: Dmail.received.where(from: user)))
end
def self.search(params)
q = search_attributes(params, :id, :created_at, :updated_at, :reason, :creator, :model, :status)
q = q.text_attribute_matches(:reason, params[:reason_matches])
if params[:recipient_id].present?
q = q.received_by(User.search(id: params[:recipient_id]))
elsif params[:recipient_name].present?
q = q.received_by(User.search(name_matches: params[:recipient_name]))
end
q.apply_default_order(params)
end

View File

@@ -3,6 +3,7 @@
<h1>Moderation reports</h1>
<%= search_form_for(moderation_reports_path) do |f| %>
<%= f.input :recipient_name, label: "Reported user", input_html: { value: params[:search][:recipient_name], "data-autocomplete": "user" } %>
<%= f.input :creator_name, label: "Reporter", input_html: { value: params[:search][:creator_name], "data-autocomplete": "user" } %>
<%= f.input :reason_matches, label: "Reason", input_html: { value: params[:search][:reason_matches] } %>
<%= f.input :model_id, label: "ID", input_html: { value: params[:search][:model_id] } %>
@@ -33,6 +34,7 @@
<% t.column "Reported user" do |report| %>
<%= link_to_user report.reported_user %>
<%= link_to "»", moderation_reports_path(search: { recipient_name: report.reported_user.name }) %>
<% end %>
<% t.column "Reporter" do |report| %>

View File

@@ -240,6 +240,16 @@
<td><%= presenter.feedbacks(self) %></td>
</tr>
<% if policy(ModerationReport).can_see_moderation_reports? %>
<tr>
<th>Mod Reports</th>
<td>
<%= link_to "received:#{ModerationReport.received_by(user).count}", moderation_reports_path(search: { recipient_name: user.name }) %>
<%= link_to "submitted:#{ModerationReport.where(creator: user).count}", moderation_reports_path(search: { creator_name: user.name }) %>
</td>
</tr>
<% end %>
<% if policy(UserNameChangeRequest.new(user: user)).show? %>
<% user.user_name_change_requests.visible(CurrentUser.user).tap do |changes| %>
<% if changes.present? %>