This commit is contained in:
Karel Pičman 2025-01-29 07:51:15 +01:00
parent a29574e92a
commit c7fd1c0a02
20 changed files with 77 additions and 116 deletions

View File

@ -192,9 +192,9 @@ class DmsfController < ApplicationController
else else
download_entries @selected_folders, @selected_files download_entries @selected_folders, @selected_files
end end
rescue RedmineDmsf::Errors::DmsfFileNotFoundError rescue DmsfFileNotFoundError
render_404 render_404
rescue RedmineDmsf::Errors::DmsfAccessError rescue DmsfAccessError
render_403 render_403
rescue StandardError => e rescue StandardError => e
flash[:error] = e.message flash[:error] = e.message
@ -497,16 +497,14 @@ class DmsfController < ApplicationController
end end
def email_entries(selected_folders, selected_files) def email_entries(selected_folders, selected_files)
raise RedmineDmsf::Errors::DmsfAccessError unless User.current.allowed_to?(:email_documents, @project) raise DmsfAccessError unless User.current.allowed_to?(:email_documents, @project)
zip = Zip.new zip = Zip.new
zip_entries(zip, selected_folders, selected_files) zip_entries(zip, selected_folders, selected_files)
zipped_content = zip.finish zipped_content = zip.finish
max_filesize = RedmineDmsf.dmsf_max_email_filesize max_filesize = RedmineDmsf.dmsf_max_email_filesize
if max_filesize.positive? && File.size(zipped_content) > max_filesize * 1_048_576 raise DmsfEmailMaxFileSizeError if max_filesize.positive? && File.size(zipped_content) > max_filesize * 1_048_576
raise RedmineDmsf::Errors::DmsfEmailMaxFileSizeError
end
zip.dmsf_files.each do |f| zip.dmsf_files.each do |f|
# Action # Action
@ -569,23 +567,22 @@ class DmsfController < ApplicationController
member = Member.find_by(user_id: User.current.id, project_id: @project.id) member = Member.find_by(user_id: User.current.id, project_id: @project.id)
selected_folders.each do |selected_folder_id| selected_folders.each do |selected_folder_id|
folder = DmsfFolder.visible.find_by(id: selected_folder_id) folder = DmsfFolder.visible.find_by(id: selected_folder_id)
raise RedmineDmsf::Errors::DmsfFileNotFoundError unless folder raise DmsfFileNotFoundError unless folder
zip.add_dmsf_folder folder, member, folder&.dmsf_folder&.dmsf_path_str zip.add_dmsf_folder folder, member, folder&.dmsf_folder&.dmsf_path_str
end end
selected_files.each do |selected_file_id| selected_files.each do |selected_file_id|
file = DmsfFile.visible.find_by(id: selected_file_id) file = DmsfFile.visible.find_by(id: selected_file_id)
unless file&.last_revision && File.exist?(file.last_revision&.disk_file) raise DmsfFileNotFoundError unless file&.last_revision && File.exist?(file.last_revision&.disk_file)
raise RedmineDmsf::Errors::DmsfFileNotFoundError
end
unless (file.project == @project) || User.current.allowed_to?(:view_dmsf_files, file.project) unless (file.project == @project) || User.current.allowed_to?(:view_dmsf_files, file.project)
raise RedmineDmsf::Errors::DmsfAccessError raise DmsfAccessError
end end
zip.add_dmsf_file file, member, file.dmsf_folder&.dmsf_path_str zip.add_dmsf_file file, member, file.dmsf_folder&.dmsf_path_str
end end
max_files = RedmineDmsf.dmsf_max_file_download max_files = RedmineDmsf.dmsf_max_file_download
raise RedmineDmsf::Errors::DmsfZipMaxFilesError if max_files.positive? && zip.dmsf_files.length > max_files raise DmsfZipMaxFilesError if max_files.positive? && zip.dmsf_files.length > max_files
zip zip
end end
@ -595,19 +592,19 @@ class DmsfController < ApplicationController
selected_folders.each do |id| selected_folders.each do |id|
folder = DmsfFolder.find_by(id: id) folder = DmsfFolder.find_by(id: id)
raise RedmineDmsf::Errors::DmsfFileNotFoundError unless folder raise DmsfFileNotFoundError unless folder
end end
# Files # Files
selected_files.each do |id| selected_files.each do |id|
file = DmsfFile.find_by(id: id) file = DmsfFile.find_by(id: id)
raise RedmineDmsf::Errors::DmsfFileNotFoundError unless file raise DmsfFileNotFoundError unless file
flash[:error] = file.errors.full_messages.to_sentence unless file.restore flash[:error] = file.errors.full_messages.to_sentence unless file.restore
end end
# Links # Links
selected_links.each do |id| selected_links.each do |id|
link = DmsfLink.find_by(id: id) link = DmsfLink.find_by(id: id)
raise RedmineDmsf::Errors::DmsfFileNotFoundError unless link raise DmsfFileNotFoundError unless link
flash[:error] = link.errors.full_messages.to_sentence unless link.restore flash[:error] = link.errors.full_messages.to_sentence unless link.restore
end end
@ -616,20 +613,20 @@ class DmsfController < ApplicationController
def delete_entries(selected_folders, selected_files, selected_links, commit) def delete_entries(selected_folders, selected_files, selected_links, commit)
# Folders # Folders
selected_folders.each do |id| selected_folders.each do |id|
raise RedmineDmsf::Errors::DmsfAccessError unless User.current.allowed_to?(:folder_manipulation, @project) raise DmsfAccessError unless User.current.allowed_to?(:folder_manipulation, @project)
folder = DmsfFolder.find_by(id: id) folder = DmsfFolder.find_by(id: id)
if folder if folder
raise StandardError, folder.errors.full_messages.to_sentence unless folder.delete(commit: commit) raise StandardError, folder.errors.full_messages.to_sentence unless folder.delete(commit: commit)
elsif !commit elsif !commit
raise RedmineDmsf::Errors::DmsfFileNotFoundError raise DmsfFileNotFoundError
end end
end end
# Files # Files
deleted_files = [] deleted_files = []
not_deleted_files = [] not_deleted_files = []
if selected_files.any? if selected_files.any?
raise RedmineDmsf::Errors::DmsfAccessError unless User.current.allowed_to?(:file_delete, @project) raise DmsfAccessError unless User.current.allowed_to?(:file_delete, @project)
selected_files.each do |id| selected_files.each do |id|
file = DmsfFile.find_by(id: id) file = DmsfFile.find_by(id: id)
@ -640,7 +637,7 @@ class DmsfController < ApplicationController
not_deleted_files << file not_deleted_files << file
end end
elsif !commit elsif !commit
raise RedmineDmsf::Errors::DmsfFileNotFoundError raise DmsfFileNotFoundError
end end
end end
end end
@ -665,7 +662,7 @@ class DmsfController < ApplicationController
end end
# Links # Links
if selected_links.any? if selected_links.any?
raise RedmineDmsf::Errors::DmsfAccessError unless User.current.allowed_to?(:folder_manipulation, @project) raise DmsfAccessError unless User.current.allowed_to?(:folder_manipulation, @project)
selected_links.each do |id| selected_links.each do |id|
link = DmsfLink.find_by(id: id) link = DmsfLink.find_by(id: id)
@ -699,11 +696,10 @@ class DmsfController < ApplicationController
def move_entries(selected_folders, selected_files, selected_links) def move_entries(selected_folders, selected_files, selected_links)
# Permissions # Permissions
if selected_folders.any? && !User.current.allowed_to?(:folder_manipulation, @project) raise DmsfAccessError if selected_folders.any? && !User.current.allowed_to?(:folder_manipulation, @project)
raise RedmineDmsf::Errors::DmsfAccessError
end
if (selected_folders.any? || selected_links.any?) && !User.current.allowed_to?(:file_manipulation, @project) if (selected_folders.any? || selected_links.any?) && !User.current.allowed_to?(:file_manipulation, @project)
raise RedmineDmsf::Errors::DmsfAccessError raise DmsfAccessError
end end
# Folders # Folders
@ -826,27 +822,27 @@ class DmsfController < ApplicationController
links = DmsfLink.where(id: @selected_links).to_a links = DmsfLink.where(id: @selected_links).to_a
(folders + files + links).each do |entry| (folders + files + links).each do |entry|
if entry.dmsf_folder if entry.dmsf_folder
raise RedmineDmsf::Errors::DmsfParentError if entry.dmsf_folder == @target_folder || entry == @target_folder raise DmsfParentError if entry.dmsf_folder == @target_folder || entry == @target_folder
elsif @target_folder.nil? elsif @target_folder.nil?
raise RedmineDmsf::Errors::DmsfParentError if entry.project == @target_project raise DmsfParentError if entry.project == @target_project
end end
end end
# Prevent recursion # Prevent recursion
if params[:move_entries].present? if params[:move_entries].present?
folders.each do |entry| folders.each do |entry|
raise RedmineDmsf::Errors::DmsfParentError if entry.any_child?(@target_folder) raise DmsfParentError if entry.any_child?(@target_folder)
end end
end end
# Check permissions # Check permissions
if (@target_folder && (@target_folder.locked_for_user? || if (@target_folder && (@target_folder.locked_for_user? ||
!DmsfFolder.permissions?(@target_folder, allow_system: false))) || !DmsfFolder.permissions?(@target_folder, allow_system: false))) ||
!@target_project.allows_to?(:folder_manipulation) !@target_project.allows_to?(:folder_manipulation)
raise RedmineDmsf::Errors::DmsfAccessError raise DmsfAccessError
end end
rescue RedmineDmsf::Errors::DmsfParentError rescue DmsfParentError
flash[:error] = l(:error_target_folder_same) flash[:error] = l(:error_target_folder_same)
redirect_back_or_default dmsf_folder_path(id: @project, folder_id: @folder) redirect_back_or_default dmsf_folder_path(id: @project, folder_id: @folder)
rescue RedmineDmsf::Errors::DmsfAccessError rescue DmsfAccessError
render_403 render_403
end end
end end

View File

@ -49,7 +49,7 @@ class DmsfFilesController < ApplicationController
@revision = @file.last_revision @revision = @file.last_revision
else else
@revision = DmsfFileRevision.find(params[:download].to_i) @revision = DmsfFileRevision.find(params[:download].to_i)
raise RedmineDmsf::Errors::DmsfAccessError if @revision.dmsf_file != @file raise DmsfAccessError if @revision.dmsf_file != @file
end end
check_project @revision.dmsf_file check_project @revision.dmsf_file
@ -93,7 +93,7 @@ class DmsfFilesController < ApplicationController
type: @revision.detect_content_type, type: @revision.detect_content_type,
disposition: params[:disposition].presence || @revision.dmsf_file.disposition disposition: params[:disposition].presence || @revision.dmsf_file.disposition
end end
rescue RedmineDmsf::Errors::DmsfAccessError => e rescue DmsfAccessError => e
Rails.logger.error e.message Rails.logger.error e.message
render_403 render_403
rescue StandardError => e rescue StandardError => e
@ -378,6 +378,6 @@ class DmsfFilesController < ApplicationController
def check_project(entry) def check_project(entry)
return unless entry && entry.project != @project return unless entry && entry.project != @project
raise RedmineDmsf::Errors::DmsfAccessError, l(:error_entry_project_does_not_match_current_project) raise DmsfAccessError, l(:error_entry_project_does_not_match_current_project)
end end
end end

View File

@ -66,7 +66,7 @@ class DmsfFolderPermissionsController < ApplicationController
def find_project def find_project
@project = Project.visible.find_by_param(params[:project_id]) @project = Project.visible.find_by_param(params[:project_id])
rescue RedmineDmsf::Errors::DmsfAccessError rescue DmsfAccessError
render_403 render_403
rescue ActiveRecord::RecordNotFound rescue ActiveRecord::RecordNotFound
render_404 render_404
@ -74,7 +74,7 @@ class DmsfFolderPermissionsController < ApplicationController
def find_folder def find_folder
@dmsf_folder = DmsfFolder.visible.find(params[:dmsf_folder_id]) @dmsf_folder = DmsfFolder.visible.find(params[:dmsf_folder_id])
rescue RedmineDmsf::Errors::DmsfAccessError rescue DmsfAccessError
render_403 render_403
rescue ActiveRecord::RecordNotFound rescue ActiveRecord::RecordNotFound
render_404 render_404

View File

@ -150,7 +150,7 @@ class DmsfUploadController < ApplicationController
def find_folder def find_folder
@folder = DmsfFolder.visible.find(params[:folder_id]) if params.key?('folder_id') @folder = DmsfFolder.visible.find(params[:folder_id]) if params.key?('folder_id')
rescue RedmineDmsf::Errors::DmsfAccessError rescue DmsfAccessError
render_403 render_403
end end
end end

View File

@ -81,7 +81,7 @@ class DmsfWorkflowsController < ApplicationController
if revision.dmsf_file if revision.dmsf_file
begin begin
revision.dmsf_file.unlock!(force_file_unlock_allowed: true) unless RedmineDmsf.dmsf_keep_documents_locked? revision.dmsf_file.unlock!(force_file_unlock_allowed: true) unless RedmineDmsf.dmsf_keep_documents_locked?
rescue RedmineDmsf::Errors::DmsfLockError => e rescue DmsfLockError => e
flash[:info] = e.message flash[:info] = e.message
end end
end end
@ -225,7 +225,7 @@ class DmsfWorkflowsController < ApplicationController
if file if file
begin begin
file.lock! file.lock!
rescue RedmineDmsf::Errors::DmsfLockError => e rescue DmsfLockError => e
Rails.logger.warn e.message Rails.logger.warn e.message
end end
flash[:notice] = l(:notice_successful_update) flash[:notice] = l(:notice_successful_update)

View File

@ -18,11 +18,7 @@
# along with this program; if not, write to the Free Software # along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
module RedmineDmsf # Access error
module Errors class DmsfAccessError < StandardError
# Access error # Nothing to do
class DmsfAccessError < StandardError
# Nothing to do
end
end
end end

View File

@ -18,19 +18,15 @@
# along with this program; if not, write to the Free Software # along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
module RedmineDmsf # Max file size error
module Errors class DmsfEmailMaxFileSizeError < StandardError
# max file size error include Redmine::I18n
class DmsfEmailMaxFileSizeError < StandardError
include Redmine::I18n
def initialize(message = nil) def initialize(message = nil)
if message.present? if message.present?
super super
else else
super(l(:error_max_email_filesize_exceeded, number: RedmineDmsf.dmsf_max_email_filesize)) super(l(:error_max_email_filesize_exceeded, number: RedmineDmsf.dmsf_max_email_filesize))
end
end
end end
end end
end end

View File

@ -18,11 +18,7 @@
# along with this program; if not, write to the Free Software # along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
module RedmineDmsf # Not found error
module Errors class DmsfFileNotFoundError < StandardError
# Not found error # nothing to do
class DmsfFileNotFoundError < StandardError
# nothing to do
end
end
end end

View File

@ -18,11 +18,7 @@
# along with this program; if not, write to the Free Software # along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
module RedmineDmsf # Lock error
module Errors class DmsfLockError < StandardError
# Lock error # Nothing to do
class DmsfLockError < StandardError
# Nothing to do
end
end
end end

View File

@ -18,11 +18,7 @@
# along with this program; if not, write to the Free Software # along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
module RedmineDmsf # Parent error
module Errors class DmsfParentError < StandardError
# Parent error # Nothing to do
class DmsfParentError < StandardError
# Nothing to do
end
end
end end

View File

@ -18,19 +18,15 @@
# along with this program; if not, write to the Free Software # along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
module RedmineDmsf # File count exceeded
module Errors class DmsfZipMaxFilesError < StandardError
# File count exceeded include Redmine::I18n
class DmsfZipMaxFilesError < StandardError
include Redmine::I18n
def initialize(message = nil) def initialize(message = nil)
if message.present? if message.present?
super super
else else
super(l(:error_max_files_exceeded, number: RedmineDmsf.dmsf_max_file_download)) super(l(:error_max_files_exceeded, number: RedmineDmsf.dmsf_max_file_download))
end
end
end end
end end
end end

View File

@ -130,7 +130,7 @@ module DmsfUploadHelper
wf.notify_users project, new_revision, controller wf.notify_users project, new_revision, controller
begin begin
file.lock! file.lock!
rescue RedmineDmsf::Errors::DmsfLockError => e rescue DmsfLockError => e
Rails.logger.warn e.message Rails.logger.warn e.message
end end
else else

View File

@ -196,7 +196,7 @@ class DmsfFileRevision < ApplicationRecord
end end
def new_storage_filename def new_storage_filename
raise RedmineDmsf::Errors::DmsfAccessError, 'File id is not set' unless dmsf_file&.id raise DmsfAccessError, 'File id is not set' unless dmsf_file&.id
filename = DmsfHelper.sanitize_filename(name) filename = DmsfHelper.sanitize_filename(name)
timestamp = DateTime.current.strftime('%y%m%d%H%M%S') timestamp = DateTime.current.strftime('%y%m%d%H%M%S')

View File

@ -277,15 +277,6 @@ after_easy_init do
require "#{File.dirname(__FILE__)}/redmine_dmsf/webdav/resource_proxy" require "#{File.dirname(__FILE__)}/redmine_dmsf/webdav/resource_proxy"
end end
# Errors
after_easy_init do
require "#{File.dirname(__FILE__)}/redmine_dmsf/errors/dmsf_access_error"
require "#{File.dirname(__FILE__)}/redmine_dmsf/errors/dmsf_email_max_file_size_error"
require "#{File.dirname(__FILE__)}/redmine_dmsf/errors/dmsf_file_not_found_error"
require "#{File.dirname(__FILE__)}/redmine_dmsf/errors/dmsf_lock_error"
require "#{File.dirname(__FILE__)}/redmine_dmsf/errors/dmsf_zip_max_files_error"
end
# Hooks # Hooks
def require_hooks def require_hooks
require "#{File.dirname(__FILE__)}/redmine_dmsf/hooks/controllers/account_controller_hooks" require "#{File.dirname(__FILE__)}/redmine_dmsf/hooks/controllers/account_controller_hooks"

View File

@ -48,9 +48,7 @@ module RedmineDmsf
end end
def add_dmsf_file(dmsf_file, member = nil, root_path = nil, path = nil) def add_dmsf_file(dmsf_file, member = nil, root_path = nil, path = nil)
unless dmsf_file&.last_revision && File.exist?(dmsf_file.last_revision.disk_file) raise DmsfFileNotFoundError unless dmsf_file&.last_revision && File.exist?(dmsf_file.last_revision.disk_file)
raise RedmineDmsf::Errors::DmsfFileNotFoundError
end
if path if path
string_path = path string_path = path
@ -77,7 +75,7 @@ module RedmineDmsf
def add_attachment(attachment, path) def add_attachment(attachment, path)
return if @files.include?(path) return if @files.include?(path)
raise RedmineDmsf::Errors::DmsfFileNotFoundError unless File.exist?(attachment.diskfile) raise DmsfFileNotFoundError unless File.exist?(attachment.diskfile)
zip_entry = ::Zip::Entry.new(@zip_file, path, nil, nil, nil, nil, nil, nil, zip_entry = ::Zip::Entry.new(@zip_file, path, nil, nil, nil, nil, nil, nil,
::Zip::DOSTime.at(attachment.created_on)) ::Zip::DOSTime.at(attachment.created_on))

View File

@ -206,7 +206,7 @@ module RedmineDmsf
wf.notify_users issue.project, revision, context[:controller] wf.notify_users issue.project, revision, context[:controller]
begin begin
file.lock! file.lock!
rescue RedmineDmsf::Errors::DmsfLockError => e rescue DmsfLockError => e
Rails.logger.warn e.message Rails.logger.warn e.message
end end
else else

View File

@ -44,15 +44,15 @@ module RedmineDmsf
def lock!(scope = :scope_exclusive, type = :type_write, expire = nil, owner = nil) def lock!(scope = :scope_exclusive, type = :type_write, expire = nil, owner = nil)
# Raise a lock error if entity is locked, but its not at resource level # Raise a lock error if entity is locked, but its not at resource level
existing = lock(tree: false) existing = lock(tree: false)
raise RedmineDmsf::Errors::DmsfLockError, l(:error_resource_or_parent_locked) if locked? && existing.empty? raise DmsfLockError, l(:error_resource_or_parent_locked) if locked? && existing.empty?
unless existing.empty? unless existing.empty?
if (existing[0].lock_scope == :scope_shared) && (scope == :scope_shared) if (existing[0].lock_scope == :scope_shared) && (scope == :scope_shared)
# RFC states if an item is exclusively locked and another lock is attempted we reject # RFC states if an item is exclusively locked and another lock is attempted we reject
# if the item is shared locked however, we can always add another lock to it # if the item is shared locked however, we can always add another lock to it
raise RedmineDmsf::Errors::DmsfLockError, l(:error_parent_locked) if dmsf_folder.locked? raise DmsfLockError, l(:error_parent_locked) if dmsf_folder.locked?
elsif scope == :scope_exclusive elsif scope == :scope_exclusive
raise RedmineDmsf::Errors::DmsfLockError, l(:error_lock_exclusively) raise DmsfLockError, l(:error_lock_exclusively)
end end
end end
l = DmsfLock.new l = DmsfLock.new
@ -107,19 +107,19 @@ module RedmineDmsf
end end
def unlock!(force_file_unlock_allowed: false, owner: nil) def unlock!(force_file_unlock_allowed: false, owner: nil)
raise RedmineDmsf::Errors::DmsfLockError, l(:warning_file_not_locked) unless locked? raise DmsfLockError, l(:warning_file_not_locked) unless locked?
existing = lock(tree: true) existing = lock(tree: true)
destroyed = false destroyed = false
# If its empty its a folder that's locked (not root) # If its empty its a folder that's locked (not root)
if existing.empty? || (!dmsf_folder.nil? && dmsf_folder.locked?) if existing.empty? || (!dmsf_folder.nil? && dmsf_folder.locked?)
raise RedmineDmsf::Errors::DmsfLockError, l(:error_unlock_parent_locked) raise DmsfLockError, l(:error_unlock_parent_locked)
end end
# If entity is locked to you, you aren't the lock originator (or named in a shared lock) so deny action # If entity is locked to you, you aren't the lock originator (or named in a shared lock) so deny action
# Unless of course you have the rights to force an unlock # Unless of course you have the rights to force an unlock
if locked_for_user? && !User.current.allowed_to?(:force_file_unlock, project) && !force_file_unlock_allowed if locked_for_user? && !User.current.allowed_to?(:force_file_unlock, project) && !force_file_unlock_allowed
raise RedmineDmsf::Errors::DmsfLockError, l(:error_only_user_that_locked_file_can_unlock_it) raise DmsfLockError, l(:error_only_user_that_locked_file_can_unlock_it)
end end
# Now we need to determine lock type and do the needful # Now we need to determine lock type and do the needful

View File

@ -493,7 +493,7 @@ module RedmineDmsf
l = entity.lock!(scope, type, 1.week.from_now, args[:owner]) l = entity.lock!(scope, type, 1.week.from_now, args[:owner])
@response['Lock-Token'] = l.uuid @response['Lock-Token'] = l.uuid
[1.week.to_i, l.uuid] [1.week.to_i, l.uuid]
rescue RedmineDmsf::Errors::DmsfLockError => exception rescue DmsfLockError => exception
e = Dav4rack::LockFailure.new(exception.message) e = Dav4rack::LockFailure.new(exception.message)
e.add_failure @path, Conflict e.add_failure @path, Conflict
raise e raise e

View File

@ -81,7 +81,7 @@ module RedmineDmsf
wf.notify_users easy_crm_case.project, revision, self wf.notify_users easy_crm_case.project, revision, self
begin begin
file.lock! file.lock!
rescue RedmineDmsf::Errors::DmsfLockError => e rescue DmsfLockError => e
Rails.logger.warn e.message Rails.logger.warn e.message
end end
else else

View File

@ -61,13 +61,13 @@ class DmsfLockTest < RedmineDmsf::Test::UnitTest
@folder7.lock! @folder7.lock!
User.current = nil User.current = nil
assert_no_difference('@folder7.lock.count') do assert_no_difference('@folder7.lock.count') do
assert_raise RedmineDmsf::Errors::DmsfLockError do assert_raise DmsfLockError do
@folder7.unlock! @folder7.unlock!
end end
end end
User.current = @jsmith User.current = @jsmith
assert_no_difference('@folder7.lock.count') do assert_no_difference('@folder7.lock.count') do
assert_raise RedmineDmsf::Errors::DmsfLockError do assert_raise DmsfLockError do
@folder7.unlock! @folder7.unlock!
end end
end end