about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--app/controllers/settings/deletes_controller.rb5
-rw-r--r--app/helpers/application_helper.rb4
-rw-r--r--app/views/auth/registrations/edit.html.haml7
-rw-r--r--config/settings.yml1
-rw-r--r--spec/controllers/settings/deletes_controller_spec.rb14
5 files changed, 28 insertions, 3 deletions
diff --git a/app/controllers/settings/deletes_controller.rb b/app/controllers/settings/deletes_controller.rb
index dd18b4c2f..80002b995 100644
--- a/app/controllers/settings/deletes_controller.rb
+++ b/app/controllers/settings/deletes_controller.rb
@@ -3,6 +3,7 @@
 class Settings::DeletesController < ApplicationController
   layout 'admin'
 
+  before_action :check_enabled_deletion
   before_action :authenticate_user!
 
   def show
@@ -21,6 +22,10 @@ class Settings::DeletesController < ApplicationController
 
   private
 
+  def check_enabled_deletion
+    redirect_to root_path unless Setting.open_deletion
+  end
+
   def delete_params
     params.require(:form_delete_confirmation).permit(:password)
   end
diff --git a/app/helpers/application_helper.rb b/app/helpers/application_helper.rb
index 42f6ab3db..36c37fae0 100644
--- a/app/helpers/application_helper.rb
+++ b/app/helpers/application_helper.rb
@@ -13,6 +13,10 @@ module ApplicationHelper
     Setting.open_registrations
   end
 
+  def open_deletion?
+    Setting.open_deletion
+  end
+
   def add_rtl_body_class(other_classes)
     other_classes = "#{other_classes} rtl" if [:ar, :fa, :he].include?(I18n.locale)
     other_classes
diff --git a/app/views/auth/registrations/edit.html.haml b/app/views/auth/registrations/edit.html.haml
index cbaa75ae0..38d4349cb 100644
--- a/app/views/auth/registrations/edit.html.haml
+++ b/app/views/auth/registrations/edit.html.haml
@@ -12,7 +12,8 @@
   .actions
     = f.button :button, t('generic.save_changes'), type: :submit
 
-%hr/
+- if open_deletion?
+  %hr/
 
-%h6= t('auth.delete_account')
-%p.muted-hint= t('auth.delete_account_html', path: settings_delete_path)
+  %h6= t('auth.delete_account')
+  %p.muted-hint= t('auth.delete_account_html', path: settings_delete_path)
diff --git a/config/settings.yml b/config/settings.yml
index bffb7052a..7b78b6cdb 100644
--- a/config/settings.yml
+++ b/config/settings.yml
@@ -14,6 +14,7 @@ defaults: &defaults
   site_contact_email: ''
   open_registrations: true
   closed_registrations_message: ''
+  open_deletion: true
   boost_modal: false
   auto_play_gif: true
   delete_modal: true
diff --git a/spec/controllers/settings/deletes_controller_spec.rb b/spec/controllers/settings/deletes_controller_spec.rb
index b9c7c3068..9b55090df 100644
--- a/spec/controllers/settings/deletes_controller_spec.rb
+++ b/spec/controllers/settings/deletes_controller_spec.rb
@@ -68,5 +68,19 @@ describe Settings::DeletesController do
         expect(response).to redirect_to '/auth/sign_in'
       end
     end
+
+    context do
+      around do |example|
+        open_deletion = Setting.open_deletion
+        example.run
+        Setting.open_deletion = open_deletion
+      end
+
+      it 'redirects' do
+        Setting.open_deletion = false
+        delete :destroy
+        expect(response).to redirect_to root_path
+      end
+    end
   end
 end