beetle_reporter 0.1.1 → 0.1.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/README.md +2 -2
- data/app/controllers/beetle_reporter/reports_controller.rb +35 -12
- data/app/models/beetle_reporter/report.rb +8 -20
- data/app/views/beetle_reporter/reports/_report.html.haml +29 -31
- data/config/routes.rb +7 -7
- data/lib/beetle_reporter/version.rb +1 -1
- data/lib/beetle_reporter.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c8c4ae7fc8b53cb021dece1af970833d533766605f1f8a93fb030186f5354a2a
|
4
|
+
data.tar.gz: e0ecb462118820163770227a8526c70826db2083fafada52e8f23737fbdb655b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b61c8f8abbf0ec9b48ba55495b1d74c1b73b9ecd800a30d56e85e3c0b08155e47ec6bff73e260aad5fac83f09eb1cb46f1555bb52942ccc60c726b477dab70ff
|
7
|
+
data.tar.gz: 3261b751d9c67649c3abe72d0d8dbfb8a6dd08cb7f75f34f000203cec42b1b337f1af73a9ebc1199837616c6afce8642150f31ed5a6b658b60c0593611d2f73d
|
data/README.md
CHANGED
@@ -69,43 +69,65 @@ module BeetleReporter
|
|
69
69
|
def ignore
|
70
70
|
@report.ignore!
|
71
71
|
|
72
|
-
|
72
|
+
respond_to do |format|
|
73
|
+
format.turbo_stream { render turbo_stream: turbo_stream.remove(dom_id(@report)) }
|
74
|
+
format.html { redirect_to reports_url, notice: 'report was successfully ignored.' }
|
75
|
+
end
|
73
76
|
end
|
74
77
|
|
75
78
|
def suspend
|
76
79
|
@report.suspend!
|
77
80
|
|
78
|
-
|
81
|
+
respond_to do |format|
|
82
|
+
format.turbo_stream { render turbo_stream: turbo_stream.remove(dom_id(@report)) }
|
83
|
+
format.html { redirect_to reports_url, notice: 'report was successfully suspended.' }
|
84
|
+
end
|
79
85
|
end
|
80
86
|
|
81
87
|
def hide
|
82
|
-
@report.beetle_hide(
|
88
|
+
@report.beetle_hide(params[:reason])
|
83
89
|
|
84
|
-
|
90
|
+
respond_to do |format|
|
91
|
+
format.turbo_stream { render turbo_stream: turbo_stream.remove(dom_id(@report)) }
|
92
|
+
format.html { redirect_to reports_url, notice: 'report was successfully hidden.' }
|
93
|
+
end
|
85
94
|
end
|
86
95
|
|
87
96
|
def remove
|
88
|
-
@report.beetle_remove(
|
97
|
+
@report.beetle_remove(params[:reason])
|
89
98
|
|
90
|
-
|
99
|
+
respond_to do |format|
|
100
|
+
format.turbo_stream { render turbo_stream: turbo_stream.remove(dom_id(@report)) }
|
101
|
+
format.html { redirect_to reports_url, notice: 'report was successfully removed.' }
|
102
|
+
end
|
91
103
|
end
|
92
104
|
|
93
105
|
def mute
|
94
|
-
|
106
|
+
# TODO: 禁言时间
|
107
|
+
@report.beetle_mute(params[:reason])
|
95
108
|
|
96
|
-
|
109
|
+
respond_to do |format|
|
110
|
+
format.turbo_stream { render turbo_stream: turbo_stream.remove(dom_id(@report)) }
|
111
|
+
format.html { redirect_to reports_url, notice: 'report was successfully muted.' }
|
112
|
+
end
|
97
113
|
end
|
98
114
|
|
99
115
|
def forbid
|
100
|
-
@report.beetle_forbid(
|
116
|
+
@report.beetle_forbid(params[:reason])
|
101
117
|
|
102
|
-
|
118
|
+
respond_to do |format|
|
119
|
+
format.turbo_stream { render turbo_stream: turbo_stream.remove(dom_id(@report)) }
|
120
|
+
format.html { redirect_to reports_url, notice: 'report was successfully forbiden.' }
|
121
|
+
end
|
103
122
|
end
|
104
123
|
|
105
124
|
def undo
|
106
125
|
@report.undo!
|
107
126
|
|
108
|
-
|
127
|
+
respond_to do |format|
|
128
|
+
format.turbo_stream { render turbo_stream: turbo_stream.remove(dom_id(@report)) }
|
129
|
+
format.html { redirect_to reports_url, notice: 'report was successfully undo.' }
|
130
|
+
end
|
109
131
|
end
|
110
132
|
|
111
133
|
private
|
@@ -113,11 +135,12 @@ module BeetleReporter
|
|
113
135
|
def load_reports
|
114
136
|
builder = report_scope.includes(:record)
|
115
137
|
builder = builder.where("reason ilike ?", "%#{params[:q]}%") if params[:q].present?
|
138
|
+
|
116
139
|
if params[:filter] != 'all'
|
117
140
|
builder = builder.pending
|
118
141
|
builder = builder.unscope(where: :aasm_state).where(aasm_state: params[:state]) if params[:state].present?
|
119
142
|
end
|
120
|
-
builder = builder.where(record_type: params[:type]&.classify) if params[:type]
|
143
|
+
builder = builder.where(record_type: params[:type]&.classify) if params[:type].present?
|
121
144
|
|
122
145
|
builder = builder.order(id: :desc, reported_count: :desc)
|
123
146
|
builder = builder.reorder(updated_at: :desc) if params[:order] == 'last_updated'
|
@@ -3,6 +3,8 @@ module BeetleReporter
|
|
3
3
|
include AASM
|
4
4
|
include Discard::Model
|
5
5
|
|
6
|
+
REASON_TYPES = %w(垃圾广告营销 侮辱谩骂内容 淫秽色情内容 涉政敏感信息 违法有害信息 内容令人不适 内容存在错误)
|
7
|
+
|
6
8
|
belongs_to :record, polymorphic: true, required: false
|
7
9
|
belongs_to :user, class_name: BeetleReporter.config.user_class, optional: true
|
8
10
|
|
@@ -60,16 +62,7 @@ module BeetleReporter
|
|
60
62
|
return if record&.user.blank?
|
61
63
|
raise NoMethodError unless record.respond_to?(:beetle_mute)
|
62
64
|
|
63
|
-
ret = record.beetle_mute
|
64
|
-
mute!(reason) if ret
|
65
|
-
end
|
66
|
-
|
67
|
-
def beetle_mute(reason)
|
68
|
-
return if record.blank?
|
69
|
-
return if record&.user.blank?
|
70
|
-
raise NoMethodError unless record.respond_to?(:beetle_mute)
|
71
|
-
|
72
|
-
ret = record.beetle_mute
|
65
|
+
ret = record.beetle_mute(reason)
|
73
66
|
mute!(reason) if ret
|
74
67
|
end
|
75
68
|
|
@@ -78,7 +71,7 @@ module BeetleReporter
|
|
78
71
|
return if record&.user.blank?
|
79
72
|
raise NoMethodError unless record.respond_to?(:beetle_forbid)
|
80
73
|
|
81
|
-
ret = record.beetle_forbid
|
74
|
+
ret = record.beetle_forbid(reason)
|
82
75
|
forbid!(reason) if ret
|
83
76
|
end
|
84
77
|
|
@@ -88,6 +81,10 @@ module BeetleReporter
|
|
88
81
|
record.beetle_record_path
|
89
82
|
end
|
90
83
|
|
84
|
+
def record_partial_path
|
85
|
+
record.beetle_record_partial_path
|
86
|
+
end
|
87
|
+
|
91
88
|
def undo_callback
|
92
89
|
if hidden?
|
93
90
|
ret = record.beetle_undo_hide
|
@@ -106,15 +103,6 @@ module BeetleReporter
|
|
106
103
|
end
|
107
104
|
end
|
108
105
|
|
109
|
-
def images
|
110
|
-
return [] if record.blank?
|
111
|
-
|
112
|
-
raise NoMethodError, 'undefined beetle_images for record' unless record.respond_to?(:beetle_images)
|
113
|
-
|
114
|
-
record.beetle_images
|
115
|
-
end
|
116
|
-
|
117
|
-
|
118
106
|
def set_reason(reason)
|
119
107
|
update_columns(reason: reason)
|
120
108
|
end
|
@@ -5,12 +5,15 @@
|
|
5
5
|
- unless report.record.blank?
|
6
6
|
= link_to report.record_path, data: { turbo: false }, target: "_blank" do
|
7
7
|
%span{class: "bg-indigo-100 text-indigo-600 py-1 px-2 rounded-lg"}="#{report.record_type.upcase}##{report.record_id}"
|
8
|
-
|
8
|
+
%span{class: "bg-yellow-100 text-yellow-600 rounded-md p-1"}=t("beetle_reporter.aasm_state.#{report.aasm_state}")
|
9
|
+
- unless report.reasons.blank?
|
10
|
+
- report.reasons.each do |reason|
|
11
|
+
%span{class: "border border-red-600 text-red-600 rounded-lg text-xs p-0.5"}= reason
|
9
12
|
%span{class: "flex space-x-2 items-center text-sm"}
|
10
13
|
- if report.reason
|
11
14
|
%span{class: "bg-red-100 text-red-600 p-1 rounded-lg"}= "处置原因:#{report.reason}"
|
12
15
|
%span{class: "space-x-1"}
|
13
|
-
- report.user_ids.each do |uid|
|
16
|
+
- report.user_ids.compact.uniq.each do |uid|
|
14
17
|
= link_to main_app.send(BeetleReporter.config.main_app_user_path_method.to_sym, uid), data: {turbo: false} do
|
15
18
|
%span{class: "bg-blue-100 rounded-lg px-1 py-0.5"}= "#{uid}"
|
16
19
|
%span{class: "bg-red-600 text-white rounded-full w-5 h-5 flex justify-center items-center"}= "#{report.reported_count}"
|
@@ -20,38 +23,33 @@
|
|
20
23
|
= button_to '删除', report, method: :delete, data: { confirm: 'Are you sure?'}, class: "bg-red-600 text-white rounded-md px-2 py-0.5 cursor-pointer"
|
21
24
|
%div{class: "flex justify-between items-center py-2 w-full"}
|
22
25
|
%div{class: "flex flex-col rounded-lg bg-gray-50 p-3 text-sm space-y-4 w-full"}
|
23
|
-
-unless report.record
|
24
|
-
%h3{class: "text-2xl text-red-600"}
|
26
|
+
- unless report.record
|
27
|
+
%h3{class: "text-2xl text-red-600 flex items-center"}
|
28
|
+
对应条目已被永久删除,当前审核请求已无效
|
29
|
+
=button_to "点我删除", report, method: :delete, class: "ml-2 bg-yellow-500 text-white rounded-lg px-2 py-0.5 cursor-pointer"
|
25
30
|
- else
|
26
|
-
|
27
|
-
|
28
|
-
%span{class: "border border-blue-600 text-blue-600 rounded-lg text-xs p-0.5"}=report.record.is_approved ? "审核通过" : "审核中..."
|
29
|
-
- unless report.reasons.blank?
|
30
|
-
- report.reasons.each do |reason|
|
31
|
-
%span{class: "border border-red-600 text-red-600 rounded-lg text-xs p-0.5"}= reason
|
32
|
-
- unless report&.record&.user_id&.blank?
|
33
|
-
= link_to main_app.send(CensorBear.config.main_app_user_path_method.to_sym, report.record.user_id), data: {turbo: false} do
|
34
|
-
%span{class: "text-sm bg-gray-100 text-gray-600 py-1 px-2 rounded-lg font-bold"}="✍️ ##{report.record.user_id}"
|
35
|
-
- if report.record.discarded?
|
36
|
-
%div{class: "text-gray-900 leading-relaxed"}
|
37
|
-
%del= report.record.content
|
38
|
-
- else
|
39
|
-
%div{class: "text-gray-900 leading-relaxed"}= report.record.content
|
40
|
-
%div
|
41
|
-
- report.images.each do |img|
|
42
|
-
= image_tag img[:src], class: "w-16 rounded-md"
|
43
|
-
%div{class: "flex space-x-2 items-center justify-end"}
|
31
|
+
= render report.record_partial_path, record: report.record
|
32
|
+
%div{class: "flex flex-col space-y-2"}
|
44
33
|
- if report.may_ignore?
|
45
|
-
=
|
34
|
+
= button_to "无效举报", report_ignore_path(report), class: "text-yellow-600 cursor-pointer px-2 py-0.5 bg-gray-100 rounded-lg"
|
35
|
+
- if report.may_suspend?
|
36
|
+
= button_to "暂缓处理", report_suspend_path(report), class: "text-indigo-600 cursor-pointer px-2 py-0.5 bg-gray-100 rounded-lg"
|
37
|
+
- if report.may_undo?
|
38
|
+
= button_to "撤销", report_undo_path(report), class: "text-red-600 cursor-pointer px-2 py-0.5 bg-gray-100 rounded-lg"
|
46
39
|
- if report.may_hide?
|
47
|
-
=
|
40
|
+
= form_with(url: report_hide_path(report), class: "space-x-1 flex items-center") do |f|
|
41
|
+
= f.text_field :reason, value: report.reason, placeholder: "隐藏原因是什么?", class: "border rounded-md m py-0.5 px-1"
|
42
|
+
= f.submit "隐藏内容", class: "bg-red-500 text-white cursor-pointer px-2 py-0.5 bg-gray-100 rounded-lg"
|
48
43
|
- if report.may_remove?
|
49
|
-
=
|
44
|
+
= form_with(url: report_remove_path(report), class: "space-x-1 flex items-center") do |f|
|
45
|
+
= f.text_field :reason, value: report.reason, placeholder: "删除原因是什么?", class: "border rounded-md m py-0.5 px-1"
|
46
|
+
= f.submit "删除内容", class: "bg-red-600 text-white cursor-pointer px-2 py-0.5 bg-gray-100 rounded-lg"
|
50
47
|
- if report.may_mute?
|
51
|
-
=
|
48
|
+
= form_with(url: report_mute_path(report), class: "space-x-1 flex items-center") do |f|
|
49
|
+
-# = f.text_field :mute_days, value: report.mute_days, placeholder: "禁言天数", class: "border rounded-md m py-0.5 px-1"
|
50
|
+
= f.text_field :reason, value: report.reason, placeholder: "禁言原因是什么?", class: "border rounded-md m py-0.5 px-1"
|
51
|
+
= f.submit "禁言用户", class: "bg-red-700 text-white cursor-pointer px-2 py-0.5 bg-gray-100 rounded-lg"
|
52
52
|
- if report.may_forbid?
|
53
|
-
=
|
54
|
-
|
55
|
-
|
56
|
-
- if report.may_undo?
|
57
|
-
= link_to "撤销", report_undo_path(report), class: "text-red-600 cursor-pointer"
|
53
|
+
= form_with(url: report_forbid_path(report), class: "space-x-1 flex items-center") do |f|
|
54
|
+
= f.text_field :reason, value: report.reason, placeholder: "封禁原因是什么?", class: "border rounded-md m py-0.5 px-1"
|
55
|
+
= f.submit "封禁用户", class: "bg-red-800 text-white cursor-pointer px-2 py-0.5 bg-gray-100 rounded-lg"
|
data/config/routes.rb
CHANGED
@@ -1,12 +1,12 @@
|
|
1
1
|
BeetleReporter::Engine.routes.draw do
|
2
2
|
resources :reports do
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
3
|
+
post :ignore
|
4
|
+
post :undo
|
5
|
+
post :suspend
|
6
|
+
post :hide
|
7
|
+
post :remove
|
8
|
+
post :mute
|
9
|
+
post :forbid
|
10
10
|
end
|
11
11
|
|
12
12
|
root "reports#index"
|
data/lib/beetle_reporter.rb
CHANGED
@@ -28,7 +28,7 @@ module BeetleReporter
|
|
28
28
|
end
|
29
29
|
|
30
30
|
def add(record, user_id, reason)
|
31
|
-
report = BeetleReporter::Report.find_by(record: record)
|
31
|
+
report = BeetleReporter::Report.pending.kept.find_by(record: record)
|
32
32
|
if report
|
33
33
|
report.user_ids << user_id unless report.user_ids.include?(user_id)
|
34
34
|
report.reasons << reason unless report.reasons.include?(reason)
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: beetle_reporter
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- 42up
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2021-12-
|
11
|
+
date: 2021-12-19 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails
|