Project

General

Profile

Feature #36197 » 36197-v2.patch

Go MAEDA, 2024-07-07 10:39

View differences:

app/controllers/issues_controller.rb
328 328
    @versions = target_projects.map {|p| p.shared_versions.open}.reduce(:&)
329 329
    @categories = target_projects.map {|p| p.issue_categories}.reduce(:&)
330 330
    if @copy
331
      @attachments_present = @issues.detect {|i| i.attachments.any?}.present?
331
      @attachments_present = @issues.detect {|i| i.attachments.any?}.present? &&
332
                               (Setting.copy_attachments_on_issue_copy == 'ask')
332 333
      @subtasks_present = @issues.detect {|i| !i.leaf?}.present?
333 334
      @watchers_present = User.current.allowed_to?(:add_issue_watchers, @projects) &&
334 335
                            Watcher.where(:watchable_type => 'Issue',
......
347 348

  
348 349
    attributes = parse_params_for_bulk_update(params[:issue])
349 350
    copy_subtasks = (params[:copy_subtasks] == '1')
350
    copy_attachments = (params[:copy_attachments] == '1')
351 351
    copy_watchers = (params[:copy_watchers] == '1')
352 352

  
353 353
    if @copy
......
386 386
      if @copy
387 387
        issue = orig_issue.copy(
388 388
          {},
389
          :attachments => copy_attachments,
389
          :attachments => copy_attachments?(params[:copy_attachments]),
390 390
          :subtasks => copy_subtasks,
391 391
          :watchers => copy_watchers,
392 392
          :link => link_copy?(params[:link_copy])
......
593 593
        end
594 594

  
595 595
        @link_copy = link_copy?(params[:link_copy]) || request.get?
596
        @copy_attachments = params[:copy_attachments].present? || request.get?
596
        @copy_attachments = copy_attachments?(params[:copy_attachments]) || request.get?
597 597
        @copy_subtasks = params[:copy_subtasks].present? || request.get?
598 598
        @copy_watchers = User.current.allowed_to?(:add_issue_watchers, @project)
599 599
        @issue.copy_from(@copy_from, :attachments => @copy_attachments,
......
696 696
    end
697 697
  end
698 698

  
699
  # Returns true if the attachments should be copied
700
  # from the original issue
701
  def copy_attachments?(param)
702
    case Setting.copy_attachments_on_issue_copy
703
    when 'yes'
704
      true
705
    when 'no'
706
      false
707
    when 'ask'
708
      param == '1'
709
    end
710
  end
711

  
699 712
  # Redirects user after a successful issue creation
700 713
  def redirect_after_create
701 714
    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_on_issue_copy_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_on_issue_copy == '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_on_issue_copy, copy_attachments_on_issue_copy_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
503 503
  setting_force_default_language_for_anonymous: Force default language for anonymous users
504 504
  setting_force_default_language_for_loggedin: Force default language for logged-in users
505 505
  setting_link_copied_issue: Link issues on copy
506
  setting_copy_attachments_on_issue_copy: Copy attachments on copy
506 507
  setting_max_additional_emails: Maximum number of additional email addresses
507 508
  setting_email_domains_allowed: Allowed email domains
508 509
  setting_email_domains_denied: Disallowed email domains
config/settings.yml
190 190
  default: 'derived'
191 191
link_copied_issue:
192 192
  default: 'ask'
193
copy_attachments_on_issue_copy:
194
  default: 'ask'
193 195
close_duplicate_issues:
194 196
  default: 1
195 197
issue_group_assignment:
test/functional/issues_controller_test.rb
5613 5613
    end
5614 5614
  end
5615 5615

  
5616
  def test_create_as_copy_should_always_copy_attachments_by_settings
5617
    assert_equal 4, Issue.find(3).attachments.size
5618
    with_settings :copy_attachments_on_issue_copy => 'yes' do
5619
      @request.session[:user_id] = 2
5620
      assert_difference 'Issue.count' do
5621
        assert_difference 'Attachment.count', 4 do
5622
          post(
5623
            :create,
5624
            :params => {
5625
              :project_id => 1,
5626
              :copy_from => 3,
5627
              :issue => {
5628
                :subject => 'Copy'
5629
              }
5630
            }
5631
          )
5632
        end
5633
      end
5634
    end
5635
  end
5636

  
5637
  def test_create_as_copy_should_never_copy_attachments_by_settings
5638
    with_settings :copy_attachments_on_issue_copy => 'no' do
5639
      @request.session[:user_id] = 2
5640
      assert_difference 'Issue.count' do
5641
        assert_no_difference 'Attachment.count' do
5642
          post(
5643
            :create,
5644
            :params => {
5645
              :project_id => 1,
5646
              :copy_from => 3,
5647
              :issue => {
5648
                :subject => 'Copy'
5649
              }
5650
            }
5651
          )
5652
        end
5653
      end
5654
    end
5655
  end
5656

  
5616 5657
  def test_create_as_copy_should_copy_subtasks
5617 5658
    @request.session[:user_id] = 2
5618 5659
    issue = Issue.generate_with_descendants!
......
8074 8115
    end
8075 8116
  end
8076 8117

  
8118
  def test_bulk_copy_should_never_copy_attachments_by_settings
8119
    with_settings :copy_attachments_on_issue_copy => 'no' do
8120
      @request.session[:user_id] = 2
8121
      assert_difference 'Issue.count' do
8122
        assert_no_difference 'Attachment.count' do
8123
          post(
8124
            :bulk_update,
8125
            :params => {
8126
              :ids => [3],
8127
              :copy => '1',
8128
              :issue => {
8129
                :project_id => ''
8130
              }
8131
            }
8132
          )
8133
        end
8134
      end
8135
    end
8136
  end
8137

  
8138
  def test_bulk_copy_should_always_copy_attachments_by_settings
8139
    assert_equal 4, Issue.find(3).attachments.size
8140
    with_settings :copy_attachments_on_issue_copy => 'yes' do
8141
      @request.session[:user_id] = 2
8142
      assert_difference 'Issue.count' do
8143
        assert_difference 'Attachment.count', 4 do
8144
          post(
8145
            :bulk_update,
8146
            :params => {
8147
              :ids => [3],
8148
              :copy => '1',
8149
              :issue => {
8150
                :project_id => ''
8151
              }
8152
            }
8153
          )
8154
        end
8155
      end
8156
    end
8157
  end
8158

  
8077 8159
  def test_bulk_copy_should_add_relations_with_copied_issues
8078 8160
    @request.session[:user_id] = 2
8079 8161
    assert_difference 'Issue.count', 2 do
(3-3/3)