Skip to content

Commit

Permalink
WIP move repositories controller blacklight config into Site model
Browse files Browse the repository at this point in the history
- needs show link implementation
- needs secondary nav implementation
- RepositoriesController subclasses SitesController
- Repositories::CatalogController subclasses Sites::SearchController
- DLC-1157
  • Loading branch information
barmintor committed Oct 10, 2024
1 parent 8afb21f commit add7b8c
Show file tree
Hide file tree
Showing 5 changed files with 97 additions and 57 deletions.
42 changes: 24 additions & 18 deletions app/controllers/repositories/catalog_controller.rb
Original file line number Diff line number Diff line change
@@ -1,29 +1,19 @@
module Repositories
class CatalogController < ::SubsitesController
class CatalogController < Sites::SearchController
include Dcv::MapDataController
include Dcv::Sites::ReadingRooms

before_action :set_map_data_json, only: [:map_search]

configure_blacklight do |config|
Dcv::Configurators::DcvBlacklightConfigurator.configure(config)
config.search_state_fields << :repository_id # allow repository id for routing
config.add_facet_field 'content_availability', label: 'Limit by Availability',
query: {
onsite: { label: 'Reading Room', fq: "{!join from=cul_member_of_ssim to=fedora_pid_uri_ssi}!access_control_levels_ssim:Public*" },
public: { label: 'Public', fq: "{!join from=cul_member_of_ssim to=fedora_pid_uri_ssi}access_control_levels_ssim:Public*" },
}
Dcv::Configurators::DcvBlacklightConfigurator.default_component_configuration(config, search_bar: Dcv::SearchBar::RepositoriesComponent)

end
delegate :blacklight_config, to: :@subsite

def initialize(*args)
super(*args)
self._prefixes.unshift 'repositories'
self._prefixes.unshift 'repositories/catalog'
end


before_action :load_subsite!

def search_service_context
{ builder: { addl_processor_chain: [:constrain_to_repository_context, :hide_concepts_when_query_blank_filter] } }
Expand All @@ -32,15 +22,27 @@ def search_service_context
prepend_view_path('app/views/repositories')
prepend_view_path('app/views/repositories/catalog')

# SubsiteController Overrides
def self.subsite_config
{}
def load_subsite
@subsite ||= begin
site_slug = params[:repository_id]
s = Site.includes(:nav_links).find_by(slug: site_slug)
s&.configure_blacklight!
s
end
end

def subsite_config
return self.class.subsite_config
def load_subsite!
_subsite = load_subsite
return _subsite if _subsite
raise ActiveRecord::RecordNotFound
end

def subsite_key
params[:repository_id] || load_subsite&.slug
end

alias_method :site_slug, :subsite_key

def default_search_mode
subsite_config.fetch('default_search_mode',:grid)
end
Expand Down Expand Up @@ -79,5 +81,9 @@ def show_digital_project?
true
end
helper_method :show_digital_project?

def tracking_method
"track_#{controller_name}_path"
end
end
end
37 changes: 15 additions & 22 deletions app/controllers/repositories_controller.rb
Original file line number Diff line number Diff line change
@@ -1,33 +1,13 @@
require 'redcarpet'

class RepositoriesController < ApplicationController
include Dcv::CatalogIncludes
include Dcv::CdnHelper
class RepositoriesController < SitesController
include Dcv::Sites::ReadingRooms
include Dcv::Sites::SearchableController

layout Proc.new { |controller| 'gallery' }

configure_blacklight do |config|
config.search_state_fields << :repository_id # allow repository id for routing
config.default_solr_params = {
:fq => [
'object_state_ssi:A', # Active items only
'active_fedora_model_ssi:Concept',
'dc_type_sim:"Publish Target"',
'-slug_ssim:sites', # Do not include sites publish targets in this list
],
:sort => "title_si asc",
:qt => 'search'
}
config.add_search_field 'all_text_teim' do |field|
field.label = 'All Fields'
field.default = true
field.solr_parameters = {
:qf => ['all_text_teim'],
:pf => ['all_text_teim']
}
end
Dcv::Configurators::DcvBlacklightConfigurator.default_component_configuration(config, search_bar: Dcv::SearchBar::RepositoriesComponent)
end

before_action :set_repository_id, only:[:show]
Expand All @@ -40,6 +20,19 @@ def initialize(*args)
self._prefixes.unshift 'repositories'
end

def load_subsite
@subsite ||= begin
site_slug = params[:repository_id]
s = Site.includes(:nav_links).find_by(slug: site_slug)
s&.configure_blacklight!
s
end
end

def subsite_key
params[:repository_id] || load_subsite&.slug
end

def search_service_context
{ builder: { addl_processor_chain: [:constrain_to_repository_context] } }
end
Expand Down
2 changes: 1 addition & 1 deletion app/controllers/sites/search_controller.rb
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ def search_url_service
end

def redirect_unless_local
unless load_subsite.search_type == 'local'
unless load_subsite.search_type == Site::SEARCH_LOCAL || load_subsite.search_type == Site::SEARCH_REPOSITORIES
redirect_to search_url_service.search_action_url(load_subsite, self, {})
end
end
Expand Down
71 changes: 56 additions & 15 deletions app/models/site.rb
Original file line number Diff line number Diff line change
Expand Up @@ -55,38 +55,79 @@ def routing_params(args = {})
end
end

def self.configure_local_blacklight(config, default_fq:, routing_params:, search_configuration:, search_type:)
config.default_solr_params[:fq] += default_fq
config.show.route = routing_params
config.track_search_session = search_type != SEARCH_CATALOG
if search_type == SEARCH_LOCAL
config.document_unique_id_param = :ezid_doi_ssim
config.document_pagination_params[:fl] = "id,#{config.document_unique_id_param},format"
config.search_state_class = Dcv::Sites::LocalSearchState
def self.configure_blacklight_search_local(config, search_configuration:, **_args)
config.document_unique_id_param = :ezid_doi_ssim
config.document_pagination_params[:fl] = "id,#{config.document_unique_id_param},format"
config.search_state_class = Dcv::Sites::LocalSearchState
Dcv::Configurators::DcvBlacklightConfigurator.default_faceting_configuration(config, geo: search_configuration.map_configuration.enabled)
if search_configuration.facets.present?
search_configuration.facets.each do |facet|
facet.configure(config)
end
else
config.show.route = routing_params
Dcv::Configurators::DcvBlacklightConfigurator.configure_facet_fields(config)
end
if search_type == SEARCH_LOCAL && search_configuration.facets.present?
if search_configuration.search_fields.present?
search_configuration.search_fields.each do |search_field|
search_field.configure(config)
end
else
Dcv::Configurators::DcvBlacklightConfigurator.configure_keyword_search_field(config)
end
Dcv::Configurators::DcvBlacklightConfigurator.default_component_configuration(config)
config
end

def self.configure_blacklight_search_repositories(config, search_configuration:, **_args)
config.document_unique_id_param = :ezid_doi_ssim
config.document_pagination_params[:fl] = "id,#{config.document_unique_id_param},format"
config.search_state_class = Dcv::SearchState
Dcv::Configurators::DcvBlacklightConfigurator.default_faceting_configuration(config, geo: search_configuration.map_configuration.enabled)
if search_configuration.facets.present?
search_configuration.facets.each do |facet|
facet.configure(config)
end
else
Dcv::Configurators::DcvBlacklightConfigurator.configure_facet_fields(config)
end
Dcv::Configurators::DcvBlacklightConfigurator.default_faceting_configuration(config, geo: search_configuration.map_configuration.enabled)
if search_type == SEARCH_LOCAL && search_configuration.search_fields.present?
config.add_facet_field('content_availability',
label: 'Limit by Availability',
query: {
onsite: { label: 'Reading Room', fq: "{!join from=cul_member_of_ssim to=fedora_pid_uri_ssi}!access_control_levels_ssim:Public*" },
public: { label: 'Public', fq: "{!join from=cul_member_of_ssim to=fedora_pid_uri_ssi}access_control_levels_ssim:Public*" },
}
)
if search_configuration.search_fields.present?
search_configuration.search_fields.each do |search_field|
search_field.configure(config)
end
else
Dcv::Configurators::DcvBlacklightConfigurator.configure_keyword_search_field(config)
end
Dcv::Configurators::DcvBlacklightConfigurator.default_component_configuration(config)
end
config.search_state_fields << :repository_id # allow repository id for routing
Dcv::Configurators::DcvBlacklightConfigurator.default_component_configuration(config, search_bar: Dcv::SearchBar::RepositoriesComponent)
config
end

def self.configure_site_blacklight(config, default_fq:, routing_params:, search_configuration:, search_type:)
config.default_solr_params[:fq] += default_fq
config.show.route = routing_params
config.track_search_session = search_type != SEARCH_CATALOG
if search_type == SEARCH_LOCAL
configure_blacklight_search_local(config, search_configuration: search_configuration)
elsif search_type == SEARCH_REPOSITORIES
configure_blacklight_search_repositories(config, search_configuration: search_configuration)
else
Dcv::Configurators::DcvBlacklightConfigurator.configure_facet_fields(config)
Dcv::Configurators::DcvBlacklightConfigurator.configure_keyword_search_field(config)
Dcv::Configurators::DcvBlacklightConfigurator.default_component_configuration(config)
config
end
end

def configure_blacklight!
configure_blacklight do |config|
Site.configure_local_blacklight(config, default_fq: default_fq, routing_params: routing_params, search_configuration: search_configuration, search_type: search_type)
Site.configure_site_blacklight(config, default_fq: default_fq, routing_params: routing_params, search_configuration: search_configuration, search_type: search_type)
end
end

Expand Down
2 changes: 1 addition & 1 deletion spec/controllers/repositories/catalog_controller_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
describe Repositories::CatalogController, type: :controller do
let(:default_catalog_styles) { ["gallery-#{Dcv::Sites::Constants.default_palette}", "catalog"] }
let(:view_context) { controller.view_context }
let(:site_attr) { { slug: 'NNC-RB', layout: 'default', palette: 'monochrome' } }
let(:site_attr) { { slug: 'NNC-RB', layout: 'default', palette: 'monochrome', search_type: Site::SEARCH_REPOSITORIES } }
let(:search_service) { instance_double(Blacklight::SearchService) }
let(:subsite) { FactoryBot.create(:site, **site_attr) }

Expand Down

0 comments on commit add7b8c

Please sign in to comment.