Skip to content

Commit

Permalink
Add local followers page to admin account UI (mastodon#9610)
Browse files Browse the repository at this point in the history
* Add local followers page to admin account UI

For moderation, I often find myself wondering who, locally, is following
a remote user. Currently, to see this, I have to go back to the web UI,
paste in their full handle, click their profile, and go to the
"Followers" tab (plus, this information is incidental, and if mastodon
ever decides to resolve all of the follower information, there will be
no place local followers are shown). This PR adds a new page which is
accessible via the "following" count on the admin's account view
page, which shows the local followers. (It has filter parameters for
account location to indicate that only local followers are shown, and
leave room for expansion if mastodon ever decides to store the entire
remote follow list).

* Normalize en.yml
  • Loading branch information
chr-1x authored and hiyuki2578 committed Oct 2, 2019
1 parent 18bcff6 commit a17a7f8
Show file tree
Hide file tree
Showing 6 changed files with 63 additions and 1 deletion.
22 changes: 22 additions & 0 deletions app/controllers/admin/followers_controller.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
# frozen_string_literal: true

module Admin
class FollowersController < BaseController
before_action :set_account

PER_PAGE = 40

def index
authorize :account, :index?
@followers = followers.recent.page(params[:page]).per(PER_PAGE)
end

def set_account
@account = Account.find(params[:account_id])
end

def followers
Follow.includes(:account).where(target_account: @account)
end
end
end
4 changes: 4 additions & 0 deletions app/models/account.rb
Original file line number Diff line number Diff line change
Expand Up @@ -140,6 +140,10 @@ def local_username_and_domain
"#{username}@#{Rails.configuration.x.local_domain}"
end

def local_followers_count
Follow.where(target_account_id: id).count
end

def to_webfinger_s
"acct:#{local_username_and_domain}"
end
Expand Down
4 changes: 3 additions & 1 deletion app/views/admin/accounts/show.html.haml
Original file line number Diff line number Diff line change
Expand Up @@ -89,7 +89,9 @@
%td= number_to_human @account.following_count
%tr
%th= t('admin.accounts.followers')
%td= number_to_human @account.followers_count
%td
= number_to_human @account.followers_count
= link_to t('admin.accounts.followers_local', local: number_to_human(@account.local_followers_count)), admin_account_followers_path(@account.id)
%tr
%th= t('admin.accounts.statuses')
%td= link_to number_to_human(@account.statuses_count), admin_account_statuses_path(@account.id)
Expand Down
29 changes: 29 additions & 0 deletions app/views/admin/followers/index.html.haml
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
- content_for :header_tags do
= javascript_pack_tag 'admin', integrity: true, async: true, crossorigin: 'anonymous'

- content_for :page_title do
= t('admin.followers.title', acct: @account.acct)

.filters
.filter-subset
%strong= t('admin.accounts.location.title')
%ul
%li= link_to t('admin.accounts.location.local'), admin_account_followers_path(@account.id), class: 'selected'
.back-link{ style: 'flex: 1 1 auto; text-align: right' }
= link_to admin_account_path(@account.id) do
%i.fa.fa-chevron-left.fa-fw
= t('admin.followers.back_to_account')

.table-wrapper
%table.table
%thead
%tr
%th= t('admin.accounts.username')
%th= t('admin.accounts.role')
%th= t('admin.accounts.most_recent_ip')
%th= t('admin.accounts.most_recent_activity')
%th
%tbody
= render partial: 'admin/accounts/account', collection: @followers.map{|a| a.account}

= paginate @followers
4 changes: 4 additions & 0 deletions config/locales/en.yml
Original file line number Diff line number Diff line change
Expand Up @@ -105,6 +105,7 @@ en:
enabled: Enabled
feed_url: Feed URL
followers: Followers
followers_local: "(%{local} local)"
followers_url: Followers URL
follows: Follows
header: Header
Expand Down Expand Up @@ -296,6 +297,9 @@ en:
create: Add domain
title: New e-mail blacklist entry
title: E-mail blacklist
followers:
back_to_account: Back To Account
title: "%{acct}'s Followers"
instances:
account_count: Known accounts
domain_name: Domain
Expand Down
1 change: 1 addition & 0 deletions config/routes.rb
Original file line number Diff line number Diff line change
Expand Up @@ -191,6 +191,7 @@
resource :reset, only: [:create]
resource :action, only: [:new, :create], controller: 'account_actions'
resources :statuses, only: [:index, :create, :update, :destroy]
resources :followers, only: [:index]

resource :confirmation, only: [:create] do
collection do
Expand Down

0 comments on commit a17a7f8

Please sign in to comment.