Skip to content

Commit add7b8c

Browse files
committed
WIP move repositories controller blacklight config into Site model
- needs show link implementation - needs secondary nav implementation - RepositoriesController subclasses SitesController - Repositories::CatalogController subclasses Sites::SearchController - DLC-1157
1 parent 8afb21f commit add7b8c

File tree

5 files changed

+97
-57
lines changed

5 files changed

+97
-57
lines changed

app/controllers/repositories/catalog_controller.rb

Lines changed: 24 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,29 +1,19 @@
11
module Repositories
2-
class CatalogController < ::SubsitesController
2+
class CatalogController < Sites::SearchController
33
include Dcv::MapDataController
44
include Dcv::Sites::ReadingRooms
55

66
before_action :set_map_data_json, only: [:map_search]
77

8-
configure_blacklight do |config|
9-
Dcv::Configurators::DcvBlacklightConfigurator.configure(config)
10-
config.search_state_fields << :repository_id # allow repository id for routing
11-
config.add_facet_field 'content_availability', label: 'Limit by Availability',
12-
query: {
13-
onsite: { label: 'Reading Room', fq: "{!join from=cul_member_of_ssim to=fedora_pid_uri_ssi}!access_control_levels_ssim:Public*" },
14-
public: { label: 'Public', fq: "{!join from=cul_member_of_ssim to=fedora_pid_uri_ssi}access_control_levels_ssim:Public*" },
15-
}
16-
Dcv::Configurators::DcvBlacklightConfigurator.default_component_configuration(config, search_bar: Dcv::SearchBar::RepositoriesComponent)
17-
18-
end
8+
delegate :blacklight_config, to: :@subsite
199

2010
def initialize(*args)
2111
super(*args)
2212
self._prefixes.unshift 'repositories'
2313
self._prefixes.unshift 'repositories/catalog'
2414
end
2515

26-
16+
before_action :load_subsite!
2717

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

35-
# SubsiteController Overrides
36-
def self.subsite_config
37-
{}
25+
def load_subsite
26+
@subsite ||= begin
27+
site_slug = params[:repository_id]
28+
s = Site.includes(:nav_links).find_by(slug: site_slug)
29+
s&.configure_blacklight!
30+
s
31+
end
3832
end
3933

40-
def subsite_config
41-
return self.class.subsite_config
34+
def load_subsite!
35+
_subsite = load_subsite
36+
return _subsite if _subsite
37+
raise ActiveRecord::RecordNotFound
4238
end
4339

40+
def subsite_key
41+
params[:repository_id] || load_subsite&.slug
42+
end
43+
44+
alias_method :site_slug, :subsite_key
45+
4446
def default_search_mode
4547
subsite_config.fetch('default_search_mode',:grid)
4648
end
@@ -79,5 +81,9 @@ def show_digital_project?
7981
true
8082
end
8183
helper_method :show_digital_project?
84+
85+
def tracking_method
86+
"track_#{controller_name}_path"
87+
end
8288
end
8389
end

app/controllers/repositories_controller.rb

Lines changed: 15 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,33 +1,13 @@
11
require 'redcarpet'
22

3-
class RepositoriesController < ApplicationController
4-
include Dcv::CatalogIncludes
5-
include Dcv::CdnHelper
3+
class RepositoriesController < SitesController
64
include Dcv::Sites::ReadingRooms
7-
include Dcv::Sites::SearchableController
85

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

118
configure_blacklight do |config|
129
config.search_state_fields << :repository_id # allow repository id for routing
13-
config.default_solr_params = {
14-
:fq => [
15-
'object_state_ssi:A', # Active items only
16-
'active_fedora_model_ssi:Concept',
17-
'dc_type_sim:"Publish Target"',
18-
'-slug_ssim:sites', # Do not include sites publish targets in this list
19-
],
20-
:sort => "title_si asc",
21-
:qt => 'search'
22-
}
23-
config.add_search_field 'all_text_teim' do |field|
24-
field.label = 'All Fields'
25-
field.default = true
26-
field.solr_parameters = {
27-
:qf => ['all_text_teim'],
28-
:pf => ['all_text_teim']
29-
}
30-
end
10+
Dcv::Configurators::DcvBlacklightConfigurator.default_component_configuration(config, search_bar: Dcv::SearchBar::RepositoriesComponent)
3111
end
3212

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

23+
def load_subsite
24+
@subsite ||= begin
25+
site_slug = params[:repository_id]
26+
s = Site.includes(:nav_links).find_by(slug: site_slug)
27+
s&.configure_blacklight!
28+
s
29+
end
30+
end
31+
32+
def subsite_key
33+
params[:repository_id] || load_subsite&.slug
34+
end
35+
4336
def search_service_context
4437
{ builder: { addl_processor_chain: [:constrain_to_repository_context] } }
4538
end

app/controllers/sites/search_controller.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ def search_url_service
3636
end
3737

3838
def redirect_unless_local
39-
unless load_subsite.search_type == 'local'
39+
unless load_subsite.search_type == Site::SEARCH_LOCAL || load_subsite.search_type == Site::SEARCH_REPOSITORIES
4040
redirect_to search_url_service.search_action_url(load_subsite, self, {})
4141
end
4242
end

app/models/site.rb

Lines changed: 56 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -55,38 +55,79 @@ def routing_params(args = {})
5555
end
5656
end
5757

58-
def self.configure_local_blacklight(config, default_fq:, routing_params:, search_configuration:, search_type:)
59-
config.default_solr_params[:fq] += default_fq
60-
config.show.route = routing_params
61-
config.track_search_session = search_type != SEARCH_CATALOG
62-
if search_type == SEARCH_LOCAL
63-
config.document_unique_id_param = :ezid_doi_ssim
64-
config.document_pagination_params[:fl] = "id,#{config.document_unique_id_param},format"
65-
config.search_state_class = Dcv::Sites::LocalSearchState
58+
def self.configure_blacklight_search_local(config, search_configuration:, **_args)
59+
config.document_unique_id_param = :ezid_doi_ssim
60+
config.document_pagination_params[:fl] = "id,#{config.document_unique_id_param},format"
61+
config.search_state_class = Dcv::Sites::LocalSearchState
62+
Dcv::Configurators::DcvBlacklightConfigurator.default_faceting_configuration(config, geo: search_configuration.map_configuration.enabled)
63+
if search_configuration.facets.present?
64+
search_configuration.facets.each do |facet|
65+
facet.configure(config)
66+
end
6667
else
67-
config.show.route = routing_params
68+
Dcv::Configurators::DcvBlacklightConfigurator.configure_facet_fields(config)
6869
end
69-
if search_type == SEARCH_LOCAL && search_configuration.facets.present?
70+
if search_configuration.search_fields.present?
71+
search_configuration.search_fields.each do |search_field|
72+
search_field.configure(config)
73+
end
74+
else
75+
Dcv::Configurators::DcvBlacklightConfigurator.configure_keyword_search_field(config)
76+
end
77+
Dcv::Configurators::DcvBlacklightConfigurator.default_component_configuration(config)
78+
config
79+
end
80+
81+
def self.configure_blacklight_search_repositories(config, search_configuration:, **_args)
82+
config.document_unique_id_param = :ezid_doi_ssim
83+
config.document_pagination_params[:fl] = "id,#{config.document_unique_id_param},format"
84+
config.search_state_class = Dcv::SearchState
85+
Dcv::Configurators::DcvBlacklightConfigurator.default_faceting_configuration(config, geo: search_configuration.map_configuration.enabled)
86+
if search_configuration.facets.present?
7087
search_configuration.facets.each do |facet|
7188
facet.configure(config)
7289
end
7390
else
7491
Dcv::Configurators::DcvBlacklightConfigurator.configure_facet_fields(config)
7592
end
76-
Dcv::Configurators::DcvBlacklightConfigurator.default_faceting_configuration(config, geo: search_configuration.map_configuration.enabled)
77-
if search_type == SEARCH_LOCAL && search_configuration.search_fields.present?
93+
config.add_facet_field('content_availability',
94+
label: 'Limit by Availability',
95+
query: {
96+
onsite: { label: 'Reading Room', fq: "{!join from=cul_member_of_ssim to=fedora_pid_uri_ssi}!access_control_levels_ssim:Public*" },
97+
public: { label: 'Public', fq: "{!join from=cul_member_of_ssim to=fedora_pid_uri_ssi}access_control_levels_ssim:Public*" },
98+
}
99+
)
100+
if search_configuration.search_fields.present?
78101
search_configuration.search_fields.each do |search_field|
79102
search_field.configure(config)
80103
end
81104
else
82105
Dcv::Configurators::DcvBlacklightConfigurator.configure_keyword_search_field(config)
83106
end
84-
Dcv::Configurators::DcvBlacklightConfigurator.default_component_configuration(config)
85-
end
107+
config.search_state_fields << :repository_id # allow repository id for routing
108+
Dcv::Configurators::DcvBlacklightConfigurator.default_component_configuration(config, search_bar: Dcv::SearchBar::RepositoriesComponent)
109+
config
110+
end
111+
112+
def self.configure_site_blacklight(config, default_fq:, routing_params:, search_configuration:, search_type:)
113+
config.default_solr_params[:fq] += default_fq
114+
config.show.route = routing_params
115+
config.track_search_session = search_type != SEARCH_CATALOG
116+
if search_type == SEARCH_LOCAL
117+
configure_blacklight_search_local(config, search_configuration: search_configuration)
118+
elsif search_type == SEARCH_REPOSITORIES
119+
configure_blacklight_search_repositories(config, search_configuration: search_configuration)
120+
else
121+
Dcv::Configurators::DcvBlacklightConfigurator.configure_facet_fields(config)
122+
Dcv::Configurators::DcvBlacklightConfigurator.configure_keyword_search_field(config)
123+
Dcv::Configurators::DcvBlacklightConfigurator.default_component_configuration(config)
124+
config
125+
end
126+
end
86127

87128
def configure_blacklight!
88129
configure_blacklight do |config|
89-
Site.configure_local_blacklight(config, default_fq: default_fq, routing_params: routing_params, search_configuration: search_configuration, search_type: search_type)
130+
Site.configure_site_blacklight(config, default_fq: default_fq, routing_params: routing_params, search_configuration: search_configuration, search_type: search_type)
90131
end
91132
end
92133

spec/controllers/repositories/catalog_controller_spec.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
describe Repositories::CatalogController, type: :controller do
44
let(:default_catalog_styles) { ["gallery-#{Dcv::Sites::Constants.default_palette}", "catalog"] }
55
let(:view_context) { controller.view_context }
6-
let(:site_attr) { { slug: 'NNC-RB', layout: 'default', palette: 'monochrome' } }
6+
let(:site_attr) { { slug: 'NNC-RB', layout: 'default', palette: 'monochrome', search_type: Site::SEARCH_REPOSITORIES } }
77
let(:search_service) { instance_double(Blacklight::SearchService) }
88
let(:subsite) { FactoryBot.create(:site, **site_attr) }
99

0 commit comments

Comments
 (0)