Add page for authorizing/rejecting follow requests

This commit is contained in:
Eugen Rochko 2016-12-23 00:04:52 +01:00
parent 3c841c7306
commit b302b9202b
14 changed files with 99 additions and 10 deletions

View file

@ -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}

View 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

View file

@ -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

View file

@ -0,0 +1,2 @@
module FollowRequestsHelper
end

View file

@ -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 }/

View file

@ -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)

View 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"

View file

@ -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

View file

@ -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'

View file

@ -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"

View file

@ -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: "*"

View file

@ -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]

View 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

View file

@ -0,0 +1,5 @@
require 'rails_helper'
RSpec.describe FollowRequestsHelper, type: :helper do
end