Feature #44406 » 0001b-Add-an-option-to-keep-the-current-sort-order-when-se.patch
| app/controllers/queries_controller.rb | ||
|---|---|---|
| 134 | 134 |
@query.build_from_params(params) |
| 135 | 135 |
@query.column_names = nil if params[:default_columns] |
| 136 | 136 |
@query.sort_criteria = (params[:query] && params[:query][:sort_criteria]) || @query.sort_criteria |
| 137 |
@query.keep_sort_order = params[:query] && params[:query][:keep_sort_order] |
|
| 137 | 138 |
@query.name = params[:query] && params[:query][:name] |
| 138 | 139 |
@query.description = params[:query] && params[:query][:description] |
| 139 | 140 |
if User.current.allowed_to?(:manage_public_queries, @query.project) || User.current.admin? |
| app/helpers/queries_helper.rb | ||
|---|---|---|
| 359 | 359 |
raise ::Unauthorized unless @query.visible? |
| 360 | 360 | |
| 361 | 361 |
@query.project = @project |
| 362 |
session[session_key] = {:id => @query.id, :project_id => @query.project_id} if use_session
|
|
| 362 |
if use_session |
|
| 363 |
current_sort = sort_criteria_from_session(klass, session_key) |
|
| 364 |
session[session_key] = {:id => @query.id, :project_id => @query.project_id}
|
|
| 365 |
if @query.keep_sort_order && current_sort.present? |
|
| 366 |
@query.sort_criteria = current_sort |
|
| 367 |
session[session_key][:sort] = @query.sort_criteria.to_a |
|
| 368 |
end |
|
| 369 |
end |
|
| 363 | 370 |
elsif api_request? || params[:set_filter] || !use_session || |
| 364 | 371 |
session[session_key].nil? || |
| 365 | 372 |
session[session_key][:project_id] != (@project ? @project.id : nil) |
| ... | ... | |
| 401 | 408 |
@query |
| 402 | 409 |
end |
| 403 | 410 | |
| 411 |
# Returns the sort criteria of the query stored in the session |
|
| 412 |
def sort_criteria_from_session(klass, session_key) |
|
| 413 |
session_data = session[session_key] |
|
| 414 |
return unless session_data |
|
| 415 | ||
| 416 |
if session_data[:sort].present? |
|
| 417 |
session_data[:sort] |
|
| 418 |
elsif session_data[:id] |
|
| 419 |
klass.find_by_id(session_data[:id])&.sort_criteria&.to_a |
|
| 420 |
end |
|
| 421 |
end |
|
| 422 | ||
| 404 | 423 |
def retrieve_query_from_session(klass=IssueQuery) |
| 405 | 424 |
session_key = klass.name.underscore.to_sym |
| 406 | 425 |
session_data = session[session_key] |
| app/models/query.rb | ||
|---|---|---|
| 906 | 906 |
[] |
| 907 | 907 |
end |
| 908 | 908 | |
| 909 |
def keep_sort_order |
|
| 910 |
options[:keep_sort_order] == '1' |
|
| 911 |
end |
|
| 912 | ||
| 913 |
def keep_sort_order=(arg) |
|
| 914 |
options[:keep_sort_order] = (arg == '1' ? '1' : nil) |
|
| 915 |
end |
|
| 916 | ||
| 909 | 917 |
def sort_criteria=(arg) |
| 910 | 918 |
c = Redmine::SortCriteria.new(arg) |
| 911 | 919 |
write_attribute(:sort_criteria, c.to_a) |
| app/views/queries/_form.html.erb | ||
|---|---|---|
| 97 | 97 |
:id => "query_sort_criteria_direction_" + i.to_s) %> |
| 98 | 98 |
<br /> |
| 99 | 99 |
<% end %> |
| 100 |
<label class="inline"><%= check_box_tag 'query[keep_sort_order]', '1', @query.keep_sort_order %> <%= l(:label_keep_sort_order) %></label> |
|
| 100 | 101 |
</fieldset> |
| 101 | 102 |
<% end %> |
| 102 | 103 | |
| config/locales/en.yml | ||
|---|---|---|
| 1499 | 1499 |
reaction_text_x_other_users: |
| 1500 | 1500 |
one: "1 other" |
| 1501 | 1501 |
other: "%{count} others"
|
| 1502 |
label_keep_sort_order: Keep the current sort order when selecting this query |
|
| test/functional/issues_controller_test.rb | ||
|---|---|---|
| 734 | 734 |
assert_response :success |
| 735 | 735 |
end |
| 736 | 736 | |
| 737 |
def test_index_with_saved_query_with_keep_sort_order_should_keep_the_current_sort_order |
|
| 738 |
query = IssueQuery.create!(:name => 'test', :visibility => IssueQuery::VISIBILITY_PUBLIC, |
|
| 739 |
:user_id => 1, :sort_criteria => [['id', 'asc']]) |
|
| 740 |
keeping = IssueQuery.create!(:name => 'keeping', :visibility => IssueQuery::VISIBILITY_PUBLIC, |
|
| 741 |
:user_id => 1, :sort_criteria => [['id', 'asc']], |
|
| 742 |
:keep_sort_order => '1') |
|
| 743 |
get(:index, :params => {:query_id => query.id, :sort => 'id:desc'})
|
|
| 744 |
assert_response :success |
|
| 745 | ||
| 746 |
get(:index, :params => {:query_id => keeping.id})
|
|
| 747 |
assert_response :success |
|
| 748 |
ids = issues_in_list.map(&:id) |
|
| 749 |
assert_equal ids.sort.reverse, ids |
|
| 750 |
end |
|
| 751 | ||
| 752 |
def test_index_with_saved_query_with_keep_sort_order_should_keep_the_sort_order_of_the_previous_query |
|
| 753 |
query = IssueQuery.create!(:name => 'test', :visibility => IssueQuery::VISIBILITY_PUBLIC, |
|
| 754 |
:user_id => 1, :sort_criteria => [['id', 'desc']]) |
|
| 755 |
keeping = IssueQuery.create!(:name => 'keeping', :visibility => IssueQuery::VISIBILITY_PUBLIC, |
|
| 756 |
:user_id => 1, :sort_criteria => [['id', 'asc']], |
|
| 757 |
:keep_sort_order => '1') |
|
| 758 |
get(:index, :params => {:query_id => query.id})
|
|
| 759 |
assert_response :success |
|
| 760 | ||
| 761 |
get(:index, :params => {:query_id => keeping.id})
|
|
| 762 |
assert_response :success |
|
| 763 |
ids = issues_in_list.map(&:id) |
|
| 764 |
assert_equal ids.sort.reverse, ids |
|
| 765 |
end |
|
| 766 | ||
| 767 |
def test_index_with_saved_query_without_keep_sort_order_should_use_its_sort_order |
|
| 768 |
query = IssueQuery.create!(:name => 'test', :visibility => IssueQuery::VISIBILITY_PUBLIC, |
|
| 769 |
:user_id => 1, :sort_criteria => [['id', 'asc']]) |
|
| 770 |
other = IssueQuery.create!(:name => 'other', :visibility => IssueQuery::VISIBILITY_PUBLIC, |
|
| 771 |
:user_id => 1, :sort_criteria => [['id', 'asc']]) |
|
| 772 |
get(:index, :params => {:query_id => query.id, :sort => 'id:desc'})
|
|
| 773 |
assert_response :success |
|
| 774 | ||
| 775 |
get(:index, :params => {:query_id => other.id})
|
|
| 776 |
assert_response :success |
|
| 777 |
ids = issues_in_list.map(&:id) |
|
| 778 |
assert_equal ids.sort, ids |
|
| 779 |
end |
|
| 780 | ||
| 737 | 781 |
def test_index_should_omit_page_param_in_export_links |
| 738 | 782 |
get(:index, :params => {:page => 2})
|
| 739 | 783 |
assert_response :success |
| test/functional/queries_controller_test.rb | ||
|---|---|---|
| 670 | 670 |
end |
| 671 | 671 |
end |
| 672 | 672 | |
| 673 |
def test_create_with_keep_sort_order |
|
| 674 |
@request.session[:user_id] = 1 |
|
| 675 |
post( |
|
| 676 |
:create, |
|
| 677 |
:params => {
|
|
| 678 |
:default_columns => '1', |
|
| 679 |
:query => {:name => 'test_keep_sort_order', :visibility => '2', :keep_sort_order => '1'}
|
|
| 680 |
} |
|
| 681 |
) |
|
| 682 |
query = Query.find_by_name('test_keep_sort_order')
|
|
| 683 |
assert query.keep_sort_order |
|
| 684 |
end |
|
| 685 | ||
| 686 |
def test_update_without_keep_sort_order |
|
| 687 |
@request.session[:user_id] = 1 |
|
| 688 |
query = Query.find(5) |
|
| 689 |
query.update!(:keep_sort_order => '1') |
|
| 690 | ||
| 691 |
put(:update, :params => {:id => 5, :default_columns => '1', :query => {:name => 'test_query'}})
|
|
| 692 |
assert_not query.reload.keep_sort_order |
|
| 693 |
end |
|
| 694 | ||
| 695 |
def test_edit_keep_sort_order |
|
| 696 |
@request.session[:user_id] = 1 |
|
| 697 |
Query.find(5).update!(:keep_sort_order => '1') |
|
| 698 |
get(:edit, :params => {:id => 5})
|
|
| 699 |
assert_response :success |
|
| 700 |
assert_select 'input[type=checkbox][name=?][checked=checked]', 'query[keep_sort_order]' |
|
| 701 |
end |
|
| 702 | ||
| 673 | 703 |
def test_edit_description |
| 674 | 704 |
@request.session[:user_id] = 1 |
| 675 | 705 |
get(:edit, :params => {:id => 5})
|
- « Previous
- 1
- …
- 3
- 4
- 5
- Next »