Skip to content

Commit f820ccc

Browse files
committed
Use same logic for finding user as a custom field (#950).
git-svn-id: http://svn.redmine.org/redmine/trunk@14503 e93f8b46-1217-0410-a6f0-8f06a7374b81
1 parent 9c8c1cd commit f820ccc

File tree

3 files changed

+39
-15
lines changed

3 files changed

+39
-15
lines changed

app/models/custom_field.rb

Lines changed: 1 addition & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -141,19 +141,7 @@ def cast_value(value)
141141
end
142142

143143
def value_from_keyword(keyword, customized)
144-
possible_values_options = possible_values_options(customized)
145-
if possible_values_options.present?
146-
keyword = keyword.to_s
147-
if v = possible_values_options.detect {|text, id| keyword.casecmp(text) == 0}
148-
if v.is_a?(Array)
149-
v.last
150-
else
151-
v
152-
end
153-
end
154-
else
155-
keyword
156-
end
144+
format.value_from_keyword(self, keyword, customized)
157145
end
158146

159147
# Returns a ORDER BY clause that can used to sort customized

lib/redmine/field_format.rb

Lines changed: 28 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -126,6 +126,22 @@ def possible_values_options(custom_field, object=nil)
126126
[]
127127
end
128128

129+
def value_from_keyword(custom_field, keyword, object)
130+
possible_values_options = possible_values_options(custom_field, object)
131+
if possible_values_options.present?
132+
keyword = keyword.to_s
133+
if v = possible_values_options.detect {|text, id| keyword.casecmp(text) == 0}
134+
if v.is_a?(Array)
135+
v.last
136+
else
137+
v
138+
end
139+
end
140+
else
141+
keyword
142+
end
143+
end
144+
129145
# Returns the validation errors for custom_field
130146
# Should return an empty array if custom_field is valid
131147
def validate_custom_field(custom_field)
@@ -659,9 +675,13 @@ class UserFormat < RecordList
659675
field_attributes :user_role
660676

661677
def possible_values_options(custom_field, object=nil)
678+
possible_values_records(custom_field, object).map {|u| [u.name, u.id.to_s]}
679+
end
680+
681+
def possible_values_records(custom_field, object=nil)
662682
if object.is_a?(Array)
663683
projects = object.map {|o| o.respond_to?(:project) ? o.project : nil}.compact.uniq
664-
projects.map {|project| possible_values_options(custom_field, project)}.reduce(:&) || []
684+
projects.map {|project| possible_values_records(custom_field, project)}.reduce(:&) || []
665685
elsif object.respond_to?(:project) && object.project
666686
scope = object.project.users
667687
if custom_field.user_role.is_a?(Array)
@@ -670,12 +690,18 @@ def possible_values_options(custom_field, object=nil)
670690
scope = scope.where("#{Member.table_name}.id IN (SELECT DISTINCT member_id FROM #{MemberRole.table_name} WHERE role_id IN (?))", role_ids)
671691
end
672692
end
673-
scope.sorted.collect {|u| [u.to_s, u.id.to_s]}
693+
scope.sorted
674694
else
675695
[]
676696
end
677697
end
678698

699+
def value_from_keyword(custom_field, keyword, object)
700+
users = possible_values_records(custom_field, object).to_a
701+
user = Principal.detect_by_keyword(users, keyword)
702+
user ? user.id : nil
703+
end
704+
679705
def before_custom_field_save(custom_field)
680706
super
681707
if custom_field.user_role.is_a?(Array)

test/unit/issue_import_test.rb

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,16 @@ def test_assignee_should_be_set
7878
assert_equal [User.find(3), nil, nil], issues.map(&:assigned_to)
7979
end
8080

81+
def test_user_custom_field_should_be_set
82+
field = IssueCustomField.generate!(:field_format => 'user', :is_for_all => true, :trackers => Tracker.all)
83+
import = generate_import_with_mapping
84+
import.mapping.merge!("cf_#{field.id}" => '11')
85+
import.save!
86+
87+
issues = new_records(Issue, 3) { import.run }
88+
assert_equal '3', issues.first.custom_field_value(field)
89+
end
90+
8191
def test_is_private_should_be_set_based_on_user_locale
8292
import = generate_import_with_mapping
8393
import.mapping.merge!('is_private' => '6')

0 commit comments

Comments
 (0)