@@ -117,7 +117,7 module CustomFieldsHelper | |||||
117 | # Return a string used to display a custom value |
|
117 | # Return a string used to display a custom value | |
118 | def format_value(value, field_format) |
|
118 | def format_value(value, field_format) | |
119 | if value.is_a?(Array) |
|
119 | if value.is_a?(Array) | |
120 | value.collect {|v| format_value(v, field_format)}.join(', ') |
|
120 | value.collect {|v| format_value(v, field_format)}.compact.sort.join(', ') | |
121 | else |
|
121 | else | |
122 | Redmine::CustomFieldFormat.format_value(value, field_format) |
|
122 | Redmine::CustomFieldFormat.format_value(value, field_format) | |
123 | end |
|
123 | end |
@@ -320,7 +320,7 module IssuesHelper | |||||
320 | issues.each do |issue| |
|
320 | issues.each do |issue| | |
321 | col_values = columns.collect do |column| |
|
321 | col_values = columns.collect do |column| | |
322 | s = if column.is_a?(QueryCustomFieldColumn) |
|
322 | s = if column.is_a?(QueryCustomFieldColumn) | |
323 | cv = issue.custom_values.detect {|v| v.custom_field_id == column.custom_field.id} |
|
323 | cv = issue.custom_field_values.detect {|v| v.custom_field_id == column.custom_field.id} | |
324 | show_value(cv) |
|
324 | show_value(cv) | |
325 | else |
|
325 | else | |
326 | value = issue.send(column.name) |
|
326 | value = issue.send(column.name) |
@@ -118,7 +118,7 module TimelogHelper | |||||
118 | entry.hours.to_s.gsub('.', decimal_separator), |
|
118 | entry.hours.to_s.gsub('.', decimal_separator), | |
119 | entry.comments |
|
119 | entry.comments | |
120 | ] |
|
120 | ] | |
121 |
fields += custom_fields.collect {|f| show_value(entry.custom_ |
|
121 | fields += custom_fields.collect {|f| show_value(entry.custom_field_values.detect {|v| v.custom_field_id == f.id}) } | |
122 |
|
122 | |||
123 | csv << fields.collect {|c| Redmine::CodesetUtil.from_utf8( |
|
123 | csv << fields.collect {|c| Redmine::CodesetUtil.from_utf8( | |
124 | c.to_s, |
|
124 | c.to_s, |
@@ -5,7 +5,7 | |||||
5 | <% end %> |
|
5 | <% end %> | |
6 |
|
6 | |||
7 | <p><%=h version.description %></p> |
|
7 | <p><%=h version.description %></p> | |
8 | <% if version.custom_values.any? %> |
|
8 | <% if version.custom_field_values.any? %> | |
9 | <ul> |
|
9 | <ul> | |
10 | <% version.custom_field_values.each do |custom_value| %> |
|
10 | <% version.custom_field_values.each do |custom_value| %> | |
11 | <% if custom_value.value.present? %> |
|
11 | <% if custom_value.value.present? %> |
@@ -214,7 +214,7 module Redmine | |||||
214 | # fetch all the row values |
|
214 | # fetch all the row values | |
215 | col_values = query.columns.collect do |column| |
|
215 | col_values = query.columns.collect do |column| | |
216 | s = if column.is_a?(QueryCustomFieldColumn) |
|
216 | s = if column.is_a?(QueryCustomFieldColumn) | |
217 | cv = issue.custom_values.detect {|v| v.custom_field_id == column.custom_field.id} |
|
217 | cv = issue.custom_field_values.detect {|v| v.custom_field_id == column.custom_field.id} | |
218 | show_value(cv) |
|
218 | show_value(cv) | |
219 | else |
|
219 | else | |
220 | value = issue.send(column.name) |
|
220 | value = issue.send(column.name) |
@@ -337,6 +337,18 class IssuesControllerTest < ActionController::TestCase | |||||
337 | assert_equal assigns(:query).available_columns.size + 1, lines[0].split(',').size |
|
337 | assert_equal assigns(:query).available_columns.size + 1, lines[0].split(',').size | |
338 | end |
|
338 | end | |
339 |
|
339 | |||
|
340 | def test_index_csv_with_multi_column_field | |||
|
341 | CustomField.find(1).update_attribute :multiple, true | |||
|
342 | issue = Issue.find(1) | |||
|
343 | issue.custom_field_values = {1 => ['MySQL', 'Oracle']} | |||
|
344 | issue.save! | |||
|
345 | ||||
|
346 | get :index, :format => 'csv', :columns => 'all' | |||
|
347 | assert_response :success | |||
|
348 | lines = @response.body.chomp.split("\n") | |||
|
349 | assert lines.detect {|line| line.include?('"MySQL, Oracle"')} | |||
|
350 | end | |||
|
351 | ||||
340 | def test_index_csv_big_5 |
|
352 | def test_index_csv_big_5 | |
341 | with_settings :default_language => "zh-TW" do |
|
353 | with_settings :default_language => "zh-TW" do | |
342 | str_utf8 = "\xe4\xb8\x80\xe6\x9c\x88" |
|
354 | str_utf8 = "\xe4\xb8\x80\xe6\x9c\x88" | |
@@ -1086,7 +1098,7 class IssuesControllerTest < ActionController::TestCase | |||||
1086 | assert_response :success |
|
1098 | assert_response :success | |
1087 |
|
1099 | |||
1088 | # TODO: should display links |
|
1100 | # TODO: should display links | |
1089 |
assert_tag :td, :content => ' |
|
1101 | assert_tag :td, :content => 'Dave Lopper, John Smith' | |
1090 | end |
|
1102 | end | |
1091 |
|
1103 | |||
1092 | def test_show_atom |
|
1104 | def test_show_atom |
@@ -563,6 +563,18 class TimelogControllerTest < ActionController::TestCase | |||||
563 | assert @response.body.include?("\n04/21/2007,redMine Admin,Design,eCookbook,3,Bug,Error 281 when updating a recipe,1.0,\"\",\"\"\n") |
|
563 | assert @response.body.include?("\n04/21/2007,redMine Admin,Design,eCookbook,3,Bug,Error 281 when updating a recipe,1.0,\"\",\"\"\n") | |
564 | end |
|
564 | end | |
565 |
|
565 | |||
|
566 | def test_index_csv_export_with_multi_custom_field | |||
|
567 | field = TimeEntryCustomField.create!(:name => 'Test', :field_format => 'list', | |||
|
568 | :multiple => true, :possible_values => ['value1', 'value2']) | |||
|
569 | entry = TimeEntry.find(1) | |||
|
570 | entry.custom_field_values = {field.id => ['value1', 'value2']} | |||
|
571 | entry.save! | |||
|
572 | ||||
|
573 | get :index, :project_id => 1, :format => 'csv' | |||
|
574 | assert_response :success | |||
|
575 | assert_include '"value1, value2"', @response.body | |||
|
576 | end | |||
|
577 | ||||
566 | def test_csv_big_5 |
|
578 | def test_csv_big_5 | |
567 | user = User.find_by_id(3) |
|
579 | user = User.find_by_id(3) | |
568 | user.language = "zh-TW" |
|
580 | user.language = "zh-TW" |
General Comments 0
You need to be logged in to leave comments.
Login now