gem xapian-ruby

This commit is contained in:
Karel Pičman 2023-05-30 12:04:49 +02:00
parent 2dbedfa649
commit 32c9435430
20 changed files with 19 additions and 63 deletions

View File

@ -23,7 +23,9 @@
source 'https://rubygems.org' do
gem 'active_record_union'
gem 'ox' # Dav4Rack
gem 'rake'
gem 'uuidtools'
gem 'xapian-ruby'
gem 'zip-zip'
# Redmine extensions

View File

@ -19,6 +19,8 @@
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
require 'xapian'
# File
class DmsfFile < ApplicationRecord
include RedmineDmsf::Lockable
@ -80,25 +82,6 @@ class DmsfFile < ApplicationRecord
attr_writer :last_revision
class << self
def xapian_bindings_available?
unless @xapian_bindings_available
begin
require 'xapian'
@xapian_bindings_available = true
rescue LoadError => e
Rails.logger.warn do
%{No Xapian search engine interface for Ruby installed => Full-text search won't be available.
Install a ruby-xapian package or an alternative Xapian binding (https://xapian.org).}
end
Rails.logger.warn { e.message }
@xapian_bindings_available = false
end
end
@xapian_bindings_available
end
end
def self.previews_storage_path
Rails.root.join 'tmp/dmsf_previews'
end
@ -383,7 +366,7 @@ class DmsfFile < ApplicationRecord
results = scope.where(find_options).uniq.to_a
results.delete_if { |x| !DmsfFolder.permissions?(x.dmsf_folder) }
if !options[:titles_only] && xapian_bindings_available? # $xapian_bindings_available
if !options[:titles_only]
database = nil
begin
lang = Setting.plugin_redmine_dmsf['dmsf_stemming_lang'].strip

View File

@ -324,36 +324,24 @@
<hr>
<% begin %>
<% require 'xapian' %>
<% xapian_disabled = false %>
<% rescue LoadError => e %>
<% Rails.logger.warn e.message %>
<% xapian_disabled = true %>
<% end %>
<em class="<%= title_klass %>">
<%= l(:label_full_text) %>
</em>
<p>
<%= content_tag :label, l(:label_index_database) %>
<%= text_field_tag 'settings[dmsf_index_database]', @settings['dmsf_index_database'], disabled: xapian_disabled,
size: 50 %>
<% if xapian_disabled %>
<span class="icon icon-warning"><small><%= l(:warning_xapian_not_available) %></small></span>
<% end %>
<%= text_field_tag 'settings[dmsf_index_database]', @settings['dmsf_index_database'], size: 50 %>
<em class="<%= klass %>">
<%= l(:label_default) %>: <%= File.expand_path('dmsf_index', Rails.root) %>
</em>
</p>
<% stem_langs = %w(danish dutch english finnish french german hungarian italian norwegian portuguese romanian russian spanish swedish turkish) %>
<% stem_langs = %w(danish dutch english finnish french german hungarian italian norwegian portuguese romanian russian
spanish swedish turkish) %>
<p>
<%= content_tag :label, l(:label_stemming_language) %>
<%= select_tag 'settings[dmsf_stemming_lang]', options_for_select(stem_langs, @settings['dmsf_stemming_lang']),
disabled: xapian_disabled %>
<%= select_tag 'settings[dmsf_stemming_lang]', options_for_select(stem_langs, @settings['dmsf_stemming_lang']) %>
<em class="<%= klass %>">
<%= l(:note_possible_values) %>: <%= stem_langs.join(', ') %>. <%= "#{l(:label_default)}: #{stem_langs[2]}" %>
</em>
@ -361,12 +349,15 @@
<p>
<%= content_tag :label, l(:label_stem_strategy) %>
<%= radio_button_tag 'settings[dmsf_stemming_strategy]', 'STEM_NONE', @settings['dmsf_stemming_strategy'] == 'STEM_NONE',
disabled: xapian_disabled, checked: true %> <%= l(:option_stem_none) %><br>
<%= radio_button_tag 'settings[dmsf_stemming_strategy]', 'STEM_SOME', @settings['dmsf_stemming_strategy'] == 'STEM_SOME',
disabled: xapian_disabled %> <%= l(:option_stem_some) %><br>
<%= radio_button_tag 'settings[dmsf_stemming_strategy]', 'STEM_ALL', @settings['dmsf_stemming_strategy'] == 'STEM_ALL',
disabled: xapian_disabled %> <%= l(:option_stem_all) %><br>
<%= radio_button_tag 'settings[dmsf_stemming_strategy]', 'STEM_NONE',
@settings['dmsf_stemming_strategy'] == 'STEM_NONE', checked: true %> <%= l(:option_stem_none) %>
<br>
<%= radio_button_tag 'settings[dmsf_stemming_strategy]', 'STEM_SOME',
@settings['dmsf_stemming_strategy'] == 'STEM_SOME' %> <%= l(:option_stem_some) %>
<br>
<%= radio_button_tag 'settings[dmsf_stemming_strategy]', 'STEM_ALL',
@settings['dmsf_stemming_strategy'] == 'STEM_ALL' %> <%= l(:option_stem_all) %>
<br>
<em class="<%= klass %>">
<%= l(:text_stemming_info) %>
</em>
@ -374,7 +365,7 @@
<p>
<%= content_tag :label, l(:label_enable_cjk_ngrams) %>
<%= check_box_tag 'settings[dmsf_enable_cjk_ngrams]', true, @settings['dmsf_enable_cjk_ngrams'], disabled: xapian_disabled %>
<%= check_box_tag 'settings[dmsf_enable_cjk_ngrams]', true, @settings['dmsf_enable_cjk_ngrams'] %>
<em class="<%= klass %>">
<%= l(:text_enable_cjk_ngrams) %>
</em>

View File

@ -179,7 +179,6 @@ cs:
error_file_can_not_be_created: Nelze vytvořit soubor v cílové složce
error_wrong_zip_encoding: Chybné kódování Zipu
warning_xapian_not_available: Xapian není k dostupný
menu_dmsf: DMS # Project tab title
label_physical_file_delete: Fyzické smazání souboru
user_is_not_project_member: Nejste členem projektu

View File

@ -176,7 +176,6 @@ de:
erstellt werden.
error_file_can_not_be_created: Datei kann nicht in dem gewählten Ordner erstellt werden.
error_wrong_zip_encoding: Falsche ZIP-Kodierung
warning_xapian_not_available: Xapian steht nicht zur Verfügung
menu_dmsf: DMS # Project tab title
label_physical_file_delete: Datei physisch löschen
user_is_not_project_member: Sie sind kein Projektmitglied

View File

@ -179,7 +179,6 @@ en:
error_file_can_not_be_created: "Files can't be created in storage directory"
error_wrong_zip_encoding: Wrong Zip encoding
warning_xapian_not_available: Xapian not available
menu_dmsf: DMS # Project tab title
label_physical_file_delete: Physical file delete
user_is_not_project_member: You are not a member of the project

View File

@ -179,7 +179,6 @@ es:
error_file_can_not_be_created: "El archivo no puede ser creado en el directorio destino"
error_wrong_zip_encoding: Codificación erronea de Zip
warning_xapian_not_available: Xapian no disponible
menu_dmsf: DMS # Project tab title
label_physical_file_delete: Eliminar archivos físicos
user_is_not_project_member: No es miemo del proyecto

View File

@ -173,7 +173,6 @@ fa:
error_file_can_not_be_created: "پرونده‌ها نمی‌توانند در پوشه‌ی ذخیره‌سازی ساخته شوند."
error_wrong_zip_encoding: رمزگذاری اشتباه zip
warning_xapian_not_available: Xapian در دسترس نیست
menu_dmsf: اسناد پیش‌رفته # Project tab title
label_physical_file_delete: پرونده فیزیکی حذف شود
user_is_not_project_member: شما عضو این پروژه نیستید

View File

@ -179,7 +179,6 @@ fr:
créé
error_file_can_not_be_created: "Le fichier n'a pas pu être enregistré dans le répertoire de stockage"
error_wrong_zip_encoding: Mauvais jeu de caractères pour la transformation du nom du ZIP
warning_xapian_not_available: Le module Xapian est indisponible
menu_dmsf: DMS # Project tab title
label_physical_file_delete: Suppression des fichiers
user_is_not_project_member: "Vous n'êtes pas un membre du projet"

View File

@ -179,7 +179,6 @@ hu:
error_file_can_not_be_created: A fájl nem hozható létre a tárolómappában
error_wrong_zip_encoding: Nem megfelelő Zip kódolás
warning_xapian_not_available: Xapian nem elérhető
menu_dmsf: DMS # Project tab title
label_physical_file_delete: Fizikai fájl törölve lett
user_is_not_project_member: Ön nem tagja a csoportnak

View File

@ -179,7 +179,6 @@ it: # Italian strings thx 2 Matteo Arceci!
error_file_can_not_be_created: "Il documento non può essere creato nella cartella di archiviazione"
error_wrong_zip_encoding: Errato encoding dello Zip
warning_xapian_not_available: Xapian non disponibile
menu_dmsf: Documenti # Project tab title
label_physical_file_delete: File fisico eliminato
user_is_not_project_member: Non sei un membro del progetto

View File

@ -179,7 +179,6 @@ ja:
error_file_can_not_be_created: ファイルを保存フォルダに作成できません
error_wrong_zip_encoding: Zip エンコーディングが正しくありません
warning_xapian_not_available: Xapian は利用できません
menu_dmsf: 文書管理 # Project tab title
label_physical_file_delete: 物理ファイルの削除
user_is_not_project_member: あなたはプロジェクトのメンバーではありません

View File

@ -179,7 +179,6 @@ ko:
error_file_can_not_be_created: 저장 공간에 파일을 생성할 수 없습니다
error_wrong_zip_encoding: 올바르지 않은 Zip 인코딩
warning_xapian_not_available: Xapian을 사용할 수 없습니다
menu_dmsf: DMS
label_physical_file_delete: 파일 삭제됨
user_is_not_project_member: 이 프로젝트의 구성원이 아닙니다

View File

@ -179,7 +179,6 @@ nl:
error_file_can_not_be_created: Bestand kan niet aangemaakt worden in opslag directory
error_wrong_zip_encoding: Onjuiste Zip encoding
warning_xapian_not_available: Xapian niet beschikbaar
menu_dmsf: Easy DMS
label_physical_file_delete: Fysiek bestand verwijderen
user_is_not_project_member: U bent geen lid van het project

View File

@ -179,7 +179,6 @@ pl:
error_file_can_not_be_created: "Plik nie może zostać utworzony w folderze przechowywania"
error_wrong_zip_encoding: Złe kodowanie Zip
warning_xapian_not_available: Xapian niedostępny
menu_dmsf: DMS # Project tab title
label_physical_file_delete: Fizyczne usuwanie plików
user_is_not_project_member: Nie jesteś przypisany do tego projektu

View File

@ -179,7 +179,6 @@ pt-BR:
criado"
error_file_can_not_be_created: "O arquivo não pode ser criado"
error_wrong_zip_encoding: Código Zip errado
warning_xapian_not_available: Xapian não disponível
menu_dmsf: DMS
label_physical_file_delete: Excluir fisicamente arquivo
user_is_not_project_member: Você não é um membro do projeto

View File

@ -179,7 +179,6 @@ sl:
error_file_can_not_be_created: Datoteke se ne da kreirat v mapi
error_wrong_zip_encoding: Napačen Zip nabor znakov
warning_xapian_not_available: Xapian ni na voljo
menu_dmsf: Arhiv # Project tab title
label_physical_file_delete: Brisanje datoteke (fizično)
user_is_not_project_member: Niste član projekta

View File

@ -179,7 +179,6 @@ zh-TW:
error_file_can_not_be_created: 在存儲目錄裡,無法建立檔案。
error_wrong_zip_encoding: 不正確的Zip encoding
warning_xapian_not_available: Xapian not available
menu_dmsf: 文件總管 # Project tab title
label_physical_file_delete: 永久刪除檔案
user_is_not_project_member: 您不是專案的成員之一

View File

@ -179,7 +179,6 @@ zh:
error_file_can_not_be_created: 文件未能在存储目录中创建
error_wrong_zip_encoding: 不正确的Zip编码
warning_xapian_not_available: Xapian not available
menu_dmsf: 文档管家 # Project tab title
label_physical_file_delete: 物理删除文件
user_is_not_project_member: 您不是该项目的成员

View File

@ -125,10 +125,6 @@ end
log "Redmine environment [RAILS_ENV=#{env}] correctly loaded ...", verbose
# Indexing documents
# unless File.exist?($omindex)
# log "#{$omindex} does not exist, exiting...", true
# exit 1
# end
stem_langs.each do |lang|
filespath = Setting.plugin_redmine_dmsf['dmsf_storage_directory'] || File.join(REDMINE_ROOT, FILES)
unless File.directory?(filespath)