Exception handling when a file or folder is missing
This commit is contained in:
parent
67e50b6568
commit
4aa3d3923d
@ -298,56 +298,64 @@ class DmsfController < ApplicationController
|
|||||||
end
|
end
|
||||||
|
|
||||||
def email_entries(selected_folders, selected_files)
|
def email_entries(selected_folders, selected_files)
|
||||||
zip = DmsfZip.new
|
begin
|
||||||
zip_entries(zip, selected_folders, selected_files)
|
zip = DmsfZip.new
|
||||||
|
zip_entries(zip, selected_folders, selected_files)
|
||||||
ziped_content = "#{DmsfHelper.temp_dir}/#{DmsfHelper.temp_filename('dmsf_email_sent_documents.zip')}";
|
|
||||||
|
|
||||||
File.open(ziped_content, 'wb') do |f|
|
|
||||||
zip_file = File.open(zip.finish, 'rb')
|
|
||||||
while (buffer = zip_file.read(8192))
|
|
||||||
f.write(buffer)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
max_filesize = Setting.plugin_redmine_dmsf['dmsf_max_email_filesize'].to_f
|
ziped_content = "#{DmsfHelper.temp_dir}/#{DmsfHelper.temp_filename('dmsf_email_sent_documents.zip')}";
|
||||||
if max_filesize > 0 && File.size(ziped_content) > max_filesize * 1048576
|
|
||||||
raise EmailMaxFileSize
|
File.open(ziped_content, 'wb') do |f|
|
||||||
|
zip_file = File.open(zip.finish, 'rb')
|
||||||
|
while (buffer = zip_file.read(8192))
|
||||||
|
f.write(buffer)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
max_filesize = Setting.plugin_redmine_dmsf['dmsf_max_email_filesize'].to_f
|
||||||
|
if max_filesize > 0 && File.size(ziped_content) > max_filesize * 1048576
|
||||||
|
raise EmailMaxFileSize
|
||||||
|
end
|
||||||
|
|
||||||
|
zip.files.each do |f|
|
||||||
|
log_activity(f, 'emailing zip')
|
||||||
|
audit = DmsfFileRevisionAccess.new(:user_id => User.current.id, :dmsf_file_revision_id => f.last_revision.id,
|
||||||
|
:action => DmsfFileRevisionAccess::EmailAction)
|
||||||
|
audit.save!
|
||||||
|
end
|
||||||
|
|
||||||
|
@email_params = {'zipped_content' => ziped_content}
|
||||||
|
render :action => 'email_entries'
|
||||||
|
rescue Exception => e
|
||||||
|
flash[:error] = e.message
|
||||||
|
ensure
|
||||||
|
zip.close if zip
|
||||||
end
|
end
|
||||||
|
|
||||||
zip.files.each do |f|
|
|
||||||
log_activity(f, 'emailing zip')
|
|
||||||
audit = DmsfFileRevisionAccess.new(:user_id => User.current.id, :dmsf_file_revision_id => f.last_revision.id,
|
|
||||||
:action => DmsfFileRevisionAccess::EmailAction)
|
|
||||||
audit.save!
|
|
||||||
end
|
|
||||||
|
|
||||||
@email_params = {'zipped_content' => ziped_content}
|
|
||||||
render :action => 'email_entries'
|
|
||||||
ensure
|
|
||||||
zip.close if zip
|
|
||||||
end
|
end
|
||||||
|
|
||||||
def download_entries(selected_folders, selected_files)
|
def download_entries(selected_folders, selected_files)
|
||||||
zip = DmsfZip.new
|
begin
|
||||||
zip_entries(zip, selected_folders, selected_files)
|
zip = DmsfZip.new
|
||||||
|
zip_entries(zip, selected_folders, selected_files)
|
||||||
zip.files.each do |f|
|
|
||||||
log_activity(f, 'download zip')
|
zip.files.each do |f|
|
||||||
audit = DmsfFileRevisionAccess.new(:user_id => User.current.id, :dmsf_file_revision_id => f.last_revision.id,
|
log_activity(f, 'download zip')
|
||||||
:action => DmsfFileRevisionAccess::DownloadAction)
|
audit = DmsfFileRevisionAccess.new(:user_id => User.current.id, :dmsf_file_revision_id => f.last_revision.id,
|
||||||
audit.save!
|
:action => DmsfFileRevisionAccess::DownloadAction)
|
||||||
|
audit.save!
|
||||||
|
end
|
||||||
|
|
||||||
|
send_file(zip.finish,
|
||||||
|
:filename => filename_for_content_disposition("#{@project.name}-#{DateTime.now.strftime('%y%m%d%H%M%S')}.zip"),
|
||||||
|
:type => 'application/zip',
|
||||||
|
:disposition => 'attachment')
|
||||||
|
rescue Exception => e
|
||||||
|
flash[:error] = e.message
|
||||||
|
ensure
|
||||||
|
zip.close if zip
|
||||||
end
|
end
|
||||||
|
|
||||||
send_file(zip.finish,
|
|
||||||
:filename => filename_for_content_disposition("#{@project.name}-#{DateTime.now.strftime('%y%m%d%H%M%S')}.zip"),
|
|
||||||
:type => 'application/zip',
|
|
||||||
:disposition => 'attachment')
|
|
||||||
ensure
|
|
||||||
zip.close if zip
|
|
||||||
end
|
end
|
||||||
|
|
||||||
def zip_entries(zip, selected_folders, selected_files)
|
def zip_entries(zip, selected_folders, selected_files)
|
||||||
if selected_folders && selected_folders.is_a?(Array)
|
if selected_folders && selected_folders.is_a?(Array)
|
||||||
selected_folders.each do |selected_folder_id|
|
selected_folders.each do |selected_folder_id|
|
||||||
check_project(folder = DmsfFolder.visible.find(selected_folder_id))
|
check_project(folder = DmsfFolder.visible.find(selected_folder_id))
|
||||||
@ -364,12 +372,10 @@ class DmsfController < ApplicationController
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
max_files = Setting.plugin_redmine_dmsf['dmsf_max_file_download'].to_i
|
max_files = Setting.plugin_redmine_dmsf['dmsf_max_file_download'].to_i
|
||||||
if max_files > 0 && zip.files.length > max_files
|
if max_files > 0 && zip.files.length > max_files
|
||||||
raise ZipMaxFilesError, zip.files.length
|
raise ZipMaxFilesError, zip.files.length
|
||||||
end
|
end
|
||||||
|
|
||||||
zip
|
zip
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|||||||
@ -143,8 +143,10 @@ class DmsfFilesController < ApplicationController
|
|||||||
flash[:notice] = l(:notice_file_deleted)
|
flash[:notice] = l(:notice_file_deleted)
|
||||||
log_activity('deleted')
|
log_activity('deleted')
|
||||||
DmsfMailer.files_deleted(User.current, [@file]).deliver
|
DmsfMailer.files_deleted(User.current, [@file]).deliver
|
||||||
else
|
else
|
||||||
flash[:error] = l(:error_file_is_locked)
|
@file.errors.each do |e, msg|
|
||||||
|
flash[:error] = msg
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
redirect_to :controller => 'dmsf', :action => 'show', :id => @project, :folder_id => @file.folder
|
redirect_to :controller => 'dmsf', :action => 'show', :id => @project, :folder_id => @file.folder
|
||||||
@ -155,9 +157,10 @@ class DmsfFilesController < ApplicationController
|
|||||||
if @revision.delete
|
if @revision.delete
|
||||||
flash[:notice] = l(:notice_revision_deleted)
|
flash[:notice] = l(:notice_revision_deleted)
|
||||||
log_activity('deleted')
|
log_activity('deleted')
|
||||||
else
|
else
|
||||||
# TODO: check this error handling
|
@revision.errors.each do |e, msg|
|
||||||
@revision.errors.each {|e,msg| flash[:error] = msg}
|
flash[:error] = msg
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
redirect_to :action => 'show', :id => @file
|
redirect_to :action => 'show', :id => @file
|
||||||
|
|||||||
@ -105,15 +105,20 @@ class DmsfFile < ActiveRecord::Base
|
|||||||
errors[:base] << l(:error_file_is_locked)
|
errors[:base] << l(:error_file_is_locked)
|
||||||
return false
|
return false
|
||||||
end
|
end
|
||||||
if Setting.plugin_redmine_dmsf['dmsf_really_delete_files']
|
begin
|
||||||
self.revisions.visible.each {|r| r.delete(true)}
|
if Setting.plugin_redmine_dmsf['dmsf_really_delete_files']
|
||||||
self.destroy
|
self.revisions.visible.each {|r| r.delete(true)}
|
||||||
else
|
self.destroy
|
||||||
# Revisions of a deleted file SHOULD be deleted too
|
else
|
||||||
self.revisions.visible.each {|r| r.delete }
|
# Revisions of a deleted file SHOULD be deleted too
|
||||||
self.deleted = true
|
self.revisions.visible.each {|r| r.delete }
|
||||||
self.deleted_by_user = User.current
|
self.deleted = true
|
||||||
save
|
self.deleted_by_user = User.current
|
||||||
|
save
|
||||||
|
end
|
||||||
|
rescue Exception => e
|
||||||
|
errors[:base] << e.message
|
||||||
|
return false
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user