From 7093e1baac5bf9d27a33cff034b28994dd92796e Mon Sep 17 00:00:00 2001 From: Liane Hampe Date: Tue, 19 Mar 2024 15:40:35 +0100 Subject: [PATCH 1/3] Adds missing safe_attribute for dmsf_not_inheritable Dmsf custom field settings are extended with a further attribute called dmsf_not_inheritable. This attribute is added to Redmine CustomField.safe_attributes. Hence dmsf_not_inheritable will be saved now! --- lib/redmine_dmsf.rb | 1 + .../patches/custom_field_patch.rb | 39 +++++++++++++++++++ test/unit/custom_field_path_test.rb | 28 +++++++++++++ 3 files changed, 68 insertions(+) create mode 100644 lib/redmine_dmsf/patches/custom_field_patch.rb create mode 100644 test/unit/custom_field_path_test.rb diff --git a/lib/redmine_dmsf.rb b/lib/redmine_dmsf.rb index 5029e38b..ab807695 100644 --- a/lib/redmine_dmsf.rb +++ b/lib/redmine_dmsf.rb @@ -40,6 +40,7 @@ require "#{File.dirname(__FILE__)}/redmine_dmsf/patches/pdf_patch" require "#{File.dirname(__FILE__)}/redmine_dmsf/patches/access_control_patch" require "#{File.dirname(__FILE__)}/redmine_dmsf/patches/search_patch" require "#{File.dirname(__FILE__)}/redmine_dmsf/patches/search_controller_patch" +require "#{File.dirname(__FILE__)}/redmine_dmsf/patches/custom_field_patch" # A workaround for obsolete 'alias_method' usage in RedmineUp's plugins if RedmineDmsf::Plugin.an_obsolete_plugin_present? diff --git a/lib/redmine_dmsf/patches/custom_field_patch.rb b/lib/redmine_dmsf/patches/custom_field_patch.rb new file mode 100644 index 00000000..aef6c39c --- /dev/null +++ b/lib/redmine_dmsf/patches/custom_field_patch.rb @@ -0,0 +1,39 @@ +# frozen_string_literal: true + +# Redmine plugin for Document Management System "Features" +# +# Karel Pičman +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + +module RedmineDmsf + module Patches + # CustomField patch + module CustomFieldPatch + def self.included(base) + base.class_eval do + safe_attributes :dmsf_not_inheritable + end + end + end + end +end + +# Apply patch +if Redmine::Plugin.installed?('easy_extensions') + RedmineExtensions::PatchManager.register_model_patch 'CustomField', 'RedmineDmsf::Patches::CustomFieldPatch' +else + CustomField.include RedmineDmsf::Patches::CustomFieldPatch +end diff --git a/test/unit/custom_field_path_test.rb b/test/unit/custom_field_path_test.rb new file mode 100644 index 00000000..3110b678 --- /dev/null +++ b/test/unit/custom_field_path_test.rb @@ -0,0 +1,28 @@ +# frozen_string_literal: true + +# Redmine plugin for Document Management System "Features" +# +# Karel Pičman +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + +require File.expand_path('../../test_helper', __FILE__) + +# CustomField patch test +class CustomFieldTest < RedmineDmsf::Test::UnitTest + def test_should_have_dmsf_not_inheritable_listed_as_safe_attribute + assert CustomField.new.safe_attribute_names.include?('dmsf_not_inheritable') + end +end From 0e499ebb26da6eb61f6997155329b818c76326fa Mon Sep 17 00:00:00 2001 From: Liane Hampe Date: Sun, 31 Mar 2024 09:29:02 +0200 Subject: [PATCH 2/3] Support option -d to set xapian index database via CLI For running xapian indexer it is necessary to configure it to use the same database for indexing as defined in the user interface on plugin settings. In order to make the configuration of xapian indexer some kind of persistence the command line options in `redmine_dmsf/extra/xapian_indexer.rb` could be extended by providing a further option for the index database path: ```shell ruby redmine_dmsf/extra/xapian_indexer.rb -d ``` With this additional option it is possible to move the index database outside of redmine root to keep it even after running updates. Furthermore, custom configuration in `redmine_dmsf/extra/xapian_indexer.rb` won't be overridden when updating this plugin. --- extra/xapian_indexer.rb | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/extra/xapian_indexer.rb b/extra/xapian_indexer.rb index 542a8f03..fd4b2316 100644 --- a/extra/xapian_indexer.rb +++ b/extra/xapian_indexer.rb @@ -41,7 +41,7 @@ OMINDEX = '/usr/bin/omindex' # OMINDEX += " --filter=image/jpeg:'tesseract -l chi_sim+chi_tra %f -'" # Directory containing Xapian databases for omindex (Attachments indexing) -DBROOTPATH = File.expand_path('dmsf_index', REDMINE_ROOT) +db_root_path = File.expand_path('dmsf_index', REDMINE_ROOT) # Verbose output, false/true verbose = false @@ -72,6 +72,9 @@ optparse = OptionParser.new do |opts| opts.separator('') opts.separator('') opts.separator('Options:') + opts.on('-d', '--index_db DB_PATH', 'Absolute path to index database according plugin settings in User Interface') do |db| + db_root_path = db + end opts.on('-s', '--stemming_lang a,b,c', Array, 'Comma separated list of stemming languages for indexing') do |s| stem_langs = s end @@ -104,6 +107,7 @@ optparse = OptionParser.new do |opts| opts.separator('') opts.separator('Examples:') opts.separator(' xapian_indexer.rb -s english,italian -v') + opts.separator(' xapian_indexer.rb -d $HOME/index_db -s english,italian -v') opts.separator('') opts.summary_width = 25 end @@ -142,7 +146,7 @@ begin warn "'#{filespath}' doesn't exist." exit 1 end - databasepath = File.join(DBROOTPATH, lang) + databasepath = File.join(db_root_path, lang) unless File.directory?(databasepath) log "#{databasepath} does not exist, creating ...", verbose FileUtils.mkdir_p databasepath From d59fe0d0ce51eb5cceda9f1d4fa235a8f04ff6e1 Mon Sep 17 00:00:00 2001 From: Liane Hampe Date: Tue, 2 Apr 2024 15:58:43 +0200 Subject: [PATCH 3/3] Fixes rubocop complaint about too long line --- extra/xapian_indexer.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/extra/xapian_indexer.rb b/extra/xapian_indexer.rb index fd4b2316..7e632a07 100644 --- a/extra/xapian_indexer.rb +++ b/extra/xapian_indexer.rb @@ -72,7 +72,7 @@ optparse = OptionParser.new do |opts| opts.separator('') opts.separator('') opts.separator('Options:') - opts.on('-d', '--index_db DB_PATH', 'Absolute path to index database according plugin settings in User Interface') do |db| + opts.on('-d', '--index_db DB_PATH', 'Absolute path to index database according plugin settings in UI') do |db| db_root_path = db end opts.on('-s', '--stemming_lang a,b,c', Array, 'Comma separated list of stemming languages for indexing') do |s|