diff --git a/app/controllers/search_entries_reindex_controller.rb b/app/controllers/search_entries_reindex_controller.rb new file mode 100644 index 00000000..afbe60b2 --- /dev/null +++ b/app/controllers/search_entries_reindex_controller.rb @@ -0,0 +1,17 @@ +# frozen_string_literal: true + +class SearchEntriesReindexController < ApplicationController + def create + authorize!(:manage, EncryptedConfig) + + ReindexAllSearchEntriesJob.perform_async + + AccountConfig.find_or_initialize_by(account_id: Account.minimum(:id), key: :fulltext_search) + .update!(value: true) + + Docuseal.instance_variable_set(:@fulltext_search, nil) + + redirect_back(fallback_location: settings_account_path, + notice: "Started building search index. Visit #{root_url}jobs/busy to check progress.") + end +end diff --git a/app/controllers/setup_controller.rb b/app/controllers/setup_controller.rb index 9b49b1f8..778255bc 100644 --- a/app/controllers/setup_controller.rb +++ b/app/controllers/setup_controller.rb @@ -34,6 +34,7 @@ class SetupController < ApplicationController { key: EncryptedConfig::ESIGN_CERTS_KEY, value: GenerateCertificate.call.transform_values(&:to_pem) } ] @account.encrypted_configs.create!(encrypted_configs) + @account.account_configs.create!(key: :fulltext_search, value: true) if SearchEntry.table_exists? Docuseal.refresh_default_url_options! diff --git a/app/controllers/submitters_autocomplete_controller.rb b/app/controllers/submitters_autocomplete_controller.rb index 70f02747..efbb110a 100644 --- a/app/controllers/submitters_autocomplete_controller.rb +++ b/app/controllers/submitters_autocomplete_controller.rb @@ -22,7 +22,7 @@ class SubmittersAutocompleteController < ApplicationController def search_submitters(submitters) if SELECT_COLUMNS.include?(params[:field]) - if Docuseal.fulltext_search?(current_user) + if Docuseal.fulltext_search? Submitters.fulltext_search_field(current_user, submitters, params[:q], params[:field]) else column = Submitter.arel_table[params[:field].to_sym] diff --git a/app/jobs/reindex_all_search_entries_job.rb b/app/jobs/reindex_all_search_entries_job.rb new file mode 100644 index 00000000..0960bcdd --- /dev/null +++ b/app/jobs/reindex_all_search_entries_job.rb @@ -0,0 +1,9 @@ +# frozen_string_literal: true + +class ReindexAllSearchEntriesJob + include Sidekiq::Job + + def perform + SearchEntries.reindex_all + end +end diff --git a/app/views/accounts/show.html.erb b/app/views/accounts/show.html.erb index 2f8fa96e..e52fa321 100644 --- a/app/views/accounts/show.html.erb +++ b/app/views/accounts/show.html.erb @@ -165,6 +165,14 @@ <% end %> <% end %> <% end %> + <% if !Docuseal.multitenant? && SearchEntry.table_exists? && (!Docuseal.fulltext_search? || params[:reindex] == 'true') && can?(:manage, EncryptedConfig) %> +