Defect #44610 » 0001-Keep-values-of-spent-time-custom-fields-not-visible-.patch
| app/models/time_entry.rb | ||
|---|---|---|
| 126 | 126 | |
| 127 | 127 |
def safe_attributes=(attrs, user=User.current) |
| 128 | 128 |
if attrs |
| 129 |
previous_custom_field_values = custom_field_values.map(&:dup) |
|
| 129 | 130 |
attrs = super(attrs) |
| 130 | 131 |
if issue_id_changed? && issue |
| 131 | 132 |
if issue.visible?(user) && user.allowed_to?(:log_time, issue.project) |
| ... | ... | |
| 150 | 151 |
@invalid_user_id = nil |
| 151 | 152 |
end |
| 152 | 153 | |
| 153 |
# Delete assigned custom fields not visible by the user |
|
| 154 |
editable_custom_field_ids = editable_custom_field_values(user).map {|v| v.custom_field_id.to_s}
|
|
| 155 |
self.custom_field_values.delete_if do |c| |
|
| 156 |
!editable_custom_field_ids.include?(c.custom_field.id.to_s) |
|
| 154 |
# Restore custom field values not visible by the user |
|
| 155 |
editable_custom_field_ids = editable_custom_field_values(user).map(&:custom_field_id) |
|
| 156 |
custom_field_values.map!.with_index do |custom_field_value, i| |
|
| 157 |
if editable_custom_field_ids.include?(custom_field_value.custom_field_id) |
|
| 158 |
custom_field_value |
|
| 159 |
else |
|
| 160 |
previous_custom_field_values[i] |
|
| 161 |
end |
|
| 157 | 162 |
end |
| 158 | 163 |
end |
| 159 | 164 | |
| test/unit/time_entry_custom_field_test.rb | ||
|---|---|---|
| 70 | 70 |
assert_equal 'valuea', time_entry.custom_field_value(cf1) |
| 71 | 71 |
assert_nil time_entry.custom_field_value(cf2) |
| 72 | 72 |
end |
| 73 | ||
| 74 |
def test_safe_attributes_should_keep_values_of_custom_fields_not_visible_to_user |
|
| 75 |
field = TimeEntryCustomField.create!(:name => 'Non visible field', |
|
| 76 |
:field_format => 'string', |
|
| 77 |
:visible => false, :role_ids => [1]) |
|
| 78 |
time_entry = TimeEntry.generate!(:project_id => 1, :user_id => 3, :author_id => 3) |
|
| 79 |
time_entry.custom_field_values = {field.id.to_s => 'Foo'}
|
|
| 80 |
time_entry.save! |
|
| 81 | ||
| 82 |
time_entry.send :safe_attributes=, {
|
|
| 83 |
'comments' => 'Updated', |
|
| 84 |
'custom_field_values' => {field.id.to_s => 'Bar'}
|
|
| 85 |
}, User.find(3) |
|
| 86 |
time_entry.save! |
|
| 87 | ||
| 88 |
assert_equal 'Foo', time_entry.reload.custom_field_value(field) |
|
| 89 |
end |
|
| 73 | 90 |
end |
- « Previous
- 1
- 2
- Next »