mirror of
https://github.com/redmine/redmine.git
synced 2025-11-12 00:06:01 +01:00
Use issue path instead of bulk update issues path when only one issue is selected in the context menu (#33521).
git-svn-id: http://svn.redmine.org/redmine/trunk@21089 e93f8b46-1217-0410-a6f0-8f06a7374b81
This commit is contained in:
@@ -87,6 +87,16 @@ module RoutesHelper
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
# Returns the path to bulk update issues or to issue path
|
||||||
|
# if only one issue is selected for bulk update
|
||||||
|
def _bulk_update_issues_path(issue, *args)
|
||||||
|
if issue
|
||||||
|
issue_path(issue, *args)
|
||||||
|
else
|
||||||
|
bulk_update_issues_path(*args)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
def board_path(board, *args)
|
def board_path(board, *args)
|
||||||
project_board_path(board.project, board, *args)
|
project_board_path(board.project, board, *args)
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -17,7 +17,8 @@
|
|||||||
<li>
|
<li>
|
||||||
<%= context_menu_link(
|
<%= context_menu_link(
|
||||||
s.name,
|
s.name,
|
||||||
bulk_update_issues_path(
|
_bulk_update_issues_path(
|
||||||
|
@issue,
|
||||||
:ids => @issue_ids, :issue => {:status_id => s}, :back_url => @back
|
:ids => @issue_ids, :issue => {:status_id => s}, :back_url => @back
|
||||||
),
|
),
|
||||||
:method => :post,
|
:method => :post,
|
||||||
@@ -34,7 +35,7 @@
|
|||||||
<a href="#" class="submenu"><%= l(:field_tracker) %></a>
|
<a href="#" class="submenu"><%= l(:field_tracker) %></a>
|
||||||
<ul>
|
<ul>
|
||||||
<% @trackers.each do |t| -%>
|
<% @trackers.each do |t| -%>
|
||||||
<li><%= context_menu_link t.name, bulk_update_issues_path(:ids => @issue_ids, :issue => {'tracker_id' => t}, :back_url => @back), :method => :post,
|
<li><%= context_menu_link t.name, _bulk_update_issues_path(@issue, :ids => @issue_ids, :issue => {'tracker_id' => t}, :back_url => @back), :method => :patch,
|
||||||
:selected => (@issue && t == @issue.tracker), :disabled => !@can[:edit] %></li>
|
:selected => (@issue && t == @issue.tracker), :disabled => !@can[:edit] %></li>
|
||||||
<% end -%>
|
<% end -%>
|
||||||
</ul>
|
</ul>
|
||||||
@@ -46,7 +47,7 @@
|
|||||||
<a href="#" class="submenu"><%= l(:field_priority) %></a>
|
<a href="#" class="submenu"><%= l(:field_priority) %></a>
|
||||||
<ul>
|
<ul>
|
||||||
<% @priorities.each do |p| -%>
|
<% @priorities.each do |p| -%>
|
||||||
<li><%= context_menu_link p.name, bulk_update_issues_path(:ids => @issue_ids, :issue => {'priority_id' => p}, :back_url => @back), :method => :post,
|
<li><%= context_menu_link p.name, _bulk_update_issues_path(@issue, :ids => @issue_ids, :issue => {'priority_id' => p}, :back_url => @back), :method => :patch,
|
||||||
:selected => (@issue && p == @issue.priority), :disabled => (!@can[:edit] || @issues.any?(&:priority_derived?)) %></li>
|
:selected => (@issue && p == @issue.priority), :disabled => (!@can[:edit] || @issues.any?(&:priority_derived?)) %></li>
|
||||||
<% end -%>
|
<% end -%>
|
||||||
</ul>
|
</ul>
|
||||||
@@ -58,10 +59,10 @@
|
|||||||
<a href="#" class="submenu"><%= l(:field_fixed_version) %></a>
|
<a href="#" class="submenu"><%= l(:field_fixed_version) %></a>
|
||||||
<ul>
|
<ul>
|
||||||
<% @versions.sort.each do |v| -%>
|
<% @versions.sort.each do |v| -%>
|
||||||
<li><%= context_menu_link format_version_name(v), bulk_update_issues_path(:ids => @issue_ids, :issue => {'fixed_version_id' => v}, :back_url => @back), :method => :post,
|
<li><%= context_menu_link format_version_name(v), _bulk_update_issues_path(@issue, :ids => @issue_ids, :issue => {'fixed_version_id' => v}, :back_url => @back), :method => :patch,
|
||||||
:selected => (@issue && v == @issue.fixed_version), :disabled => !@can[:edit] %></li>
|
:selected => (@issue && v == @issue.fixed_version), :disabled => !@can[:edit] %></li>
|
||||||
<% end -%>
|
<% end -%>
|
||||||
<li><%= context_menu_link l(:label_none), bulk_update_issues_path(:ids => @issue_ids, :issue => {'fixed_version_id' => 'none'}, :back_url => @back), :method => :post,
|
<li><%= context_menu_link l(:label_none), _bulk_update_issues_path(@issue, :ids => @issue_ids, :issue => {'fixed_version_id' => 'none'}, :back_url => @back), :method => :patch,
|
||||||
:selected => (@issue && @issue.fixed_version.nil?), :disabled => !@can[:edit] %></li>
|
:selected => (@issue && @issue.fixed_version.nil?), :disabled => !@can[:edit] %></li>
|
||||||
</ul>
|
</ul>
|
||||||
</li>
|
</li>
|
||||||
@@ -72,14 +73,14 @@
|
|||||||
<a href="#" class="submenu"><%= l(:field_assigned_to) %></a>
|
<a href="#" class="submenu"><%= l(:field_assigned_to) %></a>
|
||||||
<ul>
|
<ul>
|
||||||
<% if @assignables.include?(User.current) %>
|
<% if @assignables.include?(User.current) %>
|
||||||
<li><%= context_menu_link "<< #{l(:label_me)} >>", bulk_update_issues_path(:ids => @issue_ids, :issue => {'assigned_to_id' => User.current}, :back_url => @back), :method => :post,
|
<li><%= context_menu_link "<< #{l(:label_me)} >>", _bulk_update_issues_path(@issue, :ids => @issue_ids, :issue => {'assigned_to_id' => User.current}, :back_url => @back), :method => :patch,
|
||||||
:disabled => !@can[:edit] %></li>
|
:disabled => !@can[:edit] %></li>
|
||||||
<% end %>
|
<% end %>
|
||||||
<% @assignables.each do |u| -%>
|
<% @assignables.each do |u| -%>
|
||||||
<li><%= context_menu_link u.name, bulk_update_issues_path(:ids => @issue_ids, :issue => {'assigned_to_id' => u}, :back_url => @back), :method => :post,
|
<li><%= context_menu_link u.name, _bulk_update_issues_path(@issue, :ids => @issue_ids, :issue => {'assigned_to_id' => u}, :back_url => @back), :method => :patch,
|
||||||
:selected => (@issue && u == @issue.assigned_to), :disabled => !@can[:edit] %></li>
|
:selected => (@issue && u == @issue.assigned_to), :disabled => !@can[:edit] %></li>
|
||||||
<% end -%>
|
<% end -%>
|
||||||
<li><%= context_menu_link l(:label_nobody), bulk_update_issues_path(:ids => @issue_ids, :issue => {'assigned_to_id' => 'none'}, :back_url => @back), :method => :post,
|
<li><%= context_menu_link l(:label_nobody), _bulk_update_issues_path(@issue, :ids => @issue_ids, :issue => {'assigned_to_id' => 'none'}, :back_url => @back), :method => :patch,
|
||||||
:selected => (@issue && @issue.assigned_to.nil?), :disabled => !@can[:edit] %></li>
|
:selected => (@issue && @issue.assigned_to.nil?), :disabled => !@can[:edit] %></li>
|
||||||
</ul>
|
</ul>
|
||||||
</li>
|
</li>
|
||||||
@@ -90,10 +91,10 @@
|
|||||||
<a href="#" class="submenu"><%= l(:field_category) %></a>
|
<a href="#" class="submenu"><%= l(:field_category) %></a>
|
||||||
<ul>
|
<ul>
|
||||||
<% @project.issue_categories.each do |u| -%>
|
<% @project.issue_categories.each do |u| -%>
|
||||||
<li><%= context_menu_link u.name, bulk_update_issues_path(:ids => @issue_ids, :issue => {'category_id' => u}, :back_url => @back), :method => :post,
|
<li><%= context_menu_link u.name, _bulk_update_issues_path(@issue, :ids => @issue_ids, :issue => {'category_id' => u}, :back_url => @back), :method => :patch,
|
||||||
:selected => (@issue && u == @issue.category), :disabled => !@can[:edit] %></li>
|
:selected => (@issue && u == @issue.category), :disabled => !@can[:edit] %></li>
|
||||||
<% end -%>
|
<% end -%>
|
||||||
<li><%= context_menu_link l(:label_none), bulk_update_issues_path(:ids => @issue_ids, :issue => {'category_id' => 'none'}, :back_url => @back), :method => :post,
|
<li><%= context_menu_link l(:label_none), _bulk_update_issues_path(@issue, :ids => @issue_ids, :issue => {'category_id' => 'none'}, :back_url => @back), :method => :patch,
|
||||||
:selected => (@issue && @issue.category.nil?), :disabled => !@can[:edit] %></li>
|
:selected => (@issue && @issue.category.nil?), :disabled => !@can[:edit] %></li>
|
||||||
</ul>
|
</ul>
|
||||||
</li>
|
</li>
|
||||||
@@ -104,7 +105,7 @@
|
|||||||
<a href="#" class="submenu"><%= l(:field_done_ratio) %></a>
|
<a href="#" class="submenu"><%= l(:field_done_ratio) %></a>
|
||||||
<ul>
|
<ul>
|
||||||
<% (0..10).map{|x|x*10}.each do |p| -%>
|
<% (0..10).map{|x|x*10}.each do |p| -%>
|
||||||
<li><%= context_menu_link "#{p}%", bulk_update_issues_path(:ids => @issue_ids, :issue => {'done_ratio' => p}, :back_url => @back), :method => :post,
|
<li><%= context_menu_link "#{p}%", _bulk_update_issues_path(@issue, :ids => @issue_ids, :issue => {'done_ratio' => p}, :back_url => @back), :method => :patch,
|
||||||
:selected => (@issue && p == @issue.done_ratio), :disabled => (!@can[:edit] || @issues.any?(&:done_ratio_derived?)) %></li>
|
:selected => (@issue && p == @issue.done_ratio), :disabled => (!@can[:edit] || @issues.any?(&:done_ratio_derived?)) %></li>
|
||||||
<% end -%>
|
<% end -%>
|
||||||
</ul>
|
</ul>
|
||||||
|
|||||||
@@ -215,7 +215,7 @@ Rails.application.routes.draw do
|
|||||||
end
|
end
|
||||||
collection do
|
collection do
|
||||||
match 'bulk_edit', :via => [:get, :post]
|
match 'bulk_edit', :via => [:get, :post]
|
||||||
post 'bulk_update'
|
match 'bulk_update', :via => [:post, :patch]
|
||||||
end
|
end
|
||||||
resources :time_entries, :controller => 'timelog', :only => [:new, :create]
|
resources :time_entries, :controller => 'timelog', :only => [:new, :create]
|
||||||
shallow do
|
shallow do
|
||||||
|
|||||||
@@ -36,7 +36,7 @@ class ContextMenusControllerTest < Redmine::ControllerTest
|
|||||||
:time_entries,
|
:time_entries,
|
||||||
:custom_fields, :custom_fields_trackers, :custom_fields_projects
|
:custom_fields, :custom_fields_trackers, :custom_fields_projects
|
||||||
|
|
||||||
def test_context_menu_one_issue
|
def test_context_menu_one_issue_should_link_to_issue_path
|
||||||
@request.session[:user_id] = 2
|
@request.session[:user_id] = 2
|
||||||
get(
|
get(
|
||||||
:issues,
|
:issues,
|
||||||
@@ -52,15 +52,38 @@ class ContextMenusControllerTest < Redmine::ControllerTest
|
|||||||
assert_select 'a.icon-del[href=?]', '/issues?ids%5B%5D=1', :text => 'Delete'
|
assert_select 'a.icon-del[href=?]', '/issues?ids%5B%5D=1', :text => 'Delete'
|
||||||
|
|
||||||
# Statuses
|
# Statuses
|
||||||
assert_select 'a[href=?]', '/issues/bulk_update?ids%5B%5D=1&issue%5Bstatus_id%5D=5', :text => 'Closed'
|
assert_select 'a[href=?]', '/issues/1?ids%5B%5D=1&issue%5Bstatus_id%5D=5', :text => 'Closed'
|
||||||
assert_select 'a[href=?]', '/issues/bulk_update?ids%5B%5D=1&issue%5Bpriority_id%5D=8', :text => 'Immediate'
|
assert_select 'a[href=?]', '/issues/1?ids%5B%5D=1&issue%5Bpriority_id%5D=8', :text => 'Immediate'
|
||||||
# No inactive priorities
|
# No inactive priorities
|
||||||
assert_select 'a', :text => /Inactive Priority/, :count => 0
|
assert_select 'a', :text => /Inactive Priority/, :count => 0
|
||||||
# Versions
|
# Versions
|
||||||
assert_select 'a[href=?]', '/issues/bulk_update?ids%5B%5D=1&issue%5Bfixed_version_id%5D=3', :text => '2.0'
|
assert_select 'a[href=?]', '/issues/1?ids%5B%5D=1&issue%5Bfixed_version_id%5D=3', :text => '2.0'
|
||||||
assert_select 'a[href=?]', '/issues/bulk_update?ids%5B%5D=1&issue%5Bfixed_version_id%5D=4', :text => 'eCookbook Subproject 1 - 2.0'
|
assert_select 'a[href=?]', '/issues/1?ids%5B%5D=1&issue%5Bfixed_version_id%5D=4', :text => 'eCookbook Subproject 1 - 2.0'
|
||||||
# Assignees
|
# Assignees
|
||||||
assert_select 'a[href=?]', '/issues/bulk_update?ids%5B%5D=1&issue%5Bassigned_to_id%5D=3', :text => 'Dave Lopper'
|
assert_select 'a[href=?]', '/issues/1?ids%5B%5D=1&issue%5Bassigned_to_id%5D=3', :text => 'Dave Lopper'
|
||||||
|
end
|
||||||
|
|
||||||
|
def test_context_menu_multiple_issues_should_link_to_bulk_update_issues_path
|
||||||
|
@request.session[:user_id] = 2
|
||||||
|
get :issues, :params => {
|
||||||
|
:ids => [1, 2]
|
||||||
|
}
|
||||||
|
assert_response :success
|
||||||
|
|
||||||
|
assert_select 'a.icon-edit[href=?]', '/issues/bulk_edit?ids%5B%5D=1&ids%5B%5D=2', :text => 'Edit'
|
||||||
|
assert_select 'a.icon-copy[href=?]', '/issues/bulk_edit?copy=1&ids%5B%5D=1&ids%5B%5D=2', :text => 'Copy'
|
||||||
|
assert_select 'a.icon-del[href=?]', '/issues?ids%5B%5D=1&ids%5B%5D=2', :text => 'Delete'
|
||||||
|
|
||||||
|
# Statuses
|
||||||
|
assert_select 'a[href=?]', '/issues/bulk_update?ids%5B%5D=1&ids%5B%5D=2&issue%5Bstatus_id%5D=5', :text => 'Closed'
|
||||||
|
assert_select 'a[href=?]', '/issues/bulk_update?ids%5B%5D=1&ids%5B%5D=2&issue%5Bpriority_id%5D=8', :text => 'Immediate'
|
||||||
|
# No inactive priorities
|
||||||
|
assert_select 'a', :text => /Inactive Priority/, :count => 0
|
||||||
|
# Versions
|
||||||
|
assert_select 'a[href=?]', '/issues/bulk_update?ids%5B%5D=1&ids%5B%5D=2&issue%5Bfixed_version_id%5D=3', :text => '2.0'
|
||||||
|
assert_select 'a[href=?]', '/issues/bulk_update?ids%5B%5D=1&ids%5B%5D=2&issue%5Bfixed_version_id%5D=4', :text => 'eCookbook Subproject 1 - 2.0'
|
||||||
|
# Assignees
|
||||||
|
assert_select 'a[href=?]', '/issues/bulk_update?ids%5B%5D=1&ids%5B%5D=2&issue%5Bassigned_to_id%5D=3', :text => 'Dave Lopper'
|
||||||
end
|
end
|
||||||
|
|
||||||
def test_context_menu_one_issue_by_anonymous
|
def test_context_menu_one_issue_by_anonymous
|
||||||
@@ -272,12 +295,12 @@ class ContextMenusControllerTest < Redmine::ControllerTest
|
|||||||
get(
|
get(
|
||||||
:issues,
|
:issues,
|
||||||
:params => {
|
:params => {
|
||||||
:ids => [1]
|
:ids => [1, 2]
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
assert_response :success
|
assert_response :success
|
||||||
|
|
||||||
assert_select 'a[href=?]', '/issues/bulk_update?ids%5B%5D=1&issue%5Bassigned_to_id%5D=2', :text => / me /
|
assert_select 'a[href=?]', '/issues/bulk_update?ids%5B%5D=1&ids%5B%5D=2&issue%5Bassigned_to_id%5D=2', :text => / me /
|
||||||
end
|
end
|
||||||
|
|
||||||
def test_context_menu_should_propose_shared_versions_for_issues_from_different_projects
|
def test_context_menu_should_propose_shared_versions_for_issues_from_different_projects
|
||||||
|
|||||||
@@ -43,6 +43,7 @@ class RoutingIssuesTest < Redmine::RoutingTest
|
|||||||
should_route 'GET /issues/bulk_edit' => 'issues#bulk_edit'
|
should_route 'GET /issues/bulk_edit' => 'issues#bulk_edit'
|
||||||
should_route 'POST /issues/bulk_edit' => 'issues#bulk_edit' # For updating the bulk edit form
|
should_route 'POST /issues/bulk_edit' => 'issues#bulk_edit' # For updating the bulk edit form
|
||||||
should_route 'POST /issues/bulk_update' => 'issues#bulk_update'
|
should_route 'POST /issues/bulk_update' => 'issues#bulk_update'
|
||||||
|
should_route 'PATCH /issues/bulk_update' => 'issues#bulk_update'
|
||||||
end
|
end
|
||||||
|
|
||||||
def test_issues_scoped_under_project
|
def test_issues_scoped_under_project
|
||||||
|
|||||||
Reference in New Issue
Block a user