summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJean-Philippe Lang <jp_lang@yahoo.fr>2015-01-10 13:03:52 +0000
committerJean-Philippe Lang <jp_lang@yahoo.fr>2015-01-10 13:03:52 +0000
commita18c719fcc9cf2bf44bed59944ae1ad349dce970 (patch)
tree3e9f836b1c3edda9f6decb095509e58e1e02c01f
parenta77d884157439c226342e789f13bd6bfe8dd4227 (diff)
downloadredmine-a18c719fcc9cf2bf44bed59944ae1ad349dce970.tar.gz
redmine-a18c719fcc9cf2bf44bed59944ae1ad349dce970.zip
Fixed: Custom field is rendered, even if its value is empty (for multiple) (#18654).
git-svn-id: http://svn.redmine.org/redmine/trunk@13864 e93f8b46-1217-0410-a6f0-8f06a7374b81
-rw-r--r--app/helpers/custom_fields_helper.rb11
-rw-r--r--app/views/projects/show.html.erb6
-rw-r--r--app/views/versions/_overview.html.erb6
-rw-r--r--test/functional/projects_controller_test.rb12
4 files changed, 27 insertions, 8 deletions
diff --git a/app/helpers/custom_fields_helper.rb b/app/helpers/custom_fields_helper.rb
index 5153c1489..ca37a2bc0 100644
--- a/app/helpers/custom_fields_helper.rb
+++ b/app/helpers/custom_fields_helper.rb
@@ -117,6 +117,17 @@ module CustomFieldsHelper
Redmine::FieldFormat.as_select(custom_field.class.customized_class.name)
end
+ # Yields the given block for each custom field value of object that should be
+ # displayed, with the custom field and the formatted value as arguments
+ def render_custom_field_values(object, &block)
+ object.visible_custom_field_values.each do |custom_value|
+ formatted = show_value(custom_value)
+ if formatted.present?
+ yield custom_value.custom_field, formatted
+ end
+ end
+ end
+
# Renders the custom_values in api views
def render_api_custom_values(custom_values, api)
api.array :custom_fields do
diff --git a/app/views/projects/show.html.erb b/app/views/projects/show.html.erb
index b4b563a37..addcfdf62 100644
--- a/app/views/projects/show.html.erb
+++ b/app/views/projects/show.html.erb
@@ -31,10 +31,8 @@
<li><span class="label"><%=l(:label_subproject_plural)%>:</span>
<%= @subprojects.collect{|p| link_to p, project_path(p)}.join(", ").html_safe %></li>
<% end %>
- <% @project.visible_custom_field_values.each do |custom_value| %>
- <% if !custom_value.value.blank? %>
- <li><span class="label"><%=h custom_value.custom_field.name %>:</span> <%=h show_value(custom_value) %></li>
- <% end %>
+ <% render_custom_field_values(@project) do |custom_field, formatted| %>
+ <li><span class="label"><%= custom_field.name %>:</span> <%= formatted %></li>
<% end %>
</ul>
diff --git a/app/views/versions/_overview.html.erb b/app/views/versions/_overview.html.erb
index 616e1acdc..c3d359bb9 100644
--- a/app/views/versions/_overview.html.erb
+++ b/app/views/versions/_overview.html.erb
@@ -7,10 +7,8 @@
<p><%=h version.description %></p>
<% if version.custom_field_values.any? %>
<ul>
- <% version.custom_field_values.each do |custom_value| %>
- <% if custom_value.value.present? %>
- <li><%=h custom_value.custom_field.name %>: <%=h show_value(custom_value) %></li>
- <% end %>
+ <% render_custom_field_values(version) do |custom_field, formatted| %>
+ <li><span class="label"><%= custom_field.name %>:</span> <%= formatted %></li>
<% end %>
</ul>
<% end %>
diff --git a/test/functional/projects_controller_test.rb b/test/functional/projects_controller_test.rb
index 8e209002d..7ca53d9bd 100644
--- a/test/functional/projects_controller_test.rb
+++ b/test/functional/projects_controller_test.rb
@@ -351,6 +351,18 @@ class ProjectsControllerTest < ActionController::TestCase
assert_select 'li', :text => /Development status/, :count => 0
end
+ def test_show_should_not_display_blank_custom_fields_with_multiple_values
+ f1 = ProjectCustomField.generate! :field_format => 'list', :possible_values => %w(Foo Bar), :multiple => true
+ f2 = ProjectCustomField.generate! :field_format => 'list', :possible_values => %w(Baz Qux), :multiple => true
+ project = Project.generate!(:custom_field_values => {f2.id.to_s => %w(Qux)})
+
+ get :show, :id => project.id
+ assert_response :success
+
+ assert_select 'li', :text => /#{f1.name}/, :count => 0
+ assert_select 'li', :text => /#{f2.name}/
+ end
+
def test_show_should_not_fail_when_custom_values_are_nil
project = Project.find_by_identifier('ecookbook')
project.custom_values.first.update_attribute(:value, nil)