diff --git a/app/helpers/routes_helper.rb b/app/helpers/routes_helper.rb
index 554b014c4..4f66ae659 100644
--- a/app/helpers/routes_helper.rb
+++ b/app/helpers/routes_helper.rb
@@ -29,6 +29,14 @@ module RoutesHelper
end
end
+ def _project_issues_url(project, *args)
+ if project
+ project_issues_url(project, *args)
+ else
+ issues_url(*args)
+ end
+ end
+
def _project_news_path(project, *args)
if project
project_news_index_path(project, *args)
diff --git a/app/views/context_menus/issues.html.erb b/app/views/context_menus/issues.html.erb
index 3a8e19cdd..cf402f120 100644
--- a/app/views/context_menus/issues.html.erb
+++ b/app/views/context_menus/issues.html.erb
@@ -155,9 +155,11 @@
<%= context_menu_link l(:button_add_subtask), url_for_new_subtask(@issue),
:class => 'icon icon-add' %>
<% end %>
+ <%= copy_object_url_link(issue_url(@issue)) %>
<%= context_menu_link l(:button_copy), project_copy_issue_path(@project, @issue),
:class => 'icon icon-copy', :disabled => !@can[:copy] %>
<% else %>
+ <%= copy_object_url_link(_project_issues_url(@project, set_filter: 1, status_id: '*', issue_id: @issue_ids.join(','))) %>
<%= context_menu_link l(:button_copy), bulk_edit_issues_path(:ids => @issue_ids, :copy => '1'),
:class => 'icon icon-copy', :disabled => !@can[:copy] %>
<% end %>
diff --git a/test/functional/context_menus_controller_test.rb b/test/functional/context_menus_controller_test.rb
index b1a819422..9c66ec9ed 100644
--- a/test/functional/context_menus_controller_test.rb
+++ b/test/functional/context_menus_controller_test.rb
@@ -47,6 +47,7 @@ class ContextMenusControllerTest < Redmine::ControllerTest
assert_response :success
assert_select 'a.icon-edit[href=?]', '/issues/1/edit', :text => 'Edit'
+ assert_select 'a.icon-copy-link[data-clipboard-text=?]', 'http://test.host/issues/1', :text => 'Copy link'
assert_select 'a.icon-copy[href=?]', '/projects/ecookbook/issues/1/copy', :text => 'Copy'
assert_select 'a.icon-del[href=?]', '/issues?ids%5B%5D=1', :text => 'Delete'
@@ -89,6 +90,8 @@ class ContextMenusControllerTest < Redmine::ControllerTest
ids = [1, 2].map {|i| "ids%5B%5D=#{i}"}.join('&')
assert_select 'a.icon-edit[href=?]', "/issues/bulk_edit?#{ids}", :text => 'Edit'
+ # issue_id: '1,2', set_filter: 1, status_id: '*'
+ assert_select 'a.icon-copy-link[data-clipboard-text=?]', "http://test.host/projects/ecookbook/issues?issue_id=1%2C2&set_filter=1&status_id=%2A", :text => 'Copy link'
assert_select 'a.icon-copy[href=?]', "/issues/bulk_edit?copy=1{ids}", :text => 'Copy'
assert_select 'a.icon-del[href=?]', "/issues?#{ids}", :text => 'Delete'
@@ -110,6 +113,8 @@ class ContextMenusControllerTest < Redmine::ControllerTest
ids = [1, 2, 6].map {|i| "ids%5B%5D=#{i}"}.join('&')
assert_select 'a.icon-edit[href=?]', "/issues/bulk_edit?#{ids}", :text => 'Edit'
+ # issue_id: '1,2,6', set_filter: 1, status_id: '*'
+ assert_select 'a.icon-copy-link[data-clipboard-text=?]', "http://test.host/issues?issue_id=1%2C2%2C6&set_filter=1&status_id=%2A", :text => 'Copy link'
assert_select 'a.icon-del[href=?]', "/issues?#{ids}", :text => 'Delete'
assert_select 'a[href=?]', "/issues/bulk_update?#{ids}&issue%5Bstatus_id%5D=5", :text => 'Closed'
diff --git a/test/helpers/routes_helper_test.rb b/test/helpers/routes_helper_test.rb
index c47939e1a..240a5862e 100644
--- a/test/helpers/routes_helper_test.rb
+++ b/test/helpers/routes_helper_test.rb
@@ -40,4 +40,11 @@ class RoutesHelperTest < Redmine::HelperTest
assert_equal '/issues/1/time_entries/new', _new_time_entry_path(nil, Issue.find(1))
assert_equal '/time_entries/new', _new_time_entry_path(nil, nil)
end
+
+ def test_project_issues_url
+ assert_equal 'http://test.host/projects/ecookbook/issues', _project_issues_url(Project.find(1))
+ assert_equal 'http://test.host/issues', _project_issues_url(nil)
+ assert_equal 'http://test.host/projects/ecookbook/issues?set_filter=1', _project_issues_url(Project.find(1), set_filter: 1)
+ assert_equal 'http://test.host/issues?set_filter=1', _project_issues_url(nil, set_filter: 1)
+ end
end