#1179 sub-projects in square brackets

This commit is contained in:
karel.picman@lbcfree.net 2020-10-16 15:51:00 +02:00
parent 90dbcd1765
commit e0cc6ef78b
10 changed files with 27 additions and 31 deletions

View File

@ -84,7 +84,7 @@ module DmsfHelper
def webdav_url(project, folder)
url = ["#{Setting.protocol}:/", Setting.host_name, 'dmsf', 'webdav']
if project
url << RedmineDmsf::Webdav::ProjectResource.create_project_name(project)
url << ERB::Util.url_encode(RedmineDmsf::Webdav::ProjectResource.create_project_name(project))
if folder
folders = [folder]
while folder.dmsf_folder do
@ -97,7 +97,7 @@ module DmsfHelper
end
end
url << ''
URI.encode(url.join '/')
url.join '/'
end
end

View File

@ -96,7 +96,7 @@ module RedmineDmsf
Confict unless collection?
entities = children.map{ |child|
DIR_FILE % [
uri_encode(request.url_for(child.path)),
uri_encode(request.url_for(child.path)),
child.long_name || child.name,
child.collection? ? '' : number_to_human_size(child.content_length),
child.special_type || child.content_type,
@ -166,7 +166,7 @@ module RedmineDmsf
protected
def uri_encode(uri)
uri.gsub /[\(\)&]/, '(' => '%28', ')' => '%29', '&' => '&amp;'
uri.gsub /[\(\)&\[\]]/, '(' => '%28', ')' => '%29', '&' => '%26', '[' => '%5B', ']' => '5D'
end
def basename
@ -188,9 +188,7 @@ module RedmineDmsf
def self.get_project(scope, name, parent_project)
prj = nil
if Setting.plugin_redmine_dmsf['dmsf_webdav_use_project_names']
#if name =~ /^\[?.+ (\d+)\]?$/
if name =~ / (\d+)$/
#prj = scope.find_by(id: $1, parent_id: parent_project&.id)
if name =~ /^\[?.+ (\d+)\]?$/
if parent_project
prj = scope.find_by(id: $1, parent_id: parent_project.id)
else
@ -198,18 +196,19 @@ module RedmineDmsf
end
if prj
# Check again whether it's really the project and not a folder with a number as a suffix
#prj = nil unless name.include?(DmsfFolder::get_valid_title(prj.name))
prj = nil unless name.start_with?(DmsfFolder::get_valid_title(prj.name))
prj = nil unless name.start_with?('[' + DmsfFolder::get_valid_title(prj.name))
end
end
else
# if name =~ /^\[?([^\]]+)\]?$/
# prj = scope.find_by(identifier: $1, parent_id: parent_project&.id)
# end
if parent_project
prj = scope.find_by(identifier: name, parent_id: parent_project.id)
if name.start_with?('[') && name.end_with?(']')
identifier = name[1..-2]
else
prj = scope.find_by(identifier: name)
identifier = name
end
if parent_project
prj = scope.find_by(identifier: identifier, parent_id: parent_project.id)
else
prj = scope.find_by(identifier: identifier)
end
end
prj

View File

@ -75,8 +75,7 @@ module RedmineDmsf
end
def long_name
#'[' + project&.name + ']'
project&.name
"[#{project&.name}]"
end
def content_type
@ -119,11 +118,9 @@ module RedmineDmsf
def self.create_project_name(prj)
if prj
if Setting.plugin_redmine_dmsf['dmsf_webdav_use_project_names']
#"[#{DmsfFolder::get_valid_title(prj.name)} #{prj.id}]"
"#{DmsfFolder::get_valid_title(prj.name)} #{prj.id}"
"[#{DmsfFolder::get_valid_title(prj.name)} #{prj.id}]"
else
#"[#{prj.identifier}]"
prj.identifier
"[#{prj.identifier}]"
end
end
end

View File

@ -131,7 +131,7 @@ class DmsfWebdavDeleteTest < RedmineDmsf::Test::IntegrationTest
Setting.plugin_redmine_dmsf['dmsf_webdav_use_project_names'] = true
delete "/dmsf/webdav/#{@project1.identifier}/#{@folder6.title}", params: nil, headers: @jsmith
assert_response :not_found
p1name_uri = Addressable::URI.escape(RedmineDmsf::Webdav::ProjectResource.create_project_name(@project1))
p1name_uri = ERB::Util.url_encode(RedmineDmsf::Webdav::ProjectResource.create_project_name(@project1))
delete "/dmsf/webdav/#{p1name_uri}/#{@folder6.title}", params: nil, headers: @jsmith
assert_response :success
@folder6.reload
@ -156,7 +156,7 @@ class DmsfWebdavDeleteTest < RedmineDmsf::Test::IntegrationTest
Setting.plugin_redmine_dmsf['dmsf_webdav_use_project_names'] = '1'
delete "/dmsf/webdav/#{@project1.identifier}/#{@file1.name}", params: nil, headers: @jsmith
assert_response :not_found
p1name_uri = Addressable::URI.escape(RedmineDmsf::Webdav::ProjectResource.create_project_name(@project1))
p1name_uri = ERB::Util.url_encode(RedmineDmsf::Webdav::ProjectResource.create_project_name(@project1))
delete "/dmsf/webdav/#{p1name_uri}/#{@file1.name}", params: nil, headers: @jsmith
assert_response :success
@file1.reload

View File

@ -114,7 +114,7 @@ class DmsfWebdavGetTest < RedmineDmsf::Test::IntegrationTest
get "/dmsf/webdav/#{@project1.identifier}/test.txt", params: nil, headers: @admin
assert_response :success
Setting.plugin_redmine_dmsf['dmsf_webdav_use_project_names'] = true
project1_uri = Addressable::URI.escape(RedmineDmsf::Webdav::ProjectResource.create_project_name(@project1))
project1_uri = ERB::Util.url_encode(RedmineDmsf::Webdav::ProjectResource.create_project_name(@project1))
get "/dmsf/webdav/#{@project1.identifier}/test.txt", params: nil, headers: @admin
assert_response :not_found
get "/dmsf/webdav/#{project1_uri}/test.txt", params: nil, headers: @admin

View File

@ -63,7 +63,7 @@ class DmsfWebdavMkcolTest < RedmineDmsf::Test::IntegrationTest
process :mkcol, "/dmsf/webdav/#{@project1.identifier}/test1", params: nil, headers: @jsmith
assert_response :success
Setting.plugin_redmine_dmsf['dmsf_webdav_use_project_names'] = true
project1_uri = Addressable::URI.escape(RedmineDmsf::Webdav::ProjectResource.create_project_name(@project1))
project1_uri = ERB::Util.url_encode(RedmineDmsf::Webdav::ProjectResource.create_project_name(@project1))
process :mkcol, "/dmsf/webdav/#{@project1.identifier}/test2", params: nil, headers: @jsmith
assert_response :not_found
process :mkcol, "/dmsf/webdav/#{project1_uri}/test3", params: nil, headers: @jsmith

View File

@ -108,7 +108,7 @@ class DmsfWebdavMoveTest < RedmineDmsf::Test::IntegrationTest
def test_move_to_new_filename_with_project_names
Setting.plugin_redmine_dmsf['dmsf_webdav_use_project_names'] = true
project1_uri = Addressable::URI.escape(RedmineDmsf::Webdav::ProjectResource.create_project_name(@project1))
project1_uri = ERB::Util.url_encode(RedmineDmsf::Webdav::ProjectResource.create_project_name(@project1))
new_name = "#{@file1.name}.moved"
assert_difference '@file1.dmsf_file_revisions.count', +1 do
process :move, "/dmsf/webdav/#{project1_uri}/#{@file1.name}", params: nil,
@ -143,7 +143,7 @@ class DmsfWebdavMoveTest < RedmineDmsf::Test::IntegrationTest
def test_move_to_new_folder_with_project_names
Setting.plugin_redmine_dmsf['dmsf_webdav_use_project_names'] = true
project1_uri = Addressable::URI.escape(RedmineDmsf::Webdav::ProjectResource.create_project_name(@project1))
project1_uri = ERB::Util.url_encode(RedmineDmsf::Webdav::ProjectResource.create_project_name(@project1))
assert_difference '@file1.dmsf_file_revisions.count', +1 do
process :move, "/dmsf/webdav/#{project1_uri}/#{@file1.name}", params: nil,
headers: @jsmith.merge!({

View File

@ -134,7 +134,7 @@ class DmsfWebdavOptionsTest < RedmineDmsf::Test::IntegrationTest
process :options, "/dmsf/webdav/#{@project1.identifier}", params: nil, headers: @admin.merge!({ HTTP_USER_AGENT: 'Other' })
assert_response :success
project1_uri = Addressable::URI.escape(RedmineDmsf::Webdav::ProjectResource.create_project_name(@project1))
project1_uri = ERB::Util.url_encode(RedmineDmsf::Webdav::ProjectResource.create_project_name(@project1))
process :options, "/dmsf/webdav/#{project1_uri}", params: nil, headers: @admin.merge!({ HTTP_USER_AGENT: 'Other' })
assert_response :success
end

View File

@ -146,7 +146,7 @@ class DmsfWebdavPropfindTest < RedmineDmsf::Test::IntegrationTest
def test_propfind_depth1_on_root_for_admin
Setting.plugin_redmine_dmsf['dmsf_webdav_use_project_names'] = true
project1_new_name = RedmineDmsf::Webdav::ProjectResource.create_project_name(@project1)
project1_new_uri = Addressable::URI.escape(project1_new_name)
project1_new_uri = ERB::Util.url_encode(project1_new_name)
process :propfind, "/dmsf/webdav/#{project1_new_uri}", params: nil, headers: @admin.merge!({ HTTP_DEPTH: '1'})
assert_response :multi_status
assert response.body.include?("<d:href>http://www.example.com:80/dmsf/webdav/#{project1_new_uri}/</d:href>")

View File

@ -75,7 +75,7 @@ class DmsfWebdavPutTest < RedmineDmsf::Test::IntegrationTest
file = DmsfFile.find_file_by_name @project1, nil, 'test-1234.txt'
assert file, 'Check for files existance'
Setting.plugin_redmine_dmsf['dmsf_webdav_use_project_names'] = true
project1_uri = Addressable::URI.escape(RedmineDmsf::Webdav::ProjectResource.create_project_name(@project1))
project1_uri = ERB::Util.url_encode(RedmineDmsf::Webdav::ProjectResource.create_project_name(@project1))
put "/dmsf/webdav/#{@project1.identifier}/test-1234.txt", params: '1234',
headers: @admin.merge!({ content_type: :text })
assert_response :conflict
@ -115,7 +115,7 @@ class DmsfWebdavPutTest < RedmineDmsf::Test::IntegrationTest
headers: @jsmith.merge!({ content_type: :text })
assert_response :conflict
project1_uri = Addressable::URI.escape(RedmineDmsf::Webdav::ProjectResource.create_project_name(@project1))
project1_uri = ERB::Util.url_encode(RedmineDmsf::Webdav::ProjectResource.create_project_name(@project1))
put "/dmsf/webdav/#{project1_uri}/test-1234.txt", params: '1234', headers: @jsmith.merge!({ content_type: :text })
assert_response :created # Now we have permissions
end