settings_controller.rb 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107
  1. # Copyright (C) 2012-2023 Zammad Foundation, https://zammad-foundation.org/
  2. class SettingsController < ApplicationController
  3. prepend_before_action :authenticate_and_authorize!
  4. # GET /settings
  5. def index
  6. list = []
  7. Setting.all.each do |setting|
  8. next if !authorized?(setting, :show?)
  9. list.push setting
  10. end
  11. render json: list, status: :ok
  12. end
  13. # GET /settings/1
  14. def show
  15. model_show_render(Setting, params)
  16. end
  17. # POST /settings
  18. def create
  19. raise Exceptions::Forbidden, __('Not authorized (feature not possible)')
  20. end
  21. # PUT /settings/1
  22. def update
  23. clean_params = keep_certain_attributes
  24. name = Setting.find(params[:id]).name
  25. Zammad::Restart.perform if %w[http_type fqdn].include?(name)
  26. model_update_render(Setting, clean_params)
  27. end
  28. # PUT /settings/image/:id
  29. def update_image
  30. clean_params = keep_certain_attributes
  31. if !clean_params[:logo]
  32. render json: {
  33. result: 'invalid',
  34. message: __('Need logo param'),
  35. }
  36. return
  37. end
  38. setting = Setting.lookup(name: 'product_logo')
  39. if (logo_timestamp = Service::SystemAssets::ProductLogo.store(params[:logo], params[:logo_resize]))
  40. setting.state = logo_timestamp
  41. setting.save!
  42. else
  43. render json: {
  44. result: 'invalid',
  45. message: __('The uploaded image could not be processed. Need data:image in logo or logo_resize param.'),
  46. }
  47. end
  48. render json: {
  49. result: 'ok',
  50. settings: [setting],
  51. }
  52. end
  53. # DELETE /settings/1
  54. def destroy
  55. raise Exceptions::Forbidden, __('Not authorized (feature not possible)')
  56. end
  57. # POST /settings/reset/1
  58. def reset
  59. setting = Setting.find(params[:id])
  60. Setting.reset(setting.name)
  61. setting.reload
  62. if response_expand?
  63. render json: setting.attributes_with_association_names, status: :ok
  64. return
  65. end
  66. if response_full?
  67. render json: setting.class.full(setting.id), status: :ok
  68. return
  69. end
  70. render json: setting.attributes_with_association_ids, status: :ok
  71. end
  72. private
  73. def keep_certain_attributes
  74. setting = Setting.find(params[:id])
  75. %i[name area state_initial frontend options].each do |key|
  76. params.delete(key)
  77. end
  78. if params[:preferences].present?
  79. %i[online_service_disable permission render].each do |key|
  80. params[:preferences].delete(key)
  81. end
  82. params[:preferences].merge!(setting.preferences)
  83. end
  84. params
  85. end
  86. end