settings_controller.rb 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101
  1. # Copyright (C) 2012-2014 Zammad Foundation, http://zammad-foundation.org/
  2. class SettingsController < ApplicationController
  3. before_action :authentication_check
  4. # GET /settings
  5. def index
  6. return if deny_if_not_role(Z_ROLENAME_ADMIN)
  7. model_index_render(Setting, params)
  8. end
  9. # GET /settings/1
  10. def show
  11. return if deny_if_not_role(Z_ROLENAME_ADMIN)
  12. model_show_render(Setting, params)
  13. end
  14. # POST /settings
  15. def create
  16. return if deny_if_not_role(Z_ROLENAME_ADMIN)
  17. model_create_render(Setting, params)
  18. end
  19. # PUT /settings/1
  20. def update
  21. return if deny_if_not_role(Z_ROLENAME_ADMIN)
  22. return if !check_access
  23. model_update_render(Setting, params)
  24. end
  25. # PUT /settings/image/:id
  26. def update_image
  27. return if deny_if_not_role(Z_ROLENAME_ADMIN)
  28. if !params[:logo]
  29. render json: {
  30. result: 'invalid',
  31. message: 'Need logo param',
  32. }
  33. return
  34. end
  35. # validate image
  36. if params[:logo] !~ /^data:image/i
  37. render json: {
  38. result: 'invalid',
  39. message: 'Invalid payload, need data:image in logo param',
  40. }
  41. return
  42. end
  43. # process image
  44. file = StaticAssets.data_url_attributes(params[:logo])
  45. if !file[:content] || !file[:mime_type]
  46. render json: {
  47. result: 'invalid',
  48. message: 'Unable to process image upload.',
  49. }
  50. return
  51. end
  52. # store image 1:1
  53. StaticAssets.store_raw(file[:content], file[:mime_type])
  54. # store resized image 1:1
  55. setting = Setting.find_by(name: 'product_logo')
  56. if params[:logo_resize] && params[:logo_resize] =~ /^data:image/i
  57. # data:image/png;base64
  58. file = StaticAssets.data_url_attributes(params[:logo_resize])
  59. # store image 1:1
  60. setting.state = StaticAssets.store(file[:content], file[:mime_type])
  61. setting.save
  62. end
  63. render json: {
  64. result: 'ok',
  65. settings: [setting],
  66. }
  67. end
  68. # DELETE /settings/1
  69. def destroy
  70. return if deny_if_not_role(Z_ROLENAME_ADMIN)
  71. return if !check_access
  72. model_destory_render(Setting, params)
  73. end
  74. private
  75. def check_access
  76. return true if !Setting.get('system_online_service')
  77. setting = Setting.find(params[:id])
  78. return true if setting.preferences && !setting.preferences[:online_service_disable]
  79. response_access_deny
  80. false
  81. end
  82. end