Zeitwerk
This commit is contained in:
parent
a29574e92a
commit
c7fd1c0a02
@ -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
|
||||||
|
|||||||
@ -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
|
||||||
|
|||||||
@ -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
|
||||||
|
|||||||
@ -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
|
||||||
|
|||||||
@ -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)
|
||||||
|
|||||||
@ -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
|
||||||
@ -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
|
||||||
@ -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
|
||||||
@ -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
|
||||||
@ -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
|
||||||
@ -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
|
||||||
@ -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
|
||||||
|
|||||||
@ -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')
|
||||||
|
|||||||
@ -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"
|
||||||
|
|||||||
@ -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))
|
||||||
|
|||||||
@ -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
|
||||||
|
|||||||
@ -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
|
||||||
|
|||||||
@ -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
|
||||||
|
|||||||
@ -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
|
||||||
|
|||||||
@ -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
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user