From 7ee5fc5d68df5d09262c2c29b7926fcbd2794c1d Mon Sep 17 00:00:00 2001 From: alpaca-tc Date: Wed, 24 May 2017 02:45:43 +0900 Subject: [PATCH] Toggle sensitive from admin page (#3261) --- .../admin/reported_statuses_controller.rb | 26 ++++++++++--- app/javascript/styles/admin.scss | 15 ++++++++ app/views/admin/reports/show.html.haml | 5 ++- config/locales/en.yml | 4 ++ config/routes.rb | 2 +- .../reported_statuses_controller_spec.rb | 37 ++++++++++++++++++- 6 files changed, 79 insertions(+), 10 deletions(-) diff --git a/app/controllers/admin/reported_statuses_controller.rb b/app/controllers/admin/reported_statuses_controller.rb index 7ae420dfe..0e7a89437 100644 --- a/app/controllers/admin/reported_statuses_controller.rb +++ b/app/controllers/admin/reported_statuses_controller.rb @@ -2,17 +2,31 @@ module Admin class ReportedStatusesController < BaseController - def destroy - status = Status.find params[:id] + before_action :set_report + before_action :set_status - RemovalWorker.perform_async(status.id) - redirect_to admin_report_path(report) + def update + @status.update(status_params) + redirect_to admin_report_path(@report) + end + + def destroy + RemovalWorker.perform_async(@status.id) + redirect_to admin_report_path(@report) end private - def report - Report.find(params[:report_id]) + def status_params + params.require(:status).permit(:sensitive) + end + + def set_report + @report = Report.find(params[:report_id]) + end + + def set_status + @status = @report.statuses.find(params[:id]) end end end diff --git a/app/javascript/styles/admin.scss b/app/javascript/styles/admin.scss index 3d3623154..d011548a7 100644 --- a/app/javascript/styles/admin.scss +++ b/app/javascript/styles/admin.scss @@ -245,4 +245,19 @@ .report-status__actions { flex: 0 0 auto; + position: relative; + + .nsfw-button { + color: $white; + font-size: 11px; + width: 11px; + display: block; + } + + .trash-button { + position: absolute; + bottom: 10px; + font-size: 24px; + width: 24px; + } } diff --git a/app/views/admin/reports/show.html.haml b/app/views/admin/reports/show.html.haml index ce5fe6cb6..560031079 100644 --- a/app/views/admin/reports/show.html.haml +++ b/app/views/admin/reports/show.html.haml @@ -24,7 +24,10 @@ .activity-stream.activity-stream-headless .entry= render partial: 'stream_entries/simple_status', locals: { status: status } .report-status__actions - = link_to admin_report_reported_status_path(@report, status), method: :delete, class: 'icon-button', style: 'font-size: 24px; width: 24px; height: 24px', title: t('admin.reports.delete') do + - unless status.media_attachments.empty? + = link_to admin_report_reported_status_path(@report, status, status: { sensitive: !status.sensitive }), method: :patch, class: 'nsfw-button', title: t("admin.reports.nsfw.#{!status.sensitive}") do + = t("admin.reports.nsfw.#{!status.sensitive}") + = link_to admin_report_reported_status_path(@report, status), method: :delete, class: 'icon-button trash-button', title: t('admin.reports.delete'), data: { confirm: t('admin.reports.are_you_sure') } do = fa_icon 'trash' - if !@report.action_taken? diff --git a/config/locales/en.yml b/config/locales/en.yml index 8b38dd4b1..c27dfb0e5 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -160,6 +160,10 @@ en: title: Reports unresolved: Unresolved view: View + nsfw: + 'true': NSFW ON + 'false': NSFW OFF + are_you_sure: Are you sure? settings: contact_information: email: Enter a public e-mail address diff --git a/config/routes.rb b/config/routes.rb index 81c205daa..7db3c74b1 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -80,7 +80,7 @@ Rails.application.routes.draw do resources :instances, only: [:index] resources :reports, only: [:index, :show, :update] do - resources :reported_statuses, only: :destroy + resources :reported_statuses, only: [:update, :destroy] end resources :accounts, only: [:index, :show] do diff --git a/spec/controllers/admin/reported_statuses_controller_spec.rb b/spec/controllers/admin/reported_statuses_controller_spec.rb index dea5ea55d..80c69e8d1 100644 --- a/spec/controllers/admin/reported_statuses_controller_spec.rb +++ b/spec/controllers/admin/reported_statuses_controller_spec.rb @@ -4,14 +4,47 @@ describe Admin::ReportedStatusesController do render_views let(:user) { Fabricate(:user, admin: true) } + let(:report) { Fabricate(:report, status_ids: [status.id]) } + let(:status) { Fabricate(:status) } + before do sign_in user, scope: :user end + describe 'PATCH #update' do + subject do + -> { patch :update, params: { report_id: report, id: status, status: { sensitive: sensitive } } } + end + + let(:status) { Fabricate(:status, sensitive: !sensitive) } + let(:sensitive) { true } + + context 'updates sensitive column to true' do + it 'updates sensitive column' do + is_expected.to change { + status.reload.sensitive + }.from(false).to(true) + end + end + + context 'updates sensitive column to false' do + let(:sensitive) { false } + + it 'updates sensitive column' do + is_expected.to change { + status.reload.sensitive + }.from(true).to(false) + end + end + + it 'redirects to report page' do + subject.call + expect(response).to redirect_to(admin_report_path(report)) + end + end + describe 'DELETE #destroy' do it 'removes a status' do - report = Fabricate(:report) - status = Fabricate(:status) allow(RemovalWorker).to receive(:perform_async) delete :destroy, params: { report_id: report, id: status }