Feature #36197 » 36197.patch
| app/controllers/issues_controller.rb | ||
|---|---|---|
| 317 | 317 |
@versions = target_projects.map {|p| p.shared_versions.open}.reduce(:&)
|
| 318 | 318 |
@categories = target_projects.map {|p| p.issue_categories}.reduce(:&)
|
| 319 | 319 |
if @copy |
| 320 |
@attachments_present = @issues.detect {|i| i.attachments.any?}.present?
|
|
| 320 |
@attachments_present = @issues.detect {|i| i.attachments.any?}.present? &&
|
|
| 321 |
(Setting.copy_attachments_issue == 'ask') |
|
| 321 | 322 |
@subtasks_present = @issues.detect {|i| !i.leaf?}.present?
|
| 322 | 323 |
@watchers_present = User.current.allowed_to?(:add_issue_watchers, @projects) && |
| 323 | 324 |
Watcher.where(:watchable_type => 'Issue', |
| ... | ... | |
| 336 | 337 | |
| 337 | 338 |
attributes = parse_params_for_bulk_update(params[:issue]) |
| 338 | 339 |
copy_subtasks = (params[:copy_subtasks] == '1') |
| 339 |
copy_attachments = (params[:copy_attachments] == '1') |
|
| 340 | 340 |
copy_watchers = (params[:copy_watchers] == '1') |
| 341 | 341 | |
| 342 | 342 |
if @copy |
| ... | ... | |
| 375 | 375 |
if @copy |
| 376 | 376 |
issue = orig_issue.copy( |
| 377 | 377 |
{},
|
| 378 |
:attachments => copy_attachments, |
|
| 378 |
:attachments => copy_attachments?(params[:copy_attachments]),
|
|
| 379 | 379 |
:subtasks => copy_subtasks, |
| 380 | 380 |
:watchers => copy_watchers, |
| 381 | 381 |
:link => link_copy?(params[:link_copy]) |
| ... | ... | |
| 581 | 581 |
end |
| 582 | 582 | |
| 583 | 583 |
@link_copy = link_copy?(params[:link_copy]) || request.get? |
| 584 |
@copy_attachments = params[:copy_attachments].present? || request.get?
|
|
| 584 |
@copy_attachments = copy_attachments?(params[:copy_attachments]) || request.get?
|
|
| 585 | 585 |
@copy_subtasks = params[:copy_subtasks].present? || request.get? |
| 586 | 586 |
@copy_watchers = User.current.allowed_to?(:add_issue_watchers, @project) |
| 587 | 587 |
@issue.copy_from(@copy_from, :attachments => @copy_attachments, |
| ... | ... | |
| 684 | 684 |
end |
| 685 | 685 |
end |
| 686 | 686 | |
| 687 |
# Returns true if the attachments should be copied |
|
| 688 |
# from the original issue |
|
| 689 |
def copy_attachments?(param) |
|
| 690 |
case Setting.copy_attachments_issue |
|
| 691 |
when 'yes' |
|
| 692 |
true |
|
| 693 |
when 'no' |
|
| 694 |
false |
|
| 695 |
when 'ask' |
|
| 696 |
param == '1' |
|
| 697 |
end |
|
| 698 |
end |
|
| 699 | ||
| 687 | 700 |
# Redirects user after a successful issue creation |
| 688 | 701 |
def redirect_after_create |
| 689 | 702 |
if params[:continue] |
| app/helpers/settings_helper.rb | ||
|---|---|---|
| 166 | 166 |
options.map {|label, value| [l(label), value.to_s]}
|
| 167 | 167 |
end |
| 168 | 168 | |
| 169 |
def copy_attachments_issue_options |
|
| 170 |
options = [ |
|
| 171 |
[:general_text_Yes, 'yes'], |
|
| 172 |
[:general_text_No, 'no'], |
|
| 173 |
[:label_ask, 'ask'] |
|
| 174 |
] |
|
| 175 | ||
| 176 |
options.map {|label, value| [l(label), value.to_s]}
|
|
| 177 |
end |
|
| 178 | ||
| 169 | 179 |
def default_global_issue_query_options |
| 170 | 180 |
[[l(:label_none), '']] + IssueQuery.only_public.where(project_id: nil).pluck(:name, :id) |
| 171 | 181 |
end |
| app/views/issues/new.html.erb | ||
|---|---|---|
| 17 | 17 |
<%= check_box_tag 'link_copy', '1', @link_copy %> |
| 18 | 18 |
</p> |
| 19 | 19 |
<% end %> |
| 20 |
<% if @copy_from && @copy_from.attachments.any? %> |
|
| 20 |
<% if @copy_from && Setting.copy_attachments_issue == 'ask' && @copy_from.attachments.any? %>
|
|
| 21 | 21 |
<p> |
| 22 | 22 |
<label for="copy_attachments"><%= l(:label_copy_attachments) %></label> |
| 23 | 23 |
<%= check_box_tag 'copy_attachments', '1', @copy_attachments %> |
| app/views/settings/_issues.html.erb | ||
|---|---|---|
| 5 | 5 | |
| 6 | 6 |
<p><%= setting_select :link_copied_issue, link_copied_issue_options %></p> |
| 7 | 7 | |
| 8 |
<p><%= setting_select :copy_attachments_issue, copy_attachments_issue_options %></p> |
|
| 9 | ||
| 8 | 10 |
<p><%= setting_select :cross_project_subtasks, cross_project_subtasks_options %></p> |
| 9 | 11 | |
| 10 | 12 |
<p><%= setting_check_box :close_duplicate_issues %></p> |
| config/locales/en.yml | ||
|---|---|---|
| 493 | 493 |
setting_force_default_language_for_anonymous: Force default language for anonymous users |
| 494 | 494 |
setting_force_default_language_for_loggedin: Force default language for logged-in users |
| 495 | 495 |
setting_link_copied_issue: Link issues on copy |
| 496 |
setting_copy_attachments_issue: Copy attachments on copy |
|
| 496 | 497 |
setting_max_additional_emails: Maximum number of additional email addresses |
| 497 | 498 |
setting_email_domains_allowed: Allowed email domains |
| 498 | 499 |
setting_email_domains_denied: Disallowed email domains |
| ... | ... | |
| 1054 | 1055 |
label_edit_attachments: Edit attached files |
| 1055 | 1056 |
label_download_all_attachments: Download all files |
| 1056 | 1057 |
label_link_copied_issue: Link copied issue |
| 1058 |
label_copy_attachments_issue: Attachment copied issue |
|
| 1057 | 1059 |
label_ask: Ask |
| 1058 | 1060 |
label_search_attachments_yes: Search attachment filenames and descriptions |
| 1059 | 1061 |
label_search_attachments_no: Do not search attachments |
| config/settings.yml | ||
|---|---|---|
| 187 | 187 |
default: 'derived' |
| 188 | 188 |
link_copied_issue: |
| 189 | 189 |
default: 'ask' |
| 190 |
copy_attachments_issue: |
|
| 191 |
default: 'ask' |
|
| 190 | 192 |
close_duplicate_issues: |
| 191 | 193 |
default: 1 |
| 192 | 194 |
issue_group_assignment: |
| test/functional/issues_controller_test.rb | ||
|---|---|---|
| 5414 | 5414 |
end |
| 5415 | 5415 |
end |
| 5416 | 5416 | |
| 5417 |
def test_create_as_copy_should_always_copy_attachments_by_settings |
|
| 5418 |
assert_equal 4, Issue.find(3).attachments.size |
|
| 5419 |
with_settings :copy_attachments_issue => 'yes' do |
|
| 5420 |
@request.session[:user_id] = 2 |
|
| 5421 |
assert_difference 'Issue.count' do |
|
| 5422 |
assert_difference 'Attachment.count', 4 do |
|
| 5423 |
post( |
|
| 5424 |
:create, |
|
| 5425 |
:params => {
|
|
| 5426 |
:project_id => 1, |
|
| 5427 |
:copy_from => 3, |
|
| 5428 |
:issue => {
|
|
| 5429 |
:subject => 'Copy' |
|
| 5430 |
} |
|
| 5431 |
} |
|
| 5432 |
) |
|
| 5433 |
end |
|
| 5434 |
end |
|
| 5435 |
end |
|
| 5436 |
end |
|
| 5437 | ||
| 5438 |
def test_create_as_copy_should_never_copy_attachments_by_settings |
|
| 5439 |
with_settings :copy_attachments_issue => 'no' do |
|
| 5440 |
@request.session[:user_id] = 2 |
|
| 5441 |
assert_difference 'Issue.count' do |
|
| 5442 |
assert_no_difference 'Attachment.count' do |
|
| 5443 |
post( |
|
| 5444 |
:create, |
|
| 5445 |
:params => {
|
|
| 5446 |
:project_id => 1, |
|
| 5447 |
:copy_from => 3, |
|
| 5448 |
:issue => {
|
|
| 5449 |
:subject => 'Copy' |
|
| 5450 |
} |
|
| 5451 |
} |
|
| 5452 |
) |
|
| 5453 |
end |
|
| 5454 |
end |
|
| 5455 |
end |
|
| 5456 |
end |
|
| 5457 | ||
| 5417 | 5458 |
def test_create_as_copy_should_copy_subtasks |
| 5418 | 5459 |
@request.session[:user_id] = 2 |
| 5419 | 5460 |
issue = Issue.generate_with_descendants! |
| ... | ... | |
| 7855 | 7896 |
end |
| 7856 | 7897 |
end |
| 7857 | 7898 | |
| 7899 |
def test_bulk_copy_should_never_copy_attachments_by_settings |
|
| 7900 |
with_settings :copy_attachments_issue => 'no' do |
|
| 7901 |
@request.session[:user_id] = 2 |
|
| 7902 |
assert_difference 'Issue.count' do |
|
| 7903 |
assert_no_difference 'Attachment.count' do |
|
| 7904 |
post( |
|
| 7905 |
:bulk_update, |
|
| 7906 |
:params => {
|
|
| 7907 |
:ids => [3], |
|
| 7908 |
:copy => '1', |
|
| 7909 |
:issue => {
|
|
| 7910 |
:project_id => '' |
|
| 7911 |
} |
|
| 7912 |
} |
|
| 7913 |
) |
|
| 7914 |
end |
|
| 7915 |
end |
|
| 7916 |
end |
|
| 7917 |
end |
|
| 7918 | ||
| 7919 |
def test_bulk_copy_should_always_copy_attachments_by_settings |
|
| 7920 |
assert_equal 4, Issue.find(3).attachments.size |
|
| 7921 |
with_settings :copy_attachments_issue => 'yes' do |
|
| 7922 |
@request.session[:user_id] = 2 |
|
| 7923 |
assert_difference 'Issue.count' do |
|
| 7924 |
assert_difference 'Attachment.count', 4 do |
|
| 7925 |
post( |
|
| 7926 |
:bulk_update, |
|
| 7927 |
:params => {
|
|
| 7928 |
:ids => [3], |
|
| 7929 |
:copy => '1', |
|
| 7930 |
:issue => {
|
|
| 7931 |
:project_id => '' |
|
| 7932 |
} |
|
| 7933 |
} |
|
| 7934 |
) |
|
| 7935 |
end |
|
| 7936 |
end |
|
| 7937 |
end |
|
| 7938 |
end |
|
| 7939 | ||
| 7858 | 7940 |
def test_bulk_copy_should_add_relations_with_copied_issues |
| 7859 | 7941 |
@request.session[:user_id] = 2 |
| 7860 | 7942 |
assert_difference 'Issue.count', 2 do |