mirror of
https://github.com/chatwoot/chatwoot.git
synced 2026-06-04 21:02:35 +08:00
# Pull Request Template ## Description fixes: https://linear.app/chatwoot/issue/AI-151/captains-super-admin-config-dont-get-applied-into-rails-without ## Type of change - [x] Bug fix (non-breaking change which fixes an issue) ## How Has This Been Tested? Please describe the tests that you ran to verify your changes. Provide instructions so we can reproduce. Please also list any relevant details for your test configuration. specs and locally To test locally: go to super admin -> settings -> captain -> Change endpoint to something incorrect go to local app -> captain -> playground -> try chatting (should fail due to incorrect endpoint) now in super admin captain settings, set the correct endpoint then chat in playground. Now it should work. Current develop code doesn't reflect the changes in installation config for captain instantly, needs a server restart. ## Checklist: - [x] My code follows the style guidelines of this project - [x] I have performed a self-review of my code - [x] I have commented on my code, particularly in hard-to-understand areas - [ ] I have made corresponding changes to the documentation - [x] My changes generate no new warnings - [x] I have added tests that prove my fix is effective or that my feature works - [x] New and existing unit tests pass locally with my changes - [x] Any dependent changes have been merged and published in downstream modules
85 lines
2.8 KiB
Ruby
85 lines
2.8 KiB
Ruby
class SuperAdmin::InstallationConfigsController < SuperAdmin::ApplicationController
|
|
rescue_from ActiveRecord::RecordNotUnique, :with => :invalid_action_perfomed
|
|
# Overwrite any of the RESTful controller actions to implement custom behavior
|
|
# For example, you may want to send an email after a foo is updated.
|
|
#
|
|
# def update
|
|
# super
|
|
# send_foo_updated_email(requested_resource)
|
|
# end
|
|
|
|
# Override this method to specify custom lookup behavior.
|
|
# This will be used to set the resource for the `show`, `edit`, and `update`
|
|
# actions.
|
|
#
|
|
# def find_resource(param)
|
|
# Foo.find_by!(slug: param)
|
|
# end
|
|
|
|
# The result of this lookup will be available as `requested_resource`
|
|
|
|
# Override this if you have certain roles that require a subset
|
|
# this will be used to set the records shown on the `index` action.
|
|
#
|
|
def scoped_resource
|
|
resource_class.editable
|
|
end
|
|
|
|
def create
|
|
resource = new_resource(resource_params)
|
|
authorize_resource(resource)
|
|
|
|
if resource.save
|
|
redirect_to after_resource_created_path(resource), flash: success_flash(resource)
|
|
else
|
|
render :new, locals: {
|
|
page: Administrate::Page::Form.new(dashboard, resource)
|
|
}, status: :unprocessable_entity
|
|
end
|
|
end
|
|
|
|
def update
|
|
if requested_resource.update(resource_params)
|
|
redirect_to after_resource_updated_path(requested_resource), flash: success_flash(requested_resource)
|
|
else
|
|
render :edit, locals: {
|
|
page: Administrate::Page::Form.new(dashboard, requested_resource)
|
|
}, status: :unprocessable_entity
|
|
end
|
|
end
|
|
|
|
# Override `resource_params` if you want to transform the submitted
|
|
# data before it's persisted. For example, the following would turn all
|
|
# empty values into nil values. It uses other APIs such as `resource_class`
|
|
# and `dashboard`:
|
|
#
|
|
# def resource_params
|
|
# params.require(resource_class.model_name.param_key).
|
|
# permit(dashboard.permitted_attributes).
|
|
# transform_values { |value| value == "" ? nil : value }
|
|
# end
|
|
|
|
def resource_params
|
|
params.require(:installation_config)
|
|
.permit(:name, :value)
|
|
.transform_values { |value| value == '' ? nil : value }.merge(locked: false)
|
|
end
|
|
|
|
private
|
|
|
|
def success_flash(resource)
|
|
message = translate_with_resource('update.success')
|
|
message = translate_with_resource('create.success') if action_name == 'create'
|
|
return { notice: message } unless restart_required_config?(resource)
|
|
|
|
{ success: "#{message.delete_suffix('.')}. Restart Chatwoot web and worker processes to apply this change everywhere." }
|
|
end
|
|
|
|
def restart_required_config?(resource)
|
|
resource.name.in?(InstallationConfig::RESTART_REQUIRED_CONFIG_KEYS)
|
|
end
|
|
|
|
# See https://administrate-prototype.herokuapp.com/customizing_controller_actions
|
|
# for more information
|
|
end
|