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? |