From cccd14ae5cf07edee1f0afb254903740053059cd Mon Sep 17 00:00:00 2001 From: Go MAEDA Date: Sat, 15 Dec 2018 02:58:45 +0000 Subject: [PATCH] Deletes thumbnails when the attachment diskfile is deleted (#30177). MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Patch by Jens Krämer. git-svn-id: http://svn.redmine.org/redmine/trunk@17736 e93f8b46-1217-0410-a6f0-8f06a7374b81 --- app/models/attachment.rb | 10 +++++++++- test/unit/attachment_test.rb | 15 +++++++++++++++ 2 files changed, 24 insertions(+), 1 deletion(-) diff --git a/app/models/attachment.rb b/app/models/attachment.rb index fd4931eaf..ac9561c26 100644 --- a/app/models/attachment.rb +++ b/app/models/attachment.rb @@ -216,7 +216,7 @@ class Attachment < ActiveRecord::Base size = Setting.thumbnails_size.to_i end size = 100 unless size > 0 - target = File.join(self.class.thumbnails_storage_path, "#{digest}_#{filesize}_#{size}.thumb") + target = thumbnail_path(size) begin Redmine::Thumbnail.generate(self.diskfile, target, size) @@ -463,6 +463,14 @@ class Attachment < ActiveRecord::Base if disk_filename.present? && File.exist?(diskfile) File.delete(diskfile) end + Dir[thumbnail_path("*")].each do |thumb| + File.delete(thumb) + end + end + + def thumbnail_path(size) + File.join(self.class.thumbnails_storage_path, + "#{digest}_#{filesize}_#{size}.thumb") end def sanitize_filename(value) diff --git a/test/unit/attachment_test.rb b/test/unit/attachment_test.rb index 15936c39e..c9e94b31c 100644 --- a/test/unit/attachment_test.rb +++ b/test/unit/attachment_test.rb @@ -457,6 +457,21 @@ class AttachmentTest < ActiveSupport::TestCase assert_equal a_thumb, b_thumb end + def test_destroy_should_destroy_thumbnails + a = Attachment.create!( + :container => Issue.find(1), + :file => uploaded_test_file("2010/11/101123161450_testfile_1.png", "image/png"), + :author => User.find(1) + ) + diskfile = a.diskfile + thumbnail = a.thumbnail + assert File.exist?(diskfile) + assert File.exist?(thumbnail) + assert a.destroy + refute File.exist?(diskfile) + refute File.exist?(thumbnail) + end + def test_thumbnail_should_return_nil_if_generation_fails Redmine::Thumbnail.expects(:generate).raises(SystemCallError, 'Something went wrong') set_fixtures_attachments_directory