about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--app/assets/stylesheets/admin.scss45
-rw-r--r--app/controllers/admin/reports_controller.rb30
-rw-r--r--app/views/admin/reports/show.html.haml36
-rw-r--r--config/routes.rb10
4 files changed, 118 insertions, 3 deletions
diff --git a/app/assets/stylesheets/admin.scss b/app/assets/stylesheets/admin.scss
index 7d056bc06..f7c5a5698 100644
--- a/app/assets/stylesheets/admin.scss
+++ b/app/assets/stylesheets/admin.scss
@@ -93,7 +93,7 @@
       margin-bottom: 40px;
     }
 
-    p {
+    & > p {
       font-size: 14px;
       line-height: 18px;
       color: $color2;
@@ -104,6 +104,13 @@
         font-weight: 500;
       }
     }
+
+    hr {
+      margin: 20px 0;
+      border: 0;
+      background: transparent;
+      border-bottom: 1px solid $color1;
+    }
   }
 
   .simple_form {
@@ -180,3 +187,39 @@
     }
   }
 }
+
+.report-accounts {
+  display: flex;
+  margin-bottom: 20px;
+}
+
+.report-accounts__item {
+  flex: 1 1 0;
+
+  & > strong {
+    display: block;
+    margin-bottom: 10px;
+    font-weight: 500;
+    font-size: 14px;
+    line-height: 18px;
+    color: $color2;
+  }
+
+  &:first-child {
+    margin-right: 10px;
+  }
+}
+
+.report-status {
+  display: flex;
+  margin-bottom: 10px;
+
+  .activity-stream {
+    flex: 2 0 auto;
+    margin-right: 20px;
+  }
+}
+
+.report-status__actions {
+  flex: 0 0 auto;
+}
diff --git a/app/controllers/admin/reports_controller.rb b/app/controllers/admin/reports_controller.rb
index 3eb5ab517..67d57e4eb 100644
--- a/app/controllers/admin/reports_controller.rb
+++ b/app/controllers/admin/reports_controller.rb
@@ -2,6 +2,7 @@
 
 class Admin::ReportsController < ApplicationController
   before_action :require_admin!
+  before_action :set_report, except: [:index]
 
   layout 'admin'
 
@@ -11,7 +12,34 @@ class Admin::ReportsController < ApplicationController
   end
 
   def show
-    @report   = Report.find(params[:id])
     @statuses = Status.where(id: @report.status_ids)
   end
+
+  def resolve
+    @report.update(action_taken: true)
+    redirect_to admin_report_path(@report)
+  end
+
+  def suspend
+    Admin::SuspensionWorker.perform_async(@report.target_account.id)
+    @report.update(action_taken: true)
+    redirect_to admin_report_path(@report)
+  end
+
+  def silence
+    @report.target_account.update(silenced: true)
+    @report.update(action_taken: true)
+    redirect_to admin_report_path(@report)
+  end
+
+  def remove
+    RemovalWorker.perform_async(params[:status_id])
+    redirect_to admin_report_path(@report)
+  end
+
+  private
+
+  def set_report
+    @report = Report.find(params[:id])
+  end
 end
diff --git a/app/views/admin/reports/show.html.haml b/app/views/admin/reports/show.html.haml
index 8aeb56200..74cac016d 100644
--- a/app/views/admin/reports/show.html.haml
+++ b/app/views/admin/reports/show.html.haml
@@ -1,2 +1,38 @@
 - content_for :page_title do
   = "Report ##{@report.id}"
+
+.report-accounts
+  .report-accounts__item
+    %strong Reported account:
+    = render partial: 'authorize_follow/card', locals: { account: @report.target_account }
+  .report-accounts__item
+    %strong Reported by:
+    = render partial: 'authorize_follow/card', locals: { account: @report.account }
+
+%p
+  %strong Comment:
+  - if @report.comment.blank?
+    None
+  - else
+    = @report.comment
+
+- unless @statuses.empty?
+  %hr/
+
+  - @statuses.each do |status|
+    .report-status
+      .activity-stream.activity-stream-headless
+        .entry= render partial: 'stream_entries/simple_status', locals: { status: status }
+      .report-status__actions
+        = link_to remove_admin_report_path(@report, status_id: status.id), method: :post, class: 'icon-button', style: 'font-size: 24px; width: 24px; height: 24px', title: 'Delete' do
+          = fa_icon 'trash'
+
+- unless @report.action_taken?
+  %hr/
+
+  %div{ style: 'overflow: hidden' }
+    %div{ style: 'float: right' }
+      = link_to 'Silence account', silence_admin_report_path(@report), method: :post, class: 'button'
+      = link_to 'Suspend account', suspend_admin_report_path(@report), method: :post, class: 'button'
+    %div{ style: 'float: left' }
+      = link_to 'Mark as resolved', resolve_admin_report_path(@report), method: :post, class: 'button'
diff --git a/config/routes.rb b/config/routes.rb
index e3fef9d56..f91a866ba 100644
--- a/config/routes.rb
+++ b/config/routes.rb
@@ -66,7 +66,15 @@ Rails.application.routes.draw do
     resources :pubsubhubbub, only: [:index]
     resources :domain_blocks, only: [:index, :create]
     resources :settings, only: [:index, :update]
-    resources :reports, only: [:index, :show]
+
+    resources :reports, only: [:index, :show] do
+      member do
+        post :resolve
+        post :silence
+        post :suspend
+        post :remove
+      end
+    end
 
     resources :accounts, only: [:index, :show] do
       member do