Add domain search/filter to the "Federation" (/admin/instances) page (#10071)
This commit is contained in:
		@@ -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"
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user