Add page for authorizing/rejecting follow requests
This commit is contained in:
parent
3c841c7306
commit
b302b9202b
|
@ -27,6 +27,7 @@ const Header = React.createClass({
|
||||||
let displayName = account.get('display_name');
|
let displayName = account.get('display_name');
|
||||||
let info = '';
|
let info = '';
|
||||||
let actionBtn = '';
|
let actionBtn = '';
|
||||||
|
let lockedIcon = '';
|
||||||
|
|
||||||
if (displayName.length === 0) {
|
if (displayName.length === 0) {
|
||||||
displayName = account.get('username');
|
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 content = { __html: emojify(account.get('note')) };
|
||||||
const displayNameHTML = { __html: emojify(escapeTextContentForBrowser(displayName)) };
|
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} />
|
<span style={{ display: 'inline-block', color: '#fff', fontSize: '20px', lineHeight: '27px', fontWeight: '500' }} className='account__header__display-name' dangerouslySetInnerHTML={displayNameHTML} />
|
||||||
</a>
|
</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} />
|
<div style={{ color: '#616b86', fontSize: '14px' }} className='account__header__content' dangerouslySetInnerHTML={content} />
|
||||||
|
|
||||||
{info}
|
{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' : ''
|
link_to text, filter_params(more_params), class: params.merge(more_params).compact == params.compact ? 'selected' : ''
|
||||||
end
|
end
|
||||||
|
|
||||||
def table_link_to(icon, text, path)
|
def table_link_to(icon, text, path, options = {})
|
||||||
link_to safe_join([fa_icon(icon), text]), path, class: 'table-action-link'
|
link_to safe_join([fa_icon(icon), text]), path, options.merge(class: 'table-action-link')
|
||||||
end
|
end
|
||||||
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
|
= Rails.configuration.x.local_domain
|
||||||
|
|
||||||
- content_for :header_tags do
|
- content_for :header_tags do
|
||||||
= javascript_include_tag 'application_public'
|
|
||||||
%meta{ property: 'og:site_name', content: 'Mastodon' }/
|
%meta{ property: 'og:site_name', content: 'Mastodon' }/
|
||||||
%meta{ property: 'og:type', content: 'website' }/
|
%meta{ property: 'og:type', content: 'website' }/
|
||||||
%meta{ property: 'og:title', content: Rails.configuration.x.local_domain }/
|
%meta{ property: 'og:title', content: Rails.configuration.x.local_domain }/
|
||||||
|
|
|
@ -9,7 +9,9 @@
|
||||||
.avatar= image_tag @account.avatar.url( :original)
|
.avatar= image_tag @account.avatar.url( :original)
|
||||||
%h1.name
|
%h1.name
|
||||||
= display_name(@account)
|
= display_name(@account)
|
||||||
%small= "@#{@account.username}"
|
%small
|
||||||
|
= "@#{@account.username}"
|
||||||
|
= fa_icon('lock') if @account.locked?
|
||||||
.details
|
.details
|
||||||
.bio
|
.bio
|
||||||
.account__header__content= Formatter.instance.simplified_format(@account)
|
.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
|
- content_for :content do
|
||||||
.container
|
.container
|
||||||
.logo-container
|
.logo-container
|
||||||
|
|
|
@ -1,6 +1,8 @@
|
||||||
%ul.no-list
|
%ul.no-list
|
||||||
- if controller_name != 'profiles'
|
- if controller_name != 'profiles'
|
||||||
%li= link_to t('settings.edit_profile'), settings_profile_path
|
%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'
|
- if controller_name != 'preferences'
|
||||||
%li= link_to t('settings.preferences'), settings_preferences_path
|
%li= link_to t('settings.preferences'), settings_preferences_path
|
||||||
- if controller_name != 'registrations'
|
- if controller_name != 'registrations'
|
||||||
|
|
|
@ -40,6 +40,10 @@ en:
|
||||||
x_minutes: "%{count}m"
|
x_minutes: "%{count}m"
|
||||||
x_months: "%{count}mo"
|
x_months: "%{count}mo"
|
||||||
x_seconds: "%{count}s"
|
x_seconds: "%{count}s"
|
||||||
|
follow_requests:
|
||||||
|
authorize: Authorize
|
||||||
|
reject: Reject
|
||||||
|
title: Follow requests
|
||||||
generic:
|
generic:
|
||||||
changes_saved_msg: Changes successfully saved!
|
changes_saved_msg: Changes successfully saved!
|
||||||
powered_by: powered by %{link}
|
powered_by: powered by %{link}
|
||||||
|
@ -70,8 +74,8 @@ en:
|
||||||
click_to_show: Click to show
|
click_to_show: Click to show
|
||||||
favourited: favourited a post by
|
favourited: favourited a post by
|
||||||
is_now_following: is now following
|
is_now_following: is now following
|
||||||
sensitive_content: Sensitive content
|
|
||||||
reblogged: boosted
|
reblogged: boosted
|
||||||
|
sensitive_content: Sensitive content
|
||||||
time:
|
time:
|
||||||
formats:
|
formats:
|
||||||
default: "%b %d, %Y, %H:%M"
|
default: "%b %d, %Y, %H:%M"
|
||||||
|
|
|
@ -1,6 +1,9 @@
|
||||||
---
|
---
|
||||||
en:
|
en:
|
||||||
simple_form:
|
simple_form:
|
||||||
|
hints:
|
||||||
|
defaults:
|
||||||
|
locked: Requires you to manually approve followers and defaults post privacy to followers-only
|
||||||
labels:
|
labels:
|
||||||
defaults:
|
defaults:
|
||||||
avatar: Avatar
|
avatar: Avatar
|
||||||
|
@ -11,11 +14,11 @@ en:
|
||||||
email: E-mail address
|
email: E-mail address
|
||||||
header: Header
|
header: Header
|
||||||
locale: Language
|
locale: Language
|
||||||
|
locked: Make account private
|
||||||
new_password: New password
|
new_password: New password
|
||||||
note: Bio
|
note: Bio
|
||||||
password: Password
|
password: Password
|
||||||
username: Username
|
username: Username
|
||||||
locked: Make account private
|
|
||||||
interactions:
|
interactions:
|
||||||
must_be_follower: Block notifications from non-followers
|
must_be_follower: Block notifications from non-followers
|
||||||
must_be_following: Block notifications from people you don't follow
|
must_be_following: Block notifications from people you don't follow
|
||||||
|
@ -24,9 +27,6 @@ en:
|
||||||
follow: Send e-mail when someone follows you
|
follow: Send e-mail when someone follows you
|
||||||
mention: Send e-mail when someone mentions you
|
mention: Send e-mail when someone mentions you
|
||||||
reblog: Send e-mail when someone reblogs your status
|
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'
|
'no': 'No'
|
||||||
required:
|
required:
|
||||||
mark: "*"
|
mark: "*"
|
||||||
|
|
|
@ -48,6 +48,13 @@ Rails.application.routes.draw do
|
||||||
resources :media, only: [:show]
|
resources :media, only: [:show]
|
||||||
resources :tags, only: [:show]
|
resources :tags, only: [:show]
|
||||||
|
|
||||||
|
resources :follow_requests do
|
||||||
|
member do
|
||||||
|
post :authorize
|
||||||
|
post :reject
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
namespace :admin do
|
namespace :admin do
|
||||||
resources :pubsubhubbub, only: [:index]
|
resources :pubsubhubbub, only: [:index]
|
||||||
resources :domain_blocks, only: [:index, :create]
|
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 a new issue