diff options
author | Jean-Philippe Lang <jp_lang@yahoo.fr> | 2016-06-07 18:23:42 +0000 |
---|---|---|
committer | Jean-Philippe Lang <jp_lang@yahoo.fr> | 2016-06-07 18:23:42 +0000 |
commit | e3875ffd5739a60e59f54ff431d2c0bf17f8a55e (patch) | |
tree | 1d0fcbd0ad8fb4b155fb0df780403a3765f5f4c9 /app | |
parent | b935539f287a18924d510de8649f38fffdb85f50 (diff) | |
download | redmine-e3875ffd5739a60e59f54ff431d2c0bf17f8a55e.tar.gz redmine-e3875ffd5739a60e59f54ff431d2c0bf17f8a55e.zip |
Make Tracker map-able for CSV import (#22951).
git-svn-id: http://svn.redmine.org/redmine/trunk@15490 e93f8b46-1217-0410-a6f0-8f06a7374b81
Diffstat (limited to 'app')
-rw-r--r-- | app/controllers/imports_controller.rb | 6 | ||||
-rw-r--r-- | app/helpers/imports_helper.rb | 6 | ||||
-rw-r--r-- | app/models/issue_import.rb | 34 | ||||
-rw-r--r-- | app/views/imports/_fields_mapping.html.erb | 12 | ||||
-rw-r--r-- | app/views/imports/mapping.html.erb | 2 |
5 files changed, 44 insertions, 16 deletions
diff --git a/app/controllers/imports_controller.rb b/app/controllers/imports_controller.rb index 79a5ced4b..75d4da933 100644 --- a/app/controllers/imports_controller.rb +++ b/app/controllers/imports_controller.rb @@ -57,11 +57,7 @@ class ImportsController < ApplicationController end def mapping - issue = Issue.new - issue.project = @import.project - issue.tracker = @import.tracker - @attributes = issue.safe_attribute_names - @custom_fields = issue.editable_custom_field_values.map(&:custom_field) + @custom_fields = @import.mappable_custom_fields if request.post? respond_to do |format| diff --git a/app/helpers/imports_helper.rb b/app/helpers/imports_helper.rb index 2fecfca24..edbf2d13e 100644 --- a/app/helpers/imports_helper.rb +++ b/app/helpers/imports_helper.rb @@ -23,12 +23,16 @@ module ImportsHelper blank_text = options[:required] ? "-- #{l(:actionview_instancetag_blank_option)} --" : " ".html_safe tags << content_tag('option', blank_text, :value => '') tags << options_for_select(import.columns_options, import.mapping[field]) + if values = options[:values] + tags << content_tag('option', '--', :disabled => true) + tags << options_for_select(values.map {|text, value| [text, "value:#{value}"]}, import.mapping[field]) + end tags end def mapping_select_tag(import, field, options={}) name = "import_settings[mapping][#{field}]" - select_tag name, options_for_mapping_select(import, field, options) + select_tag name, options_for_mapping_select(import, field, options), :id => "import_mapping_#{field}" end # Returns the options for the date_format setting diff --git a/app/models/issue_import.rb b/app/models/issue_import.rb index 5b19ac966..e7d7a56aa 100644 --- a/app/models/issue_import.rb +++ b/app/models/issue_import.rb @@ -41,8 +41,10 @@ class IssueImport < Import end def tracker - tracker_id = mapping['tracker_id'].to_i - allowed_target_trackers.find_by_id(tracker_id) || allowed_target_trackers.first + if mapping['tracker'].to_s =~ /\Avalue:(\d+)\z/ + tracker_id = $1.to_i + allowed_target_trackers.find_by_id(tracker_id) + end end # Returns true if missing categories should be created during the import @@ -57,6 +59,19 @@ class IssueImport < Import mapping['create_versions'] == '1' end + def mappable_custom_fields + if tracker + issue = Issue.new + issue.project = project + issue.tracker = tracker + issue.editable_custom_field_values(user).map(&:custom_field) + elsif project + project.all_issue_custom_fields + else + [] + end + end + private def build_object(row) @@ -64,12 +79,20 @@ class IssueImport < Import issue.author = user issue.notify = false + tracker_id = nil + if tracker + tracker_id = tracker.id + elsif tracker_name = row_value(row, 'tracker') + tracker_id = allowed_target_trackers.named(tracker_name).first.try(:id) + end + attributes = { 'project_id' => mapping['project_id'], - 'tracker_id' => mapping['tracker_id'], + 'tracker_id' => tracker_id, 'subject' => row_value(row, 'subject'), 'description' => row_value(row, 'description') } + attributes issue.send :safe_attributes=, attributes, user attributes = {} @@ -149,6 +172,11 @@ class IssueImport < Import end issue.send :safe_attributes=, attributes, user + + if issue.tracker_id != tracker_id + issue.tracker_id = nil + end + issue end end diff --git a/app/views/imports/_fields_mapping.html.erb b/app/views/imports/_fields_mapping.html.erb index bb6467eca..4ac2b570f 100644 --- a/app/views/imports/_fields_mapping.html.erb +++ b/app/views/imports/_fields_mapping.html.erb @@ -1,17 +1,17 @@ -<div class="splitcontent"> -<div class="splitcontentleft"> <p> <label><%= l(:label_project) %></label> <%= select_tag 'import_settings[mapping][project_id]', options_for_select(project_tree_options_for_select(@import.allowed_target_projects, :selected => @import.project)), - :id => 'issue_project_id' %> + :id => 'import_mapping_project_id' %> </p> <p> <label><%= l(:label_tracker) %></label> - <%= select_tag 'import_settings[mapping][tracker_id]', - options_for_select(@import.allowed_target_trackers.sorted.map {|t| [t.name, t.id]}, @import.tracker.try(:id)), - :id => 'issue_tracker_id' %> + <%= mapping_select_tag @import, 'tracker', :required => true, + :values => @import.allowed_target_trackers.sorted.map {|t| [t.name, t.id]} %> </p> + +<div class="splitcontent"> +<div class="splitcontentleft"> <p> <label><%= l(:field_subject) %></label> <%= mapping_select_tag @import, 'subject', :required => true %> diff --git a/app/views/imports/mapping.html.erb b/app/views/imports/mapping.html.erb index 283bddb04..2e225d6c2 100644 --- a/app/views/imports/mapping.html.erb +++ b/app/views/imports/mapping.html.erb @@ -35,7 +35,7 @@ <%= javascript_tag do %> $(document).ready(function() { - $('#fields-mapping').on('change', '#issue_project_id, #issue_tracker_id', function(){ + $('#fields-mapping').on('change', '#import_mapping_project_id, #import_mapping_tracker', function(){ $.ajax({ url: '<%= import_mapping_path(@import, :format => 'js') %>', type: 'post', |