Patch #22401 » 0001-notify-the-user-of-missing-attachments.patch
| config/locales/en.yml | ||
|---|---|---|
| 171 | 171 | 
      notice_failed_to_save_issues: "Failed to save %{count} issue(s) on %{total} selected: %{ids}."
   | 
| 172 | 172 | 
      notice_failed_to_save_time_entries: "Failed to save %{count} time entrie(s) on %{total} selected: %{ids}."
   | 
| 173 | 173 | 
      notice_failed_to_save_members: "Failed to save member(s): %{errors}."
   | 
| 174 | 
    notice_failed_to_save_attachments:  | 
|
| 175 | 
    one: "Failed to save one attachment"  | 
|
| 176 | 
        other: "Failed to save %{count} attachments"
   | 
|
| 174 | 177 | 
    notice_no_issue_selected: "No issue is selected! Please, check the issues you want to edit."  | 
| 175 | 178 | 
    notice_account_pending: "Your account was created and is now pending administrator approval."  | 
| 176 | 179 | 
    notice_default_data_loaded: Default configuration successfully loaded.  | 
| lib/plugins/acts_as_attachable/lib/acts_as_attachable.rb | ||
|---|---|---|
| 34 | 34 | 
    options.merge(:as => :container, :dependent => :destroy, :inverse_of => :container)  | 
| 35 | 35 | 
    send :include, Redmine::Acts::Attachable::InstanceMethods  | 
| 36 | 36 | 
    before_save :attach_saved_attachments  | 
| 37 | 
    validate :warn_about_failed_attachments  | 
|
| 37 | 38 | 
    end  | 
| 38 | 39 | 
    end  | 
| 39 | 40 | |
| ... | ... | |
| 82 | 83 | 
    attachments = attachments.map(&:last)  | 
| 83 | 84 | 
    end  | 
| 84 | 85 | 
    if attachments.is_a?(Array)  | 
| 86 | 
    @failed_attachment_count = 0  | 
|
| 85 | 87 | 
    attachments.each do |attachment|  | 
| 86 | 88 | 
    next unless attachment.is_a?(Hash)  | 
| 87 | 89 | 
    a = nil  | 
| ... | ... | |
| 90 | 92 | 
    a = Attachment.create(:file => file, :author => author)  | 
| 91 | 93 | 
    elsif token = attachment['token']  | 
| 92 | 94 | 
    a = Attachment.find_by_token(token)  | 
| 93 | 
    next unless a  | 
|
| 95 | 
    unless a  | 
|
| 96 | 
    @failed_attachment_count += 1  | 
|
| 97 | 
    next  | 
|
| 98 | 
    end  | 
|
| 94 | 99 | 
    a.filename = attachment['filename'] unless attachment['filename'].blank?  | 
| 95 | 100 | 
    a.content_type = attachment['content_type'] unless attachment['content_type'].blank?  | 
| 96 | 101 | 
    end  | 
| ... | ... | |
| 112 | 117 | 
    end  | 
| 113 | 118 | 
    end  | 
| 114 | 119 | |
| 120 | 
    def warn_about_failed_attachments  | 
|
| 121 | 
    if @failed_attachment_count && @failed_attachment_count > 0  | 
|
| 122 | 
                errors.add :base, ::I18n.t('notice_failed_to_save_attachments', count: @failed_attachment_count)
   | 
|
| 123 | 
    end  | 
|
| 124 | 
    end  | 
|
| 125 | ||
| 115 | 126 | 
    module ClassMethods  | 
| 116 | 127 | 
    end  | 
| 117 | 128 | 
    end  | 
| test/unit/issue_test.rb | ||
|---|---|---|
| 2527 | 2527 | 
    assert_equal %w(upload foo bar), issue.attachments.map(&:filename)  | 
| 2528 | 2528 | 
    end  | 
| 2529 | 2529 | |
| 2530 | 
    def test_save_attachments_with_array_should_warn_about_missing_tokens  | 
|
| 2531 | 
    set_tmp_attachments_directory  | 
|
| 2532 | 
    issue = Issue.generate!  | 
|
| 2533 | 
    issue.save_attachments([  | 
|
| 2534 | 
          {'token' => 'missing'}
   | 
|
| 2535 | 
    ])  | 
|
| 2536 | 
    assert !issue.save  | 
|
| 2537 | 
    assert issue.errors[:base].present?  | 
|
| 2538 | 
    assert_equal 0, issue.reload.attachments.count  | 
|
| 2539 | 
    end  | 
|
| 2540 | ||
| 2530 | 2541 | 
    def test_closed_on_should_be_nil_when_creating_an_open_issue  | 
| 2531 | 2542 | 
    issue = Issue.generate!(:status_id => 1).reload  | 
| 2532 | 2543 | 
    assert !issue.closed?  |