WebDAV enabled/disabled

This commit is contained in:
karel.picman@lbcfree.net 2021-04-13 09:55:03 +02:00
parent 5ffa2d2ac4
commit 510d989be8
6 changed files with 115 additions and 66 deletions

View File

@ -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 %>
<span>
<%= link_to 'WebDAV', webdav_url(@project, @folder) %>
</span>
<% if Setting.plugin_redmine_dmsf['dmsf_webdav'] == '1' %>
<span>
<%= link_to 'WebDAV', webdav_url(@project, @folder) %>
</span>
<% end %>
<% end %>
<% end %>

View File

@ -67,17 +67,20 @@
ids: params[:ids], email_entries: true), method: :post, class: 'icon icon-email',
disabled: !email_allowed %>
</li>
<li>
<% 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' %>
<li>
<% 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)) %>
</li>
<%= 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') %>
</li>
<% end %>
<li>
<%= 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),

View File

@ -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()" %>
<em class="info">
<% 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 %>
</em>
</p>
<p>
<%= 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']) %>
<br/>
<em class="info">
<%= l(:note_webdav_strategy).html_safe %> <%= l(:label_default) %>: <%= l(:select_option_webdav_readonly) %>
</em>
</p>
<p>
<%= content_tag(:label, l(:label_webdav_ignore)) %>
<%= text_field_tag 'settings[dmsf_webdav_ignore]', @settings['dmsf_webdav_ignore'], size: 50 %>
<em class="info">
<%= l(:note_webdav_ignore) %> <%= l(:label_default) %>: ^(\._|\.DS_Store$|Thumbs.db$)
</em>
</p>
<p>
<%= 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 %>
<em class="info">
<%= l(:dmsf_webdav_ignore_1b_file_for_authentication_info) %> <%= l(:label_default) %>: <%= l(:general_text_Yes)%>
</em>
</p>
<p>
<%= content_tag :label, l(:label_webdav_disable_versioning) %>
<%= text_field_tag 'settings[dmsf_webdav_disable_versioning]', @settings['dmsf_webdav_disable_versioning'], size: 50 %>
<em class="info">
<%= l(:note_webdav_disable_versioning) %> <br/>
<%= l(:label_default) %>: ^\~\$|\.tmp$
</em>
</p>
<% visible_class = @settings['dmsf_webdav'].blank? ? 'dmsf-hidden' : '' %>
<p>
<%= 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'] %>
<em class="info">
<%= l(:note_webdav_use_project_names) %> <br/>
<%= l(:label_default)%>: <%= l(:general_text_No)%>
</em>
</p>
<div id="dmsf_webdav_block" class="<%= visible_class %>">
<p>
<%= 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()" %>
<br/>
<em class="info">
<%= l(:note_webdav_strategy).html_safe %> <%= l(:label_default) %>: <%= l(:select_option_webdav_readonly) %>
</em>
</p>
<% visible_class = (@settings['dmsf_webdav_strategy'] == 'WEBDAV_READ_ONLY') ? 'dmsf-hidden' : '' %>
<div id="dmsf_webdav_ro_block" class="<%= visible_class %>">
<p>
<%= content_tag(:label, l(:label_webdav_ignore)) %>
<%= text_field_tag 'settings[dmsf_webdav_ignore]', @settings['dmsf_webdav_ignore'], size: 50 %>
<em class="info">
<%= l(:note_webdav_ignore) %> <%= l(:label_default) %>: ^(\._|\.DS_Store$|Thumbs.db$)
</em>
</p>
<p>
<%= 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 %>
<em class="info">
<%= l(:dmsf_webdav_ignore_1b_file_for_authentication_info) %> <%= l(:label_default) %>: <%= l(:general_text_Yes)%>
</em>
</p>
<p>
<%= content_tag :label, l(:label_webdav_disable_versioning) %>
<%= text_field_tag 'settings[dmsf_webdav_disable_versioning]', @settings['dmsf_webdav_disable_versioning'], size: 50 %>
<em class="info">
<%= l(:note_webdav_disable_versioning) %> <br/>
<%= l(:label_default) %>: ^\~\$|\.tmp$
</em>
</p>
<p>
<%= 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'] %>
<em class="info">
<%= l(:note_webdav_use_project_names) %> <br/>
<%= l(:label_default)%>: <%= l(:general_text_No)%>
</em>
</p>
</div>
</div>
<hr/>
<em class="info">
@ -339,5 +350,3 @@
<%= l(:text_enable_cjk_ngrams) %>
</em>
</p>

View File

@ -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) +

View File

@ -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}"] }

View File

@ -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