curation_concerns 0.5.0 → 0.6.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|