From 8ddab4067300cfbc3f1a2deb9e3494bc471a820b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Karel=20Pi=C4=8Dman?= Date: Tue, 14 Jan 2025 13:53:01 +0100 Subject: [PATCH] Inconsistent default values in settings #1577 --- app/helpers/dmsf_upload_helper.rb | 2 +- app/models/dmsf_file.rb | 5 +- app/models/dmsf_file_revision.rb | 2 +- app/models/dmsf_folder.rb | 2 +- app/views/settings/_dmsf_settings.html.erb | 142 +++++++++--------- init.rb | 3 +- lib/redmine_dmsf.rb | 27 +++- lib/redmine_dmsf/webdav/dmsf_resource.rb | 2 +- lib/redmine_dmsf/webdav/resource_proxy.rb | 2 +- patches/project_patch.rb | 2 +- .../webdav/dmsf_webdav_delete_test.rb | 13 +- .../webdav/dmsf_webdav_get_test.rb | 8 +- .../webdav/dmsf_webdav_head_test.rb | 8 +- .../webdav/dmsf_webdav_mkcol_test.rb | 5 +- .../webdav/dmsf_webdav_move_test.rb | 10 +- .../webdav/dmsf_webdav_propfind_test.rb | 16 +- .../webdav/dmsf_webdav_put_test.rb | 31 +++- test/integration_test.rb | 4 +- test/unit/dmsf_file_revision_test.rb | 2 +- 19 files changed, 182 insertions(+), 104 deletions(-) diff --git a/app/helpers/dmsf_upload_helper.rb b/app/helpers/dmsf_upload_helper.rb index 26671e24a..2bdef72b5 100644 --- a/app/helpers/dmsf_upload_helper.rb +++ b/app/helpers/dmsf_upload_helper.rb @@ -45,7 +45,7 @@ def self.commit_files_internal(committed_files, project, folder, controller = ni file.project_id = project.id file.name = name file.dmsf_folder = folder - file.notification = Setting.plugin_redmine_dmsf['dmsf_default_notifications'].present? + file.notification = RedmineDmsf.dmsf_default_notifications? end if file.locked_for_user? failed_uploads.push file diff --git a/app/models/dmsf_file.rb b/app/models/dmsf_file.rb index b3f27b028..fc0dbea4d 100644 --- a/app/models/dmsf_file.rb +++ b/app/models/dmsf_file.rb @@ -89,8 +89,7 @@ def self.previews_storage_path end def default_values - return unless Setting.plugin_redmine_dmsf['dmsf_default_notifications'].present? && - (!dmsf_folder || !dmsf_folder.system) + return unless RedmineDmsf.dmsf_default_notifications? && (!dmsf_folder || !dmsf_folder.system) self.notification = true end @@ -289,7 +288,7 @@ def copy_to_filename(project, folder, filename) end end file.name = filename - file.notification = Setting.plugin_redmine_dmsf['dmsf_default_notifications'].present? + file.notification = RedmineDmsf.dmsf_default_notifications? if file.save && last_revision new_revision = last_revision.clone new_revision.dmsf_file = file diff --git a/app/models/dmsf_file_revision.rb b/app/models/dmsf_file_revision.rb index b0ee7478d..31f2064d9 100644 --- a/app/models/dmsf_file_revision.rb +++ b/app/models/dmsf_file_revision.rb @@ -400,7 +400,7 @@ def delete_source_revision d.source_revision = source_revision d.save! end - return unless Setting.plugin_redmine_dmsf['dmsf_really_delete_files'] + return unless RedmineDmsf.physical_file_delete? dependencies = DmsfFileRevision.where(disk_filename: disk_filename).all.size FileUtils.rm_f(disk_file) if dependencies <= 1 diff --git a/app/models/dmsf_folder.rb b/app/models/dmsf_folder.rb index 906397374..f9ae94940 100644 --- a/app/models/dmsf_folder.rb +++ b/app/models/dmsf_folder.rb @@ -149,7 +149,7 @@ def initialize(*args) end def default_values - self.notification = true if Setting.plugin_redmine_dmsf['dmsf_default_notifications'].present? && !system + self.notification = true if RedmineDmsf.dmsf_default_notifications? && !system end def locked_by diff --git a/app/views/settings/_dmsf_settings.html.erb b/app/views/settings/_dmsf_settings.html.erb index 4bb9bd2fd..3f1a93435 100644 --- a/app/views/settings/_dmsf_settings.html.erb +++ b/app/views/settings/_dmsf_settings.html.erb @@ -34,38 +34,37 @@

<%= content_tag :label, l(:label_maximum_files_download) %> - <%= text_field_tag 'settings[dmsf_max_file_download]', @settings['dmsf_max_file_download'], size: 10 %> + <%= text_field_tag 'settings[dmsf_max_file_download]', RedmineDmsf.dmsf_max_file_download, size: 10 %> - <%= l(:note_maximum_number_of_files_downloaded) %> <%= l(:label_default) %>: 0 + <%= l(:note_maximum_number_of_files_downloaded) %>
+ <%= l(:label_default) %>: 0

<%= content_tag :label, l(:label_dmsf_max_notification_receivers_info) %> - <% @settings['dmsf_max_notification_receivers_info'] ||= 10 %> - <%= text_field_tag 'settings[dmsf_max_notification_receivers_info]', @settings['dmsf_max_notification_receivers_info'], size: 10 %> + <%= text_field_tag 'settings[dmsf_max_notification_receivers_info]', RedmineDmsf.dmsf_max_notification_receivers_info, + size: 10 %> - <%= l(:note_dmsf_max_notification_receivers_info) %> <%= l(:label_default) %>: 10 + <%= l(:note_dmsf_max_notification_receivers_info) %>
+ <%= l(:label_default) %>: 10

<%= content_tag :label, l(:label_maximum_email_filesize) %> - <%= text_field_tag 'settings[dmsf_max_email_filesize]', @settings['dmsf_max_email_filesize'], size: 10 %> + <%= text_field_tag 'settings[dmsf_max_email_filesize]', RedmineDmsf.dmsf_max_email_filesize, size: 10 %> - <%= l(:note_maximum_email_filesize) %> <%= l(:label_default) %>: 0 + <%= l(:note_maximum_email_filesize) %>
+ <%= l(:label_default) %>: 0

<%= content_tag :label, l(:label_file_storage_directory) %> - <% - storage_dir = @settings['dmsf_storage_directory'].strip if @settings['dmsf_storage_directory'].present? - storage_dir = 'dmsf' if storage_dir.blank? - %> - <%= text_field_tag 'settings[dmsf_storage_directory]', storage_dir, size: 256 %> + <%= text_field_tag 'settings[dmsf_storage_directory]', RedmineDmsf.dmsf_storage_directory, size: 256 %> - <%= l(:label_default) %>: dmsf + <%= l(:label_default) %>: files/dmsf

<% unless File.exist?(DmsfFile.storage_path) %> @@ -76,7 +75,7 @@ <% end %> <% end %> <% testfilename = DmsfFile.storage_path.join('test.test') %> -<% if File.exist?(storage_dir) %> +<% if File.exist?(RedmineDmsf.dmsf_storage_directory) %> <% begin %> <% File.open(testfilename, 'wb') {} %> <% rescue %> @@ -88,20 +87,21 @@

<%= content_tag :label, l(:label_dmsf_office_bin) %> - <%= text_field_tag 'settings[office_bin]', @settings['office_bin'], size: 10 %> + <%= text_field_tag 'settings[office_bin]', RedmineDmsf.office_bin, size: 10 %> <% unless RedmineDmsf::Preview.office_available? %> - <%= l(:note_dmsf_office_bin_not_available, @settings['office_bin'] ||= 'libreoffice') %> + <%= l(:note_dmsf_office_bin_not_available, RedmineDmsf.office_bin ||= 'libreoffice') %> <% end %> - <%= l(:note_dmsf_office_bin) %> <%= l(:label_default) %>: 'libreoffice' + <%= l(:note_dmsf_office_bin) %>
+ <%= l(:label_default) %>: 'libreoffice'

<%= content_tag :label, l(:label_physical_file_delete) %> - <%= check_box_tag 'settings[dmsf_really_delete_files]', true, @settings['dmsf_really_delete_files'] %> + <%= check_box_tag 'settings[dmsf_really_delete_files]', '1', RedmineDmsf.physical_file_delete? %> <%= l(:label_default)%>: <%= l(:general_text_No)%> @@ -111,9 +111,9 @@ <%= content_tag :label, l(:label_default_notifications) %> <%= select_tag 'settings[dmsf_default_notifications]', options_for_select([ - [l(:select_option_deactivated), nil], + [l(:select_option_deactivated), '0'], [l(:select_option_activated), '1']], - selected: @settings['dmsf_default_notifications']) %> + selected: RedmineDmsf.dmsf_default_notifications? ? '1' : '0') %> <%= l(:label_default) %>: <%= l(:select_option_deactivated) %> @@ -123,17 +123,18 @@ <%= content_tag :label, l(:label_display_notified_recipients) %> <%= select_tag 'settings[dmsf_display_notified_recipients]', options_for_select([ - [l(:select_option_deactivated), nil], + [l(:select_option_deactivated), '0'], [l(:select_option_activated), '1']], - selected: @settings['dmsf_display_notified_recipients']) %> + selected: RedmineDmsf.dmsf_display_notified_recipients? ? '1' : '0') %> - <%= l(:note_display_notified_recipients).html_safe %> <%= l(:label_default) %>: <%= l(:select_option_deactivated) %> + <%= l(:note_display_notified_recipients) %>
+ <%= l(:label_default) %>: <%= l(:select_option_deactivated) %>

<%= content_tag :label, l(:label_title_format) %> - <%= text_field_tag 'settings[dmsf_global_title_format]', @settings['dmsf_global_title_format'], size: 10 %> + <%= text_field_tag 'settings[dmsf_global_title_format]', RedmineDmsf.dmsf_global_title_format, size: 10 %> <%= l(:text_title_format) %> @@ -141,7 +142,7 @@

<%= content_tag :label, l(:label_act_as_attachable) %> - <%= check_box_tag 'settings[dmsf_act_as_attachable]', true, @settings['dmsf_act_as_attachable'] %> + <%= check_box_tag 'settings[dmsf_act_as_attachable]', '1', RedmineDmsf.dmsf_act_as_attachable? %> <%= l(:note_dmsf_act_as_attachable) %>
<%= l(:label_default) %>: <%= l(:general_text_No) %> @@ -150,7 +151,7 @@

<%= content_tag :label, l(:label_dmsf_projects_as_subfolders) %> - <%= check_box_tag 'settings[dmsf_projects_as_subfolders]', true, @settings['dmsf_projects_as_subfolders'] %> + <%= check_box_tag 'settings[dmsf_projects_as_subfolders]', '1', RedmineDmsf.dmsf_projects_as_subfolders? %> <%= l(:note_dmsf_projects_as_subfolders) %>
<%= l(:label_default) %>: <%= l(:general_text_No) %> @@ -159,7 +160,7 @@

<%= content_tag :label, l(:label_dmsf_global_menu_disabled) %> - <%= check_box_tag 'settings[dmsf_global_menu_disabled]', true, @settings['dmsf_global_menu_disabled'] %> + <%= check_box_tag 'settings[dmsf_global_menu_disabled]', '1', RedmineDmsf.dmsf_global_menu_disabled? %> <%= l(:note_dmsf_global_menu_disabled) %>
<%= l(:label_default) %>: <%= l(:general_text_No) %> @@ -168,7 +169,7 @@

<%= content_tag :label, l(:label_empty_minor_version_by_default) %> - <%= check_box_tag 'settings[empty_minor_version_by_default]', false, @settings['empty_minor_version_by_default'] %> + <%= check_box_tag 'settings[empty_minor_version_by_default]', '1', RedmineDmsf.empty_minor_version_by_default? %> <%= l(:label_default) %>: <%= l(:general_text_No) %> @@ -176,7 +177,7 @@

<%= content_tag :label, l(:label_remove_original_documents_module) %> - <%= check_box_tag 'settings[remove_original_documents_module]', false, @settings['remove_original_documents_module'] %> + <%= check_box_tag 'settings[remove_original_documents_module]', '1', RedmineDmsf.remove_original_documents_module? %> <%= l(:label_default) %>: <%= l(:general_text_No) %> @@ -187,14 +188,14 @@ <%= l(:label_dmsf_columns) %> -<%= render partial: 'settings/dmsf_columns', locals: { selected_columns: @settings['dmsf_columns'] } %> +<%= render partial: 'settings/dmsf_columns', locals: { selected_columns: RedmineDmsf.dmsf_columns } %>

<%= content_tag :label, l(:label_default_query) %> <% options = [[l(:label_none), nil]] %> <% options.concat DmsfQuery.only_public.where(project_id: nil).pluck(:name, :id) %> <%= select_tag 'settings[dmsf_default_query]', - options_for_select(options, selected: @settings['dmsf_default_query']) %> + options_for_select(options, selected: RedmineDmsf.dmsf_default_query) %>


@@ -204,7 +205,7 @@

<%= content_tag :label, l(:label_email_from_override) %> - <%= text_field_tag 'settings[dmsf_documents_email_from]', @settings['dmsf_documents_email_from'], size: 128 %> + <%= text_field_tag 'settings[dmsf_documents_email_from]', RedmineDmsf.dmsf_documents_email_from, size: 128 %> <%= l(:label_default) %>: <%= l(:text_email_from_override) %> @@ -212,7 +213,7 @@

<%= content_tag :label, l(:label_email_reply_to) %> - <%= text_field_tag 'settings[dmsf_documents_email_reply_to]', @settings['dmsf_documents_email_reply_to'], size: 128 %> + <%= text_field_tag 'settings[dmsf_documents_email_reply_to]', RedmineDmsf.dmsf_documents_email_reply_to, size: 128 %> <%= l(:label_default) %>: <%= "''" %> @@ -220,7 +221,7 @@

<%= content_tag :label, l(:label_links_only).capitalize %> - <%= check_box_tag 'settings[dmsf_documents_email_links_only]', true, @settings['dmsf_documents_email_links_only'] %> + <%= check_box_tag 'settings[dmsf_documents_email_links_only]', '1', RedmineDmsf.dmsf_documents_email_links_only? %> <%= l(:label_default) %>: <%= l(:general_text_No) %> @@ -233,7 +234,7 @@

<%= content_tag :label, l(:label_dmsf_keep_documents_locked) %> - <%= check_box_tag 'settings[dmsf_keep_documents_locked]', false, @settings['dmsf_keep_documents_locked'] %> + <%= check_box_tag 'settings[dmsf_keep_documents_locked]', '1', RedmineDmsf.dmsf_keep_documents_locked? %> <%= l(:note_dmsf_keep_documents_locked) %>
<%= l(:label_default)%>: <%= l(:general_text_No)%> @@ -242,7 +243,7 @@

<%= content_tag(:label, l(:only_approval_zero_minor_version)) %> - <%= check_box_tag 'settings[only_approval_zero_minor_version]', false, @settings['only_approval_zero_minor_version'], size: 50 %> + <%= check_box_tag 'settings[only_approval_zero_minor_version]', '1', RedmineDmsf.only_approval_zero_minor_version? %> <%= l(:only_approval_zero_minor_version) %>
<%= l(:label_default) %>: <%= l(:general_text_No)%>
@@ -255,36 +256,36 @@

<%= content_tag :label, l(:label_webdav) %> - <% webdav_disabled = Redmine::Plugin.installed?('easy_hosting_services') && EasyHostingServices::EasyMultiTenancy.activated? %> + <% disabled = defined?(EasyExtensions) && !(Redmine::Plugin.installed?('easy_hosting_services') && + EasyHostingServices::EasyMultiTenancy.activated?) %> <%= select_tag 'settings[dmsf_webdav]', options_for_select([ - [l(:select_option_deactivated), nil], + [l(:select_option_deactivated), '0'], [l(:select_option_activated), '1']], - selected: webdav_disabled ? nil : @settings['dmsf_webdav']), - disabled: webdav_disabled, + selected: RedmineDmsf.dmsf_webdav? ? '1' : '0'), + disabled: disabled, onchange: "$('#dmsf_webdav_block').toggle()" %> - <% if webdav_disabled %> - <% @settings['dmsf_webdav'] = nil %> + <% if disabled %> + <% @settings['dmsf_webdav'] = '0' %> <%= l(:note_webdav_disabled) %> <% else %> - <%= l(:note_webdav, protocol: Setting.protocol, domain: Setting.host_name).html_safe %> - <%= l(:label_default) %>: <%= l(:select_option_activated) %> + <%= l(:note_webdav, protocol: Setting.protocol, domain: Setting.host_name) %>
+ <%= l(:label_default) %>: <%= l(:select_option_deactivated) %> <% end %>

-<% visible_class = @settings['dmsf_webdav'].blank? ? 'dmsf-hidden' : '' %> +<% visible_class = RedmineDmsf.dmsf_webdav? ? '' : 'dmsf-hidden' %>

<%= content_tag :label, l(:label_webdav_authentication) %> <% auth_types = [%w[Basic Basic], %w[Digest Digest]] %> - <% @settings['dmsf_webdav_authentication'] = 'Basic' if @settings['dmsf_webdav_authentication'].blank? %> <%= select_tag 'settings[dmsf_webdav_authentication]', - options_for_select(auth_types, @settings['dmsf_webdav_authentication']) %> + options_for_select(auth_types, RedmineDmsf.dmsf_webdav_authentication) %> - <%= l(:note_webdav_authentication) %>
+ <%= l(:note_webdav_authentication) %>
<%= l(:label_default)%>: <%= auth_types[1][0] %>

@@ -294,44 +295,47 @@ 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()" %> -
+ selected: RedmineDmsf.dmsf_webdav_strategy), + onchange: "$('#dmsf_webdav_ro_block').toggle()" %>
- <%= l(:note_webdav_strategy).html_safe %> <%= l(:label_default) %>: <%= l(:select_option_webdav_readonly) %> + <%= l(:note_webdav_strategy) %>
+ <%= l(:label_default) %>: <%= l(:select_option_webdav_readonly) %>

- <% visible_class = (@settings['dmsf_webdav_strategy'] == 'WEBDAV_READ_ONLY') ? 'dmsf-hidden' : '' %> + <% visible_class = (RedmineDmsf.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 %> + <%= text_field_tag 'settings[dmsf_webdav_ignore]', RedmineDmsf.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 %> + <%= check_box_tag 'settings[dmsf_webdav_ignore_1b_file_for_authentication]', '1', + RedmineDmsf.dmsf_webdav_ignore_1b_file_for_authentication? %> - <%= l(:dmsf_webdav_ignore_1b_file_for_authentication_info) %> <%= l(:label_default) %>: <%= l(:general_text_Yes)%> + <%= 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 %> + <%= text_field_tag 'settings[dmsf_webdav_disable_versioning]', RedmineDmsf.dmsf_webdav_disable_versioning, + size: 50 %> - <%= l(:note_webdav_disable_versioning) %>
+ <%= 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'] %> + <%= check_box_tag 'settings[dmsf_webdav_use_project_names]', '1', RedmineDmsf.dmsf_webdav_use_project_names? %> - <%= l(:note_webdav_use_project_names) %>
+ <%= l(:note_webdav_use_project_names) %>
<%= l(:label_default)%>: <%= l(:general_text_No) %>

@@ -362,7 +366,7 @@ <% if RedmineDmsf::Plugin.xapian_available? %>

<%= content_tag :label, l(:label_index_database) %> - <%= text_field_tag 'settings[dmsf_index_database]', @settings['dmsf_index_database'], size: 50 %> + <%= text_field_tag 'settings[dmsf_index_database]', RedmineDmsf.dmsf_index_database, size: 50 %> <%= l(:label_default) %>: <%= File.expand_path('dmsf_index', Rails.root) %> @@ -373,22 +377,23 @@

<%= content_tag :label, l(:label_stemming_language) %> - <%= select_tag 'settings[dmsf_stemming_lang]', options_for_select(stem_langs, @settings['dmsf_stemming_lang']) %> + <%= select_tag 'settings[dmsf_stemming_lang]', options_for_select(stem_langs, RedmineDmsf.dmsf_stemming_lang) %> - <%= l(:note_possible_values) %>: <%= stem_langs.join(', ') %>. <%= "#{l(:label_default)}: #{stem_langs[2]}" %> + <%= l(:note_possible_values) %>: <%= stem_langs.join(', ') %>.
+ <%= "#{l(:label_default)}: #{stem_langs[2]}" %>

<%= content_tag :label, l(:label_stem_strategy) %> <%= radio_button_tag 'settings[dmsf_stemming_strategy]', 'STEM_NONE', - @settings['dmsf_stemming_strategy'] == 'STEM_NONE', checked: true %> <%= l(:option_stem_none) %> + RedmineDmsf.dmsf_stemming_strategy == 'STEM_NONE' %> <%= l(:option_stem_none) %>
<%= radio_button_tag 'settings[dmsf_stemming_strategy]', 'STEM_SOME', - @settings['dmsf_stemming_strategy'] == 'STEM_SOME' %> <%= l(:option_stem_some) %> + RedmineDmsf.dmsf_stemming_strategy == 'STEM_SOME' %> <%= l(:option_stem_some) %>
<%= radio_button_tag 'settings[dmsf_stemming_strategy]', 'STEM_ALL', - @settings['dmsf_stemming_strategy'] == 'STEM_ALL' %> <%= l(:option_stem_all) %> + RedmineDmsf.dmsf_stemming_strategy == 'STEM_ALL' %> <%= l(:option_stem_all) %>
<%= l(:text_stemming_info) %> @@ -397,9 +402,10 @@

<%= content_tag :label, l(:label_enable_cjk_ngrams) %> - <%= check_box_tag 'settings[dmsf_enable_cjk_ngrams]', true, @settings['dmsf_enable_cjk_ngrams'] %> + <%= check_box_tag 'settings[dmsf_enable_cjk_ngrams]', '1', RedmineDmsf.dmsf_enable_cjk_ngrams? %> - <%= l(:text_enable_cjk_ngrams) %> + <%= l(:text_enable_cjk_ngrams) %>
+ <%= l(:label_default)%>: <%= l(:general_text_No) %>

<% else %> diff --git a/init.rb b/init.rb index d9ae2de84..80fd9ac64 100644 --- a/init.rb +++ b/init.rb @@ -65,7 +65,8 @@ 'dmsf_default_query' => '0', 'empty_minor_version_by_default' => '0', 'remove_original_documents_module' => '0', - 'dmsf_webdav_authentication' => 'Digest' + 'dmsf_webdav_authentication' => 'Digest', + 'dmsf_really_delete_files' => '0' } end diff --git a/lib/redmine_dmsf.rb b/lib/redmine_dmsf.rb index 0f6b647bd..cccf0ce2d 100644 --- a/lib/redmine_dmsf.rb +++ b/lib/redmine_dmsf.rb @@ -62,9 +62,22 @@ def dmsf_stemming_strategy end end + def dmsf_webdav_strategy + if Setting.plugin_redmine_dmsf['dmsf_webdav_strategy'].present? + Setting.plugin_redmine_dmsf['dmsf_webdav_strategy'].strip + else + 'WEBDAV_READ_ONLY' + end + end + def dmsf_webdav? value = Setting.plugin_redmine_dmsf['dmsf_webdav'] - value.to_i.positive? || value == 'true' + webdav = value.to_i.positive? || value == 'true' + if webdav && defined?(EasyExtensions) + webdav = Redmine::Plugin.installed?('easy_hosting_services') && + EasyHostingServices::EasyMultiTenancy.activated? + end + webdav end def dmsf_display_notified_recipients? @@ -182,6 +195,11 @@ def empty_minor_version_by_default? value.to_i.positive? || value == 'true' end + def physical_file_delete? + value = Setting.plugin_redmine_dmsf['dmsf_really_delete_files'] + value.to_i.positive? || value == 'true' + end + def remove_original_documents_module? value = Setting.plugin_redmine_dmsf['remove_original_documents_module'] value.to_i.positive? || value == 'true' @@ -191,9 +209,14 @@ def dmsf_webdav_authentication if Setting.plugin_redmine_dmsf['dmsf_webdav_authentication'].present? Setting.plugin_redmine_dmsf['dmsf_webdav_authentication'].strip else - 'Basic' + 'Digest' end end + + def dmsf_default_notifications? + value = Setting.plugin_redmine_dmsf['dmsf_default_notifications'] + value.to_i.positive? || value == 'true' + end end end diff --git a/lib/redmine_dmsf/webdav/dmsf_resource.rb b/lib/redmine_dmsf/webdav/dmsf_resource.rb index eb42ddf3a..ecba00a72 100644 --- a/lib/redmine_dmsf/webdav/dmsf_resource.rb +++ b/lib/redmine_dmsf/webdav/dmsf_resource.rb @@ -586,7 +586,7 @@ def put(request) f.project_id = project.id f.name = basename f.dmsf_folder = parent.folder - f.notification = Setting.plugin_redmine_dmsf['dmsf_default_notifications'].present? + f.notification = RedmineDmsf.dmsf_default_notifications? new_revision = DmsfFileRevision.new new_revision.minor_version = 1 new_revision.major_version = 0 diff --git a/lib/redmine_dmsf/webdav/resource_proxy.rb b/lib/redmine_dmsf/webdav/resource_proxy.rb index 17ccc2e77..e692aaaa5 100644 --- a/lib/redmine_dmsf/webdav/resource_proxy.rb +++ b/lib/redmine_dmsf/webdav/resource_proxy.rb @@ -38,7 +38,7 @@ def initialize(path, request, response, options) rc = get_resource_class(path) @resource_c = rc.new(path, request, response, options) @resource_c.accessor = self if @resource_c - @read_only = Setting.plugin_redmine_dmsf['dmsf_webdav_strategy'] == 'WEBDAV_READ_ONLY' + @read_only = RedmineDmsf.dmsf_webdav_strategy == 'WEBDAV_READ_ONLY' end def authenticate(username, password) diff --git a/patches/project_patch.rb b/patches/project_patch.rb index d4022c7d1..60163a90b 100644 --- a/patches/project_patch.rb +++ b/patches/project_patch.rb @@ -79,7 +79,7 @@ def self.prepended(base) def set_default_dmsf_notification return unless new_record? - return unless !dmsf_notification && Setting.plugin_redmine_dmsf['dmsf_default_notifications'].present? + return unless !dmsf_notification && RedmineDmsf.dmsf_default_notifications? self.dmsf_notification = true end diff --git a/test/integration/webdav/dmsf_webdav_delete_test.rb b/test/integration/webdav/dmsf_webdav_delete_test.rb index 4551acd8d..db2f3ba50 100644 --- a/test/integration/webdav/dmsf_webdav_delete_test.rb +++ b/test/integration/webdav/dmsf_webdav_delete_test.rb @@ -68,7 +68,8 @@ def test_dmsf_not_enabled end def test_delete_when_ro - with_settings plugin_redmine_dmsf: { 'dmsf_webdav_strategy' => 'WEBDAV_READ_ONLY', 'dmsf_webdav' => '1' } do + with_settings plugin_redmine_dmsf: { 'dmsf_webdav_strategy' => 'WEBDAV_READ_ONLY', 'dmsf_webdav' => '1', + 'dmsf_webdav_authentication' => 'Basic' } do delete "/dmsf/webdav/#{@project1.identifier}/#{@file1.name}", params: nil, headers: @admin assert_response :bad_gateway # WebDAV is read only end @@ -128,7 +129,10 @@ def test_folder_delete_by_user end def test_folder_delete_by_user_with_project_names - with_settings plugin_redmine_dmsf: { 'dmsf_webdav_use_project_names' => '1', 'dmsf_webdav' => '1' } do + with_settings plugin_redmine_dmsf: { 'dmsf_webdav_use_project_names' => '1', + 'dmsf_webdav' => '1', + 'dmsf_webdav_authentication' => 'Basic', + 'dmsf_webdav_strategy' => 'WEBDAV_READ_WRITE' } do delete "/dmsf/webdav/#{@project1.identifier}/#{@folder6.title}", params: nil, headers: @jsmith assert_response :conflict p1name_uri = ERB::Util.url_encode(RedmineDmsf::Webdav::ProjectResource.create_project_name(@project1)) @@ -154,7 +158,10 @@ def test_file_delete_by_user end def test_file_delete_by_user_with_project_names - with_settings plugin_redmine_dmsf: { 'dmsf_webdav_use_project_names' => '1', 'dmsf_webdav' => '1' } do + with_settings plugin_redmine_dmsf: { 'dmsf_webdav_use_project_names' => '1', + 'dmsf_webdav' => '1', + 'dmsf_webdav_authentication' => 'Basic', + 'dmsf_webdav_strategy' => 'WEBDAV_READ_WRITE' } do delete "/dmsf/webdav/#{@project1.identifier}/#{@file1.name}", params: nil, headers: @jsmith assert_response :conflict p1name_uri = ERB::Util.url_encode(RedmineDmsf::Webdav::ProjectResource.create_project_name(@project1)) diff --git a/test/integration/webdav/dmsf_webdav_get_test.rb b/test/integration/webdav/dmsf_webdav_get_test.rb index 4d050df64..ec75e0317 100644 --- a/test/integration/webdav/dmsf_webdav_get_test.rb +++ b/test/integration/webdav/dmsf_webdav_get_test.rb @@ -77,7 +77,9 @@ def test_should_list_dmsf_enabled_project assert_response :success assert_not response.body.match(@project1.identifier).nil?, "Expected to find project #{@project1.identifier} in return data" - with_settings plugin_redmine_dmsf: { 'dmsf_webdav_use_project_names' => '1', 'dmsf_webdav' => '1' } do + with_settings plugin_redmine_dmsf: { 'dmsf_webdav_use_project_names' => '1', + 'dmsf_webdav' => '1', + 'dmsf_webdav_authentication' => 'Basic' } do project1_uri = Addressable::URI.encode(RedmineDmsf::Webdav::ProjectResource.create_project_name(@project1)) get '/dmsf/webdav', params: nil, headers: @admin assert_response :success @@ -138,7 +140,9 @@ def test_should_not_list_folders_without_permissions def test_download_file_from_dmsf_enabled_project get "/dmsf/webdav/#{@project1.identifier}/test.txt", params: nil, headers: @admin assert_response :success - with_settings plugin_redmine_dmsf: { 'dmsf_webdav_use_project_names' => '1', 'dmsf_webdav' => '1' } do + with_settings plugin_redmine_dmsf: { 'dmsf_webdav_use_project_names' => '1', + 'dmsf_webdav' => '1', + 'dmsf_webdav_authentication' => 'Basic' } do 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 :conflict diff --git a/test/integration/webdav/dmsf_webdav_head_test.rb b/test/integration/webdav/dmsf_webdav_head_test.rb index c2e93422d..a28d7c2f3 100644 --- a/test/integration/webdav/dmsf_webdav_head_test.rb +++ b/test/integration/webdav/dmsf_webdav_head_test.rb @@ -34,7 +34,9 @@ def test_head_responds_with_authentication head "/dmsf/webdav/#{@project1.identifier}", params: nil, headers: @admin assert_response :success check_headers_exist - with_settings plugin_redmine_dmsf: { 'dmsf_webdav_use_project_names' => '1', 'dmsf_webdav' => '1' } do + with_settings plugin_redmine_dmsf: { 'dmsf_webdav_use_project_names' => '1', + 'dmsf_webdav' => '1', + 'dmsf_webdav_authentication' => 'Basic' } do head "/dmsf/webdav/#{@project1.identifier}", params: nil, headers: @admin assert_response :not_found project1_name = RedmineDmsf::Webdav::ProjectResource.create_project_name(@project1) @@ -52,7 +54,9 @@ def test_head_responds_to_file head "/dmsf/webdav/#{@project1.identifier}/test.txt", params: nil, headers: @admin assert_response :success check_headers_exist - with_settings plugin_redmine_dmsf: { 'dmsf_webdav_use_project_names' => '1', 'dmsf_webdav' => '1' } do + with_settings plugin_redmine_dmsf: { 'dmsf_webdav_use_project_names' => '1', + 'dmsf_webdav' => '1', + 'dmsf_webdav_authentication' => 'Basic' } do head "/dmsf/webdav/#{@project1.identifier}/test.txt", params: nil, headers: @admin assert_response :conflict project1_name = RedmineDmsf::Webdav::ProjectResource.create_project_name(@project1) diff --git a/test/integration/webdav/dmsf_webdav_mkcol_test.rb b/test/integration/webdav/dmsf_webdav_mkcol_test.rb index 38b926ea8..917554b0e 100644 --- a/test/integration/webdav/dmsf_webdav_mkcol_test.rb +++ b/test/integration/webdav/dmsf_webdav_mkcol_test.rb @@ -62,7 +62,10 @@ def test_should_fail_to_create_folder_that_already_exists def test_should_create_folder_for_non_admin_user_with_rights process :mkcol, "/dmsf/webdav/#{@project1.identifier}/test1", params: nil, headers: @jsmith assert_response :success - with_settings plugin_redmine_dmsf: { 'dmsf_webdav_use_project_names' => '1', 'dmsf_webdav' => '1' } do + with_settings plugin_redmine_dmsf: { 'dmsf_webdav_use_project_names' => '1', + 'dmsf_webdav' => '1', + 'dmsf_webdav_authentication' => 'Basic', + 'dmsf_webdav_strategy' => 'WEBDAV_READ_WRITE' } do 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 :conflict diff --git a/test/integration/webdav/dmsf_webdav_move_test.rb b/test/integration/webdav/dmsf_webdav_move_test.rb index 69482305b..d89137a5d 100644 --- a/test/integration/webdav/dmsf_webdav_move_test.rb +++ b/test/integration/webdav/dmsf_webdav_move_test.rb @@ -135,7 +135,10 @@ def test_move_to_new_filename end def test_move_to_new_filename_with_project_names - with_settings plugin_redmine_dmsf: { 'dmsf_webdav_use_project_names' => '1', 'dmsf_webdav' => '1' } do + with_settings plugin_redmine_dmsf: { 'dmsf_webdav_use_project_names' => '1', + 'dmsf_webdav' => '1', + 'dmsf_webdav_authentication' => 'Basic', + 'dmsf_webdav_strategy' => 'WEBDAV_READ_WRITE' } do 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 @@ -182,7 +185,10 @@ def test_move_to_new_folder end def test_move_to_new_folder_with_project_names - with_settings plugin_redmine_dmsf: { 'dmsf_webdav_use_project_names' => '1', 'dmsf_webdav' => '1' } do + with_settings plugin_redmine_dmsf: { 'dmsf_webdav_use_project_names' => '1', + 'dmsf_webdav' => '1', + 'dmsf_webdav_authentication' => 'Basic', + 'dmsf_webdav_strategy' => 'WEBDAV_READ_WRITE' } do project1_uri = ERB::Util.url_encode(RedmineDmsf::Webdav::ProjectResource.create_project_name(@project1)) assert_difference '@file1.dmsf_file_revisions.count', +1 do process :move, diff --git a/test/integration/webdav/dmsf_webdav_propfind_test.rb b/test/integration/webdav/dmsf_webdav_propfind_test.rb index c792125ed..532e17f0e 100644 --- a/test/integration/webdav/dmsf_webdav_propfind_test.rb +++ b/test/integration/webdav/dmsf_webdav_propfind_test.rb @@ -52,7 +52,9 @@ def test_propfind_depth0_on_root_for_admin end def test_propfind_depth1_on_root_for_admin_with_project_names - with_settings plugin_redmine_dmsf: { 'dmsf_webdav_use_project_names' => '1', 'dmsf_webdav' => '1' } do + with_settings plugin_redmine_dmsf: { 'dmsf_webdav_use_project_names' => '1', + 'dmsf_webdav' => '1', + 'dmsf_webdav_authentication' => 'Basic' } do process :propfind, '/dmsf/webdav/', params: nil, headers: @admin.merge!({ HTTP_DEPTH: '1' }) assert_response :multi_status assert response.body.include?('http://www.example.com:80/dmsf/webdav/') @@ -102,7 +104,9 @@ def test_propfind_depth0_on_project1_for_admin end def test_propfind_depth0_on_project1_for_admin_with_project_names - with_settings plugin_redmine_dmsf: { 'dmsf_webdav_use_project_names' => '1', 'dmsf_webdav' => '1' } do + with_settings plugin_redmine_dmsf: { 'dmsf_webdav_use_project_names' => '1', + 'dmsf_webdav' => '1', + 'dmsf_webdav_authentication' => 'Basic' } do process :propfind, "/dmsf/webdav/#{@project1.identifier}", params: nil, @@ -151,7 +155,9 @@ def test_propfind_depth1_on_project1_for_admin end def test_propfind_depth1_on_project1_for_admin_with_project_names - with_settings plugin_redmine_dmsf: { 'dmsf_webdav_use_project_names' => '1', 'dmsf_webdav' => '1' } do + with_settings plugin_redmine_dmsf: { 'dmsf_webdav_use_project_names' => '1', + 'dmsf_webdav' => '1', + 'dmsf_webdav_authentication' => 'Basic' } do process :propfind, "/dmsf/webdav/#{@project1.identifier}", params: nil, headers: @admin.merge!({ HTTP_DEPTH: '1' }) assert_response :not_found @@ -191,7 +197,9 @@ def test_propfind_depth1_on_project1_for_admin_with_project_names end def test_propfind_depth1_on_root_for_admin - with_settings plugin_redmine_dmsf: { 'dmsf_webdav_use_project_names' => '1', 'dmsf_webdav' => '1' } do + with_settings plugin_redmine_dmsf: { 'dmsf_webdav_use_project_names' => '1', + 'dmsf_webdav' => '1', + 'dmsf_webdav_authentication' => 'Basic' } do project1_new_name = RedmineDmsf::Webdav::ProjectResource.create_project_name(@project1) 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' }) diff --git a/test/integration/webdav/dmsf_webdav_put_test.rb b/test/integration/webdav/dmsf_webdav_put_test.rb index 196db1a0b..25c175f7f 100644 --- a/test/integration/webdav/dmsf_webdav_put_test.rb +++ b/test/integration/webdav/dmsf_webdav_put_test.rb @@ -73,7 +73,10 @@ def test_put_as_admin_granted_on_dmsf_enabled_project # Lets check for our file file = DmsfFile.find_file_by_name @project1, nil, 'test-1234.txt' assert file, 'Check for files existance' - with_settings plugin_redmine_dmsf: { 'dmsf_webdav_use_project_names' => '1', 'dmsf_webdav' => '1' } do + with_settings plugin_redmine_dmsf: { 'dmsf_webdav_use_project_names' => '1', + 'dmsf_webdav' => '1', + 'dmsf_webdav_authentication' => 'Basic', + 'dmsf_webdav_strategy' => 'WEBDAV_READ_WRITE' } do project1_uri = ERB::Util.url_encode(RedmineDmsf::Webdav::ProjectResource.create_project_name(@project1)) put "/dmsf/webdav/#{@project1.identifier}/test-1234.txt", params: '1234', @@ -114,7 +117,10 @@ def test_put_succeeds_for_non_admin_with_correct_permissions assert file.last_revision assert_equal 'SHA256', file.last_revision.digest_type - with_settings plugin_redmine_dmsf: { 'dmsf_webdav_use_project_names' => '1', 'dmsf_webdav' => '1' } do + with_settings plugin_redmine_dmsf: { 'dmsf_webdav_use_project_names' => '1', + 'dmsf_webdav' => '1', + 'dmsf_webdav_authentication' => 'Basic', + 'dmsf_webdav_strategy' => 'WEBDAV_READ_WRITE' } do put "/dmsf/webdav/#{@project1.identifier}/test-1234.txt", params: '1234', headers: @jsmith.merge!({ content_type: :text }) @@ -238,7 +244,9 @@ def test_put_ignored_files_default assert_response :no_content with_settings plugin_redmine_dmsf: { 'dmsf_webdav_use_project_names' => nil, 'dmsf_webdav_ignore' => '.dump$', - 'dmsf_webdav' => '1' } do + 'dmsf_webdav' => '1', + 'dmsf_webdav_authentication' => 'Basic', + 'dmsf_webdav_strategy' => 'WEBDAV_READ_WRITE' } do put "/dmsf/webdav/#{@project1.identifier}/test.dump", params: '1234', headers: @admin.merge!({ content_type: :text }) @@ -277,7 +285,9 @@ def test_put_non_versioned_files with_settings plugin_redmine_dmsf: { 'dmsf_webdav_use_project_names' => nil, 'dmsf_webdav_disable_versioning' => '.dump$', - 'dmsf_webdav' => '1' } do + 'dmsf_webdav' => '1', + 'dmsf_webdav_authentication' => 'Basic', + 'dmsf_webdav_strategy' => 'WEBDAV_READ_WRITE' } do put "/dmsf/webdav/#{@project1.identifier}/file3.dump", params: '1234', headers: credentials assert_response :success file3 = DmsfFile.find_by(project_id: @project1.id, dmsf_folder_id: nil, name: 'file3.dump') @@ -330,7 +340,9 @@ def test_put_keep_custom_field_values def test_ignore_1b_files_on with_settings plugin_redmine_dmsf: { 'dmsf_webdav_use_project_names' => nil, 'dmsf_webdav_ignore_1b_file_for_authentication' => '1', - 'dmsf_webdav' => '1' } do + 'dmsf_webdav' => '1', + 'dmsf_webdav_authentication' => 'Basic', + 'dmsf_webdav_strategy' => 'WEBDAV_READ_WRITE' } do put "/dmsf/webdav/#{@project1.identifier}/1bfile.txt", params: '1', headers: @jsmith.merge!({ content_type: :text }) @@ -341,7 +353,9 @@ def test_ignore_1b_files_on def test_ignore_1b_files_off with_settings plugin_redmine_dmsf: { 'dmsf_webdav_use_project_names' => nil, 'dmsf_webdav_ignore_1b_file_for_authentication' => nil, - 'dmsf_webdav' => '1' } do + 'dmsf_webdav' => '1', + 'dmsf_webdav_authentication' => 'Basic', + 'dmsf_webdav_strategy' => 'WEBDAV_READ_WRITE' } do put "/dmsf/webdav/#{@project1.identifier}/1bfile.txt", params: '1', headers: @jsmith.merge!({ content_type: :text }) @@ -351,7 +365,10 @@ def test_ignore_1b_files_off def test_files_exceeded_max_attachment_size with_settings attachment_max_size: '1', - plugin_redmine_dmsf: { 'dmsf_webdav_use_project_names' => nil, 'dmsf_webdav' => '1' } do + plugin_redmine_dmsf: { 'dmsf_webdav_use_project_names' => nil, + 'dmsf_webdav' => '1', + 'dmsf_webdav_authentication' => 'Basic', + 'dmsf_webdav_strategy' => 'WEBDAV_READ_WRITE' } do file_content = 'x' * 2.kilobytes put "/dmsf/webdav/#{@project1.identifier}/2kbfile.txt", params: file_content, diff --git a/test/integration_test.rb b/test/integration_test.rb index 9c7dab374..4bc44e31e 100644 --- a/test/integration_test.rb +++ b/test/integration_test.rb @@ -57,8 +57,8 @@ def setup @role.add_permission! :file_delete Setting.plugin_redmine_dmsf['dmsf_webdav'] = '1' Setting.plugin_redmine_dmsf['dmsf_webdav_strategy'] = 'WEBDAV_READ_WRITE' - Setting.plugin_redmine_dmsf['dmsf_webdav_use_project_names'] = nil - Setting.plugin_redmine_dmsf['dmsf_projects_as_subfolders'] = nil + Setting.plugin_redmine_dmsf['dmsf_webdav_use_project_names'] = '0' + Setting.plugin_redmine_dmsf['dmsf_projects_as_subfolders'] = '0' Setting.plugin_redmine_dmsf['dmsf_storage_directory'] = File.join('files', ['dmsf']) Setting.plugin_redmine_dmsf['dmsf_webdav_authentication'] = 'Basic' FileUtils.cp_r File.join(File.expand_path('../fixtures/files', __FILE__), '.'), DmsfFile.storage_path diff --git a/test/unit/dmsf_file_revision_test.rb b/test/unit/dmsf_file_revision_test.rb index d96f891ab..c6534e5c3 100644 --- a/test/unit/dmsf_file_revision_test.rb +++ b/test/unit/dmsf_file_revision_test.rb @@ -84,7 +84,7 @@ def test_new_storage_filename f.project_id = 1 f.name = 'Testfile.txt' f.dmsf_folder = nil - f.notification = Setting.plugin_redmine_dmsf['dmsf_default_notifications'].present? + f.notification = RedmineDmsf.dmsf_default_notifications? f.save # Create two new revisions, r1 and r2