mirror of
https://github.com/redmine/redmine.git
synced 2025-11-11 15:56:03 +01:00
Add configurable setting for copying attachments when copying an issue (#36197).
Patch by Yuichi HARADA (user:yui.har). git-svn-id: https://svn.redmine.org/redmine/trunk@22926 e93f8b46-1217-0410-a6f0-8f06a7374b81
This commit is contained in:
@@ -328,7 +328,8 @@ class IssuesController < ApplicationController
|
|||||||
@versions = target_projects.map {|p| p.shared_versions.open}.reduce(:&)
|
@versions = target_projects.map {|p| p.shared_versions.open}.reduce(:&)
|
||||||
@categories = target_projects.map {|p| p.issue_categories}.reduce(:&)
|
@categories = target_projects.map {|p| p.issue_categories}.reduce(:&)
|
||||||
if @copy
|
if @copy
|
||||||
@attachments_present = @issues.detect {|i| i.attachments.any?}.present?
|
@attachments_present = @issues.detect {|i| i.attachments.any?}.present? &&
|
||||||
|
(Setting.copy_attachments_on_issue_copy == 'ask')
|
||||||
@subtasks_present = @issues.detect {|i| !i.leaf?}.present?
|
@subtasks_present = @issues.detect {|i| !i.leaf?}.present?
|
||||||
@watchers_present = User.current.allowed_to?(:add_issue_watchers, @projects) &&
|
@watchers_present = User.current.allowed_to?(:add_issue_watchers, @projects) &&
|
||||||
Watcher.where(:watchable_type => 'Issue',
|
Watcher.where(:watchable_type => 'Issue',
|
||||||
@@ -347,7 +348,6 @@ class IssuesController < ApplicationController
|
|||||||
|
|
||||||
attributes = parse_params_for_bulk_update(params[:issue])
|
attributes = parse_params_for_bulk_update(params[:issue])
|
||||||
copy_subtasks = (params[:copy_subtasks] == '1')
|
copy_subtasks = (params[:copy_subtasks] == '1')
|
||||||
copy_attachments = (params[:copy_attachments] == '1')
|
|
||||||
copy_watchers = (params[:copy_watchers] == '1')
|
copy_watchers = (params[:copy_watchers] == '1')
|
||||||
|
|
||||||
if @copy
|
if @copy
|
||||||
@@ -386,7 +386,7 @@ class IssuesController < ApplicationController
|
|||||||
if @copy
|
if @copy
|
||||||
issue = orig_issue.copy(
|
issue = orig_issue.copy(
|
||||||
{},
|
{},
|
||||||
:attachments => copy_attachments,
|
:attachments => copy_attachments?(params[:copy_attachments]),
|
||||||
:subtasks => copy_subtasks,
|
:subtasks => copy_subtasks,
|
||||||
:watchers => copy_watchers,
|
:watchers => copy_watchers,
|
||||||
:link => link_copy?(params[:link_copy])
|
:link => link_copy?(params[:link_copy])
|
||||||
@@ -593,7 +593,7 @@ class IssuesController < ApplicationController
|
|||||||
end
|
end
|
||||||
|
|
||||||
@link_copy = link_copy?(params[:link_copy]) || request.get?
|
@link_copy = link_copy?(params[:link_copy]) || request.get?
|
||||||
@copy_attachments = params[:copy_attachments].present? || request.get?
|
@copy_attachments = copy_attachments?(params[:copy_attachments]) || request.get?
|
||||||
@copy_subtasks = params[:copy_subtasks].present? || request.get?
|
@copy_subtasks = params[:copy_subtasks].present? || request.get?
|
||||||
@copy_watchers = User.current.allowed_to?(:add_issue_watchers, @project)
|
@copy_watchers = User.current.allowed_to?(:add_issue_watchers, @project)
|
||||||
@issue.copy_from(@copy_from, :attachments => @copy_attachments,
|
@issue.copy_from(@copy_from, :attachments => @copy_attachments,
|
||||||
@@ -696,6 +696,19 @@ class IssuesController < ApplicationController
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
# Returns true if the attachments should be copied
|
||||||
|
# from the original issue
|
||||||
|
def copy_attachments?(param)
|
||||||
|
case Setting.copy_attachments_on_issue_copy
|
||||||
|
when 'yes'
|
||||||
|
true
|
||||||
|
when 'no'
|
||||||
|
false
|
||||||
|
when 'ask'
|
||||||
|
param == '1'
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
# Redirects user after a successful issue creation
|
# Redirects user after a successful issue creation
|
||||||
def redirect_after_create
|
def redirect_after_create
|
||||||
if params[:continue]
|
if params[:continue]
|
||||||
|
|||||||
@@ -166,6 +166,16 @@ module SettingsHelper
|
|||||||
options.map {|label, value| [l(label), value.to_s]}
|
options.map {|label, value| [l(label), value.to_s]}
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def copy_attachments_on_issue_copy_options
|
||||||
|
options = [
|
||||||
|
[:general_text_Yes, 'yes'],
|
||||||
|
[:general_text_No, 'no'],
|
||||||
|
[:label_ask, 'ask']
|
||||||
|
]
|
||||||
|
|
||||||
|
options.map {|label, value| [l(label), value.to_s]}
|
||||||
|
end
|
||||||
|
|
||||||
def default_global_issue_query_options
|
def default_global_issue_query_options
|
||||||
[[l(:label_none), '']] + IssueQuery.only_public.where(project_id: nil).pluck(:name, :id)
|
[[l(:label_none), '']] + IssueQuery.only_public.where(project_id: nil).pluck(:name, :id)
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -17,7 +17,7 @@
|
|||||||
<%= check_box_tag 'link_copy', '1', @link_copy %>
|
<%= check_box_tag 'link_copy', '1', @link_copy %>
|
||||||
</p>
|
</p>
|
||||||
<% end %>
|
<% end %>
|
||||||
<% if @copy_from && @copy_from.attachments.any? %>
|
<% if @copy_from && Setting.copy_attachments_on_issue_copy == 'ask' && @copy_from.attachments.any? %>
|
||||||
<p>
|
<p>
|
||||||
<label for="copy_attachments"><%= l(:label_copy_attachments) %></label>
|
<label for="copy_attachments"><%= l(:label_copy_attachments) %></label>
|
||||||
<%= check_box_tag 'copy_attachments', '1', @copy_attachments %>
|
<%= check_box_tag 'copy_attachments', '1', @copy_attachments %>
|
||||||
|
|||||||
@@ -5,6 +5,8 @@
|
|||||||
|
|
||||||
<p><%= setting_select :link_copied_issue, link_copied_issue_options %></p>
|
<p><%= setting_select :link_copied_issue, link_copied_issue_options %></p>
|
||||||
|
|
||||||
|
<p><%= setting_select :copy_attachments_on_issue_copy, copy_attachments_on_issue_copy_options %></p>
|
||||||
|
|
||||||
<p><%= setting_select :cross_project_subtasks, cross_project_subtasks_options %></p>
|
<p><%= setting_select :cross_project_subtasks, cross_project_subtasks_options %></p>
|
||||||
|
|
||||||
<p><%= setting_check_box :close_duplicate_issues %></p>
|
<p><%= setting_check_box :close_duplicate_issues %></p>
|
||||||
|
|||||||
@@ -503,6 +503,7 @@ en:
|
|||||||
setting_force_default_language_for_anonymous: Force default language for anonymous users
|
setting_force_default_language_for_anonymous: Force default language for anonymous users
|
||||||
setting_force_default_language_for_loggedin: Force default language for logged-in users
|
setting_force_default_language_for_loggedin: Force default language for logged-in users
|
||||||
setting_link_copied_issue: Link issues on copy
|
setting_link_copied_issue: Link issues on copy
|
||||||
|
setting_copy_attachments_on_issue_copy: Copy attachments on copy
|
||||||
setting_max_additional_emails: Maximum number of additional email addresses
|
setting_max_additional_emails: Maximum number of additional email addresses
|
||||||
setting_email_domains_allowed: Allowed email domains
|
setting_email_domains_allowed: Allowed email domains
|
||||||
setting_email_domains_denied: Disallowed email domains
|
setting_email_domains_denied: Disallowed email domains
|
||||||
|
|||||||
@@ -190,6 +190,8 @@ parent_issue_done_ratio:
|
|||||||
default: 'derived'
|
default: 'derived'
|
||||||
link_copied_issue:
|
link_copied_issue:
|
||||||
default: 'ask'
|
default: 'ask'
|
||||||
|
copy_attachments_on_issue_copy:
|
||||||
|
default: 'ask'
|
||||||
close_duplicate_issues:
|
close_duplicate_issues:
|
||||||
default: 1
|
default: 1
|
||||||
issue_group_assignment:
|
issue_group_assignment:
|
||||||
|
|||||||
@@ -5624,6 +5624,47 @@ class IssuesControllerTest < Redmine::ControllerTest
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def test_create_as_copy_should_always_copy_attachments_by_settings
|
||||||
|
assert_equal 4, Issue.find(3).attachments.size
|
||||||
|
with_settings :copy_attachments_on_issue_copy => 'yes' do
|
||||||
|
@request.session[:user_id] = 2
|
||||||
|
assert_difference 'Issue.count' do
|
||||||
|
assert_difference 'Attachment.count', 4 do
|
||||||
|
post(
|
||||||
|
:create,
|
||||||
|
:params => {
|
||||||
|
:project_id => 1,
|
||||||
|
:copy_from => 3,
|
||||||
|
:issue => {
|
||||||
|
:subject => 'Copy'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
def test_create_as_copy_should_never_copy_attachments_by_settings
|
||||||
|
with_settings :copy_attachments_on_issue_copy => 'no' do
|
||||||
|
@request.session[:user_id] = 2
|
||||||
|
assert_difference 'Issue.count' do
|
||||||
|
assert_no_difference 'Attachment.count' do
|
||||||
|
post(
|
||||||
|
:create,
|
||||||
|
:params => {
|
||||||
|
:project_id => 1,
|
||||||
|
:copy_from => 3,
|
||||||
|
:issue => {
|
||||||
|
:subject => 'Copy'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
def test_create_as_copy_should_copy_subtasks
|
def test_create_as_copy_should_copy_subtasks
|
||||||
@request.session[:user_id] = 2
|
@request.session[:user_id] = 2
|
||||||
issue = Issue.generate_with_descendants!
|
issue = Issue.generate_with_descendants!
|
||||||
@@ -8085,6 +8126,47 @@ class IssuesControllerTest < Redmine::ControllerTest
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def test_bulk_copy_should_never_copy_attachments_by_settings
|
||||||
|
with_settings :copy_attachments_on_issue_copy => 'no' do
|
||||||
|
@request.session[:user_id] = 2
|
||||||
|
assert_difference 'Issue.count' do
|
||||||
|
assert_no_difference 'Attachment.count' do
|
||||||
|
post(
|
||||||
|
:bulk_update,
|
||||||
|
:params => {
|
||||||
|
:ids => [3],
|
||||||
|
:copy => '1',
|
||||||
|
:issue => {
|
||||||
|
:project_id => ''
|
||||||
|
}
|
||||||
|
}
|
||||||
|
)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
def test_bulk_copy_should_always_copy_attachments_by_settings
|
||||||
|
assert_equal 4, Issue.find(3).attachments.size
|
||||||
|
with_settings :copy_attachments_on_issue_copy => 'yes' do
|
||||||
|
@request.session[:user_id] = 2
|
||||||
|
assert_difference 'Issue.count' do
|
||||||
|
assert_difference 'Attachment.count', 4 do
|
||||||
|
post(
|
||||||
|
:bulk_update,
|
||||||
|
:params => {
|
||||||
|
:ids => [3],
|
||||||
|
:copy => '1',
|
||||||
|
:issue => {
|
||||||
|
:project_id => ''
|
||||||
|
}
|
||||||
|
}
|
||||||
|
)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
def test_bulk_copy_should_add_relations_with_copied_issues
|
def test_bulk_copy_should_add_relations_with_copied_issues
|
||||||
@request.session[:user_id] = 2
|
@request.session[:user_id] = 2
|
||||||
assert_difference 'Issue.count', 2 do
|
assert_difference 'Issue.count', 2 do
|
||||||
|
|||||||
Reference in New Issue
Block a user