diff --git a/app/controllers/admin/instances_controller.rb b/app/controllers/admin/instances_controller.rb index 20d5add54e..460108029b 100644 --- a/app/controllers/admin/instances_controller.rb +++ b/app/controllers/admin/instances_controller.rb @@ -56,6 +56,10 @@ module Admin end def set_instances + # If we have a `status` in the query parameters, but it has no value or it + # isn't a known status remove the status query parameter + return redirect_to admin_instances_path filter_params.merge(status: nil) if params.include?(:status) && (params[:status].blank? || InstanceFilter::STATUSES.exclude?(params[:status])) + # If we have `limited` in the query parameters, remove it and redirect to suspended: return redirect_to admin_instances_path filter_params.merge(status: :suspended) if params[:limited].present? diff --git a/app/models/instance_filter.rb b/app/models/instance_filter.rb index 46174351f6..22dd5f75cc 100644 --- a/app/models/instance_filter.rb +++ b/app/models/instance_filter.rb @@ -7,6 +7,14 @@ class InstanceFilter availability ).freeze + # These are the valid input values for statuses: + STATUSES = %w( + allowed + suspended + limited + unrestricted + ).freeze + attr_reader :params def initialize(params) @@ -47,11 +55,9 @@ class InstanceFilter Instance.joins(:domain_allow).reorder(Arel.sql('domain_allows.id desc')) when :suspended Instance.joins(:domain_block).where(domain_blocks: { severity: :suspend }).reorder(Arel.sql('domain_blocks.id desc')) - when :silenced - Instance.joins(:domain_block).where(domain_blocks: { severity: :silence }).reorder(Arel.sql('domain_blocks.id desc')) - when :noop - Instance.joins(:domain_block).where(domain_blocks: { severity: :noop }).reorder(Arel.sql('domain_blocks.id desc')) - when :not_limited + when :limited + Instance.joins(:domain_block).where(domain_blocks: { severity: :silence }).or(Instance.joins(:domain_block).where(domain_blocks: { severity: :noop })).reorder(Arel.sql('domain_blocks.id desc')) + when :unrestricted # Finds all instances where there isn't a record in the domain_blocks table Instance.left_outer_joins(:domain_block).where(domain_blocks: { domain: nil }) else diff --git a/app/views/admin/instances/index.html.haml b/app/views/admin/instances/index.html.haml index e21d696eac..b1f01ef546 100644 --- a/app/views/admin/instances/index.html.haml +++ b/app/views/admin/instances/index.html.haml @@ -19,9 +19,8 @@ %li= filter_link_to t('admin.instances.moderation.allowed'), status: nil - else %li= filter_link_to t('admin.instances.moderation.all'), status: nil - %li= filter_link_to t('admin.instances.moderation.not_limited'), status: 'not_limited' - %li= filter_link_to t('admin.instances.moderation.noop'), status: 'noop' - %li= filter_link_to t('admin.instances.moderation.silenced'), status: 'silenced' + %li= filter_link_to t('admin.instances.moderation.unrestricted'), status: 'unrestricted' + %li= filter_link_to t('admin.instances.moderation.limited'), status: 'limited' %li= filter_link_to t('admin.instances.moderation.suspended'), status: 'suspended' .filter-subset diff --git a/config/locales/en.yml b/config/locales/en.yml index 9b8ad9e68a..f47bf029c0 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -534,11 +534,10 @@ en: moderation: all: All allowed: Allowed - noop: Filtered - not_limited: Not Limited - silenced: Limited + limited: Limited suspended: Suspended title: Moderation + unrestricted: Unrestricted purge: Purge purge_description_html: If you believe this domain is offline for good, you can delete all account records and associated data from this domain from your storage. This may take a while. title: Federation