summaryrefslogtreecommitdiffstats
path: root/app
diff options
context:
space:
mode:
authorJean-Philippe Lang <jp_lang@yahoo.fr>2016-06-07 18:23:42 +0000
committerJean-Philippe Lang <jp_lang@yahoo.fr>2016-06-07 18:23:42 +0000
commite3875ffd5739a60e59f54ff431d2c0bf17f8a55e (patch)
tree1d0fcbd0ad8fb4b155fb0df780403a3765f5f4c9 /app
parentb935539f287a18924d510de8649f38fffdb85f50 (diff)
downloadredmine-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.rb6
-rw-r--r--app/helpers/imports_helper.rb6
-rw-r--r--app/models/issue_import.rb34
-rw-r--r--app/views/imports/_fields_mapping.html.erb12
-rw-r--r--app/views/imports/mapping.html.erb2
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)} --" : "&nbsp;".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',