From 7d6fe34c52ecbda0df84e2b6ffad897f8dd4915f Mon Sep 17 00:00:00 2001 From: Jean-Philippe Lang Date: Fri, 20 Dec 2019 08:51:01 +0000 Subject: [PATCH] Merged r19381 to 4.1-stable (#21766). git-svn-id: http://svn.redmine.org/redmine/branches/4.1-stable@19387 e93f8b46-1217-0410-a6f0-8f06a7374b81 --- app/controllers/imports_controller.rb | 2 +- app/models/import.rb | 10 +++++++- app/views/imports/new.html.erb | 1 + app/views/issues/index.html.erb | 2 +- app/views/timelog/index.html.erb | 2 +- test/functional/imports_controller_test.rb | 3 ++- test/unit/issue_import_test.rb | 28 ++++++++++++++++++++++ 7 files changed, 43 insertions(+), 5 deletions(-) diff --git a/app/controllers/imports_controller.rb b/app/controllers/imports_controller.rb index d73e98c01..633cc232c 100644 --- a/app/controllers/imports_controller.rb +++ b/app/controllers/imports_controller.rb @@ -36,7 +36,7 @@ class ImportsController < ApplicationController @import = import_type.new @import.user = User.current @import.file = params[:file] - @import.set_default_settings + @import.set_default_settings(:project_id => params[:project_id]) if @import.save redirect_to import_settings_path(@import) diff --git a/app/models/import.rb b/app/models/import.rb index 696cd4d38..3244b13e2 100644 --- a/app/models/import.rb +++ b/app/models/import.rb @@ -62,7 +62,7 @@ class Import < ActiveRecord::Base Redmine::Utils.save_upload(arg, filepath) end - def set_default_settings + def set_default_settings(options={}) separator = lu(user, :general_csv_separator) if file_exists? begin @@ -84,6 +84,14 @@ class Import < ActiveRecord::Base 'date_format' => date_format, 'notifications' => '0' ) + + if options.key?(:project_id) && !options[:project_id].blank? + # Do not fail if project doesn't exist + begin + project = Project.find(options[:project_id]) + self.settings.merge!('mapping' => {'project_id' => project.id}) + rescue; end + end end def to_param diff --git a/app/views/imports/new.html.erb b/app/views/imports/new.html.erb index 41b27d6c9..e7ca82428 100644 --- a/app/views/imports/new.html.erb +++ b/app/views/imports/new.html.erb @@ -2,6 +2,7 @@ <%= form_tag(imports_path, :multipart => true) do %> <%= hidden_field_tag 'type', @import.type %> + <%= hidden_field_tag 'project_id', params[:project_id] %>
<%= l(:label_select_file_to_import) %> (CSV)

diff --git a/app/views/issues/index.html.erb b/app/views/issues/index.html.erb index c3c339851..3377fd681 100644 --- a/app/views/issues/index.html.erb +++ b/app/views/issues/index.html.erb @@ -8,7 +8,7 @@ <% end %> <% if User.current.allowed_to?(:import_issues, @project, :global => true) %> - <%= link_to l(:button_import), new_issues_import_path %> + <%= link_to l(:button_import), new_issues_import_path(:project_id => @project) %> <% end %> <%= link_to_if_authorized l(:label_settings), diff --git a/app/views/timelog/index.html.erb b/app/views/timelog/index.html.erb index 1e243debb..c34a24409 100644 --- a/app/views/timelog/index.html.erb +++ b/app/views/timelog/index.html.erb @@ -4,7 +4,7 @@ :class => 'icon icon-time-add' if User.current.allowed_to?(:log_time, @project, :global => true) %> <%= actions_dropdown do %> <% if User.current.allowed_to?(:import_time_entries, @project, :global => true) %> - <%= link_to l(:button_import), new_time_entries_import_path %> + <%= link_to l(:button_import), new_time_entries_import_path(:project_id => @project) %> <% end %> <%= link_to_if_authorized l(:label_settings), diff --git a/test/functional/imports_controller_test.rb b/test/functional/imports_controller_test.rb index 77bc6723f..6b22bb19a 100644 --- a/test/functional/imports_controller_test.rb +++ b/test/functional/imports_controller_test.rb @@ -44,9 +44,10 @@ class ImportsControllerTest < Redmine::ControllerTest end def test_new_should_display_the_upload_form - get :new, :params => { :type => 'IssueImport' } + get :new, :params => { :type => 'IssueImport', :project_id => 'subproject1' } assert_response :success assert_select 'input[name=?]', 'file' + assert_select 'input[name=?][type=?][value=?]', 'project_id', 'hidden', 'subproject1' end def test_create_should_save_the_file diff --git a/test/unit/issue_import_test.rb b/test/unit/issue_import_test.rb index 8404a0ec1..7068f46e3 100644 --- a/test/unit/issue_import_test.rb +++ b/test/unit/issue_import_test.rb @@ -266,4 +266,32 @@ class IssueImportTest < ActiveSupport::TestCase issues = new_records(Issue, 3) { import.run } assert [nil, 3, system_version.id], issues.map(&:fixed_version_id) end + + def test_set_default_settings_with_project_id + import = Import.new + import.set_default_settings(:project_id => 3) + + assert_equal 3, import.mapping['project_id'] + end + + def test_set_default_settings_with_project_identifier + import = Import.new + import.set_default_settings(:project_id => 'ecookbook') + + assert_equal 1, import.mapping['project_id'] + end + + def test_set_default_settings_without_project_id + import = Import.new + import.set_default_settings + + assert_empty import.mapping + end + + def test_set_default_settings_with_invalid_project_should_not_fail + import = Import.new + import.set_default_settings(:project_id => 'abc') + + assert_empty import.mapping + end end -- 2.39.5