Feature #42073 » 0001-Remove-navigation-parameters-from-issue-detail-URLs-after-updates.patch
app/controllers/application_controller.rb | ||
---|---|---|
482 | 482 |
end |
483 | 483 |
helper_method :back_url |
484 | 484 | |
485 |
def redirect_back_or_default(default, options={}) |
|
485 |
def redirect_back_or_default(default, options = {}) |
|
486 |
referer = options.delete(:referer) |
|
487 | ||
486 | 488 |
if back_url = validate_back_url(params[:back_url].to_s) |
487 | 489 |
redirect_to(back_url) |
488 | 490 |
return |
489 |
elsif options[:referer]
|
|
491 |
elsif referer
|
|
490 | 492 |
redirect_to_referer_or default |
491 | 493 |
return |
492 | 494 |
end |
493 |
redirect_to default |
|
495 |
redirect_to default, options
|
|
494 | 496 |
false |
495 | 497 |
end |
496 | 498 |
app/controllers/issues_controller.rb | ||
---|---|---|
224 | 224 |
end |
225 | 225 |
respond_to do |format| |
226 | 226 |
format.html do |
227 |
redirect_back_or_default( |
|
228 |
issue_path(@issue, previous_and_next_issue_ids_params) |
|
229 |
) |
|
227 |
redirect_back_or_default issue_path(@issue), |
|
228 |
flash: { previous_and_next_issue_ids: previous_and_next_issue_ids_params } |
|
230 | 229 |
end |
231 | 230 |
format.api {render_api_ok} |
232 | 231 |
end |
... | ... | |
512 | 511 |
end |
513 | 512 | |
514 | 513 |
def retrieve_previous_and_next_issue_ids |
515 |
if params[:prev_issue_id].present? || params[:next_issue_id].present? |
|
516 |
@prev_issue_id = params[:prev_issue_id].presence.try(:to_i) |
|
517 |
@next_issue_id = params[:next_issue_id].presence.try(:to_i) |
|
518 |
@issue_position = params[:issue_position].presence.try(:to_i) |
|
519 |
@issue_count = params[:issue_count].presence.try(:to_i) |
|
514 |
if flash.key?(:previous_and_next_issue_ids) |
|
515 |
flash[:previous_and_next_issue_ids].then do |info| |
|
516 |
@prev_issue_id = info[:prev_issue_id].presence.try(:to_i) |
|
517 |
@next_issue_id = info[:next_issue_id].presence.try(:to_i) |
|
518 |
@issue_position = info[:issue_position].presence.try(:to_i) |
|
519 |
@issue_count = info[:issue_count].presence.try(:to_i) |
|
520 |
end |
|
521 |
flash.delete(:previous_and_next_issue_ids) |
|
520 | 522 |
else |
521 | 523 |
retrieve_query_from_session |
522 | 524 |
if @query |
test/functional/issues_controller_test.rb | ||
---|---|---|
2642 | 2642 |
end |
2643 | 2643 | |
2644 | 2644 |
def test_show_should_not_display_prev_next_links_for_issue_not_in_query_results |
2645 |
@request.session[:issue_query] = |
|
2646 |
{ |
|
2647 |
:filters => { |
|
2648 |
'status_id' => {:values => [''], :operator => 'c'} |
|
2649 |
}, |
|
2650 |
:project_id => 1, |
|
2651 |
:sort => [['id', 'asc']] |
|
2645 |
@request.session[:issue_query] = { |
|
2646 |
filters: { |
|
2647 |
'status_id' => {operator: 'o', values: ['']} |
|
2648 |
}, |
|
2649 |
project_id: 1, |
|
2650 |
sort: [['id', 'asc']] |
|
2651 |
} |
|
2652 |
get(:show, params: {id: 8}) |
|
2653 | ||
2654 |
assert_response :success |
|
2655 |
assert_select 'a', text: /Previous/, count: 0 |
|
2656 |
assert_select 'a', text: /Next/, count: 0 |
|
2657 |
end |
|
2658 | ||
2659 |
def test_show_should_display_prev_next_links_for_issue_not_in_query_when_flash_contains_previous_and_next_issue_ids |
|
2660 |
@request.session[:issue_query] = { |
|
2661 |
filters: { |
|
2662 |
'status_id' => {operator: 'o', values: ['']} |
|
2663 |
}, |
|
2664 |
project_id: 1, |
|
2665 |
sort: [['id', 'asc']] |
|
2666 |
} |
|
2667 |
get( |
|
2668 |
:show, |
|
2669 |
params: { id: 8 }, # The issue#8 is closed |
|
2670 |
flash: { |
|
2671 |
previous_and_next_issue_ids: { |
|
2672 |
prev_issue_id: 7, |
|
2673 |
next_issue_id: 9, |
|
2674 |
issue_position: 7, |
|
2675 |
issue_count: 10 |
|
2676 |
} |
|
2652 | 2677 |
} |
2653 |
get(:show, :params => {:id => 1}) |
|
2678 |
) |
|
2679 | ||
2654 | 2680 |
assert_response :success |
2655 |
assert_select 'a', :text => /Previous/, :count => 0 |
|
2656 |
assert_select 'a', :text => /Next/, :count => 0 |
|
2681 |
assert_select 'div.next-prev-links' do |
|
2682 |
assert_select 'a[href="/issues/7"]', text: /Previous/ |
|
2683 |
assert_select 'a[href="/issues/9"]', text: /Next/ |
|
2684 |
assert_select 'span.position', text: "7 of 10" |
|
2685 |
end |
|
2657 | 2686 |
end |
2658 | 2687 | |
2659 | 2688 |
def test_show_show_should_display_prev_next_links_with_query_sort_by_user_custom_field |
... | ... | |
2684 | 2713 |
end |
2685 | 2714 |
end |
2686 | 2715 | |
2687 |
def test_show_should_display_prev_next_links_when_request_has_previous_and_next_issue_ids_params |
|
2688 |
get( |
|
2689 |
:show, |
|
2690 |
:params => { |
|
2691 |
:id => 1, |
|
2692 |
:prev_issue_id => 1, |
|
2693 |
:next_issue_id => 3, |
|
2694 |
:issue_position => 2, |
|
2695 |
:issue_count => 4 |
|
2696 |
} |
|
2697 |
) |
|
2698 |
assert_response :success |
|
2699 |
assert_select 'div.next-prev-links' do |
|
2700 |
assert_select 'a[href="/issues/1"]', :text => /Previous/ |
|
2701 |
assert_select 'a[href="/issues/3"]', :text => /Next/ |
|
2702 |
assert_select 'span.position', :text => "2 of 4" |
|
2703 |
end |
|
2704 |
end |
|
2705 | ||
2706 | 2716 |
def test_show_should_display_category_field_if_categories_are_defined |
2707 | 2717 |
Issue.update_all :category_id => nil |
2708 | 2718 |
get(:show, :params => {:id => 1}) |
... | ... | |
6903 | 6913 |
:issue_count => 3 |
6904 | 6914 |
} |
6905 | 6915 |
) |
6906 |
assert_redirected_to '/issues/11?issue_count=3&issue_position=2&next_issue_id=12&prev_issue_id=8' |
|
6916 |
assert_redirected_to '/issues/11' |
|
6917 |
assert_equal( |
|
6918 |
{ issue_count: '3', issue_position: '2', next_issue_id: '12', prev_issue_id: '8' }, |
|
6919 |
flash[:previous_and_next_issue_ids] |
|
6920 |
) |
|
6907 | 6921 |
end |
6908 | 6922 | |
6909 | 6923 |
def test_update_with_permission_on_tracker_should_be_allowed |