From fcf1352c6b19f1dcb8872367a1313cbffb551093 Mon Sep 17 00:00:00 2001 From: Go MAEDA Date: Thu, 3 Nov 2022 05:17:48 +0000 Subject: Redirect to container URL in case of error in attachments#download_all (#37880). Patch by Holger Just. git-svn-id: https://svn.redmine.org/redmine/trunk@21948 e93f8b46-1217-0410-a6f0-8f06a7374b81 --- app/controllers/attachments_controller.rb | 19 ++++++++++++++++++- test/functional/attachments_controller_test.rb | 18 +++++++++++++++++- 2 files changed, 35 insertions(+), 2 deletions(-) diff --git a/app/controllers/attachments_controller.rb b/app/controllers/attachments_controller.rb index 210cd7ba4..819128eed 100644 --- a/app/controllers/attachments_controller.rb +++ b/app/controllers/attachments_controller.rb @@ -239,11 +239,28 @@ class AttachmentsController < ApplicationController if @attachments.sum(&:filesize) > bulk_download_max_size flash[:error] = l(:error_bulk_download_size_too_big, :max_size => number_to_human_size(bulk_download_max_size.to_i)) - redirect_to back_url + redirect_back_or_default(container_url, referer: true) return end end + def container_url + case @container + when Message + url_for(@container.event_url) + when Project + # project attachments are listed in the files view + project_files_url(@container) + when Version + # version attachments are listed in its project's files view + project_files_url(@container.project) + when WikiPage + project_wiki_page_url @container.wiki.project, @container + else + url_for(@container) + end + end + # Checks that the file exists and is readable def file_readable if @attachment.readable? diff --git a/test/functional/attachments_controller_test.rb b/test/functional/attachments_controller_test.rb index 4dbe3ce6e..cb82427cd 100644 --- a/test/functional/attachments_controller_test.rb +++ b/test/functional/attachments_controller_test.rb @@ -631,7 +631,23 @@ class AttachmentsControllerTest < Redmine::ControllerTest :params => { :object_type => 'issues', :object_id => '2', - :back_url => '/issues/2' + :back_url => '/issues/123' + } + ) + assert_redirected_to '/issues/123' + assert_equal flash[:error], 'These attachments cannot be bulk downloaded because the total file size exceeds the maximum allowed size (0 Bytes)' + end + end + + def test_download_all_redirects_to_container_url_on_error + with_settings :bulk_download_max_size => 0 do + @request.session[:user_id] = 2 + get( + :download_all, + :params => { + :object_type => 'issues', + :object_id => '2', + :back_url => 'https://example.com' } ) assert_redirected_to '/issues/2' -- cgit v1.2.3