Remove navigation parameters from issue detail URLs after updates (#42073).

Patch by Katsuya HIDAKA (user:hidakatsuya).


git-svn-id: https://svn.redmine.org/redmine/trunk@23433 e93f8b46-1217-0410-a6f0-8f06a7374b81
This commit is contained in:
Go MAEDA
2025-01-07 07:18:32 +00:00
parent 544b7ae8fa
commit 9fccf787a4
3 changed files with 60 additions and 42 deletions

View File

@@ -482,15 +482,17 @@ class ApplicationController < ActionController::Base
end end
helper_method :back_url helper_method :back_url
def redirect_back_or_default(default, options={}) def redirect_back_or_default(default, options = {})
referer = options.delete(:referer)
if back_url = validate_back_url(params[:back_url].to_s) if back_url = validate_back_url(params[:back_url].to_s)
redirect_to(back_url) redirect_to(back_url)
return return
elsif options[:referer] elsif referer
redirect_to_referer_or default redirect_to_referer_or default
return return
end end
redirect_to default redirect_to default, options
false false
end end

View File

@@ -224,9 +224,8 @@ class IssuesController < ApplicationController
end end
respond_to do |format| respond_to do |format|
format.html do format.html do
redirect_back_or_default( redirect_back_or_default issue_path(@issue),
issue_path(@issue, previous_and_next_issue_ids_params) flash: { previous_and_next_issue_ids: previous_and_next_issue_ids_params }
)
end end
format.api {render_api_ok} format.api {render_api_ok}
end end
@@ -512,11 +511,14 @@ class IssuesController < ApplicationController
end end
def retrieve_previous_and_next_issue_ids def retrieve_previous_and_next_issue_ids
if params[:prev_issue_id].present? || params[:next_issue_id].present? if flash.key?(:previous_and_next_issue_ids)
@prev_issue_id = params[:prev_issue_id].presence.try(:to_i) flash[:previous_and_next_issue_ids].then do |info|
@next_issue_id = params[:next_issue_id].presence.try(:to_i) @prev_issue_id = info[:prev_issue_id].presence.try(:to_i)
@issue_position = params[:issue_position].presence.try(:to_i) @next_issue_id = info[:next_issue_id].presence.try(:to_i)
@issue_count = params[:issue_count].presence.try(:to_i) @issue_position = info[:issue_position].presence.try(:to_i)
@issue_count = info[:issue_count].presence.try(:to_i)
end
flash.delete(:previous_and_next_issue_ids)
else else
retrieve_query_from_session retrieve_query_from_session
if @query if @query

View File

@@ -2642,18 +2642,47 @@ class IssuesControllerTest < Redmine::ControllerTest
end end
def test_show_should_not_display_prev_next_links_for_issue_not_in_query_results def test_show_should_not_display_prev_next_links_for_issue_not_in_query_results
@request.session[:issue_query] = @request.session[:issue_query] = {
{ filters: {
:filters => { 'status_id' => {operator: 'o', values: ['']}
'status_id' => {:values => [''], :operator => 'c'}
}, },
:project_id => 1, project_id: 1,
:sort => [['id', 'asc']] sort: [['id', 'asc']]
} }
get(:show, :params => {:id => 1}) get(:show, params: {id: 8})
assert_response :success assert_response :success
assert_select 'a', :text => /Previous/, :count => 0 assert_select 'a', text: /Previous/, count: 0
assert_select 'a', :text => /Next/, :count => 0 assert_select 'a', text: /Next/, count: 0
end
def test_show_should_display_prev_next_links_for_issue_not_in_query_when_flash_contains_previous_and_next_issue_ids
@request.session[:issue_query] = {
filters: {
'status_id' => {operator: 'o', values: ['']}
},
project_id: 1,
sort: [['id', 'asc']]
}
get(
:show,
params: { id: 8 }, # The issue#8 is closed
flash: {
previous_and_next_issue_ids: {
prev_issue_id: 7,
next_issue_id: 9,
issue_position: 7,
issue_count: 10
}
}
)
assert_response :success
assert_select 'div.next-prev-links' do
assert_select 'a[href="/issues/7"]', text: /Previous/
assert_select 'a[href="/issues/9"]', text: /Next/
assert_select 'span.position', text: "7 of 10"
end
end end
def test_show_show_should_display_prev_next_links_with_query_sort_by_user_custom_field def test_show_show_should_display_prev_next_links_with_query_sort_by_user_custom_field
@@ -2684,25 +2713,6 @@ class IssuesControllerTest < Redmine::ControllerTest
end end
end end
def test_show_should_display_prev_next_links_when_request_has_previous_and_next_issue_ids_params
get(
:show,
:params => {
:id => 1,
:prev_issue_id => 1,
:next_issue_id => 3,
:issue_position => 2,
:issue_count => 4
}
)
assert_response :success
assert_select 'div.next-prev-links' do
assert_select 'a[href="/issues/1"]', :text => /Previous/
assert_select 'a[href="/issues/3"]', :text => /Next/
assert_select 'span.position', :text => "2 of 4"
end
end
def test_show_should_display_category_field_if_categories_are_defined def test_show_should_display_category_field_if_categories_are_defined
Issue.update_all :category_id => nil Issue.update_all :category_id => nil
get(:show, :params => {:id => 1}) get(:show, :params => {:id => 1})
@@ -6903,7 +6913,11 @@ class IssuesControllerTest < Redmine::ControllerTest
:issue_count => 3 :issue_count => 3
} }
) )
assert_redirected_to '/issues/11?issue_count=3&issue_position=2&next_issue_id=12&prev_issue_id=8' assert_redirected_to '/issues/11'
assert_equal(
{ issue_count: '3', issue_position: '2', next_issue_id: '12', prev_issue_id: '8' },
flash[:previous_and_next_issue_ids]
)
end end
def test_update_with_permission_on_tracker_should_be_allowed def test_update_with_permission_on_tracker_should_be_allowed