From a18c719fcc9cf2bf44bed59944ae1ad349dce970 Mon Sep 17 00:00:00 2001 From: Jean-Philippe Lang Date: Sat, 10 Jan 2015 13:03:52 +0000 Subject: [PATCH] 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 --- app/helpers/custom_fields_helper.rb | 11 +++++++++++ app/views/projects/show.html.erb | 6 ++---- app/views/versions/_overview.html.erb | 6 ++---- test/functional/projects_controller_test.rb | 12 ++++++++++++ 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 @@
  • <%=l(:label_subproject_plural)%>: <%= @subprojects.collect{|p| link_to p, project_path(p)}.join(", ").html_safe %>
  • <% end %> - <% @project.visible_custom_field_values.each do |custom_value| %> - <% if !custom_value.value.blank? %> -
  • <%=h custom_value.custom_field.name %>: <%=h show_value(custom_value) %>
  • - <% end %> + <% render_custom_field_values(@project) do |custom_field, formatted| %> +
  • <%= custom_field.name %>: <%= formatted %>
  • <% end %> 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 @@

    <%=h version.description %>

    <% if version.custom_field_values.any? %> <% 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) -- 2.39.5