commit: 5f54981846508daf9558f66ffd70d42d8213bea9
parent: 405c495c234d80a036a37052841850be29000d0b
Author: Eugen Rochko <eugen@zeonfederated.com>
Date: Tue, 4 Apr 2017 15:26:57 +0200
New admin setting: open/close registrations, with custom message, from the admin UI
Diffstat:
8 files changed, 70 insertions(+), 21 deletions(-)
diff --git a/app/assets/stylesheets/about.scss b/app/assets/stylesheets/about.scss
@@ -319,7 +319,7 @@
}
}
- .simple_form {
+ .simple_form, .closed-registrations-message {
width: 300px;
flex: 0 0 auto;
background: rgba(darken($color1, 7%), 0.5);
@@ -340,3 +340,11 @@
}
}
}
+
+.closed-registrations-message {
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+ justify-content: center;
+ text-align: center;
+}
diff --git a/app/controllers/about_controller.rb b/app/controllers/about_controller.rb
@@ -4,7 +4,9 @@ class AboutController < ApplicationController
before_action :set_body_classes
def index
- @description = Setting.site_description
+ @description = Setting.site_description
+ @open_registrations = Setting.open_registrations
+ @closed_registrations_message = Setting.closed_registrations_message
@user = User.new
@user.build_account
diff --git a/app/controllers/admin/settings_controller.rb b/app/controllers/admin/settings_controller.rb
@@ -11,9 +11,13 @@ class Admin::SettingsController < ApplicationController
def update
@setting = Setting.where(var: params[:id]).first_or_initialize(var: params[:id])
+ value = settings_params[:value]
- if @setting.value != params[:setting][:value]
- @setting.value = params[:setting][:value]
+ # Special cases
+ value = value == 'true' if @setting.var == 'open_registrations'
+
+ if @setting.value != value
+ @setting.value = value
@setting.save
end
@@ -22,4 +26,10 @@ class Admin::SettingsController < ApplicationController
format.json { respond_with_bip(@setting) }
end
end
+
+ private
+
+ def settings_params
+ params.require(:setting).permit(:value)
+ end
end
diff --git a/app/controllers/auth/registrations_controller.rb b/app/controllers/auth/registrations_controller.rb
@@ -3,7 +3,7 @@
class Auth::RegistrationsController < Devise::RegistrationsController
layout :determine_layout
- before_action :check_single_user_mode
+ before_action :check_enabled_registrations, only: [:new, :create]
before_action :configure_sign_up_params, only: [:create]
protected
@@ -27,12 +27,12 @@ class Auth::RegistrationsController < Devise::RegistrationsController
new_user_session_path
end
- def check_single_user_mode
- redirect_to root_path if Rails.configuration.x.single_user_mode
+ def check_enabled_registrations
+ redirect_to root_path if Rails.configuration.x.single_user_mode || !Setting.open_registrations
end
-
+
private
-
+
def determine_layout
%w(edit update).include?(action_name) ? 'admin' : 'auth'
end
diff --git a/app/views/about/index.html.haml b/app/views/about/index.html.haml
@@ -24,21 +24,34 @@
.screenshot-with-signup
.mascot= image_tag 'fluffy-elephant-friend.png'
- = simple_form_for(@user, url: user_registration_path) do |f|
- = f.simple_fields_for :account do |ff|
- = ff.input :username, autofocus: true, placeholder: t('simple_form.labels.defaults.username'), required: true, input_html: { 'aria-label' => t('simple_form.labels.defaults.username') }
+ - if @open_registrations
+ = simple_form_for(@user, url: user_registration_path) do |f|
+ = f.simple_fields_for :account do |ff|
+ = ff.input :username, autofocus: true, placeholder: t('simple_form.labels.defaults.username'), required: true, input_html: { 'aria-label' => t('simple_form.labels.defaults.username') }
- = f.input :email, placeholder: t('simple_form.labels.defaults.email'), required: true, input_html: { 'aria-label' => t('simple_form.labels.defaults.email') }
- = f.input :password, autocomplete: "off", placeholder: t('simple_form.labels.defaults.password'), required: true, input_html: { 'aria-label' => t('simple_form.labels.defaults.password') }
- = f.input :password_confirmation, autocomplete: "off", placeholder: t('simple_form.labels.defaults.confirm_password'), required: true, input_html: { 'aria-label' => t('simple_form.labels.defaults.confirm_password') }
+ = f.input :email, placeholder: t('simple_form.labels.defaults.email'), required: true, input_html: { 'aria-label' => t('simple_form.labels.defaults.email') }
+ = f.input :password, autocomplete: "off", placeholder: t('simple_form.labels.defaults.password'), required: true, input_html: { 'aria-label' => t('simple_form.labels.defaults.password') }
+ = f.input :password_confirmation, autocomplete: "off", placeholder: t('simple_form.labels.defaults.confirm_password'), required: true, input_html: { 'aria-label' => t('simple_form.labels.defaults.confirm_password') }
- .actions
- = f.button :button, t('about.get_started'), type: :submit
+ .actions
+ = f.button :button, t('about.get_started'), type: :submit
- .info
- = link_to t('auth.login'), new_user_session_path, class: 'webapp-btn'
- ·
- = link_to t('about.about_this'), about_more_path
+ .info
+ = link_to t('auth.login'), new_user_session_path, class: 'webapp-btn'
+ ·
+ = link_to t('about.about_this'), about_more_path
+ - else
+ .closed-registrations-message
+ - if @closed_registrations_message.blank?
+ %p= t('about.closed_registrations')
+ - else
+ = @closed_registrations_message.html_safe
+ .info
+ = link_to t('auth.login'), new_user_session_path, class: 'webapp-btn'
+ ·
+ = link_to t('about.other_instances'), 'https://github.com/tootsuite/mastodon/blob/master/docs/Using-Mastodon/List-of-Mastodon-instances.md'
+ ·
+ = link_to t('about.about_this'), about_more_path
%h3= t('about.features_headline')
diff --git a/app/views/admin/settings/index.html.haml b/app/views/admin/settings/index.html.haml
@@ -38,3 +38,15 @@
%br/
You can use HTML tags
%td= best_in_place @settings['site_extended_description'], :value, as: :textarea, url: admin_setting_path(@settings['site_extended_description'])
+ %tr
+ %td
+ %strong Open registration
+ %td= best_in_place @settings['open_registrations'], :value, as: :checkbox, collection: { false: 'Disabled', true: 'Enabled'}, url: admin_setting_path(@settings['open_registrations'])
+ %tr
+ %td
+ %strong Closed registration message
+ %br/
+ Displayed on frontpage when registrations are closed
+ %br/
+ You can use HTML tags
+ %td= best_in_place @settings['closed_registrations_message'], :value, as: :textarea, url: admin_setting_path(@settings['closed_registrations_message'])
diff --git a/config/locales/en.yml b/config/locales/en.yml
@@ -6,6 +6,7 @@ en:
apps: Apps
business_email: 'Business e-mail:'
contact: Contact
+ closed_registrations: Registrations are currently closed on this instance.
description_headline: What is %{domain}?
domain_count_after: other instances
domain_count_before: Connected to
diff --git a/config/settings.yml b/config/settings.yml
@@ -5,6 +5,8 @@ defaults: &defaults
site_extended_description: ''
site_contact_username: ''
site_contact_email: ''
+ open_registrations: true
+ closed_registrations_message: ''
notification_emails:
follow: false
reblog: false
@@ -15,6 +17,7 @@ defaults: &defaults
interactions:
must_be_follower: false
must_be_following: false
+
development:
<<: *defaults