diff --git a/app/controllers/admin/file_managers_controller.rb b/app/controllers/admin/file_managers_controller.rb index 38e0349..945fa5d 100644 --- a/app/controllers/admin/file_managers_controller.rb +++ b/app/controllers/admin/file_managers_controller.rb @@ -274,7 +274,13 @@ class Admin::FileManagersController < OrbitAdminController parent = new_path.split('/')[0..-2].join('/') FileUtils.mkdir_p(parent) upload_records = get_uploads(relative_path) + old_basename = File.basename(absolute_path) + new_basename = File.basename(new_path) FileUtils.mv(absolute_path, new_path) + Dir.glob(File.join(@root_path, "*_#{old_basename}")).each do |version_file| + prefix = File.basename(version_file).sub(/_#{Regexp.escape(old_basename)}$/, '') + FileUtils.mv(version_file, File.join(@root_path, "#{prefix}_#{new_basename}")) + end upload_records.each{|r| r.update_path(new_relative_path)} render :body => nil, :status => 204 end @@ -442,6 +448,21 @@ class Admin::FileManagersController < OrbitAdminController entry = "#{file}#{is_file ? '': '/'}" file_relative_path = upload_item.path is_editable = @default_editable || check_editable(file_relative_path, @current_user_id) + is_img = is_file && !(file.match(/\.(jpg|jpeg|gif|png|webp)$/i).nil?) + thumb_url = nil + if is_img + thumb_absolute = File.join(File.dirname(real_path_absolute), "thumb_#{file}") + unless File.exist?(thumb_absolute) + begin + image = MiniMagick::Image.open(real_path_absolute) + image.resize "100x100" + image.write(thumb_absolute) + rescue => e + Rails.logger.error("[file_manager] 產生縮圖失敗 #{real_path_absolute}: #{e.message}") + end + end + thumb_url = thumb_absolute.sub('public', '') if File.exist?(thumb_absolute) + end { module: upload_item.module, is_file: is_file, @@ -452,7 +473,9 @@ class Admin::FileManagersController < OrbitAdminController entry: entry, absolute: real_path_absolute, is_editable: is_editable, - id: (upload_item ? upload_item.id.to_s : nil) + id: (upload_item ? upload_item.id.to_s : nil), + is_img: is_img, + thumb_url: thumb_url } end.compact end diff --git a/app/models/file_manager_trash.rb b/app/models/file_manager_trash.rb index 45dd06b..88996cb 100644 --- a/app/models/file_manager_trash.rb +++ b/app/models/file_manager_trash.rb @@ -20,7 +20,12 @@ class FileManagerTrash FileUtils.mkdir_p(trash_dir) upload = self.file_manager_upload if File.exist?(upload.get_real_path) + original_dir = File.dirname(upload.get_real_path) + original_basename = File.basename(upload.get_real_path) FileUtils.mv(upload.get_real_path, self.trash_path) + Dir.glob(File.join(original_dir, "*_#{original_basename}")).each do |version_file| + FileUtils.mv(version_file, File.join(trash_dir, File.basename(version_file))) + end end end end @@ -72,7 +77,12 @@ class FileManagerTrash if File.exist?(self.trash_path) dir = File.dirname(self.path) FileUtils.mkdir_p(dir) + own_trash_dir = File.dirname(self.trash_path) + basename = File.basename(self.trash_path) FileUtils.mv(self.trash_path, self.path) + Dir.glob(File.join(own_trash_dir, "*_#{basename}")).each do |version_file| + FileUtils.mv(version_file, File.join(dir, File.basename(version_file))) + end end self.file_manager_upload.update(:is_trash=>false) if self.file_manager_upload unless self.is_file @@ -80,4 +90,4 @@ class FileManagerTrash end self.delete end -end \ No newline at end of file +end diff --git a/app/models/file_manager_upload.rb b/app/models/file_manager_upload.rb index e650feb..fc16e55 100644 --- a/app/models/file_manager_upload.rb +++ b/app/models/file_manager_upload.rb @@ -169,4 +169,4 @@ class FileManagerUpload m.where(:id=>self.related_id).update_all(self.related_field => nil) end end -end \ No newline at end of file +end diff --git a/app/views/admin/file_managers/_module.html.erb b/app/views/admin/file_managers/_module.html.erb index d5406db..cf25b2b 100644 --- a/app/views/admin/file_managers/_module.html.erb +++ b/app/views/admin/file_managers/_module.html.erb @@ -44,7 +44,11 @@ <% end %>