diff options
author | Jean-Philippe Lang <jp_lang@yahoo.fr> | 2013-10-05 09:41:11 +0000 |
---|---|---|
committer | Jean-Philippe Lang <jp_lang@yahoo.fr> | 2013-10-05 09:41:11 +0000 |
commit | a77b462a53a02dbead1042bd12060177ade7b22a (patch) | |
tree | 4d58c8dee5c021a8dd1af32a8fbe741e3c6ea1d0 /app/models/setting.rb | |
parent | b59d10968036b7da57a499895a9a2d91ea227c34 (diff) | |
download | redmine-a77b462a53a02dbead1042bd12060177ade7b22a.tar.gz redmine-a77b462a53a02dbead1042bd12060177ade7b22a.zip |
Support for multiple issue update keywords/rules in commit messages (#4911).
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@12197 e93f8b46-1217-0410-a6f0-8f06a7374b81
Diffstat (limited to 'app/models/setting.rb')
-rw-r--r-- | app/models/setting.rb | 74 |
1 files changed, 73 insertions, 1 deletions
diff --git a/app/models/setting.rb b/app/models/setting.rb index a0ab18b5b..71ef15208 100644 --- a/app/models/setting.rb +++ b/app/models/setting.rb @@ -132,15 +132,87 @@ class Setting < ActiveRecord::Base def self.#{name}=(value) self[:#{name}] = value end - END_SRC +END_SRC class_eval src, __FILE__, __LINE__ end + # Sets a setting value from params + def self.set_from_params(name, params) + params = params.dup + params.delete_if {|v| v.blank? } if params.is_a?(Array) + + m = "#{name}_from_params" + if respond_to? m + self[name.to_sym] = send m, params + else + self[name.to_sym] = params + end + end + + # Returns a hash suitable for commit_update_keywords setting + # + # Example: + # params = {:keywords => ['fixes', 'closes'], :status_id => ["3", "5"], :done_ratio => ["", "100"]} + # Setting.commit_update_keywords_from_params(params) + # # => {'fixes' => {'status_id' => "3"}, 'closes' => {'status_id' => "5", 'done_ratio' => "100"}} + def self.commit_update_keywords_from_params(params) + s = {} + if params.is_a?(Hash) && params.key?(:keywords) && params.values.all? {|v| v.is_a? Array} + attributes = params.except(:keywords).keys + params[:keywords].each_with_index do |keywords, i| + next if keywords.blank? + s[keywords] = attributes.inject({}) {|h, a| + value = params[a][i].to_s + h[a.to_s] = value if value.present? + h + } + end + end + s + end + # Helper that returns an array based on per_page_options setting def self.per_page_options_array per_page_options.split(%r{[\s,]}).collect(&:to_i).select {|n| n > 0}.sort end + # Helper that returns a Hash with single update keywords as keys + def self.commit_update_by_keyword + h = {} + if commit_update_keywords.is_a?(Hash) + commit_update_keywords.each do |keywords, attribute_updates| + next unless attribute_updates.is_a?(Hash) + attribute_updates = attribute_updates.dup + attribute_updates.delete_if {|k, v| v.blank?} + keywords.to_s.split(",").map(&:strip).reject(&:blank?).each do |keyword| + h[keyword.downcase] = attribute_updates + end + end + end + h + end + + def self.commit_fix_keywords + ActiveSupport::Deprecation.warn "Setting.commit_fix_keywords is deprecated and will be removed in Redmine 3" + if commit_update_keywords.is_a?(Hash) + commit_update_keywords.keys.first + end + end + + def self.commit_fix_status_id + ActiveSupport::Deprecation.warn "Setting.commit_fix_status_id is deprecated and will be removed in Redmine 3" + if commit_update_keywords.is_a?(Hash) + commit_update_keywords[commit_fix_keywords]['status_id'] + end + end + + def self.commit_fix_done_ratio + ActiveSupport::Deprecation.warn "Setting.commit_fix_done_ratio is deprecated and will be removed in Redmine 3" + if commit_update_keywords.is_a?(Hash) + commit_update_keywords[commit_fix_keywords]['done_ratio'] + end + end + def self.openid? Object.const_defined?(:OpenID) && self[:openid].to_i > 0 end |