Project

General

Profile

Defect #44667 ยป 0001-Keep-the-sort-order-of-a-saved-query-in-the-session-.patch

Florian Walchshofer, 2026-10-23 20:36

View differences:

app/controllers/issues_controller.rb
552 552
          @next_issue_id = issue_ids[idx + 1] if idx < (issue_ids.size - 1)
553 553
        end
554 554
        query_params = @query.as_params
555
        query_params[:sort] = @query.sort_criteria.to_param unless @query.new_record?
555 556
        if @issue_position
556 557
          query_params = query_params.merge(:page => (@issue_position / per_page_option) + 1, :per_page => per_page_option)
557 558
        end
app/helpers/queries_helper.rb
386 386
          :filters => session[session_key][:filters],
387 387
          :group_by => session[session_key][:group_by],
388 388
          :column_names => session[session_key][:column_names],
389
          :totalable_names => session[session_key][:totalable_names],
390
          :sort_criteria => session[session_key][:sort]
389
          :totalable_names => session[session_key][:totalable_names]
391 390
        )
391
      @query.sort_criteria = session[session_key][:sort] if session[session_key][:sort].present?
392 392
      @query.project = @project
393 393
    end
394 394
    if params[:sort].present?
......
416 416
            :filters => session_data[:filters],
417 417
            :group_by => session_data[:group_by],
418 418
            :column_names => session_data[:column_names],
419
            :totalable_names => session_data[:totalable_names],
420
            :sort_criteria => session[session_key][:sort]
419
            :totalable_names => session_data[:totalable_names]
421 420
          )
422 421
      end
422
      @query.sort_criteria = session_data[:sort] if session_data[:sort].present?
423 423
      if session_data.has_key?(:project_id)
424 424
        @query.project_id = session_data[:project_id]
425 425
      else
test/functional/issues_controller_test.rb
2725 2725
    end
2726 2726
  end
2727 2727

  
2728
  def test_show_should_display_prev_next_links_with_saved_query_and_sort_in_session
2729
    query =
2730
      IssueQuery.create!(
2731
        :name => 'test',
2732
        :visibility => IssueQuery::VISIBILITY_PUBLIC,
2733
        :user_id => 1,
2734
        :filters => {'status_id' => {:values => ['5'], :operator => '='}},
2735
        :sort_criteria => [['id', 'asc']]
2736
      )
2737
    # Sort the issues of the saved query by clicking on a column header
2738
    get(:index, :params => {:query_id => query.id, :sort => 'id:desc'})
2739
    assert_response :success
2740
    assert_equal [['id', 'desc']], session[:issue_query][:sort]
2741

  
2742
    get(:show, :params => {:id => 11})
2743
    assert_response :success
2744
    assert_select 'div.next-prev-links' do
2745
      assert_select 'a[href="/issues/12"]', :text => /Previous/
2746
      assert_select 'a[href="/issues/8"]', :text => /Next/
2747
    end
2748

  
2749
    get(:show, :params => {:id => 12})
2750
    assert_response :success
2751
    assert_select 'div.next-prev-links li.position', :text => '1 of 3' do
2752
      assert_select 'a[href=?]', "/issues?page=1&per_page=25&query_id=#{query.id}&sort=id%3Adesc"
2753
    end
2754
  end
2755

  
2756
  def test_index_should_keep_sort_of_saved_query_in_session
2757
    query =
2758
      IssueQuery.create!(
2759
        :name => 'test',
2760
        :visibility => IssueQuery::VISIBILITY_PUBLIC,
2761
        :user_id => 1,
2762
        :sort_criteria => [['id', 'asc']]
2763
      )
2764
    get(:index, :params => {:query_id => query.id, :sort => 'id:desc'})
2765
    assert_response :success
2766

  
2767
    # Back to the issue list, e.g. from an issue
2768
    get :index
2769
    assert_response :success
2770
    ids = issues_in_list.map(&:id)
2771
    assert ids.size > 1
2772
    assert_equal ids.sort.reverse, ids
2773
  end
2774

  
2728 2775
  def test_show_should_display_prev_next_links_with_query_and_sort_on_association
2729 2776
    @request.session[:issue_query] =
2730 2777
      {
    (1-1/1)