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