Browse Source

Add local followers page to admin account UI (#9610)

* 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
pull/4/head
chr v1.x 5 years ago
committed by Eugen Rochko
parent
commit
c3465f699e
6 changed files with 63 additions and 1 deletions
  1. +22
    -0
      app/controllers/admin/followers_controller.rb
  2. +4
    -0
      app/models/account.rb
  3. +3
    -1
      app/views/admin/accounts/show.html.haml
  4. +29
    -0
      app/views/admin/followers/index.html.haml
  5. +4
    -0
      config/locales/en.yml
  6. +1
    -0
      config/routes.rb

+ 22
- 0
app/controllers/admin/followers_controller.rb View File

@ -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
- 0
app/models/account.rb View File

@ -139,6 +139,10 @@ class Account < ApplicationRecord
"#{username}@#{Rails.configuration.x.local_domain}" "#{username}@#{Rails.configuration.x.local_domain}"
end end
def local_followers_count
Follow.where(target_account_id: id).count
end
def to_webfinger_s def to_webfinger_s
"acct:#{local_username_and_domain}" "acct:#{local_username_and_domain}"
end end

+ 3
- 1
app/views/admin/accounts/show.html.haml View File

@ -89,7 +89,9 @@
%td= number_to_human @account.following_count %td= number_to_human @account.following_count
%tr %tr
%th= t('admin.accounts.followers') %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 %tr
%th= t('admin.accounts.statuses') %th= t('admin.accounts.statuses')
%td= link_to number_to_human(@account.statuses_count), admin_account_statuses_path(@account.id) %td= link_to number_to_human(@account.statuses_count), admin_account_statuses_path(@account.id)

+ 29
- 0
app/views/admin/followers/index.html.haml View File

@ -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
- 0
config/locales/en.yml View File

@ -105,6 +105,7 @@ en:
enabled: Enabled enabled: Enabled
feed_url: Feed URL feed_url: Feed URL
followers: Followers followers: Followers
followers_local: "(%{local} local)"
followers_url: Followers URL followers_url: Followers URL
follows: Follows follows: Follows
header: Header header: Header
@ -296,6 +297,9 @@ en:
create: Add domain create: Add domain
title: New e-mail blacklist entry title: New e-mail blacklist entry
title: E-mail blacklist title: E-mail blacklist
followers:
back_to_account: Back To Account
title: "%{acct}'s Followers"
instances: instances:
account_count: Known accounts account_count: Known accounts
domain_name: Domain domain_name: Domain

+ 1
- 0
config/routes.rb View File

@ -191,6 +191,7 @@ Rails.application.routes.draw do
resource :reset, only: [:create] resource :reset, only: [:create]
resource :action, only: [:new, :create], controller: 'account_actions' resource :action, only: [:new, :create], controller: 'account_actions'
resources :statuses, only: [:index, :create, :update, :destroy] resources :statuses, only: [:index, :create, :update, :destroy]
resources :followers, only: [:index]
resource :confirmation, only: [:create] do resource :confirmation, only: [:create] do
collection do collection do

Loading…
Cancel
Save