curation_concerns 0.5.0 → 0.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.rubocop.yml +9 -1
- data/Gemfile +1 -0
- data/VERSION +1 -1
- data/app/controllers/concerns/curation_concerns/application_controller_behavior.rb +9 -5
- data/app/controllers/concerns/curation_concerns/catalog_controller.rb +0 -20
- data/app/controllers/concerns/curation_concerns/collections_controller_behavior.rb +27 -5
- data/app/controllers/concerns/curation_concerns/curation_concern_controller.rb +7 -3
- data/app/controllers/concerns/curation_concerns/download_behavior.rb +5 -5
- data/app/controllers/concerns/curation_concerns/file_sets_controller_behavior.rb +17 -9
- data/app/controllers/concerns/curation_concerns/parent_container.rb +4 -9
- data/app/controllers/concerns/curation_concerns/single_use_links_viewer_controller_behavior.rb +6 -2
- data/app/helpers/curation_concerns/catalog_helper.rb +2 -4
- data/app/helpers/curation_concerns/collections_helper.rb +1 -1
- data/app/helpers/curation_concerns/permissions_helper.rb +4 -3
- data/app/helpers/curation_concerns/search_paths_helper.rb +2 -2
- data/app/inputs/multifile_input.rb +1 -1
- data/app/inputs/select_with_modal_help_input.rb +1 -1
- data/app/inputs/with_help_icon.rb +3 -3
- data/app/presenters/curation_concerns/presenter_factory.rb +2 -1
- data/app/presenters/curation_concerns/version_list_presenter.rb +3 -3
- data/app/presenters/curation_concerns/version_presenter.rb +1 -1
- data/app/presenters/curation_concerns/work_show_presenter.rb +1 -1
- data/app/renderers/curation_concerns/attribute_renderer.rb +10 -7
- data/app/search_builders/curation_concerns/collection_member_search_builder.rb +5 -0
- data/app/search_builders/curation_concerns/embargo_search_builder.rb +0 -3
- data/app/search_builders/curation_concerns/file_set_search_builder.rb +10 -0
- data/app/search_builders/curation_concerns/filter_by_type.rb +29 -0
- data/app/search_builders/curation_concerns/lease_search_builder.rb +0 -3
- data/app/search_builders/curation_concerns/search_builder.rb +1 -27
- data/app/search_builders/curation_concerns/single_result.rb +13 -0
- data/app/search_builders/curation_concerns/single_use_link_search_builder.rb +6 -0
- data/app/search_builders/curation_concerns/work_search_builder.rb +5 -0
- data/app/services/curation_concerns/parent_service.rb +1 -1
- data/app/views/catalog/index.json.jbuilder +9 -0
- data/app/views/collections/_form.html.erb +3 -3
- data/app/views/collections/_search_collection_dashboard_form.html.erb +1 -1
- data/app/views/collections/_search_form.html.erb +1 -1
- data/app/views/collections/_sort_and_per_page.html.erb +1 -1
- data/app/views/shared/_site_search.html.erb +2 -2
- data/curation_concerns.gemspec +3 -5
- data/lib/curation_concerns/rails/routes.rb +1 -1
- data/lib/curation_concerns/version.rb +1 -1
- data/lib/generators/curation_concerns/install_generator.rb +2 -3
- data/lib/generators/curation_concerns/templates/catalog_controller.rb +1 -1
- data/spec/actors/curation_concerns/work_actor_spec.rb +2 -1
- data/spec/controllers/catalog_controller_spec.rb +1 -0
- data/spec/controllers/curation_concerns/generic_works_controller_spec.rb +2 -3
- data/spec/controllers/downloads_controller_spec.rb +4 -4
- data/spec/features/catalog_search_spec.rb +1 -1
- data/spec/features/collection_spec.rb +17 -1
- data/spec/helpers/catalog_helper_spec.rb +10 -1
- data/spec/helpers/render_constraints_helper_spec.rb +1 -1
- data/spec/helpers/url_helper_spec.rb +1 -1
- data/spec/models/curation_concerns/collection_behavior_spec.rb +0 -42
- data/spec/models/curation_concerns/file_set/derivatives_spec.rb +14 -0
- data/spec/search_builders/curation_concerns/file_set_search_builder_spec.rb +29 -0
- data/spec/search_builders/curation_concerns/search_builder_spec.rb +0 -19
- data/spec/services/derivative_path_spec.rb +24 -0
- data/spec/spec_helper.rb +5 -5
- data/spec/test_app_templates/Gemfile.extra +1 -0
- data/spec/views/catalog/index.html.erb_spec.rb +9 -3
- data/spec/views/collections/_sort_and_per_page.html.erb_spec.rb +2 -0
- data/spec/views/curation_concerns/base/_attributes.html.erb_spec.rb +3 -3
- data/spec/views/curation_concerns/file_sets/_file_set.html.erb_spec.rb +4 -0
- data/tasks/release.rake +1 -1
- metadata +31 -14
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 9e77165da47c309d90805ddb6981da218c262545
|
4
|
+
data.tar.gz: 5b4967ede0c3c0a0eafc7bb60d4db47950519044
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 295594240997309f48717675eca0bd6e4104e2e13c468fb9f9cdb67496853a6b2380456281e913a453e0d341fa86407d4769eb6366462ee7795b52f7cbbef048
|
7
|
+
data.tar.gz: 0a874acf3320fca7cac2ebd597baa353ff0fbfdc5211b32afa24eab97662297713bad2ef749253426f959a16170865292c4b4e59f7fe04771388e99b93710fe2
|
data/.rubocop.yml
CHANGED
@@ -1,7 +1,6 @@
|
|
1
1
|
require: rubocop-rspec
|
2
2
|
|
3
3
|
AllCops:
|
4
|
-
RunRailsCops: true
|
5
4
|
DisplayCopNames: true
|
6
5
|
Include:
|
7
6
|
- '**/Rakefile'
|
@@ -13,6 +12,15 @@ AllCops:
|
|
13
12
|
- '.internal_test_app/**/*'
|
14
13
|
- 'curation_concerns-models/app/models/concerns/curation_concerns/file_set/export.rb'
|
15
14
|
|
15
|
+
Rails:
|
16
|
+
Enabled: true
|
17
|
+
|
18
|
+
Performance/RedundantBlockCall:
|
19
|
+
# We can remove this exclusion when this commit is released:
|
20
|
+
# https://github.com/bbatsov/rubocop/commit/7df382531db4f66cd9872a4f478bd486d6ce6712
|
21
|
+
Exclude:
|
22
|
+
- 'curation_concerns-models/lib/curation_concerns/null_logger.rb'
|
23
|
+
|
16
24
|
Lint/AssignmentInCondition:
|
17
25
|
Exclude:
|
18
26
|
- 'curation_concerns-models/app/services/curation_concerns/persist_derivatives.rb'
|
data/Gemfile
CHANGED
@@ -31,6 +31,7 @@ if File.exists?(file)
|
|
31
31
|
else
|
32
32
|
Bundler.ui.warn "[EngineCart] Unable to find test application dependencies in #{file}, using placeholder dependencies"
|
33
33
|
gem 'rails', ENV['RAILS_VERSION'] if ENV['RAILS_VERSION']
|
34
|
+
|
34
35
|
if ENV['RAILS_VERSION'].nil? || ENV['RAILS_VERSION'] =~ /^4.2/
|
35
36
|
gem 'responders', "~> 2.0"
|
36
37
|
gem 'sass-rails', ">= 5.0"
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.
|
1
|
+
0.6.0
|
@@ -14,16 +14,20 @@ module CurationConcerns
|
|
14
14
|
# neccesarily know about, seems to be consistent with what Rails4 does
|
15
15
|
# by default with uncaught ActiveRecord::RecordNotFound in production
|
16
16
|
wants.any do
|
17
|
-
|
18
|
-
# possibly non-html formats, this is consistent with what Rails does
|
19
|
-
# on raising an ActiveRecord::RecordNotFound. Rails.root IS needed
|
20
|
-
# for it to work under testing, without worrying about CWD.
|
21
|
-
render file: "#{Rails.root}/public/404.html", status: :not_found, layout: false
|
17
|
+
render_404
|
22
18
|
end
|
23
19
|
end
|
24
20
|
end
|
25
21
|
end
|
26
22
|
|
23
|
+
def render_404
|
24
|
+
# use standard, possibly locally overridden, 404.html file. Even for
|
25
|
+
# possibly non-html formats, this is consistent with what Rails does
|
26
|
+
# on raising an ActiveRecord::RecordNotFound. Rails.root IS needed
|
27
|
+
# for it to work under testing, without worrying about CWD.
|
28
|
+
render file: "#{Rails.root}/public/404.html", status: :not_found, layout: false
|
29
|
+
end
|
30
|
+
|
27
31
|
# Called by Hydra::Controller::ControllerBehavior when CanCan::AccessDenied is caught
|
28
32
|
# @param [CanCan::AccessDenied] exception error to handle
|
29
33
|
def deny_access(exception)
|
@@ -11,9 +11,6 @@ module CurationConcerns::CatalogController
|
|
11
11
|
helper CurationConcerns::CatalogHelper
|
12
12
|
# These before_filters apply the hydra access controls
|
13
13
|
before_action :enforce_show_permissions, only: :show
|
14
|
-
# This applies appropriate access controls to all solr queries
|
15
|
-
CatalogController.search_params_logic += [:add_access_controls_to_solr_params]
|
16
|
-
self.search_params_logic += [:filter_models]
|
17
14
|
end
|
18
15
|
|
19
16
|
module ClassMethods
|
@@ -34,21 +31,4 @@ module CurationConcerns::CatalogController
|
|
34
31
|
{ 'qf' => %w(title_tesim name_tesim), 'qt' => 'search', 'rows' => 10 }
|
35
32
|
end
|
36
33
|
end
|
37
|
-
|
38
|
-
protected
|
39
|
-
|
40
|
-
# Overriding Blacklight so that the search results can be displayed in a way compatible with
|
41
|
-
# tokenInput javascript library. This is used for suggesting "Related Works" to attach.
|
42
|
-
def render_search_results_as_json
|
43
|
-
{ 'docs' => @response['response']['docs'].map { |solr_doc| serialize_work_from_solr(solr_doc) } }
|
44
|
-
end
|
45
|
-
|
46
|
-
def serialize_work_from_solr(solr_doc)
|
47
|
-
title = solr_doc['title_tesim'].first
|
48
|
-
title << " (#{solr_doc['human_readable_type_tesim'].first})" if solr_doc['human_readable_type_tesim'].present?
|
49
|
-
{
|
50
|
-
pid: solr_doc['id'],
|
51
|
-
title: title
|
52
|
-
}
|
53
|
-
end
|
54
34
|
end
|
@@ -2,11 +2,10 @@ module CurationConcerns
|
|
2
2
|
module CollectionsControllerBehavior
|
3
3
|
extend ActiveSupport::Concern
|
4
4
|
include Hydra::CollectionsControllerBehavior
|
5
|
-
include
|
5
|
+
include Blacklight::AccessControls::Catalog
|
6
6
|
|
7
7
|
included do
|
8
8
|
before_action :filter_docs_with_read_access!, except: :show
|
9
|
-
self.search_params_logic += [:add_access_controls_to_solr_params, :add_advanced_parse_q_to_solr]
|
10
9
|
layout 'curation_concerns/1_column'
|
11
10
|
skip_load_and_authorize_resource only: :show
|
12
11
|
end
|
@@ -26,6 +25,17 @@ module CurationConcerns
|
|
26
25
|
super
|
27
26
|
end
|
28
27
|
|
28
|
+
def after_create_error
|
29
|
+
form
|
30
|
+
super
|
31
|
+
end
|
32
|
+
|
33
|
+
def after_update_error
|
34
|
+
form
|
35
|
+
query_collection_members
|
36
|
+
super
|
37
|
+
end
|
38
|
+
|
29
39
|
# overriding the method in Hydra::Collections so the search builder can find the collection
|
30
40
|
def collection
|
31
41
|
action_name == 'show' ? @presenter : @collection
|
@@ -40,19 +50,31 @@ module CurationConcerns
|
|
40
50
|
|
41
51
|
def presenter
|
42
52
|
@presenter ||= begin
|
43
|
-
|
44
|
-
|
53
|
+
# Query Solr for the collection.
|
54
|
+
# run the solr query to find the collection members
|
55
|
+
response = repository.search(collection_search_builder.query)
|
56
|
+
curation_concern = response.documents.first
|
45
57
|
raise CanCan::AccessDenied unless curation_concern
|
46
58
|
presenter_class.new(curation_concern, current_ability)
|
47
59
|
end
|
48
60
|
end
|
49
61
|
|
62
|
+
def collection_search_builder
|
63
|
+
collection_search_builder_class.new(self).with(params).tap do |builder|
|
64
|
+
builder.current_ability = current_ability
|
65
|
+
end
|
66
|
+
end
|
67
|
+
|
50
68
|
def presenter_class
|
51
69
|
CurationConcerns::CollectionPresenter
|
52
70
|
end
|
53
71
|
|
72
|
+
def collection_search_builder_class
|
73
|
+
CurationConcerns::WorkSearchBuilder
|
74
|
+
end
|
75
|
+
|
54
76
|
def collection_member_search_builder_class
|
55
|
-
CurationConcerns::
|
77
|
+
CurationConcerns::CollectionMemberSearchBuilder
|
56
78
|
end
|
57
79
|
|
58
80
|
def collection_params
|
@@ -1,7 +1,7 @@
|
|
1
1
|
module CurationConcerns::CurationConcernController
|
2
2
|
extend ActiveSupport::Concern
|
3
3
|
include Blacklight::Base
|
4
|
-
include
|
4
|
+
include Blacklight::AccessControls::Catalog
|
5
5
|
|
6
6
|
included do
|
7
7
|
copy_blacklight_config_from(CatalogController)
|
@@ -145,7 +145,7 @@ module CurationConcerns::CurationConcernController
|
|
145
145
|
def after_destroy_response(title)
|
146
146
|
flash[:notice] = "Deleted #{title}"
|
147
147
|
respond_to do |wants|
|
148
|
-
wants.html { redirect_to main_app.
|
148
|
+
wants.html { redirect_to main_app.search_catalog_path }
|
149
149
|
wants.json { render_json_response(response_type: :deleted, message: "Deleted #{curation_concern.id}") }
|
150
150
|
end
|
151
151
|
end
|
@@ -164,10 +164,14 @@ module CurationConcerns::CurationConcernController
|
|
164
164
|
# nop
|
165
165
|
end
|
166
166
|
|
167
|
+
def search_builder_class
|
168
|
+
CurationConcerns::WorkSearchBuilder
|
169
|
+
end
|
170
|
+
|
167
171
|
private
|
168
172
|
|
169
173
|
def curation_concern_from_search_results
|
170
|
-
_, document_list = search_results(params
|
174
|
+
_, document_list = search_results(params)
|
171
175
|
raise CanCan::AccessDenied.new(nil, :show) if document_list.empty?
|
172
176
|
document_list.first
|
173
177
|
end
|
@@ -50,11 +50,11 @@ module CurationConcerns
|
|
50
50
|
end
|
51
51
|
|
52
52
|
def default_file
|
53
|
-
if asset.class.respond_to?(:default_file_path)
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
53
|
+
default_file_reference = if asset.class.respond_to?(:default_file_path)
|
54
|
+
asset.class.default_file_path
|
55
|
+
else
|
56
|
+
DownloadsController.default_content_path
|
57
|
+
end
|
58
58
|
association = dereference_file(default_file_reference)
|
59
59
|
association.reader if association
|
60
60
|
end
|
@@ -1,6 +1,8 @@
|
|
1
1
|
module CurationConcerns
|
2
2
|
module FileSetsControllerBehavior
|
3
3
|
extend ActiveSupport::Concern
|
4
|
+
include Blacklight::Base
|
5
|
+
include Blacklight::AccessControls::Catalog
|
4
6
|
|
5
7
|
included do
|
6
8
|
include CurationConcerns::ThemedLayoutController
|
@@ -8,8 +10,6 @@ module CurationConcerns
|
|
8
10
|
load_and_authorize_resource class: ::FileSet, except: :show
|
9
11
|
helper_method :curation_concern
|
10
12
|
include CurationConcerns::ParentContainer
|
11
|
-
include Blacklight::Base
|
12
|
-
include Hydra::Controller::SearchBuilder
|
13
13
|
copy_blacklight_config_from(::CatalogController)
|
14
14
|
end
|
15
15
|
|
@@ -95,12 +95,7 @@ module CurationConcerns
|
|
95
95
|
end
|
96
96
|
end
|
97
97
|
if success
|
98
|
-
|
99
|
-
wants.html do
|
100
|
-
redirect_to [main_app, @file_set], notice: "The file #{view_context.link_to(@file_set, [main_app, @file_set])} has been updated."
|
101
|
-
end
|
102
|
-
wants.json { render :show, status: :ok, location: polymorphic_path([main_app, @file_set]) }
|
103
|
-
end
|
98
|
+
after_update_response
|
104
99
|
else
|
105
100
|
respond_to do |wants|
|
106
101
|
wants.html do
|
@@ -116,6 +111,15 @@ module CurationConcerns
|
|
116
111
|
render action: 'edit'
|
117
112
|
end
|
118
113
|
|
114
|
+
def after_update_response
|
115
|
+
respond_to do |wants|
|
116
|
+
wants.html do
|
117
|
+
redirect_to [main_app, @file_set], notice: "The file #{view_context.link_to(@file_set, [main_app, @file_set])} has been updated."
|
118
|
+
end
|
119
|
+
wants.json { render :show, status: :ok, location: polymorphic_path([main_app, @file_set]) }
|
120
|
+
end
|
121
|
+
end
|
122
|
+
|
119
123
|
def versions
|
120
124
|
@version_list = version_list
|
121
125
|
end
|
@@ -130,13 +134,17 @@ module CurationConcerns
|
|
130
134
|
|
131
135
|
def presenter
|
132
136
|
@presenter ||= begin
|
133
|
-
_, document_list = search_results(params
|
137
|
+
_, document_list = search_results(params)
|
134
138
|
curation_concern = document_list.first
|
135
139
|
raise CanCan::AccessDenied unless curation_concern
|
136
140
|
show_presenter.new(curation_concern, current_ability)
|
137
141
|
end
|
138
142
|
end
|
139
143
|
|
144
|
+
def search_builder_class
|
145
|
+
CurationConcerns::FileSetSearchBuilder
|
146
|
+
end
|
147
|
+
|
140
148
|
def initialize_edit_form
|
141
149
|
@groups = current_user.groups
|
142
150
|
end
|
@@ -15,15 +15,10 @@ module CurationConcerns::ParentContainer
|
|
15
15
|
end
|
16
16
|
|
17
17
|
def lookup_parent_from_child
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
CurationConcerns::ParentService.parent_for(@presenter.id)
|
24
|
-
else
|
25
|
-
raise "no child"
|
26
|
-
end
|
18
|
+
# in_objects method is inherited from Hydra::PCDM::ObjectBehavior
|
19
|
+
return curation_concern.in_objects.first if curation_concern
|
20
|
+
return CurationConcerns::ParentService.parent_for(@presenter.id) if @presenter
|
21
|
+
raise "no child"
|
27
22
|
end
|
28
23
|
|
29
24
|
def parent_id
|
data/app/controllers/concerns/curation_concerns/single_use_links_viewer_controller_behavior.rb
CHANGED
@@ -3,7 +3,7 @@ module CurationConcerns
|
|
3
3
|
extend ActiveSupport::Concern
|
4
4
|
include CurationConcerns::DownloadBehavior
|
5
5
|
include Blacklight::Base
|
6
|
-
include
|
6
|
+
include Blacklight::AccessControls::Catalog
|
7
7
|
|
8
8
|
included do
|
9
9
|
include ActionDispatch::Routing::PolymorphicRoutes
|
@@ -23,7 +23,7 @@ module CurationConcerns
|
|
23
23
|
end
|
24
24
|
|
25
25
|
def show
|
26
|
-
_, document_list = search_results(
|
26
|
+
_, document_list = search_results(id: single_use_link.itemId)
|
27
27
|
curation_concern = document_list.first
|
28
28
|
|
29
29
|
# Authorize using SingleUseLinksViewerController::Ability
|
@@ -41,6 +41,10 @@ module CurationConcerns
|
|
41
41
|
|
42
42
|
protected
|
43
43
|
|
44
|
+
def search_builder_class
|
45
|
+
CurationConcerns::SingleUseLinkSearchBuilder
|
46
|
+
end
|
47
|
+
|
44
48
|
def content_options
|
45
49
|
super.tap do |options|
|
46
50
|
options[:disposition] = 'attachment' if action_name == 'download'
|
@@ -5,7 +5,7 @@ module CurationConcerns::CatalogHelper
|
|
5
5
|
else
|
6
6
|
# TODO: Unused variable. Not sure why this is here.
|
7
7
|
# facet_solr_field = facet_configuration_for_field(type_field)
|
8
|
-
path = search_action_path(add_facet_params_and_redirect(type_field, key))
|
8
|
+
path = search_action_path(search_state.add_facet_params_and_redirect(type_field, key))
|
9
9
|
# local_params = params.dup
|
10
10
|
# local_facet_params = local_params[:f] || {}.with_indifferent_access
|
11
11
|
# local_params[:f] = local_facet_params.select{|k,_| k != type_field }
|
@@ -17,9 +17,7 @@ module CurationConcerns::CatalogHelper
|
|
17
17
|
|
18
18
|
def all_type_tab(label = t('curation_concerns.catalog.index.type_tabs.all'))
|
19
19
|
if params[:f] && params[:f][type_field]
|
20
|
-
|
21
|
-
# facet_solr_field = facet_configuration_for_field(type_field)
|
22
|
-
new_params = remove_facet_params(type_field, params[:f][type_field].first)
|
20
|
+
new_params = search_state.remove_facet_params(type_field, params[:f][type_field].first)
|
23
21
|
|
24
22
|
# Delete any request params from facet-specific action, needed
|
25
23
|
# to redir to index action properly.
|
@@ -1,8 +1,9 @@
|
|
1
1
|
module CurationConcerns
|
2
2
|
module PermissionsHelper
|
3
3
|
def help_link(file, title, aria_label)
|
4
|
-
link_to help_icon, '#',
|
5
|
-
|
4
|
+
link_to help_icon, '#',
|
5
|
+
data: { toggle: 'popover', content: capture_content(file), 'original-title' => title },
|
6
|
+
'aria-label' => aria_label
|
6
7
|
end
|
7
8
|
|
8
9
|
private
|
@@ -14,7 +15,7 @@ module CurationConcerns
|
|
14
15
|
end
|
15
16
|
|
16
17
|
def help_icon
|
17
|
-
content_tag 'i', '', 'aria-hidden'
|
18
|
+
content_tag 'i', '', 'aria-hidden' => true, class: 'help-icon'
|
18
19
|
end
|
19
20
|
end
|
20
21
|
end
|
@@ -1,11 +1,11 @@
|
|
1
1
|
module CurationConcerns::SearchPathsHelper
|
2
2
|
def search_path_for_my_works(opts = {})
|
3
3
|
params_for_my_works = { 'f[generic_type_sim][]' => 'Work', works: 'mine' }
|
4
|
-
main_app.
|
4
|
+
main_app.search_catalog_path(params_for_my_works.merge(opts))
|
5
5
|
end
|
6
6
|
|
7
7
|
def search_path_for_my_collections(opts = {})
|
8
8
|
params_for_my_collections = { 'f[generic_type_sim][]' => 'Collection', works: 'mine' }
|
9
|
-
main_app.
|
9
|
+
main_app.search_catalog_path(params_for_my_collections.merge(opts))
|
10
10
|
end
|
11
11
|
end
|
@@ -2,7 +2,7 @@ class MultifileInput < SimpleForm::Inputs::CollectionInput
|
|
2
2
|
def input(wrapper_options = nil)
|
3
3
|
merged_input_options = merge_wrapper_options(input_html_options, wrapper_options)
|
4
4
|
|
5
|
-
merged_input_options
|
5
|
+
merged_input_options[:name] = "#{@builder.object_name}[#{attribute_name}][]"
|
6
6
|
@builder.file_field(attribute_name, merged_input_options)
|
7
7
|
end
|
8
8
|
end
|
@@ -1,7 +1,7 @@
|
|
1
1
|
class SelectWithModalHelpInput < MultiValueWithHelpInput
|
2
2
|
def link_to_help
|
3
3
|
template.link_to "##{attribute_name}Modal", id: "#{input_class}_help_modal", rel: 'button',
|
4
|
-
data: { toggle: 'modal' }, 'aria-label'
|
4
|
+
data: { toggle: 'modal' }, 'aria-label' => aria_label do
|
5
5
|
help_icon
|
6
6
|
end
|
7
7
|
end
|
@@ -9,14 +9,14 @@ module WithHelpIcon
|
|
9
9
|
template.link_to '#', id: "#{input_class}_help",
|
10
10
|
data: { toggle: 'popover'.freeze,
|
11
11
|
content: metadata_help,
|
12
|
-
'original-title'
|
13
|
-
'aria-label'
|
12
|
+
'original-title' => raw_label_text },
|
13
|
+
'aria-label' => aria_label do
|
14
14
|
help_icon
|
15
15
|
end
|
16
16
|
end
|
17
17
|
|
18
18
|
def help_icon
|
19
|
-
template.content_tag 'i', nil,
|
19
|
+
template.content_tag 'i', nil, 'aria-hidden' => true, class: "help-icon"
|
20
20
|
end
|
21
21
|
|
22
22
|
def metadata_help
|
@@ -36,7 +36,8 @@ module CurationConcerns
|
|
36
36
|
|
37
37
|
# Query solr using POST so that the query doesn't get too large for a URI
|
38
38
|
def query(query, args = {})
|
39
|
-
args
|
39
|
+
args[:q] = query
|
40
|
+
args[:qt] = 'standard'
|
40
41
|
conn = ActiveFedora::SolrService.instance.conn
|
41
42
|
result = conn.post('select', data: args)
|
42
43
|
result.fetch('response').fetch('docs')
|
@@ -10,9 +10,9 @@ module CurationConcerns
|
|
10
10
|
|
11
11
|
def wrapped_list
|
12
12
|
@wrapped_list ||=
|
13
|
-
|
14
|
-
|
15
|
-
|
13
|
+
@raw_list.map { |v| CurationConcerns::VersionPresenter.new(v) } # wrap each item in a presenter
|
14
|
+
.sort { |a, b| b.version.created <=> a.version.created } # sort list of versions based on creation date
|
15
|
+
.tap { |l| l.first.try(:current!) } # set the first version to the current version
|
16
16
|
end
|
17
17
|
end
|
18
18
|
end
|
@@ -35,7 +35,7 @@ module CurationConcerns
|
|
35
35
|
# TODO: Extract this to ActiveFedora::Aggregations::ListSource
|
36
36
|
def ordered_ids
|
37
37
|
ActiveFedora::SolrService.query("proxy_in_ssi:#{id}", fl: "ordered_targets_ssim")
|
38
|
-
|
38
|
+
.flat_map { |x| x.fetch("ordered_targets_ssim", []) }
|
39
39
|
end
|
40
40
|
|
41
41
|
# Override this method if you want to use an alternate presenter class for the files
|
@@ -32,13 +32,16 @@ module CurationConcerns
|
|
32
32
|
markup.html_safe
|
33
33
|
end
|
34
34
|
|
35
|
-
|
35
|
+
# @return The human-readable label for this field.
|
36
|
+
# @note This is a central location for determining the label of a field
|
37
|
+
# name. Can be overridden if more complicated logic is needed.
|
38
|
+
def label
|
39
|
+
translate(
|
40
|
+
:"blacklight.search.fields.show.#{field}",
|
41
|
+
default: [:"blacklight.search.fields.#{field}", options.fetch(:label, field.to_s.humanize)])
|
42
|
+
end
|
36
43
|
|
37
|
-
|
38
|
-
translate(
|
39
|
-
:"blacklight.search.fields.show.#{field}",
|
40
|
-
default: [:"blacklight.search.fields.#{field}", options.fetch(:label, field.to_s.humanize)])
|
41
|
-
end
|
44
|
+
private
|
42
45
|
|
43
46
|
def attribute_value_to_html(value)
|
44
47
|
if field == :rights
|
@@ -72,7 +75,7 @@ module CurationConcerns
|
|
72
75
|
end
|
73
76
|
|
74
77
|
def search_path(value)
|
75
|
-
Rails.application.routes.url_helpers.
|
78
|
+
Rails.application.routes.url_helpers.search_catalog_path(
|
76
79
|
search_field: search_field, q: ERB::Util.h(value))
|
77
80
|
end
|
78
81
|
|
@@ -2,9 +2,6 @@ module CurationConcerns
|
|
2
2
|
# Finds embargoed objects
|
3
3
|
class EmbargoSearchBuilder < Blacklight::SearchBuilder
|
4
4
|
self.default_processor_chain = [:with_pagination, :with_sorting, :only_active_embargoes]
|
5
|
-
def initialize(scope)
|
6
|
-
super(true, scope)
|
7
|
-
end
|
8
5
|
|
9
6
|
# TODO: add more complex pagination
|
10
7
|
def with_pagination(solr_params)
|
@@ -0,0 +1,10 @@
|
|
1
|
+
module CurationConcerns
|
2
|
+
class FileSetSearchBuilder < Hydra::SearchBuilder
|
3
|
+
include CurationConcerns::SingleResult
|
4
|
+
self.default_processor_chain += [:only_file_sets]
|
5
|
+
|
6
|
+
def only_file_sets(solr_parameters)
|
7
|
+
solr_parameters[:fq] << ActiveFedora::SolrQueryBuilder.construct_query_for_rel(has_model: ::FileSet.to_class_uri)
|
8
|
+
end
|
9
|
+
end
|
10
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
module CurationConcerns
|
2
|
+
module FilterByType
|
3
|
+
extend ActiveSupport::Concern
|
4
|
+
|
5
|
+
included do
|
6
|
+
self.default_processor_chain += [:filter_models]
|
7
|
+
end
|
8
|
+
|
9
|
+
# Add queries that excludes everything except for works and collections
|
10
|
+
def filter_models(solr_parameters)
|
11
|
+
solr_parameters[:fq] ||= []
|
12
|
+
solr_parameters[:fq] << '(' + (work_clauses + collection_clauses).join(' OR ') + ')'
|
13
|
+
end
|
14
|
+
|
15
|
+
private
|
16
|
+
|
17
|
+
def work_clauses
|
18
|
+
return [] if blacklight_params.key?(:f) && Array(blacklight_params[:f][:generic_type_sim]).include?('Collection')
|
19
|
+
CurationConcerns.config.registered_curation_concern_types.map(&:constantize).map do |klass|
|
20
|
+
ActiveFedora::SolrQueryBuilder.construct_query_for_rel(has_model: klass.to_class_uri)
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
def collection_clauses
|
25
|
+
return [] if blacklight_params.key?(:f) && Array(blacklight_params[:f][:generic_type_sim]).include?('Work')
|
26
|
+
[ActiveFedora::SolrQueryBuilder.construct_query_for_rel(has_model: ::Collection.to_class_uri)]
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
@@ -2,9 +2,6 @@ module CurationConcerns
|
|
2
2
|
# Finds objects under lease
|
3
3
|
class LeaseSearchBuilder < Blacklight::SearchBuilder
|
4
4
|
self.default_processor_chain = [:with_pagination, :with_sorting, :only_active_leases]
|
5
|
-
def initialize(scope)
|
6
|
-
super(true, scope)
|
7
|
-
end
|
8
5
|
|
9
6
|
# TODO: add more complex pagination
|
10
7
|
def with_pagination(solr_params)
|
@@ -1,14 +1,6 @@
|
|
1
1
|
class CurationConcerns::SearchBuilder < Hydra::SearchBuilder
|
2
2
|
include BlacklightAdvancedSearch::AdvancedSearchBuilder
|
3
|
-
include
|
4
|
-
|
5
|
-
def only_file_sets(solr_parameters)
|
6
|
-
solr_parameters[:fq] << ActiveFedora::SolrQueryBuilder.construct_query_for_rel(has_model: FileSet.to_class_uri)
|
7
|
-
end
|
8
|
-
|
9
|
-
def find_one(solr_parameters)
|
10
|
-
solr_parameters[:fq] << "_query_:\"{!raw f=id}#{blacklight_params.fetch(:id)}\""
|
11
|
-
end
|
3
|
+
include CurationConcerns::FilterByType
|
12
4
|
|
13
5
|
# Override Hydra::AccessControlsEnforcement (or Hydra::PolicyAwareAccessControlsEnforcement)
|
14
6
|
# Allows admin users to see everything (don't apply any gated_discovery_filters for those users)
|
@@ -22,22 +14,4 @@ class CurationConcerns::SearchBuilder < Hydra::SearchBuilder
|
|
22
14
|
return ['edit'] if blacklight_params[:works] == 'mine'
|
23
15
|
super
|
24
16
|
end
|
25
|
-
|
26
|
-
# This is included as part of blacklight search solr params logic
|
27
|
-
def filter_models(solr_parameters)
|
28
|
-
solr_parameters[:fq] ||= []
|
29
|
-
solr_parameters[:fq] << '(' + (work_clauses + collection_clauses).join(' OR ') + ')'
|
30
|
-
end
|
31
|
-
|
32
|
-
def work_clauses
|
33
|
-
return [] if blacklight_params.key?(:f) && Array(blacklight_params[:f][:generic_type_sim]).include?('Collection')
|
34
|
-
CurationConcerns.config.registered_curation_concern_types.map(&:constantize).map do |klass|
|
35
|
-
ActiveFedora::SolrQueryBuilder.construct_query_for_rel(has_model: klass.to_class_uri)
|
36
|
-
end
|
37
|
-
end
|
38
|
-
|
39
|
-
def collection_clauses
|
40
|
-
return [] if blacklight_params.key?(:f) && Array(blacklight_params[:f][:generic_type_sim]).include?('Work')
|
41
|
-
[ActiveFedora::SolrQueryBuilder.construct_query_for_rel(has_model: ::Collection.to_class_uri)]
|
42
|
-
end
|
43
17
|
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
module CurationConcerns
|
2
|
+
module SingleResult
|
3
|
+
extend ActiveSupport::Concern
|
4
|
+
|
5
|
+
included do
|
6
|
+
self.default_processor_chain += [:find_one]
|
7
|
+
end
|
8
|
+
|
9
|
+
def find_one(solr_parameters)
|
10
|
+
solr_parameters[:fq] << "_query_:\"{!raw f=id}#{blacklight_params.fetch(:id)}\""
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|