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