setting.rb 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. # Copyright (C) 2012-2014 Zammad Foundation, http://zammad-foundation.org/
  2. class Setting < ApplicationModel
  3. store :options
  4. store :state
  5. store :state_initial
  6. before_create :state_check, :set_initial
  7. before_update :state_check
  8. after_create :delete_cache
  9. after_update :delete_cache
  10. @@current = {}
  11. def self.load
  12. # check if config is already generated
  13. return @@current[:settings_config] if @@current[:settings_config]
  14. # read all config settings
  15. config = {}
  16. Setting.select('name, state').order(:id).each { |setting|
  17. config[setting.name] = setting.state[:value]
  18. }
  19. # config lookups
  20. config.each { |key, value|
  21. next if value.class.to_s != 'String'
  22. config[key].gsub!( /\#\{config\.(.+?)\}/ ) { |s|
  23. s = config[$1].to_s
  24. }
  25. }
  26. # store for class requests
  27. @@current[:settings_config] = config
  28. return config
  29. end
  30. def self.set(name, value)
  31. setting = Setting.where( :name => name ).first
  32. if !setting
  33. raise "Can't find config setting '#{name}'"
  34. end
  35. setting.state = { :value => value }
  36. setting.save
  37. logger.info "Setting.set() name:#{name}, value:#{value.inspect}"
  38. end
  39. def self.get(name)
  40. self.load
  41. return @@current[:settings_config][name]
  42. end
  43. private
  44. def delete_cache
  45. @@current[:settings_config] = nil
  46. end
  47. def set_initial
  48. self.state_initial = self.state
  49. end
  50. def state_check
  51. if self.state || self.state == false
  52. if !self.state.respond_to?('has_key?') || !self.state.has_key?(:value)
  53. self.state = { :value => self.state }
  54. end
  55. end
  56. end
  57. end