#1136 WebDAV tree structure including sub-projects

This commit is contained in:
karel.picman@lbcfree.net 2020-08-03 08:47:50 +02:00
parent 119330836e
commit 039c6982b3
7 changed files with 72 additions and 7 deletions

View File

@ -31,7 +31,9 @@ module RedmineDmsf
attr_reader :public_path
def initialize(path, request, response, options)
raise NotFound if Setting.plugin_redmine_dmsf['dmsf_webdav'].blank?
if Setting.plugin_redmine_dmsf['dmsf_webdav'].blank?
raise NotFound
end
@project = nil
@public_path = "#{options[:root_uri_path]}#{path}"
@children = nil
@ -101,7 +103,9 @@ module RedmineDmsf
end
def options(request, response)
return NotFound if ((@path.length > 1) && ((!project) || (!project.module_enabled?('dmsf'))))
if ((@path.length > 1) && ((!project) || (!project.module_enabled?('dmsf'))))
return NotFound
end
if @__proxy.read_only
response['Allow'] ||= 'OPTIONS,HEAD,GET,PROPFIND'
end

View File

@ -238,7 +238,7 @@ module RedmineDmsf
destroy = false
end
if file.delete(destroy)
DmsfMailer.deliver_files_deleted(project, [file])
DmsfMailer.deliver_files_deleted project, [file]
NoContent
else
Conflict
@ -580,7 +580,7 @@ module RedmineDmsf
end
end
else
raise BadRequest unless (parent.projectless_path == '/' || (parent.exist? && parent.folder))
#raise BadRequest unless (parent.projectless_path == '/' || (parent.exist? && parent.folder))
f = DmsfFile.new
f.project_id = project.id
f.name = basename

View File

@ -36,7 +36,9 @@ module RedmineDmsf
def initialize(*args)
# Return 404 - NotFound if WebDAV is not enabled
raise NotFound unless Setting.plugin_redmine_dmsf['dmsf_webdav']
unless Setting.plugin_redmine_dmsf['dmsf_webdav']
raise NotFound
end
super(*args)
pinfo = path.split('/').drop(1)
if pinfo.length == 0 # If this is the base_path, we're at root

View File

@ -211,4 +211,26 @@ dmsf_file_revisions_010:
dmsf_workflow_assigned_by_user_id: 1
dmsf_workflow_started_by_user_id: 1
digest: '81dc9bdb52d04dc20036dbd8313ed055'
created_at: 2017-04-18 14:52:27 +02:00
dmsf_file_revisions_011:
id: 11
dmsf_file_id: 12
source_dmsf_file_revision_id: NULL
name: "test.txt"
disk_filename: "test.txt"
size: 4
mime_type: text/plain
title: "Test File"
description: 'Some file :-)'
workflow: 0
minor_version: 0
major_version: 1
comment: NULL
deleted: 0
deleted_by_user_id: NULL
user_id: 1
dmsf_workflow_assigned_by_user_id: 1
dmsf_workflow_started_by_user_id: 1
digest: '81dc9bdb52d04dc20036dbd8313ed055'
created_at: 2017-04-18 14:52:27 +02:00

View File

@ -99,3 +99,12 @@ dmsf_files_011:
notification: false
deleted: 0
deleted_by_user_id: NULL
dmsf_files_012:
id: 12
project_id: 3
dmsf_folder_id: NULL
name: 'test.txt'
notification: false
deleted: 0
deleted_by_user_id: NULL

View File

@ -62,4 +62,11 @@ dmsf_folders_009:
project_id: 1
dmsf_folder_id: 8
user_id: 1
system: true
system: true
dmsf_folders_010:
id: 10
title: folder10
project_id: 3
dmsf_folder_id: NULL
user_id: 1

View File

@ -34,10 +34,13 @@ class DmsfWebdavDeleteTest < RedmineDmsf::Test::IntegrationTest
@jsmith = credentials 'jsmith'
@project1 = Project.find 1
@project2 = Project.find 2
@project3 = Project.find 3 # Sub-project of project 1
@role = Role.find_by(name: 'Manager')
@folder1 = DmsfFolder.find 1
@folder6 = DmsfFolder.find 6
@folder10 = DmsfFolder.find 10
@file1 = DmsfFile.find 1
@file12 = DmsfFile.find 12
@dmsf_webdav = Setting.plugin_redmine_dmsf['dmsf_webdav']
Setting.plugin_redmine_dmsf['dmsf_webdav'] = true
@dmsf_webdav_strategy = Setting.plugin_redmine_dmsf['dmsf_webdav_strategy']
@ -47,7 +50,8 @@ class DmsfWebdavDeleteTest < RedmineDmsf::Test::IntegrationTest
@dmsf_storage_directory = Setting.plugin_redmine_dmsf['dmsf_storage_directory']
Setting.plugin_redmine_dmsf['dmsf_storage_directory'] = 'files/dmsf'
FileUtils.cp_r File.join(File.expand_path('../../../fixtures/files', __FILE__), '.'), DmsfFile.storage_path
@project1.enable_module! :dmsf # Flag module enabled
@project1.enable_module! :dmsf # Enable DMSF module
@project3.enable_module! :dmsf
User.current = nil
end
@ -67,9 +71,12 @@ class DmsfWebdavDeleteTest < RedmineDmsf::Test::IntegrationTest
def test_truth
assert_kind_of Project, @project1
assert_kind_of Project, @project2
assert_kind_of Project, @project3
assert_kind_of DmsfFolder, @folder1
assert_kind_of DmsfFolder, @folder6
assert_kind_of DmsfFolder, @folder10
assert_kind_of DmsfFile, @file1
assert_kind_of DmsfFile, @file12
assert_kind_of Role, @role
end
@ -252,4 +259,18 @@ class DmsfWebdavDeleteTest < RedmineDmsf::Test::IntegrationTest
assert_nil DmsfFile.visible.find_by(id: @file1.id)
end
def test_file_delete_in_subproject
@role.add_permission! :view_dmsf_folders
@role.add_permission! :file_delete
delete "/dmsf/webdav/#{@project1.identifier}/#{@project3.identifier}/#{@file12.name}", params: nil, headers: @admin
assert_response :success
end
def test_folder_delete_in_subproject
@role.add_permission! :view_dmsf_folders
@role.add_permission! :folder_delete
delete "/dmsf/webdav/#{@project1.identifier}/#{@project3.identifier}/#{@folder10.title}", params: nil, headers: @admin
assert_response :success
end
end