From 510d989be8c5b359bb276cde51d2c492d3d30c53 Mon Sep 17 00:00:00 2001
From: "karel.picman@lbcfree.net"
Date: Tue, 13 Apr 2021 09:55:03 +0200
Subject: [PATCH] WebDAV enabled/disabled
---
app/views/dmsf/_main.html.erb | 8 +-
app/views/dmsf_context_menus/_file.html.erb | 23 ++--
app/views/settings/_dmsf_settings.html.erb | 103 ++++++++++--------
.../hooks/views/base_view_hooks.rb | 3 +-
.../dmsf_context_menus_controller_test.rb | 34 +++++-
test/functional/dmsf_controller_test.rb | 10 ++
6 files changed, 115 insertions(+), 66 deletions(-)
diff --git a/app/views/dmsf/_main.html.erb b/app/views/dmsf/_main.html.erb
index 9c72f143..ef26a2a4 100644
--- a/app/views/dmsf/_main.html.erb
+++ b/app/views/dmsf/_main.html.erb
@@ -93,9 +93,11 @@
<% unless @folder && @folder.system %>
<% other_formats_links do |f| %>
<%= f.link_to 'CSV', url: { action: :show, id: @project, folder_id: @folder, encoding: Encoding::UTF_8 } if @project %>
-
- <%= link_to 'WebDAV', webdav_url(@project, @folder) %>
-
+ <% if Setting.plugin_redmine_dmsf['dmsf_webdav'] == '1' %>
+
+ <%= link_to 'WebDAV', webdav_url(@project, @folder) %>
+
+ <% end %>
<% end %>
<% end %>
diff --git a/app/views/dmsf_context_menus/_file.html.erb b/app/views/dmsf_context_menus/_file.html.erb
index 65ba25ae..ed36f1e3 100644
--- a/app/views/dmsf_context_menus/_file.html.erb
+++ b/app/views/dmsf_context_menus/_file.html.erb
@@ -67,17 +67,20 @@
ids: params[:ids], email_entries: true), method: :post, class: 'icon icon-email',
disabled: !email_allowed %>
-
- <% if dmsf_file.last_revision && dmsf_file.last_revision.protocol %>
- <% url = "#{dmsf_file.last_revision.protocol}:ofe|u|#{Setting.protocol.strip}://#{Setting.host_name.strip}/dmsf/webdav/#{Addressable::URI.escape(RedmineDmsf::Webdav::ProjectResource.create_project_name(dmsf_file.project))}/" %>
- <% if dmsf_file.dmsf_folder %>
- <% url << "#{dmsf_file.dmsf_folder.dmsf_path_str}/" %>
+<% if Setting.plugin_redmine_dmsf['dmsf_webdav'] == '1' %>
+
+ <% if dmsf_file.last_revision && dmsf_file.last_revision.protocol %>
+ <% url = "#{dmsf_file.last_revision.protocol}:ofe|u|#{Setting.protocol.strip}://#{Setting.host_name.strip}/dmsf/webdav/#{Addressable::URI.escape(RedmineDmsf::Webdav::ProjectResource.create_project_name(dmsf_file.project))}/" %>
+ <% if dmsf_file.dmsf_folder %>
+ <% url << "#{dmsf_file.dmsf_folder.dmsf_path_str}/" %>
+ <% end %>
+ <% url << dmsf_file.name %>
<% end %>
- <% url << dmsf_file.name %>
- <% end %>
- <%= context_menu_link l(:button_edit_content), url, class: "icon icon-file #{DmsfHelper.filetype_css(dmsf_file.name)}",
- disabled: url.blank? || (locked && (!unlockable)) %>
-
+ <%= context_menu_link l(:button_edit_content), url, class: "icon icon-file #{DmsfHelper.filetype_css(dmsf_file.name)}",
+ disabled: url.blank? || (locked && (!unlockable)) ||
+ (Setting.plugin_redmine_dmsf['dmsf_webdav_strategy'] != 'WEBDAV_READ_WRITE') %>
+
+<% end %>
<%= context_menu_link l(:button_delete),
dmsf_link ? dmsf_link_path(id: dmsf_link, folder_id: folder) : dmsf_file_path(id: dmsf_file, folder_id: folder),
diff --git a/app/views/settings/_dmsf_settings.html.erb b/app/views/settings/_dmsf_settings.html.erb
index 5015ab9e..39349ba0 100644
--- a/app/views/settings/_dmsf_settings.html.erb
+++ b/app/views/settings/_dmsf_settings.html.erb
@@ -229,62 +229,73 @@
options_for_select([
[l(:select_option_deactivated), nil],
[l(:select_option_activated), '1']],
- selected: @settings['dmsf_webdav'],
- disabled: webdav_disabled) %>
+ selected: webdav_disabled ? nil : @settings['dmsf_webdav']),
+ disabled: webdav_disabled,
+ onchange: "$('#dmsf_webdav_block').toggle()" %>
<% if webdav_disabled %>
+ <% @settings['dmsf_webdav'] = nil %>
<%= l(:note_webdav_disabled) %>
<% else %>
<%= l(:note_webdav, protocol: Setting.protocol, domain: Setting.host_name).html_safe %>
<%= l(:label_default) %>: <%= l(:select_option_activated) %>
<% end %>
-
-
-
-
- <%= content_tag :label, l(:label_webdav_strategy) %>
- <%= select_tag'settings[dmsf_webdav_strategy]',
- options_for_select([
- [l(:select_option_webdav_readonly), 'WEBDAV_READ_ONLY'],
- [l(:select_option_webdav_readwrite), 'WEBDAV_READ_WRITE']],
- selected: @settings['dmsf_webdav_strategy']) %>
-
-
- <%= l(:note_webdav_strategy).html_safe %> <%= l(:label_default) %>: <%= l(:select_option_webdav_readonly) %>
-
- <%= content_tag(:label, l(:label_webdav_ignore)) %>
- <%= text_field_tag 'settings[dmsf_webdav_ignore]', @settings['dmsf_webdav_ignore'], size: 50 %>
-
- <%= l(:note_webdav_ignore) %> <%= l(:label_default) %>: ^(\._|\.DS_Store$|Thumbs.db$)
-
-
-
- <%= content_tag(:label, l(:dmsf_webdav_ignore_1b_file_for_authentication)) %>
- <%= check_box_tag 'settings[dmsf_webdav_ignore_1b_file_for_authentication]', true, @settings['dmsf_webdav_ignore_1b_file_for_authentication'], size: 50 %>
-
- <%= l(:dmsf_webdav_ignore_1b_file_for_authentication_info) %> <%= l(:label_default) %>: <%= l(:general_text_Yes)%>
-
-
-
- <%= content_tag :label, l(:label_webdav_disable_versioning) %>
- <%= text_field_tag 'settings[dmsf_webdav_disable_versioning]', @settings['dmsf_webdav_disable_versioning'], size: 50 %>
-
- <%= l(:note_webdav_disable_versioning) %>
- <%= l(:label_default) %>: ^\~\$|\.tmp$
-
-
+<% visible_class = @settings['dmsf_webdav'].blank? ? 'dmsf-hidden' : '' %>
-
- <%= content_tag :label, l(:label_webdav_use_project_names) %>
- <%= check_box_tag 'settings[dmsf_webdav_use_project_names]', true, @settings['dmsf_webdav_use_project_names'] %>
-
- <%= l(:note_webdav_use_project_names) %>
- <%= l(:label_default)%>: <%= l(:general_text_No)%>
-
-
+
+
+ <%= content_tag :label, l(:label_webdav_strategy) %>
+ <%= select_tag'settings[dmsf_webdav_strategy]',
+ options_for_select([
+ [l(:select_option_webdav_readonly), 'WEBDAV_READ_ONLY'],
+ [l(:select_option_webdav_readwrite), 'WEBDAV_READ_WRITE']],
+ selected: @settings['dmsf_webdav_strategy']),
+ onchange: "$('#dmsf_webdav_ro_block').toggle()" %>
+
+
+ <%= l(:note_webdav_strategy).html_safe %> <%= l(:label_default) %>: <%= l(:select_option_webdav_readonly) %>
+
+
+
+ <% visible_class = (@settings['dmsf_webdav_strategy'] == 'WEBDAV_READ_ONLY') ? 'dmsf-hidden' : '' %>
+
+
+
+ <%= content_tag(:label, l(:label_webdav_ignore)) %>
+ <%= text_field_tag 'settings[dmsf_webdav_ignore]', @settings['dmsf_webdav_ignore'], size: 50 %>
+
+ <%= l(:note_webdav_ignore) %> <%= l(:label_default) %>: ^(\._|\.DS_Store$|Thumbs.db$)
+
+
+
+ <%= content_tag(:label, l(:dmsf_webdav_ignore_1b_file_for_authentication)) %>
+ <%= check_box_tag 'settings[dmsf_webdav_ignore_1b_file_for_authentication]', true, @settings['dmsf_webdav_ignore_1b_file_for_authentication'], size: 50 %>
+
+ <%= l(:dmsf_webdav_ignore_1b_file_for_authentication_info) %> <%= l(:label_default) %>: <%= l(:general_text_Yes)%>
+
+
+
+ <%= content_tag :label, l(:label_webdav_disable_versioning) %>
+ <%= text_field_tag 'settings[dmsf_webdav_disable_versioning]', @settings['dmsf_webdav_disable_versioning'], size: 50 %>
+
+ <%= l(:note_webdav_disable_versioning) %>
+ <%= l(:label_default) %>: ^\~\$|\.tmp$
+
+
+
+
+ <%= content_tag :label, l(:label_webdav_use_project_names) %>
+ <%= check_box_tag 'settings[dmsf_webdav_use_project_names]', true, @settings['dmsf_webdav_use_project_names'] %>
+
+ <%= l(:note_webdav_use_project_names) %>
+ <%= l(:label_default)%>: <%= l(:general_text_No)%>
+
+
+
+
@@ -339,5 +350,3 @@
<%= l(:text_enable_cjk_ngrams) %>
-
-
diff --git a/lib/redmine_dmsf/hooks/views/base_view_hooks.rb b/lib/redmine_dmsf/hooks/views/base_view_hooks.rb
index e359a492..a65cda25 100644
--- a/lib/redmine_dmsf/hooks/views/base_view_hooks.rb
+++ b/lib/redmine_dmsf/hooks/views/base_view_hooks.rb
@@ -25,7 +25,8 @@ module RedmineDmsf
class DmsfViewListener < Redmine::Hook::ViewListener
def view_layouts_base_html_head(context={})
- return unless /^(Dmsf|Projects|Issues|Queries|EasyCrmCases|MyController)/.match?(context[:controller].class.name)
+ return unless /^(Dmsf|Projects|Issues|Queries|EasyCrmCases|MyController|SettingsController)/.match?(
+ context[:controller].class.name)
meta = "\n".html_safe + stylesheet_link_tag('redmine_dmsf.css', plugin: :redmine_dmsf) +
"\n".html_safe + stylesheet_link_tag('select2.min.css', plugin: :redmine_dmsf) +
"\n".html_safe + javascript_include_tag('select2.min.js', plugin: :redmine_dmsf, defer: true) +
diff --git a/test/functional/dmsf_context_menus_controller_test.rb b/test/functional/dmsf_context_menus_controller_test.rb
index a20687fe..24c7b25c 100644
--- a/test/functional/dmsf_context_menus_controller_test.rb
+++ b/test/functional/dmsf_context_menus_controller_test.rb
@@ -63,11 +63,13 @@ class DmsfContextMenusControllerTest < RedmineDmsf::Test::TestCase
User.current = @jsmith
@file1.lock!
User.current = nil
- get :dmsf, params: { id: @file1.project.id, ids: ["file-#{@file1.id}"] }
- assert_select 'a.icon-unlock', text: l(:button_unlock)
- assert_select 'a.icon-unlock.disabled', text: l(:button_edit_content), count: 0
- assert_select 'a.icon-file', text: l(:button_edit_content)
- assert_select 'a.icon-file.disabled', text: l(:button_edit_content), count: 0
+ with_settings plugin_redmine_dmsf: { 'dmsf_webdav' => '1', 'dmsf_webdav_strategy' => 'WEBDAV_READ_WRITE' } do
+ get :dmsf, params: { id: @file1.project.id, ids: ["file-#{@file1.id}"] }
+ assert_select 'a.icon-unlock', text: l(:button_unlock)
+ assert_select 'a.icon-unlock.disabled', text: l(:button_edit_content), count: 0
+ assert_select 'a.icon-file', text: l(:button_edit_content)
+ assert_select 'a.icon-file.disabled', text: l(:button_edit_content), count: 0
+ end
end
def test_dmsf_file_locked_force_unlock_permission_off
@@ -138,6 +140,28 @@ class DmsfContextMenusControllerTest < RedmineDmsf::Test::TestCase
assert_select 'a.icon-del', text: l(:button_delete)
end
+ def test_dmsf_file_edit_content
+ get :dmsf, params: { id: @file1.project.id, ids: ["file-#{@file1.id}"] }
+ assert_response :success
+ assert_select 'a.dmsf-icon-file', text: l(:button_edit_content)
+ end
+
+ def test_dmsf_file_edit_content_webdav_disabled
+ with_settings plugin_redmine_dmsf: { 'dmsf_webdav' => nil } do
+ get :dmsf, params: { id: @file1.project.id, ids: ["file-#{@file1.id}"] }
+ assert_response :success
+ assert_select 'a:not(dmsf-icon-file)'
+ end
+ end
+
+ def test_dmsf_file_edit_content_webdav_readonly
+ with_settings plugin_redmine_dmsf: { 'dmsf_webdav' => '1', 'dmsf_webdav_strategy' => 'WEBDAV_READ_ONLY' } do
+ get :dmsf, params: { id: @file1.project.id, ids: ["file-#{@file1.id}"] }
+ assert_response :success
+ assert_select 'a.dmsf-icon-file.disabled', text: l(:button_edit_content)
+ end
+ end
+
def test_dmsf_file_link
get :dmsf, params: {
id: @file_link6.project.id, folder_id: @file_link6.dmsf_folder, ids: ["file-link-#{@file_link6.id}"] }
diff --git a/test/functional/dmsf_controller_test.rb b/test/functional/dmsf_controller_test.rb
index 6b259064..e5f28903 100644
--- a/test/functional/dmsf_controller_test.rb
+++ b/test/functional/dmsf_controller_test.rb
@@ -204,11 +204,21 @@ class DmsfControllerTest < RedmineDmsf::Test::TestCase
assert_select 'table.dmsf'
# CSV export
assert_select 'a.csv'
+ # WebDAV
+ assert_select 'a', text: 'WebDAV'
# 'Zero Size File' document and an expander is present
assert_select 'a', text: @file10.title
assert_select 'span.dmsf-expander'
end
+ def test_show_webdav_disabled
+ with_settings plugin_redmine_dmsf: { 'dmsf_webdav' => nil } do
+ get :show, params: { id: @project1.id }
+ assert_response :success
+ assert_select 'a', text: 'WebDAV', count: 0
+ end
+ end
+
def test_show_filters_found
get :show, params: { id: @project1.id, f: ['title'], op: { 'title' => '~' }, v: { 'title' => ['Zero'] } }
assert_response :success