2014-02-03 19:23:00 +00:00
|
|
|
# Copyright (C) 2012-2014 Zammad Foundation, http://zammad-foundation.org/
|
2013-06-12 15:59:58 +00:00
|
|
|
|
2012-09-20 12:08:02 +00:00
|
|
|
class Setting < ApplicationModel
|
2012-04-13 13:51:10 +00:00
|
|
|
store :options
|
|
|
|
store :state
|
|
|
|
store :state_initial
|
2015-07-12 02:12:27 +00:00
|
|
|
store :preferences
|
2013-01-24 00:37:27 +00:00
|
|
|
before_create :state_check, :set_initial
|
|
|
|
before_update :state_check
|
2013-01-07 08:33:07 +00:00
|
|
|
after_create :delete_cache
|
|
|
|
after_update :delete_cache
|
2012-04-10 14:06:46 +00:00
|
|
|
|
2015-05-08 13:47:27 +00:00
|
|
|
@@current = {} # rubocop:disable Style/ClassVars
|
2013-03-19 00:46:49 +00:00
|
|
|
|
2012-04-10 14:06:46 +00:00
|
|
|
def self.load
|
2012-07-28 16:37:18 +00:00
|
|
|
|
2012-04-13 13:51:10 +00:00
|
|
|
# check if config is already generated
|
2013-03-19 00:46:49 +00:00
|
|
|
return @@current[:settings_config] if @@current[:settings_config]
|
2012-07-28 16:37:18 +00:00
|
|
|
|
2012-04-13 13:51:10 +00:00
|
|
|
# read all config settings
|
2012-04-10 14:06:46 +00:00
|
|
|
config = {}
|
|
|
|
Setting.select('name, state').order(:id).each { |setting|
|
|
|
|
config[setting.name] = setting.state[:value]
|
|
|
|
}
|
2012-07-28 16:37:18 +00:00
|
|
|
|
2012-04-13 13:51:10 +00:00
|
|
|
# config lookups
|
|
|
|
config.each { |key, value|
|
|
|
|
next if value.class.to_s != 'String'
|
2015-05-07 09:49:46 +00:00
|
|
|
|
|
|
|
config[key].gsub!( /\#\{config\.(.+?)\}/ ) {
|
|
|
|
config[$1].to_s
|
2012-04-13 13:51:10 +00:00
|
|
|
}
|
|
|
|
}
|
2012-07-28 16:37:18 +00:00
|
|
|
|
2012-04-13 13:51:10 +00:00
|
|
|
# store for class requests
|
2013-03-19 00:46:49 +00:00
|
|
|
@@current[:settings_config] = config
|
2015-04-30 17:20:27 +00:00
|
|
|
config
|
2012-04-10 14:06:46 +00:00
|
|
|
end
|
|
|
|
|
2012-12-24 13:55:43 +00:00
|
|
|
def self.set(name, value)
|
2015-05-07 10:15:40 +00:00
|
|
|
setting = Setting.find_by( name: name )
|
2012-12-24 13:55:43 +00:00
|
|
|
if !setting
|
2015-05-07 11:27:07 +00:00
|
|
|
fail "Can't find config setting '#{name}'"
|
2012-12-24 13:55:43 +00:00
|
|
|
end
|
2015-04-27 13:42:53 +00:00
|
|
|
setting.state = { value: value }
|
2012-12-24 13:55:43 +00:00
|
|
|
setting.save
|
2014-10-26 12:17:00 +00:00
|
|
|
logger.info "Setting.set() name:#{name}, value:#{value.inspect}"
|
2012-12-24 13:55:43 +00:00
|
|
|
end
|
|
|
|
|
2012-04-10 14:06:46 +00:00
|
|
|
def self.get(name)
|
2015-05-07 12:10:38 +00:00
|
|
|
load
|
2015-04-30 17:20:27 +00:00
|
|
|
@@current[:settings_config][name]
|
2012-04-10 14:06:46 +00:00
|
|
|
end
|
2012-07-28 16:37:18 +00:00
|
|
|
|
2015-07-07 05:56:31 +00:00
|
|
|
def self.reset(name)
|
|
|
|
setting = Setting.find_by( name: name )
|
|
|
|
if !setting
|
|
|
|
fail "Can't find config setting '#{name}'"
|
|
|
|
end
|
|
|
|
setting.state = setting.state_initial
|
|
|
|
setting.save
|
|
|
|
logger.info "Setting.reset() name:#{name}, value:#{setting.state.inspect}"
|
|
|
|
load
|
|
|
|
@@current[:settings_config][name]
|
|
|
|
end
|
|
|
|
|
2012-04-10 14:06:46 +00:00
|
|
|
private
|
2015-05-01 12:31:46 +00:00
|
|
|
|
2013-06-12 15:59:58 +00:00
|
|
|
def delete_cache
|
|
|
|
@@current[:settings_config] = nil
|
|
|
|
end
|
2015-05-07 10:27:12 +00:00
|
|
|
|
2013-06-12 15:59:58 +00:00
|
|
|
def set_initial
|
2015-05-07 12:10:38 +00:00
|
|
|
self.state_initial = state
|
2013-06-12 15:59:58 +00:00
|
|
|
end
|
2015-05-07 10:27:12 +00:00
|
|
|
|
2013-06-12 15:59:58 +00:00
|
|
|
def state_check
|
2015-04-30 15:25:04 +00:00
|
|
|
|
2015-05-07 12:10:38 +00:00
|
|
|
return if !(state || state == false)
|
2015-04-30 15:25:04 +00:00
|
|
|
|
2015-05-07 12:10:38 +00:00
|
|
|
return if !( !state.respond_to?('has_key?') || !state.key?(:value) )
|
2015-04-30 15:25:04 +00:00
|
|
|
|
2015-05-07 12:10:38 +00:00
|
|
|
self.state = { value: state }
|
2013-06-12 15:59:58 +00:00
|
|
|
end
|
2012-04-10 14:06:46 +00:00
|
|
|
end
|