From 10c460fa869d4ebe6d3dd4512462dfdaaf78a292 Mon Sep 17 00:00:00 2001 From: Holger Just Date: Wed, 15 Jun 2016 19:18:55 +0200 Subject: [PATCH] Allow global versions to be shown outside of a project for version custom fields --- lib/redmine/field_format.rb | 21 ++++++++++++++------- .../field_format/version_field_format_test.rb | 9 +++++++++ 2 files changed, 23 insertions(+), 7 deletions(-) diff --git a/lib/redmine/field_format.rb b/lib/redmine/field_format.rb index 7701457..8742209 100644 --- a/lib/redmine/field_format.rb +++ b/lib/redmine/field_format.rb @@ -802,17 +802,24 @@ module Redmine projects.map {|project| possible_values_options(custom_field, project)}.reduce(:&) || [] elsif object.respond_to?(:project) && object.project scope = object.project.shared_versions - if !all_statuses && custom_field.version_status.is_a?(Array) - statuses = custom_field.version_status.map(&:to_s).reject(&:blank?) - if statuses.any? - scope = scope.where(:status => statuses.map(&:to_s)) - end - end - scope.sort.collect {|u| [u.to_s, u.id.to_s]} + filtered_versions_options(custom_field, scope, all_statuses) + elsif object.nil? + scope = Version.visible.where(:sharing => 'system') + filtered_versions_options(custom_field, scope, all_statuses) else [] end end + + def filtered_versions_options(custom_field, scope, all_statuses=false) + if !all_statuses && custom_field.version_status.is_a?(Array) + statuses = custom_field.version_status.map(&:to_s).reject(&:blank?) + if statuses.any? + scope = scope.where(:status => statuses.map(&:to_s)) + end + end + scope.sort.collect{|u| [u.to_s, u.id.to_s] } + end end end end diff --git a/test/unit/lib/redmine/field_format/version_field_format_test.rb b/test/unit/lib/redmine/field_format/version_field_format_test.rb index 1918951..00f75e8 100644 --- a/test/unit/lib/redmine/field_format/version_field_format_test.rb +++ b/test/unit/lib/redmine/field_format/version_field_format_test.rb @@ -52,6 +52,15 @@ class Redmine::VersionFieldFormatTest < ActionView::TestCase assert_equal expected, field.possible_values_options(project).map(&:first) end + def test_possible_values_options_should_return_system_shared_versions_without_project + field = IssueCustomField.new(:field_format => 'version') + version = Version.generate!(:project => Project.find(1), :status => 'open', :sharing => 'system') + + expected = Version.visible.where(:sharing => 'system').sort.map(&:name) + assert_include version.name, expected + assert_equal expected, field.possible_values_options.map(&:first) + end + def test_possible_values_options_should_return_project_versions_with_selected_status field = IssueCustomField.new(:field_format => 'version', :version_status => ["open"]) project = Project.find(1) -- 2.9.0