Add page for authorizing/rejecting follow requests
This commit is contained in:
		@@ -27,6 +27,7 @@ const Header = React.createClass({
 | 
			
		||||
    let displayName = account.get('display_name');
 | 
			
		||||
    let info        = '';
 | 
			
		||||
    let actionBtn   = '';
 | 
			
		||||
    let lockedIcon  = '';
 | 
			
		||||
 | 
			
		||||
    if (displayName.length === 0) {
 | 
			
		||||
      displayName = account.get('username');
 | 
			
		||||
@@ -52,6 +53,10 @@ const Header = React.createClass({
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (account.get('locked')) {
 | 
			
		||||
      lockedIcon = <i className='fa fa-lock' />;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    const content         = { __html: emojify(account.get('note')) };
 | 
			
		||||
    const displayNameHTML = { __html: emojify(escapeTextContentForBrowser(displayName)) };
 | 
			
		||||
 | 
			
		||||
@@ -66,7 +71,7 @@ const Header = React.createClass({
 | 
			
		||||
            <span style={{ display: 'inline-block', color: '#fff', fontSize: '20px', lineHeight: '27px', fontWeight: '500' }} className='account__header__display-name' dangerouslySetInnerHTML={displayNameHTML} />
 | 
			
		||||
          </a>
 | 
			
		||||
 | 
			
		||||
          <span style={{ fontSize: '14px', fontWeight: '400', display: 'block', color: '#2b90d9', marginBottom: '10px' }}>@{account.get('acct')}</span>
 | 
			
		||||
          <span style={{ fontSize: '14px', fontWeight: '400', display: 'block', color: '#2b90d9', marginBottom: '10px' }}>@{account.get('acct')} {lockedIcon}</span>
 | 
			
		||||
          <div style={{ color: '#616b86', fontSize: '14px' }} className='account__header__content' dangerouslySetInnerHTML={content} />
 | 
			
		||||
 | 
			
		||||
          {info}
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										28
									
								
								app/controllers/follow_requests_controller.rb
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										28
									
								
								app/controllers/follow_requests_controller.rb
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,28 @@
 | 
			
		||||
# frozen_string_literal: true
 | 
			
		||||
 | 
			
		||||
class FollowRequestsController < ApplicationController
 | 
			
		||||
  layout 'auth'
 | 
			
		||||
 | 
			
		||||
  before_action :authenticate_user!
 | 
			
		||||
  before_action :set_follow_request, except: :index
 | 
			
		||||
 | 
			
		||||
  def index
 | 
			
		||||
    @follow_requests = FollowRequest.where(target_account: current_account)
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  def authorize
 | 
			
		||||
    @follow_request.authorize!
 | 
			
		||||
    redirect_to follow_requests_path
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  def reject
 | 
			
		||||
    @follow_request.reject!
 | 
			
		||||
    redirect_to follow_requests_path
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  private
 | 
			
		||||
 | 
			
		||||
  def set_follow_request
 | 
			
		||||
    @follow_request = FollowRequest.find(params[:id])
 | 
			
		||||
  end
 | 
			
		||||
end
 | 
			
		||||
@@ -9,7 +9,7 @@ module Admin::AccountsHelper
 | 
			
		||||
    link_to text, filter_params(more_params), class: params.merge(more_params).compact == params.compact ? 'selected' : ''
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  def table_link_to(icon, text, path)
 | 
			
		||||
    link_to safe_join([fa_icon(icon), text]), path, class: 'table-action-link'
 | 
			
		||||
  def table_link_to(icon, text, path, options = {})
 | 
			
		||||
    link_to safe_join([fa_icon(icon), text]), path, options.merge(class: 'table-action-link')
 | 
			
		||||
  end
 | 
			
		||||
end
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										2
									
								
								app/helpers/follow_requests_helper.rb
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										2
									
								
								app/helpers/follow_requests_helper.rb
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,2 @@
 | 
			
		||||
module FollowRequestsHelper
 | 
			
		||||
end
 | 
			
		||||
@@ -2,7 +2,6 @@
 | 
			
		||||
  = Rails.configuration.x.local_domain
 | 
			
		||||
 | 
			
		||||
- content_for :header_tags do
 | 
			
		||||
  = javascript_include_tag 'application_public'
 | 
			
		||||
  %meta{ property: 'og:site_name', content: 'Mastodon' }/
 | 
			
		||||
  %meta{ property: 'og:type', content: 'website' }/
 | 
			
		||||
  %meta{ property: 'og:title', content: Rails.configuration.x.local_domain }/
 | 
			
		||||
 
 | 
			
		||||
@@ -9,7 +9,9 @@
 | 
			
		||||
  .avatar= image_tag @account.avatar.url( :original)
 | 
			
		||||
  %h1.name
 | 
			
		||||
    = display_name(@account)
 | 
			
		||||
    %small= "@#{@account.username}"
 | 
			
		||||
    %small
 | 
			
		||||
      = "@#{@account.username}"
 | 
			
		||||
      = fa_icon('lock') if @account.locked?
 | 
			
		||||
  .details
 | 
			
		||||
    .bio
 | 
			
		||||
      .account__header__content= Formatter.instance.simplified_format(@account)
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										16
									
								
								app/views/follow_requests/index.html.haml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										16
									
								
								app/views/follow_requests/index.html.haml
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,16 @@
 | 
			
		||||
- content_for :page_title do
 | 
			
		||||
  = t('follow_requests.title')
 | 
			
		||||
 | 
			
		||||
- if @follow_requests.empty?
 | 
			
		||||
  %p.nothing-here= t('accounts.nothing_here')
 | 
			
		||||
- else
 | 
			
		||||
  %table.table
 | 
			
		||||
    %tbody
 | 
			
		||||
      - @follow_requests.each do |follow_request|
 | 
			
		||||
        %tr
 | 
			
		||||
          %td= link_to follow_request.account.acct, web_path("accounts/#{follow_request.account.id}")
 | 
			
		||||
          %td
 | 
			
		||||
            = table_link_to 'check-circle', t('follow_requests.authorize'), authorize_follow_request_path(follow_request), method: :post
 | 
			
		||||
            = table_link_to 'times-circle', t('follow_requests.reject'), reject_follow_request_path(follow_request), method: :post
 | 
			
		||||
 | 
			
		||||
.form-footer= render "settings/shared/links"
 | 
			
		||||
@@ -1,3 +1,6 @@
 | 
			
		||||
- content_for :header_tags do
 | 
			
		||||
  = javascript_include_tag 'application_public'
 | 
			
		||||
 | 
			
		||||
- content_for :content do
 | 
			
		||||
  .container
 | 
			
		||||
    .logo-container
 | 
			
		||||
 
 | 
			
		||||
@@ -1,6 +1,8 @@
 | 
			
		||||
%ul.no-list
 | 
			
		||||
  - if controller_name != 'profiles'
 | 
			
		||||
    %li= link_to t('settings.edit_profile'), settings_profile_path
 | 
			
		||||
  - if controller_name != 'follow_requests'
 | 
			
		||||
    %li= link_to t('follow_requests.title'), follow_requests_path
 | 
			
		||||
  - if controller_name != 'preferences'
 | 
			
		||||
    %li= link_to t('settings.preferences'), settings_preferences_path
 | 
			
		||||
  - if controller_name != 'registrations'
 | 
			
		||||
 
 | 
			
		||||
@@ -40,6 +40,10 @@ en:
 | 
			
		||||
      x_minutes: "%{count}m"
 | 
			
		||||
      x_months: "%{count}mo"
 | 
			
		||||
      x_seconds: "%{count}s"
 | 
			
		||||
  follow_requests:
 | 
			
		||||
    authorize: Authorize
 | 
			
		||||
    reject: Reject
 | 
			
		||||
    title: Follow requests
 | 
			
		||||
  generic:
 | 
			
		||||
    changes_saved_msg: Changes successfully saved!
 | 
			
		||||
    powered_by: powered by %{link}
 | 
			
		||||
@@ -70,8 +74,8 @@ en:
 | 
			
		||||
    click_to_show: Click to show
 | 
			
		||||
    favourited: favourited a post by
 | 
			
		||||
    is_now_following: is now following
 | 
			
		||||
    sensitive_content: Sensitive content
 | 
			
		||||
    reblogged: boosted
 | 
			
		||||
    sensitive_content: Sensitive content
 | 
			
		||||
  time:
 | 
			
		||||
    formats:
 | 
			
		||||
      default: "%b %d, %Y, %H:%M"
 | 
			
		||||
 
 | 
			
		||||
@@ -1,6 +1,9 @@
 | 
			
		||||
---
 | 
			
		||||
en:
 | 
			
		||||
  simple_form:
 | 
			
		||||
    hints:
 | 
			
		||||
      defaults:
 | 
			
		||||
        locked: Requires you to manually approve followers and defaults post privacy to followers-only
 | 
			
		||||
    labels:
 | 
			
		||||
      defaults:
 | 
			
		||||
        avatar: Avatar
 | 
			
		||||
@@ -11,11 +14,11 @@ en:
 | 
			
		||||
        email: E-mail address
 | 
			
		||||
        header: Header
 | 
			
		||||
        locale: Language
 | 
			
		||||
        locked: Make account private
 | 
			
		||||
        new_password: New password
 | 
			
		||||
        note: Bio
 | 
			
		||||
        password: Password
 | 
			
		||||
        username: Username
 | 
			
		||||
        locked: Make account private
 | 
			
		||||
      interactions:
 | 
			
		||||
        must_be_follower: Block notifications from non-followers
 | 
			
		||||
        must_be_following: Block notifications from people you don't follow
 | 
			
		||||
@@ -24,9 +27,6 @@ en:
 | 
			
		||||
        follow: Send e-mail when someone follows you
 | 
			
		||||
        mention: Send e-mail when someone mentions you
 | 
			
		||||
        reblog: Send e-mail when someone reblogs your status
 | 
			
		||||
    hints:
 | 
			
		||||
      defaults:
 | 
			
		||||
        locked: Requires you to manually approve followers and defaults post privacy to followers-only
 | 
			
		||||
    'no': 'No'
 | 
			
		||||
    required:
 | 
			
		||||
      mark: "*"
 | 
			
		||||
 
 | 
			
		||||
@@ -48,6 +48,13 @@ Rails.application.routes.draw do
 | 
			
		||||
  resources :media, only: [:show]
 | 
			
		||||
  resources :tags,  only: [:show]
 | 
			
		||||
 | 
			
		||||
  resources :follow_requests do
 | 
			
		||||
    member do
 | 
			
		||||
      post :authorize
 | 
			
		||||
      post :reject
 | 
			
		||||
    end
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  namespace :admin do
 | 
			
		||||
    resources :pubsubhubbub, only: [:index]
 | 
			
		||||
    resources :domain_blocks, only: [:index, :create]
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										16
									
								
								spec/controllers/follow_requests_controller_spec.rb
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										16
									
								
								spec/controllers/follow_requests_controller_spec.rb
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,16 @@
 | 
			
		||||
require 'rails_helper'
 | 
			
		||||
 | 
			
		||||
RSpec.describe FollowRequestsController, type: :controller do
 | 
			
		||||
  render_views
 | 
			
		||||
 | 
			
		||||
  before do
 | 
			
		||||
    sign_in Fabricate(:user), scope: :user
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  describe 'GET #index' do
 | 
			
		||||
    it 'returns http success' do
 | 
			
		||||
      get :index
 | 
			
		||||
      expect(response).to have_http_status(:success)
 | 
			
		||||
    end
 | 
			
		||||
  end
 | 
			
		||||
end
 | 
			
		||||
							
								
								
									
										5
									
								
								spec/helpers/follow_requests_helper_spec.rb
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										5
									
								
								spec/helpers/follow_requests_helper_spec.rb
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,5 @@
 | 
			
		||||
require 'rails_helper'
 | 
			
		||||
 | 
			
		||||
RSpec.describe FollowRequestsHelper, type: :helper do
 | 
			
		||||
 | 
			
		||||
end
 | 
			
		||||
		Reference in New Issue
	
	Block a user