Add domain search/filter to the "Federation" (/admin/instances) page (#10071)
This commit is contained in:
parent
2f7f6af26a
commit
6840a77711
6 changed files with 25 additions and 4 deletions
|
@ -38,7 +38,7 @@ module Admin
|
||||||
end
|
end
|
||||||
|
|
||||||
def filter_params
|
def filter_params
|
||||||
params.permit(:limited)
|
params.permit(:limited, :by_domain)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -6,7 +6,7 @@ module Admin::FilterHelper
|
||||||
INVITE_FILTER = %i(available expired).freeze
|
INVITE_FILTER = %i(available expired).freeze
|
||||||
CUSTOM_EMOJI_FILTERS = %i(local remote by_domain shortcode).freeze
|
CUSTOM_EMOJI_FILTERS = %i(local remote by_domain shortcode).freeze
|
||||||
TAGS_FILTERS = %i(hidden).freeze
|
TAGS_FILTERS = %i(hidden).freeze
|
||||||
INSTANCES_FILTERS = %i(limited).freeze
|
INSTANCES_FILTERS = %i(limited by_domain).freeze
|
||||||
|
|
||||||
FILTERS = ACCOUNT_FILTERS + REPORT_FILTERS + INVITE_FILTER + CUSTOM_EMOJI_FILTERS + TAGS_FILTERS + INSTANCES_FILTERS
|
FILTERS = ACCOUNT_FILTERS + REPORT_FILTERS + INVITE_FILTER + CUSTOM_EMOJI_FILTERS + TAGS_FILTERS + INSTANCES_FILTERS
|
||||||
|
|
||||||
|
|
|
@ -24,6 +24,8 @@ class DomainBlock < ApplicationRecord
|
||||||
has_many :accounts, foreign_key: :domain, primary_key: :domain
|
has_many :accounts, foreign_key: :domain, primary_key: :domain
|
||||||
delegate :count, to: :accounts, prefix: true
|
delegate :count, to: :accounts, prefix: true
|
||||||
|
|
||||||
|
scope :matches_domain, ->(value) { where(arel_table[:domain].matches("%#{value}%")) }
|
||||||
|
|
||||||
def self.blocked?(domain)
|
def self.blocked?(domain)
|
||||||
where(domain: domain, severity: :suspend).exists?
|
where(domain: domain, severity: :suspend).exists?
|
||||||
end
|
end
|
||||||
|
|
|
@ -9,9 +9,13 @@ class InstanceFilter
|
||||||
|
|
||||||
def results
|
def results
|
||||||
if params[:limited].present?
|
if params[:limited].present?
|
||||||
DomainBlock.order(id: :desc)
|
scope = DomainBlock
|
||||||
|
scope = scope.matches_domain(params[:by_domain]) if params[:by_domain].present?
|
||||||
|
scope.order(id: :desc)
|
||||||
else
|
else
|
||||||
Account.remote.by_domain_accounts
|
scope = Account.remote
|
||||||
|
scope = scope.matches_domain(params[:by_domain]) if params[:by_domain].present?
|
||||||
|
scope.by_domain_accounts
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -11,6 +11,20 @@
|
||||||
%div{ style: 'flex: 1 1 auto; text-align: right' }
|
%div{ style: 'flex: 1 1 auto; text-align: right' }
|
||||||
= link_to t('admin.domain_blocks.add_new'), new_admin_domain_block_path, class: 'button'
|
= link_to t('admin.domain_blocks.add_new'), new_admin_domain_block_path, class: 'button'
|
||||||
|
|
||||||
|
= form_tag admin_instances_url, method: 'GET', class: 'simple_form' do
|
||||||
|
.fields-group
|
||||||
|
- Admin::FilterHelper::INSTANCES_FILTERS.each do |key|
|
||||||
|
- if params[key].present?
|
||||||
|
= hidden_field_tag key, params[key]
|
||||||
|
|
||||||
|
- %i(by_domain).each do |key|
|
||||||
|
.input.string.optional
|
||||||
|
= text_field_tag key, params[key], class: 'string optional', placeholder: I18n.t("admin.instances.#{key}")
|
||||||
|
|
||||||
|
.actions
|
||||||
|
%button= t('admin.accounts.search')
|
||||||
|
= link_to t('admin.accounts.reset'), admin_custom_emojis_path, class: 'button negative'
|
||||||
|
|
||||||
%hr.spacer/
|
%hr.spacer/
|
||||||
|
|
||||||
- @instances.each do |instance|
|
- @instances.each do |instance|
|
||||||
|
|
|
@ -302,6 +302,7 @@ en:
|
||||||
back_to_account: Back To Account
|
back_to_account: Back To Account
|
||||||
title: "%{acct}'s Followers"
|
title: "%{acct}'s Followers"
|
||||||
instances:
|
instances:
|
||||||
|
by_domain: Domain
|
||||||
delivery_available: Delivery is available
|
delivery_available: Delivery is available
|
||||||
known_accounts:
|
known_accounts:
|
||||||
one: "%{count} known account"
|
one: "%{count} known account"
|
||||||
|
|
Loading…
Reference in a new issue