From 6ded672c208d35d12aedc74aed6c83c7476063fd Mon Sep 17 00:00:00 2001 From: Mathias Nestler Date: Sat, 5 Apr 2014 20:57:21 +0200 Subject: set filename for csv and pdf downloads of saved queries properly; refs #16207 --- app/controllers/issues_controller.rb | 6 ++++-- test/functional/issues_controller_test.rb | 26 ++++++++++++++++++++++++++ 2 files changed, 30 insertions(+), 2 deletions(-) diff --git a/app/controllers/issues_controller.rb b/app/controllers/issues_controller.rb index de346c5..39d3213 100644 --- a/app/controllers/issues_controller.rb +++ b/app/controllers/issues_controller.rb @@ -65,6 +65,8 @@ class IssuesController < ApplicationController if params[:columns] == 'all' @query.column_names = @query.available_inline_columns.map(&:name) end + filename = @query.name.blank? || @query.name == '_' ? "issues" : @query.name.parameterize.underscore + filename += ".#{params[:format]}" when 'atom' @limit = Setting.feeds_limit.to_i when 'xml', 'json' @@ -89,8 +91,8 @@ class IssuesController < ApplicationController Issue.load_visible_relations(@issues) if include_in_api_response?('relations') } format.atom { render_feed(@issues, :title => "#{@project || Setting.app_title}: #{l(:label_issue_plural)}") } - format.csv { send_data(query_to_csv(@issues, @query, params), :type => 'text/csv; header=present', :filename => 'issues.csv') } - format.pdf { send_data(issues_to_pdf(@issues, @project, @query), :type => 'application/pdf', :filename => 'issues.pdf') } + format.csv { send_data(query_to_csv(@issues, @query, params), :type => 'text/csv; header=present', :filename => filename) } + format.pdf { send_data(issues_to_pdf(@issues, @project, @query), :type => 'application/pdf', :filename => filename) } end else respond_to do |format| diff --git a/test/functional/issues_controller_test.rb b/test/functional/issues_controller_test.rb index 9f3542e..d57d7a4 100644 --- a/test/functional/issues_controller_test.rb +++ b/test/functional/issues_controller_test.rb @@ -397,6 +397,19 @@ class IssuesControllerTest < ActionController::TestCase assert_equal assigns(:query).columns.size, lines[0].split(',').size end + def test_index_csv_filename_without_query + get :index, :format => 'csv' + assert_response :success + assert_match /issues.csv/, @response.headers['Content-Disposition'] + end + + def test_index_csv_filename_with_query + q = IssueQuery.create!(:name => 'My Query Name 1', :visibility => IssueQuery::VISIBILITY_PUBLIC) + get :index, :query_id => q.id, :format => 'csv' + assert_response :success + assert_match /my_query_name_1\.csv/, @response.headers['Content-Disposition'] + end + def test_index_csv_with_project get :index, :project_id => 1, :format => 'csv' assert_response :success @@ -599,6 +612,19 @@ class IssuesControllerTest < ActionController::TestCase end end + def test_index_pdf_filename_without_query + get :index, :format => 'pdf' + assert_response :success + assert_match /issues.pdf/, @response.headers['Content-Disposition'] + end + + def test_index_pdf_filename_with_query + q = IssueQuery.create!(:name => 'My Query Name 1', :visibility => IssueQuery::VISIBILITY_PUBLIC) + get :index, :query_id => q.id, :format => 'pdf' + assert_response :success + assert_match /my_query_name_1\.pdf/, @response.headers['Content-Disposition'] + end + def test_index_pdf_with_query_grouped_by_list_custom_field get :index, :project_id => 1, :query_id => 9, :format => 'pdf' assert_response :success -- 1.7.12.4 (Apple Git-37) From d1bb56e78f8f5ffe1b44186050a5ad7500f1433c Mon Sep 17 00:00:00 2001 From: Mathias Nestler Date: Mon, 12 May 2014 23:15:52 +0200 Subject: fix to handle non-ascii filenames; refs #16207 --- app/controllers/issues_controller.rb | 1 + 1 file changed, 1 insertion(+) diff --git a/app/controllers/issues_controller.rb b/app/controllers/issues_controller.rb index 39d3213..fd2e01a 100644 --- a/app/controllers/issues_controller.rb +++ b/app/controllers/issues_controller.rb @@ -67,6 +67,7 @@ class IssuesController < ApplicationController end filename = @query.name.blank? || @query.name == '_' ? "issues" : @query.name.parameterize.underscore filename += ".#{params[:format]}" + filename = filename_for_content_disposition(filename) when 'atom' @limit = Setting.feeds_limit.to_i when 'xml', 'json' -- 1.7.12.4 (Apple Git-37)