rails-image-post-solution 0.1.3 → 0.1.4
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 +21 -74
- data/app/controllers/{admin → rails_image_post_solution/admin}/frozen_posts_controller.rb +4 -2
- data/app/controllers/{admin → rails_image_post_solution/admin}/users_controller.rb +4 -2
- data/config/routes.rb +23 -0
- data/lib/rails_image_post_solution/version.rb +1 -1
- metadata +7 -9
- data/app/views/admin/image_reports/index.html.erb +0 -94
- data/app/views/admin/image_reports/show.html.erb +0 -138
- /data/app/controllers/{admin/image_reports_controller.rb → rails_image_post_solution/admin/image_reports_controller.rb.bak} +0 -0
- /data/app/views/{admin → rails_image_post_solution/admin}/frozen_posts/index.html.erb +0 -0
- /data/app/views/{admin → rails_image_post_solution/admin}/users/index.html.erb +0 -0
- /data/app/views/{admin → rails_image_post_solution/admin}/users/show.html.erb +0 -0
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: b625a47080961aad101e70eddcb541dfdb006342fe19cf2b95c9fb7243ecf9b9
|
|
4
|
+
data.tar.gz: 427c9d081155769b7888f130bc34b55da141f530b8d5e748082e60e9c32a4a03
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 31bfcdcc9416bc822547d27b690c0713a6d717f8a3443e2a758d330c52efd31f9a9b45024662f6e3561c889d8b0eb8834fa6a52f3fcbc4ac701c5447cbfc73f5
|
|
7
|
+
data.tar.gz: 4821a741b4fef32d874c171133d3783c165c67a9a00a364114de0c4ad69e674779b13524a95dbe185bfbb927762a85f7079c0b665bb6176ceadaf71c68cb2373
|
data/README.md
CHANGED
|
@@ -62,32 +62,9 @@ Mount the engine in your `config/routes.rb`:
|
|
|
62
62
|
|
|
63
63
|
```ruby
|
|
64
64
|
Rails.application.routes.draw do
|
|
65
|
-
# Mount the engine
|
|
65
|
+
# Mount the engine - all admin features will be accessible at /moderation/admin/*
|
|
66
66
|
mount RailsImagePostSolution::Engine => "/moderation"
|
|
67
67
|
|
|
68
|
-
# Optional: Add admin routes for extended features (user management, frozen posts)
|
|
69
|
-
namespace :admin do
|
|
70
|
-
resources :users, only: %i[index show] do
|
|
71
|
-
member do
|
|
72
|
-
post :suspend
|
|
73
|
-
post :unsuspend
|
|
74
|
-
post :ban
|
|
75
|
-
post :unban
|
|
76
|
-
end
|
|
77
|
-
end
|
|
78
|
-
|
|
79
|
-
resources :frozen_posts, only: [:index] do
|
|
80
|
-
collection do
|
|
81
|
-
post "unfreeze_stage/:id", to: "frozen_posts#unfreeze_stage", as: :unfreeze_stage
|
|
82
|
-
post "unfreeze_comment/:id", to: "frozen_posts#unfreeze_comment", as: :unfreeze_comment
|
|
83
|
-
post "permanent_freeze_stage/:id", to: "frozen_posts#permanent_freeze_stage", as: :permanent_freeze_stage
|
|
84
|
-
post "permanent_freeze_comment/:id", to: "frozen_posts#permanent_freeze_comment", as: :permanent_freeze_comment
|
|
85
|
-
delete "destroy_stage/:id", to: "frozen_posts#destroy_stage", as: :destroy_stage
|
|
86
|
-
delete "destroy_comment/:id", to: "frozen_posts#destroy_comment", as: :destroy_comment
|
|
87
|
-
end
|
|
88
|
-
end
|
|
89
|
-
end
|
|
90
|
-
|
|
91
68
|
# ... your other routes
|
|
92
69
|
end
|
|
93
70
|
```
|
|
@@ -319,64 +296,34 @@ end
|
|
|
319
296
|
|
|
320
297
|
## Routes
|
|
321
298
|
|
|
322
|
-
|
|
299
|
+
The engine provides the following routes when mounted at `/moderation`:
|
|
323
300
|
|
|
324
|
-
|
|
301
|
+
### User-Facing Routes
|
|
325
302
|
|
|
326
303
|
```
|
|
327
304
|
POST /moderation/image_reports # Create report
|
|
328
|
-
GET /moderation/admin/image_reports # List all reports
|
|
329
|
-
GET /moderation/admin/image_reports/:id # View report details
|
|
330
|
-
PATCH /moderation/admin/image_reports/:id/confirm # Mark as inappropriate
|
|
331
|
-
PATCH /moderation/admin/image_reports/:id/dismiss # Mark as safe
|
|
332
305
|
```
|
|
333
306
|
|
|
334
|
-
###
|
|
335
|
-
|
|
336
|
-
The gem provides additional admin controllers in `app/controllers/admin/` that you can use in your host application. **You must add these routes to your host application's `config/routes.rb`** to use them:
|
|
337
|
-
|
|
338
|
-
```ruby
|
|
339
|
-
namespace :admin do
|
|
340
|
-
# User management
|
|
341
|
-
resources :users, only: %i[index show] do
|
|
342
|
-
member do
|
|
343
|
-
post :suspend
|
|
344
|
-
post :unsuspend
|
|
345
|
-
post :ban
|
|
346
|
-
post :unban
|
|
347
|
-
end
|
|
348
|
-
end
|
|
349
|
-
|
|
350
|
-
# Frozen posts management
|
|
351
|
-
resources :frozen_posts, only: [:index] do
|
|
352
|
-
collection do
|
|
353
|
-
post "unfreeze_stage/:id", to: "frozen_posts#unfreeze_stage", as: :admin_unfreeze_stage
|
|
354
|
-
post "unfreeze_comment/:id", to: "frozen_posts#unfreeze_comment", as: :admin_unfreeze_comment
|
|
355
|
-
post "permanent_freeze_stage/:id", to: "frozen_posts#permanent_freeze_stage", as: :admin_permanent_freeze_stage
|
|
356
|
-
post "permanent_freeze_comment/:id", to: "frozen_posts#permanent_freeze_comment", as: :admin_permanent_freeze_comment
|
|
357
|
-
delete "destroy_stage/:id", to: "frozen_posts#destroy_stage", as: :admin_destroy_stage
|
|
358
|
-
delete "destroy_comment/:id", to: "frozen_posts#destroy_comment", as: :admin_destroy_comment
|
|
359
|
-
end
|
|
360
|
-
end
|
|
361
|
-
end
|
|
362
|
-
```
|
|
363
|
-
|
|
364
|
-
This provides these routes:
|
|
307
|
+
### Admin Routes
|
|
365
308
|
|
|
366
309
|
```
|
|
367
|
-
GET /admin/
|
|
368
|
-
GET /admin/
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
POST /admin/
|
|
375
|
-
POST /admin/
|
|
376
|
-
POST /admin/
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
310
|
+
GET /moderation/admin/image_reports # List all reports
|
|
311
|
+
GET /moderation/admin/image_reports/:id # View report details
|
|
312
|
+
PATCH /moderation/admin/image_reports/:id/confirm # Mark as inappropriate
|
|
313
|
+
PATCH /moderation/admin/image_reports/:id/dismiss # Mark as safe
|
|
314
|
+
GET /moderation/admin/users # List all users
|
|
315
|
+
GET /moderation/admin/users/:id # View user details
|
|
316
|
+
POST /moderation/admin/users/:id/suspend # Suspend user
|
|
317
|
+
POST /moderation/admin/users/:id/unsuspend # Unsuspend user
|
|
318
|
+
POST /moderation/admin/users/:id/ban # Ban user
|
|
319
|
+
POST /moderation/admin/users/:id/unban # Unban user
|
|
320
|
+
GET /moderation/admin/frozen_posts # List frozen posts
|
|
321
|
+
POST /moderation/admin/frozen_posts/unfreeze_stage/:id # Unfreeze a stage
|
|
322
|
+
POST /moderation/admin/frozen_posts/unfreeze_comment/:id # Unfreeze a comment
|
|
323
|
+
POST /moderation/admin/frozen_posts/permanent_freeze_stage/:id # Permanently freeze a stage
|
|
324
|
+
POST /moderation/admin/frozen_posts/permanent_freeze_comment/:id # Permanently freeze a comment
|
|
325
|
+
DELETE /moderation/admin/frozen_posts/destroy_stage/:id # Delete a frozen stage
|
|
326
|
+
DELETE /moderation/admin/frozen_posts/destroy_comment/:id # Delete a frozen comment
|
|
380
327
|
```
|
|
381
328
|
|
|
382
329
|
## Customization
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
-
module
|
|
4
|
-
|
|
3
|
+
module RailsImagePostSolution
|
|
4
|
+
module Admin
|
|
5
|
+
class FrozenPostsController < ApplicationController
|
|
5
6
|
before_action :require_login
|
|
6
7
|
before_action :require_admin
|
|
7
8
|
|
|
@@ -75,5 +76,6 @@ module Admin
|
|
|
75
76
|
|
|
76
77
|
redirect_to root_path, alert: I18n.t("admin.flash.access_denied")
|
|
77
78
|
end
|
|
79
|
+
end
|
|
78
80
|
end
|
|
79
81
|
end
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
-
module
|
|
4
|
-
|
|
3
|
+
module RailsImagePostSolution
|
|
4
|
+
module Admin
|
|
5
|
+
class UsersController < ApplicationController
|
|
5
6
|
before_action :require_login
|
|
6
7
|
before_action :require_admin
|
|
7
8
|
before_action :set_user, only: %i[show suspend unsuspend ban unban]
|
|
@@ -96,5 +97,6 @@ module Admin
|
|
|
96
97
|
|
|
97
98
|
redirect_to root_path, alert: I18n.t("admin.flash.admin_access_only")
|
|
98
99
|
end
|
|
100
|
+
end
|
|
99
101
|
end
|
|
100
102
|
end
|
data/config/routes.rb
CHANGED
|
@@ -6,11 +6,34 @@ RailsImagePostSolution::Engine.routes.draw do
|
|
|
6
6
|
|
|
7
7
|
# Admin dashboard (engine controllers)
|
|
8
8
|
namespace :admin do
|
|
9
|
+
# Image reports management
|
|
9
10
|
resources :image_reports, only: %i[index show] do
|
|
10
11
|
member do
|
|
11
12
|
patch :confirm
|
|
12
13
|
patch :dismiss
|
|
13
14
|
end
|
|
14
15
|
end
|
|
16
|
+
|
|
17
|
+
# User management
|
|
18
|
+
resources :users, only: %i[index show] do
|
|
19
|
+
member do
|
|
20
|
+
post :suspend
|
|
21
|
+
post :unsuspend
|
|
22
|
+
post :ban
|
|
23
|
+
post :unban
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
# Frozen posts management
|
|
28
|
+
resources :frozen_posts, only: [ :index ] do
|
|
29
|
+
collection do
|
|
30
|
+
post "unfreeze_stage/:id", to: "frozen_posts#unfreeze_stage", as: :unfreeze_stage
|
|
31
|
+
post "unfreeze_comment/:id", to: "frozen_posts#unfreeze_comment", as: :unfreeze_comment
|
|
32
|
+
post "permanent_freeze_stage/:id", to: "frozen_posts#permanent_freeze_stage", as: :permanent_freeze_stage
|
|
33
|
+
post "permanent_freeze_comment/:id", to: "frozen_posts#permanent_freeze_comment", as: :permanent_freeze_comment
|
|
34
|
+
delete "destroy_stage/:id", to: "frozen_posts#destroy_stage", as: :destroy_stage
|
|
35
|
+
delete "destroy_comment/:id", to: "frozen_posts#destroy_comment", as: :destroy_comment
|
|
36
|
+
end
|
|
37
|
+
end
|
|
15
38
|
end
|
|
16
39
|
end
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: rails-image-post-solution
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.1.
|
|
4
|
+
version: 0.1.4
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- dhq_boiler
|
|
@@ -93,21 +93,19 @@ files:
|
|
|
93
93
|
- LICENSE.txt
|
|
94
94
|
- README.md
|
|
95
95
|
- Rakefile
|
|
96
|
-
- app/controllers/admin/frozen_posts_controller.rb
|
|
97
|
-
- app/controllers/admin/image_reports_controller.rb
|
|
98
|
-
- app/controllers/admin/users_controller.rb
|
|
96
|
+
- app/controllers/rails_image_post_solution/admin/frozen_posts_controller.rb
|
|
99
97
|
- app/controllers/rails_image_post_solution/admin/image_reports_controller.rb
|
|
98
|
+
- app/controllers/rails_image_post_solution/admin/image_reports_controller.rb.bak
|
|
99
|
+
- app/controllers/rails_image_post_solution/admin/users_controller.rb
|
|
100
100
|
- app/controllers/rails_image_post_solution/image_reports_controller.rb
|
|
101
101
|
- app/jobs/rails_image_post_solution/image_moderation_job.rb
|
|
102
102
|
- app/models/rails_image_post_solution/image_report.rb
|
|
103
103
|
- app/services/rails_image_post_solution/openai_vision_service.rb
|
|
104
|
-
- app/views/admin/frozen_posts/index.html.erb
|
|
105
|
-
- app/views/admin/image_reports/index.html.erb
|
|
106
|
-
- app/views/admin/image_reports/show.html.erb
|
|
107
|
-
- app/views/admin/users/index.html.erb
|
|
108
|
-
- app/views/admin/users/show.html.erb
|
|
104
|
+
- app/views/rails_image_post_solution/admin/frozen_posts/index.html.erb
|
|
109
105
|
- app/views/rails_image_post_solution/admin/image_reports/index.html.erb
|
|
110
106
|
- app/views/rails_image_post_solution/admin/image_reports/show.html.erb
|
|
107
|
+
- app/views/rails_image_post_solution/admin/users/index.html.erb
|
|
108
|
+
- app/views/rails_image_post_solution/admin/users/show.html.erb
|
|
111
109
|
- app/views/shared/_image_report_button.html.erb
|
|
112
110
|
- app/views/shared/_image_report_modal.html.erb
|
|
113
111
|
- config/locales/en.yml
|
|
@@ -1,94 +0,0 @@
|
|
|
1
|
-
<div class="admin-container">
|
|
2
|
-
<h1 class="admin-header"><%= t('rails_image_post_solution.admin.index.title') %></h1>
|
|
3
|
-
|
|
4
|
-
<!-- Statistics -->
|
|
5
|
-
<div class="admin-stats">
|
|
6
|
-
<div class="stat-card">
|
|
7
|
-
<div class="stat-label"><%= t('rails_image_post_solution.admin.index.stats.total') %></div>
|
|
8
|
-
<div class="stat-value"><%= @stats[:total] %></div>
|
|
9
|
-
</div>
|
|
10
|
-
<div class="stat-card pending">
|
|
11
|
-
<div class="stat-label"><%= t('rails_image_post_solution.admin.index.stats.pending') %></div>
|
|
12
|
-
<div class="stat-value"><%= @stats[:pending] %></div>
|
|
13
|
-
</div>
|
|
14
|
-
<div class="stat-card confirmed">
|
|
15
|
-
<div class="stat-label"><%= t('rails_image_post_solution.admin.index.stats.confirmed') %></div>
|
|
16
|
-
<div class="stat-value"><%= @stats[:confirmed] %></div>
|
|
17
|
-
</div>
|
|
18
|
-
<div class="stat-card dismissed">
|
|
19
|
-
<div class="stat-label"><%= t('rails_image_post_solution.admin.index.stats.dismissed') %></div>
|
|
20
|
-
<div class="stat-value"><%= @stats[:dismissed] %></div>
|
|
21
|
-
</div>
|
|
22
|
-
<div class="stat-card reviewed">
|
|
23
|
-
<div class="stat-label"><%= t('rails_image_post_solution.admin.index.stats.reviewed') %></div>
|
|
24
|
-
<div class="stat-value"><%= @stats[:reviewed] %></div>
|
|
25
|
-
</div>
|
|
26
|
-
</div>
|
|
27
|
-
|
|
28
|
-
<!-- Filters -->
|
|
29
|
-
<div class="admin-filters">
|
|
30
|
-
<%= link_to t('rails_image_post_solution.admin.index.filters.all'), admin_image_reports_path, class: "filter-btn #{'active' if @status_filter == 'all'}" %>
|
|
31
|
-
<%= link_to t('rails_image_post_solution.admin.index.filters.pending'), admin_image_reports_path(status: 'pending'), class: "filter-btn #{'active' if @status_filter == 'pending'}" %>
|
|
32
|
-
<%= link_to t('rails_image_post_solution.admin.index.filters.confirmed'), admin_image_reports_path(status: 'confirmed'), class: "filter-btn #{'active' if @status_filter == 'confirmed'}" %>
|
|
33
|
-
<%= link_to t('rails_image_post_solution.admin.index.filters.dismissed'), admin_image_reports_path(status: 'dismissed'), class: "filter-btn #{'active' if @status_filter == 'dismissed'}" %>
|
|
34
|
-
<%= link_to t('rails_image_post_solution.admin.index.filters.reviewed'), admin_image_reports_path(status: 'reviewed'), class: "filter-btn #{'active' if @status_filter == 'reviewed'}" %>
|
|
35
|
-
</div>
|
|
36
|
-
|
|
37
|
-
<!-- Reports List -->
|
|
38
|
-
<div class="admin-reports-list">
|
|
39
|
-
<% if @reports.any? %>
|
|
40
|
-
<table class="admin-table">
|
|
41
|
-
<thead>
|
|
42
|
-
<tr>
|
|
43
|
-
<th><%= t('rails_image_post_solution.admin.index.table.image') %></th>
|
|
44
|
-
<th><%= t('rails_image_post_solution.admin.index.table.reporter') %></th>
|
|
45
|
-
<th><%= t('rails_image_post_solution.admin.index.table.reason') %></th>
|
|
46
|
-
<th><%= t('rails_image_post_solution.admin.index.table.status') %></th>
|
|
47
|
-
<th><%= t('rails_image_post_solution.admin.index.table.reported_at') %></th>
|
|
48
|
-
<th><%= t('rails_image_post_solution.admin.index.table.reviewer') %></th>
|
|
49
|
-
<th><%= t('rails_image_post_solution.admin.index.table.actions') %></th>
|
|
50
|
-
</tr>
|
|
51
|
-
</thead>
|
|
52
|
-
<tbody>
|
|
53
|
-
<% @reports.each do |report| %>
|
|
54
|
-
<tr class="report-row status-<%= report.status %>">
|
|
55
|
-
<td class="image-cell">
|
|
56
|
-
<% if report.active_storage_attachment.present? %>
|
|
57
|
-
<%= image_tag report.active_storage_attachment.blob, class: "admin-thumbnail", style: "max-width: 100px; max-height: 100px;" %>
|
|
58
|
-
<% else %>
|
|
59
|
-
<span class="text-muted"><%= t('rails_image_post_solution.admin.index.deleted') %></span>
|
|
60
|
-
<% end %>
|
|
61
|
-
</td>
|
|
62
|
-
<td><%= link_to report.user.display_name, user_path(report.user), class: "user-link" %></td>
|
|
63
|
-
<td class="reason-cell"><%= truncate(report.reason, length: 50) || t('rails_image_post_solution.admin.index.no_reason') %></td>
|
|
64
|
-
<td>
|
|
65
|
-
<span class="status-badge status-<%= report.status %>">
|
|
66
|
-
<%= t("rails_image_post_solution.image_report.statuses.#{report.status}") %>
|
|
67
|
-
</span>
|
|
68
|
-
</td>
|
|
69
|
-
<td><%= l(report.created_at, format: :long) %></td>
|
|
70
|
-
<td>
|
|
71
|
-
<% if report.reviewed_by %>
|
|
72
|
-
<%= report.reviewed_by.display_name %>
|
|
73
|
-
<% else %>
|
|
74
|
-
<span class="text-muted">-</span>
|
|
75
|
-
<% end %>
|
|
76
|
-
</td>
|
|
77
|
-
<td class="actions-cell">
|
|
78
|
-
<%= link_to t('rails_image_post_solution.admin.index.detail'), admin_image_report_path(report), class: "btn-action btn-detail" %>
|
|
79
|
-
</td>
|
|
80
|
-
</tr>
|
|
81
|
-
<% end %>
|
|
82
|
-
</tbody>
|
|
83
|
-
</table>
|
|
84
|
-
<% else %>
|
|
85
|
-
<div class="empty-state">
|
|
86
|
-
<p><%= t('rails_image_post_solution.admin.index.no_reports') %></p>
|
|
87
|
-
</div>
|
|
88
|
-
<% end %>
|
|
89
|
-
</div>
|
|
90
|
-
|
|
91
|
-
<div class="admin-actions">
|
|
92
|
-
<%= link_to t('rails_image_post_solution.admin.index.back'), root_path, class: "btn btn-secondary" %>
|
|
93
|
-
</div>
|
|
94
|
-
</div>
|
|
@@ -1,138 +0,0 @@
|
|
|
1
|
-
<div class="admin-container">
|
|
2
|
-
<h1 class="admin-header"><%= t('rails_image_post_solution.admin.show.title') %></h1>
|
|
3
|
-
|
|
4
|
-
<div class="report-detail">
|
|
5
|
-
<!-- Image Display -->
|
|
6
|
-
<div class="detail-section">
|
|
7
|
-
<h3><%= t('rails_image_post_solution.admin.show.reported_image') %></h3>
|
|
8
|
-
<% if @attachment.present? %>
|
|
9
|
-
<div class="reported-image-container">
|
|
10
|
-
<%= image_tag @attachment.blob, class: "reported-image-large", style: "max-width: 800px; max-height: 600px;" %>
|
|
11
|
-
</div>
|
|
12
|
-
<% else %>
|
|
13
|
-
<p class="text-muted"><%= t('rails_image_post_solution.admin.show.image_deleted') %></p>
|
|
14
|
-
<% end %>
|
|
15
|
-
</div>
|
|
16
|
-
|
|
17
|
-
<!-- Report Information -->
|
|
18
|
-
<div class="detail-section">
|
|
19
|
-
<h3><%= t('rails_image_post_solution.admin.show.report_info') %></h3>
|
|
20
|
-
<table class="detail-table">
|
|
21
|
-
<tr>
|
|
22
|
-
<th><%= t('rails_image_post_solution.admin.show.status') %></th>
|
|
23
|
-
<td>
|
|
24
|
-
<span class="status-badge status-<%= @report.status %>">
|
|
25
|
-
<%= t("rails_image_post_solution.image_report.statuses.#{@report.status}") %>
|
|
26
|
-
</span>
|
|
27
|
-
</td>
|
|
28
|
-
</tr>
|
|
29
|
-
<tr>
|
|
30
|
-
<th><%= t('rails_image_post_solution.admin.show.reporter') %></th>
|
|
31
|
-
<td><%= link_to @report.user.display_name, user_path(@report.user), class: "user-link" %></td>
|
|
32
|
-
</tr>
|
|
33
|
-
<tr>
|
|
34
|
-
<th><%= t('rails_image_post_solution.admin.show.reason') %></th>
|
|
35
|
-
<td><%= simple_format(@report.reason) || t('rails_image_post_solution.admin.show.no_reason') %></td>
|
|
36
|
-
</tr>
|
|
37
|
-
<tr>
|
|
38
|
-
<th><%= t('rails_image_post_solution.admin.show.reported_at') %></th>
|
|
39
|
-
<td><%= l(@report.created_at, format: :long) %></td>
|
|
40
|
-
</tr>
|
|
41
|
-
<% if @report.reviewed_by %>
|
|
42
|
-
<tr>
|
|
43
|
-
<th><%= t('rails_image_post_solution.admin.show.reviewer') %></th>
|
|
44
|
-
<td><%= @report.reviewed_by.display_name %></td>
|
|
45
|
-
</tr>
|
|
46
|
-
<tr>
|
|
47
|
-
<th><%= t('rails_image_post_solution.admin.show.reviewed_at') %></th>
|
|
48
|
-
<td><%= l(@report.reviewed_at, format: :long) %></td>
|
|
49
|
-
</tr>
|
|
50
|
-
<% end %>
|
|
51
|
-
</table>
|
|
52
|
-
</div>
|
|
53
|
-
|
|
54
|
-
<!-- Image Poster Information -->
|
|
55
|
-
<% if @reported_user %>
|
|
56
|
-
<div class="detail-section">
|
|
57
|
-
<h3><%= t('rails_image_post_solution.admin.show.image_poster') %></h3>
|
|
58
|
-
<table class="detail-table">
|
|
59
|
-
<tr>
|
|
60
|
-
<th><%= t('rails_image_post_solution.admin.show.username') %></th>
|
|
61
|
-
<td><%= link_to @reported_user.display_name, user_path(@reported_user), class: "user-link" %></td>
|
|
62
|
-
</tr>
|
|
63
|
-
<tr>
|
|
64
|
-
<th><%= t('rails_image_post_solution.admin.show.user_status') %></th>
|
|
65
|
-
<td>
|
|
66
|
-
<% if @reported_user.banned? %>
|
|
67
|
-
<span class="user-status-badge banned"><%= t('rails_image_post_solution.admin.show.banned') %></span>
|
|
68
|
-
<% elsif @reported_user.suspended? %>
|
|
69
|
-
<span class="user-status-badge suspended"><%= t('rails_image_post_solution.admin.show.suspended') %></span>
|
|
70
|
-
<% else %>
|
|
71
|
-
<span class="user-status-badge active"><%= t('rails_image_post_solution.admin.show.active') %></span>
|
|
72
|
-
<% end %>
|
|
73
|
-
</td>
|
|
74
|
-
</tr>
|
|
75
|
-
</table>
|
|
76
|
-
</div>
|
|
77
|
-
<% end %>
|
|
78
|
-
|
|
79
|
-
<!-- Other Reports for Same Image -->
|
|
80
|
-
<div class="detail-section">
|
|
81
|
-
<h3><%= t('rails_image_post_solution.admin.show.all_reports_title', count: @all_reports.count) %></h3>
|
|
82
|
-
<% if @all_reports.count > 1 %>
|
|
83
|
-
<table class="admin-table">
|
|
84
|
-
<thead>
|
|
85
|
-
<tr>
|
|
86
|
-
<th><%= t('rails_image_post_solution.admin.index.table.reporter') %></th>
|
|
87
|
-
<th><%= t('rails_image_post_solution.admin.index.table.reason') %></th>
|
|
88
|
-
<th><%= t('rails_image_post_solution.admin.index.table.status') %></th>
|
|
89
|
-
<th><%= t('rails_image_post_solution.admin.index.table.reported_at') %></th>
|
|
90
|
-
</tr>
|
|
91
|
-
</thead>
|
|
92
|
-
<tbody>
|
|
93
|
-
<% @all_reports.each do |r| %>
|
|
94
|
-
<tr class="<%= 'current-report' if r.id == @report.id %>">
|
|
95
|
-
<td>
|
|
96
|
-
<%= link_to r.user.display_name, user_path(r.user), class: "user-link" %>
|
|
97
|
-
<% if r.id == @report.id %>
|
|
98
|
-
<span class="badge-current"><%= t('rails_image_post_solution.admin.show.current') %></span>
|
|
99
|
-
<% end %>
|
|
100
|
-
</td>
|
|
101
|
-
<td><%= truncate(r.reason, length: 50) || t('rails_image_post_solution.admin.index.no_reason') %></td>
|
|
102
|
-
<td>
|
|
103
|
-
<span class="status-badge status-<%= r.status %>">
|
|
104
|
-
<%= t("rails_image_post_solution.image_report.statuses.#{r.status}") %>
|
|
105
|
-
</span>
|
|
106
|
-
</td>
|
|
107
|
-
<td><%= l(r.created_at, format: :long) %></td>
|
|
108
|
-
</tr>
|
|
109
|
-
<% end %>
|
|
110
|
-
</tbody>
|
|
111
|
-
</table>
|
|
112
|
-
<% else %>
|
|
113
|
-
<p class="text-muted"><%= t('rails_image_post_solution.admin.show.single_report') %></p>
|
|
114
|
-
<% end %>
|
|
115
|
-
</div>
|
|
116
|
-
|
|
117
|
-
<!-- Actions -->
|
|
118
|
-
<div class="detail-actions">
|
|
119
|
-
<% if @report.status == ImageReport::STATUSES[:pending] %>
|
|
120
|
-
<%= button_to t('rails_image_post_solution.admin.show.confirm_button'), confirm_admin_image_report_path(@report), method: :patch, class: "btn btn-danger", data: { turbo_confirm: t('rails_image_post_solution.admin.show.confirm_action') } %>
|
|
121
|
-
<%= button_to t('rails_image_post_solution.admin.show.dismiss_button'), dismiss_admin_image_report_path(@report), method: :patch, class: "btn btn-success", data: { turbo_confirm: t('rails_image_post_solution.admin.show.dismiss_action') } %>
|
|
122
|
-
<% else %>
|
|
123
|
-
<p class="text-muted"><%= t('rails_image_post_solution.admin.show.already_reviewed') %></p>
|
|
124
|
-
<% end %>
|
|
125
|
-
|
|
126
|
-
<% if @reported_user && @reported_user.active? %>
|
|
127
|
-
<div class="user-actions">
|
|
128
|
-
<h4><%= t('rails_image_post_solution.admin.show.user_actions') %></h4>
|
|
129
|
-
<%= link_to t('rails_image_post_solution.admin.show.view_user_admin'), admin_user_path(@reported_user), class: "btn btn-secondary" %>
|
|
130
|
-
</div>
|
|
131
|
-
<% end %>
|
|
132
|
-
</div>
|
|
133
|
-
</div>
|
|
134
|
-
|
|
135
|
-
<div class="admin-actions">
|
|
136
|
-
<%= link_to t('rails_image_post_solution.admin.show.back_to_list'), admin_image_reports_path, class: "btn btn-default" %>
|
|
137
|
-
</div>
|
|
138
|
-
</div>
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|