hyrax 4.0.0 → 5.0.0.rc1
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/.circleci/config.yml +116 -231
- data/.dassie/.env +3 -1
- data/.dassie/config/environments/test.rb +1 -0
- data/.dassie/config/initializers/hyrax.rb +3 -1
- data/.dassie/config/initializers/riiif.rb +13 -3
- data/.dassie/db/schema.rb +2 -2
- data/.dockerignore +6 -0
- data/.github/PULL_REQUEST_TEMPLATE.md +10 -7
- data/.github/release.yml +5 -2
- data/.koppie/.env +3 -0
- data/.koppie/app/forms/collection_resource_form.rb +1 -0
- data/.koppie/app/indexers/collection_resource_indexer.rb +1 -0
- data/.koppie/app/models/collection_resource.rb +1 -0
- data/.koppie/config/environments/test.rb +1 -0
- data/.koppie/config/initializers/hyrax.rb +8 -2
- data/.koppie/config/initializers/riiif.rb +13 -4
- data/.koppie/config/metadata/collection_resource.yaml +1 -128
- data/.koppie/yarn.lock +23 -23
- data/.regen +1 -1
- data/CONTAINERS.md +1 -1
- data/Dockerfile +6 -11
- data/app/actors/hyrax/actors/base_actor.rb +4 -3
- data/app/actors/hyrax/actors/embargo_actor.rb +5 -2
- data/app/actors/hyrax/actors/lease_actor.rb +5 -2
- data/app/assets/javascripts/hyrax/file_manager/sorting.es6 +3 -2
- data/app/controllers/concerns/hyrax/embargoes_controller_behavior.rb +1 -1
- data/app/controllers/concerns/hyrax/valkyrie_downloads_controller_behavior.rb +74 -0
- data/app/controllers/concerns/hyrax/works_controller_behavior.rb +14 -5
- data/app/controllers/hyrax/admin/workflows_controller.rb +48 -3
- data/app/controllers/hyrax/batch_edits_controller.rb +33 -4
- data/app/controllers/hyrax/downloads_controller.rb +8 -1
- data/app/controllers/hyrax/file_sets_controller.rb +1 -0
- data/app/forms/hyrax/forms/file_set_edit_form.rb +1 -1
- data/app/forms/hyrax/forms/permission_template_form.rb +2 -0
- data/app/forms/hyrax/forms/resource_batch_edit_form.rb +90 -0
- data/app/forms/hyrax/forms/work_embargo_form.rb +1 -0
- data/app/forms/hyrax/forms/work_form.rb +1 -1
- data/app/forms/hyrax/forms/work_lease_form.rb +1 -0
- data/app/helpers/hyrax/dashboard_helper_behavior.rb +17 -9
- data/app/helpers/hyrax/membership_helper.rb +13 -1
- data/app/helpers/hyrax/work_form_helper.rb +0 -107
- data/app/indexers/hyrax/file_set_indexer.rb +6 -0
- data/app/indexers/hyrax/pcdm_collection_indexer.rb +8 -0
- data/app/indexers/hyrax/valkyrie_file_set_indexer.rb +41 -5
- data/app/indexers/hyrax/valkyrie_work_indexer.rb +8 -2
- data/app/jobs/valkyrie_create_derivatives_job.rb +8 -7
- data/app/jobs/valkyrie_ingest_job.rb +0 -1
- data/app/models/admin_set.rb +1 -31
- data/app/models/concerns/hyrax/file_set/derivatives.rb +3 -2
- data/app/models/concerns/hyrax/solr_document_behavior.rb +1 -1
- data/app/models/hyrax/collection_type.rb +5 -14
- data/app/models/hyrax/file_metadata.rb +6 -7
- data/app/models/hyrax/file_set.rb +8 -0
- data/app/models/hyrax/resource.rb +30 -2
- data/app/presenters/hyrax/file_set_presenter.rb +6 -0
- data/app/presenters/hyrax/iiif_manifest_presenter.rb +3 -7
- data/app/presenters/hyrax/presenter_renderer.rb +0 -7
- data/app/presenters/hyrax/work_show_presenter.rb +6 -11
- data/app/search_builders/hyrax/file_set_search_builder.rb +1 -1
- data/app/search_builders/hyrax/valkyrie_abstract_type_relation.rb +37 -0
- data/app/search_builders/hyrax/valkyrie_work_relation.rb +9 -0
- data/app/services/hyrax/characterization/valkyrie_characterization_service.rb +11 -9
- data/app/services/hyrax/custom_queries/find_by_date_range.rb +55 -0
- data/app/services/hyrax/custom_queries/find_count_by.rb +62 -0
- data/app/services/hyrax/custom_queries/find_file_metadata.rb +1 -1
- data/app/services/hyrax/custom_queries/find_models_by_access.rb +59 -0
- data/app/services/hyrax/derivative_bucketed_storage.rb +25 -0
- data/app/services/hyrax/derivative_path.rb +14 -4
- data/app/services/hyrax/embargo_manager.rb +76 -10
- data/app/services/hyrax/file_set_derivatives_service.rb +3 -2
- data/app/services/hyrax/lease_manager.rb +88 -8
- data/app/services/hyrax/listeners/file_metadata_listener.rb +2 -2
- data/app/services/hyrax/listeners/workflow_listener.rb +8 -11
- data/app/services/hyrax/persist_directly_contained_output_file_service.rb +24 -2
- data/app/services/hyrax/solr_query_service.rb +7 -6
- data/app/services/hyrax/statistics/depositors/summary.rb +1 -1
- data/app/services/hyrax/statistics/over_time.rb +1 -1
- data/app/services/hyrax/statistics/users/over_time.rb +3 -1
- data/app/services/hyrax/statistics/valkyrie_query_service.rb +49 -0
- data/app/services/hyrax/statistics/works/count.rb +1 -1
- data/app/services/hyrax/thumbnail_path_service.rb +5 -0
- data/app/services/hyrax/valkyrie_persist_derivatives.rb +16 -11
- data/app/services/hyrax/valkyrie_upload.rb +5 -3
- data/app/services/hyrax/versioning_service.rb +1 -0
- data/app/services/hyrax/visibility_intention.rb +1 -4
- data/app/services/hyrax/visibility_propagator.rb +1 -1
- data/app/services/hyrax/workflow/actionable_objects.rb +28 -3
- data/app/services/hyrax/workflow/grant_edit_to_depositor.rb +1 -1
- data/app/services/hyrax/workflow/grant_read_to_depositor.rb +1 -1
- data/app/services/hyrax/workflow/permission_query.rb +23 -2
- data/app/views/hyrax/admin/workflows/_tabs.html.erb +9 -0
- data/app/views/hyrax/admin/workflows/index.html.erb +53 -76
- data/app/views/hyrax/base/_file_manager_members.html.erb +2 -2
- data/app/views/hyrax/base/_form.html.erb +0 -10
- data/app/views/hyrax/base/_form_permission_embargo.html.erb +1 -1
- data/app/views/hyrax/base/_form_permission_lease.html.erb +1 -1
- data/app/views/hyrax/base/_form_visibility_component.html.erb +2 -2
- data/app/views/hyrax/base/_items.html.erb +1 -1
- data/app/views/hyrax/base/file_manager.html.erb +1 -1
- data/app/views/hyrax/base/show.json.jbuilder +2 -2
- data/app/views/hyrax/file_sets/show.html.erb +5 -3
- data/app/views/hyrax/homepage/_explore_collections.html.erb +1 -1
- data/chart/hyrax/Chart.yaml +18 -14
- data/chart/hyrax/README.md +34 -21
- data/chart/hyrax/templates/_helpers.tpl +26 -1
- data/chart/hyrax/templates/configmap-env.yaml +12 -2
- data/chart/hyrax/templates/secrets.yaml +1 -1
- data/chart/hyrax/values.yaml +36 -14
- data/config/initializers/listeners.rb +4 -10
- data/config/initializers/storage_adapter_initializer.rb +1 -1
- data/config/locales/hyrax.en.yml +8 -0
- data/config/metadata/file_set_metadata.yaml +1 -1
- data/docker-compose-koppie.yml +17 -4
- data/docker-compose.yml +19 -6
- data/documentation/developing-your-hyrax-based-app.md +6 -14
- data/documentation/legacyREADME.md +3 -1
- data/hyrax.gemspec +2 -2
- data/karma.conf.js +8 -9
- data/lib/generators/hyrax/templates/config/initializers/hyrax.rb +1 -1
- data/lib/generators/hyrax/templates/config/initializers/riiif.rb +15 -5
- data/lib/hyrax/active_fedora_dummy_model.rb +6 -1
- data/lib/hyrax/configuration.rb +6 -0
- data/lib/hyrax/engine.rb +2 -0
- data/lib/hyrax/publisher.rb +19 -3
- data/lib/hyrax/specs/capybara.rb +9 -4
- data/lib/hyrax/transactions/container.rb +5 -0
- data/lib/hyrax/transactions/steps/add_file_sets.rb +6 -0
- data/lib/hyrax/transactions/steps/apply_permission_template.rb +40 -0
- data/lib/hyrax/transactions/steps/save.rb +21 -0
- data/lib/hyrax/transactions/work_create.rb +1 -0
- data/lib/hyrax/version.rb +1 -1
- data/lib/hyrax.rb +1 -0
- data/lib/wings/active_fedora_converter/default_work.rb +7 -2
- data/lib/wings/active_fedora_converter/file_metadata_node.rb +1 -1
- data/lib/wings/active_fedora_converter.rb +47 -11
- data/lib/wings/model_transformer.rb +23 -4
- data/lib/wings/setup.rb +21 -1
- data/lib/wings/valkyrie/persister.rb +4 -2
- data/package.json +3 -1
- data/template.rb +1 -1
- metadata +17 -12
- data/app/forms/hyrax/forms/file_manager_form.rb +0 -35
- data/app/services/hyrax/collections/migration_service.rb +0 -113
- data/app/views/hyrax/base/_form_collections_error.html.erb +0 -1
- data/app/views/hyrax/base/_form_in_works_error.html.erb +0 -3
- data/app/views/hyrax/base/_form_ordered_members_error.html.erb +0 -3
- data/app/views/hyrax/base/_form_visibility_error.html.erb +0 -19
|
@@ -19,131 +19,4 @@
|
|
|
19
19
|
# Generated via
|
|
20
20
|
# `rails generate hyrax:collection_resource CollectionResource`
|
|
21
21
|
|
|
22
|
-
attributes:
|
|
23
|
-
description:
|
|
24
|
-
type: string
|
|
25
|
-
multiple: true
|
|
26
|
-
form:
|
|
27
|
-
primary: true
|
|
28
|
-
index_keys:
|
|
29
|
-
- "description_tesim"
|
|
30
|
-
creator:
|
|
31
|
-
type: string
|
|
32
|
-
multiple: true
|
|
33
|
-
form:
|
|
34
|
-
required: false
|
|
35
|
-
primary: false
|
|
36
|
-
index_keys:
|
|
37
|
-
- "creator_tesim"
|
|
38
|
-
rights_statement:
|
|
39
|
-
type: string
|
|
40
|
-
multiple: true
|
|
41
|
-
form:
|
|
42
|
-
primary: false
|
|
43
|
-
abstract:
|
|
44
|
-
type: string
|
|
45
|
-
multiple: true
|
|
46
|
-
form:
|
|
47
|
-
primary: false
|
|
48
|
-
access_right:
|
|
49
|
-
type: string
|
|
50
|
-
multiple: true
|
|
51
|
-
form:
|
|
52
|
-
primary: false
|
|
53
|
-
alternative_title:
|
|
54
|
-
type: string
|
|
55
|
-
multiple: true
|
|
56
|
-
form:
|
|
57
|
-
primary: false
|
|
58
|
-
based_near:
|
|
59
|
-
type: string
|
|
60
|
-
multiple: true
|
|
61
|
-
form:
|
|
62
|
-
primary: false
|
|
63
|
-
index_keys:
|
|
64
|
-
- "based_near_sim"
|
|
65
|
-
- "based_near_tesim"
|
|
66
|
-
bibliographic_citation:
|
|
67
|
-
type: string
|
|
68
|
-
multiple: true
|
|
69
|
-
contributor:
|
|
70
|
-
type: string
|
|
71
|
-
multiple: true
|
|
72
|
-
form:
|
|
73
|
-
primary: false
|
|
74
|
-
date_created:
|
|
75
|
-
type: date_time
|
|
76
|
-
multiple: true
|
|
77
|
-
form:
|
|
78
|
-
primary: false
|
|
79
|
-
index_keys:
|
|
80
|
-
- "date_created_tesim"
|
|
81
|
-
identifier:
|
|
82
|
-
type: string
|
|
83
|
-
multiple: true
|
|
84
|
-
form:
|
|
85
|
-
primary: false
|
|
86
|
-
import_url:
|
|
87
|
-
type: string
|
|
88
|
-
keyword:
|
|
89
|
-
type: string
|
|
90
|
-
multiple: true
|
|
91
|
-
index_keys:
|
|
92
|
-
- "keyword_sim"
|
|
93
|
-
- "keyword_tesim"
|
|
94
|
-
form:
|
|
95
|
-
primary: false
|
|
96
|
-
publisher:
|
|
97
|
-
type: string
|
|
98
|
-
multiple: true
|
|
99
|
-
form:
|
|
100
|
-
primary: false
|
|
101
|
-
label:
|
|
102
|
-
type: string
|
|
103
|
-
form:
|
|
104
|
-
primary: false
|
|
105
|
-
language:
|
|
106
|
-
type: string
|
|
107
|
-
multiple: true
|
|
108
|
-
form:
|
|
109
|
-
primary: false
|
|
110
|
-
license:
|
|
111
|
-
type: string
|
|
112
|
-
multiple: true
|
|
113
|
-
form:
|
|
114
|
-
primary: false
|
|
115
|
-
relative_path:
|
|
116
|
-
type: string
|
|
117
|
-
related_url:
|
|
118
|
-
type: string
|
|
119
|
-
multiple: true
|
|
120
|
-
form:
|
|
121
|
-
primary: false
|
|
122
|
-
index_keys:
|
|
123
|
-
- "related_url_tesim"
|
|
124
|
-
resource_type:
|
|
125
|
-
type: string
|
|
126
|
-
multiple: true
|
|
127
|
-
form:
|
|
128
|
-
primary: false
|
|
129
|
-
index_keys:
|
|
130
|
-
- "resource_type_sim"
|
|
131
|
-
- "resource_type_tesim"
|
|
132
|
-
rights_notes:
|
|
133
|
-
type: string
|
|
134
|
-
multiple: true
|
|
135
|
-
form:
|
|
136
|
-
primary: false
|
|
137
|
-
source:
|
|
138
|
-
type: string
|
|
139
|
-
multiple: true
|
|
140
|
-
form:
|
|
141
|
-
primary: false
|
|
142
|
-
subject:
|
|
143
|
-
type: string
|
|
144
|
-
multiple: true
|
|
145
|
-
index_keys:
|
|
146
|
-
- "subject_sim"
|
|
147
|
-
- "subject_tesim"
|
|
148
|
-
form:
|
|
149
|
-
primary: false
|
|
22
|
+
attributes: {}
|
data/.koppie/yarn.lock
CHANGED
|
@@ -706,7 +706,7 @@ iconv-lite@^0.6.2:
|
|
|
706
706
|
immediate@~3.0.5:
|
|
707
707
|
version "3.0.6"
|
|
708
708
|
resolved "https://registry.yarnpkg.com/immediate/-/immediate-3.0.6.tgz#9db1dbd0faf8de6fbe0f5dd5e56bb606280de69b"
|
|
709
|
-
integrity
|
|
709
|
+
integrity sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==
|
|
710
710
|
|
|
711
711
|
imsc@^1.0.1-rc.1:
|
|
712
712
|
version "1.1.2"
|
|
@@ -757,7 +757,7 @@ is-typedarray@~1.0.0:
|
|
|
757
757
|
isarray@~1.0.0:
|
|
758
758
|
version "1.0.0"
|
|
759
759
|
resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11"
|
|
760
|
-
integrity
|
|
760
|
+
integrity sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==
|
|
761
761
|
|
|
762
762
|
isexe@^2.0.0:
|
|
763
763
|
version "2.0.0"
|
|
@@ -818,9 +818,9 @@ json-stringify-safe@~5.0.1:
|
|
|
818
818
|
integrity sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=
|
|
819
819
|
|
|
820
820
|
json5@^1.0.1:
|
|
821
|
-
version "1.0.
|
|
822
|
-
resolved "https://registry.yarnpkg.com/json5/-/json5-1.0.
|
|
823
|
-
integrity sha512-
|
|
821
|
+
version "1.0.2"
|
|
822
|
+
resolved "https://registry.yarnpkg.com/json5/-/json5-1.0.2.tgz#63d98d60f21b313b77c4d6da18bfa69d80e1d593"
|
|
823
|
+
integrity sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==
|
|
824
824
|
dependencies:
|
|
825
825
|
minimist "^1.2.0"
|
|
826
826
|
|
|
@@ -840,14 +840,14 @@ jsviews@0.9.83:
|
|
|
840
840
|
integrity sha1-BpsFEigz0jFVzDziwtn7LPeJqYo=
|
|
841
841
|
|
|
842
842
|
jszip@*, jszip@^3.1.5, jszip@^3.2.2:
|
|
843
|
-
version "3.
|
|
844
|
-
resolved "https://registry.yarnpkg.com/jszip/-/jszip-3.
|
|
845
|
-
integrity sha512-
|
|
843
|
+
version "3.10.1"
|
|
844
|
+
resolved "https://registry.yarnpkg.com/jszip/-/jszip-3.10.1.tgz#34aee70eb18ea1faec2f589208a157d1feb091c2"
|
|
845
|
+
integrity sha512-xXDvecyTpGLrqFrvkrUSoxxfJI5AH7U8zxxtVclpsUtMCq4JQ290LY8AW5c7Ggnr/Y/oK+bQMbqK2qmtk3pN4g==
|
|
846
846
|
dependencies:
|
|
847
847
|
lie "~3.3.0"
|
|
848
848
|
pako "~1.0.2"
|
|
849
849
|
readable-stream "~2.3.6"
|
|
850
|
-
|
|
850
|
+
setimmediate "^1.0.5"
|
|
851
851
|
|
|
852
852
|
lie@3.1.1:
|
|
853
853
|
version "3.1.1"
|
|
@@ -864,9 +864,9 @@ lie@~3.3.0:
|
|
|
864
864
|
immediate "~3.0.5"
|
|
865
865
|
|
|
866
866
|
loader-utils@^1.0.0:
|
|
867
|
-
version "1.4.
|
|
868
|
-
resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-1.4.
|
|
869
|
-
integrity sha512-
|
|
867
|
+
version "1.4.2"
|
|
868
|
+
resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-1.4.2.tgz#29a957f3a63973883eb684f10ffd3d151fec01a3"
|
|
869
|
+
integrity sha512-I5d00Pd/jwMD2QCduo657+YM/6L3KZu++pmX9VFncxaxvHcru9jx1lBaFft+r4Mt2jK0Yhp41XlRAihzPxHNCg==
|
|
870
870
|
dependencies:
|
|
871
871
|
big.js "^5.2.2"
|
|
872
872
|
emojis-list "^3.0.0"
|
|
@@ -953,9 +953,9 @@ minimist@1.2.0:
|
|
|
953
953
|
integrity sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=
|
|
954
954
|
|
|
955
955
|
minimist@^1.2.0:
|
|
956
|
-
version "1.2.
|
|
957
|
-
resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.
|
|
958
|
-
integrity sha512-
|
|
956
|
+
version "1.2.7"
|
|
957
|
+
resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.7.tgz#daa1c4d91f507390437c6a8bc01078e7000c4d18"
|
|
958
|
+
integrity sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==
|
|
959
959
|
|
|
960
960
|
mute-stream@0.0.7:
|
|
961
961
|
version "0.0.7"
|
|
@@ -1100,9 +1100,9 @@ punycode@^2.1.0, punycode@^2.1.1:
|
|
|
1100
1100
|
integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==
|
|
1101
1101
|
|
|
1102
1102
|
qs@~6.5.2:
|
|
1103
|
-
version "6.5.
|
|
1104
|
-
resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.
|
|
1105
|
-
integrity sha512-
|
|
1103
|
+
version "6.5.3"
|
|
1104
|
+
resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.3.tgz#3aeeffc91967ef6e35c0e488ef46fb296ab76aad"
|
|
1105
|
+
integrity sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA==
|
|
1106
1106
|
|
|
1107
1107
|
readable-stream@^2.0.2, readable-stream@~2.3.6:
|
|
1108
1108
|
version "2.3.7"
|
|
@@ -1209,10 +1209,10 @@ schema-utils@^0.4.0:
|
|
|
1209
1209
|
ajv "^6.1.0"
|
|
1210
1210
|
ajv-keywords "^3.1.0"
|
|
1211
1211
|
|
|
1212
|
-
|
|
1213
|
-
version "1.0.
|
|
1214
|
-
resolved "https://registry.yarnpkg.com/
|
|
1215
|
-
integrity
|
|
1212
|
+
setimmediate@^1.0.5:
|
|
1213
|
+
version "1.0.5"
|
|
1214
|
+
resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285"
|
|
1215
|
+
integrity sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==
|
|
1216
1216
|
|
|
1217
1217
|
shebang-command@^2.0.0:
|
|
1218
1218
|
version "2.0.0"
|
|
@@ -1419,7 +1419,7 @@ url-toolkit@^2.1.2:
|
|
|
1419
1419
|
util-deprecate@~1.0.1:
|
|
1420
1420
|
version "1.0.2"
|
|
1421
1421
|
resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf"
|
|
1422
|
-
integrity
|
|
1422
|
+
integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==
|
|
1423
1423
|
|
|
1424
1424
|
uuid@^3.3.2:
|
|
1425
1425
|
version "3.4.0"
|
data/.regen
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
# When updating CI regen seed, set to current date.
|
|
2
|
-
2023-
|
|
2
|
+
2023-08-09T14:34:59
|
data/CONTAINERS.md
CHANGED
|
@@ -191,7 +191,7 @@ We publish several Hyrax images to the [GitHub container registry][ghcr] under
|
|
|
191
191
|
the [Samvera organization][samvera-packages]. To build them:
|
|
192
192
|
|
|
193
193
|
```sh
|
|
194
|
-
export HYRAX_VERSION=
|
|
194
|
+
export HYRAX_VERSION=v5.0.0.rc1 # or desired version
|
|
195
195
|
git checkout hyrax-$HYRAX_VERSION
|
|
196
196
|
|
|
197
197
|
docker build --target hyrax-base --tag ghcr.io/samvera/hyrax/hyrax-base:$(git rev-parse HEAD) .
|
data/Dockerfile
CHANGED
|
@@ -1,15 +1,10 @@
|
|
|
1
|
-
ARG
|
|
1
|
+
ARG ALPINE_VERSION=3.18
|
|
2
|
+
ARG RUBY_VERSION=3.2.2
|
|
2
3
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
RUN apk add build-base curl
|
|
6
|
-
RUN curl -sL https://github.com/jemalloc/jemalloc/releases/download/5.3.0/jemalloc-5.3.0.tar.bz2 | tar -xj && \
|
|
7
|
-
cd jemalloc-5.3.0 && \
|
|
8
|
-
./configure && \
|
|
9
|
-
make && \
|
|
10
|
-
make install
|
|
4
|
+
FROM ruby:$RUBY_VERSION-alpine$ALPINE_VERSION as builder
|
|
5
|
+
RUN apk add build-base curl jemalloc
|
|
11
6
|
|
|
12
|
-
FROM ruby:$RUBY_VERSION-
|
|
7
|
+
FROM ruby:$RUBY_VERSION-alpine$ALPINE_VERSION as hyrax-base
|
|
13
8
|
|
|
14
9
|
ARG DATABASE_APK_PACKAGE="postgresql-dev"
|
|
15
10
|
ARG EXTRA_APK_PACKAGES="git"
|
|
@@ -43,7 +38,7 @@ ENV PATH="/app/samvera:$PATH"
|
|
|
43
38
|
ENV RAILS_ROOT="/app/samvera/hyrax-webapp"
|
|
44
39
|
ENV RAILS_SERVE_STATIC_FILES="1"
|
|
45
40
|
|
|
46
|
-
COPY --from=builder /usr/
|
|
41
|
+
COPY --from=builder /usr/lib/libjemalloc.so.2 /usr/local/lib/
|
|
47
42
|
ENV LD_PRELOAD="/usr/local/lib/libjemalloc.so.2"
|
|
48
43
|
|
|
49
44
|
ENTRYPOINT ["hyrax-entrypoint.sh"]
|
|
@@ -71,7 +71,8 @@ module Hyrax
|
|
|
71
71
|
def save(env, use_valkyrie: false)
|
|
72
72
|
return env.curation_concern.save unless use_valkyrie
|
|
73
73
|
|
|
74
|
-
|
|
74
|
+
# don't run validations again on the converted object if they've already passed
|
|
75
|
+
resource = valkyrie_save(resource: env.curation_concern.valkyrie_resource, is_valid: env.curation_concern.save)
|
|
75
76
|
|
|
76
77
|
# we need to manually set the id and reload, because the actor stack requires
|
|
77
78
|
# `env.curation_concern` to be the exact same instance throughout.
|
|
@@ -115,9 +116,9 @@ module Hyrax
|
|
|
115
116
|
attributes.select { |_, v| v.respond_to?(:select) && !v.respond_to?(:read) }
|
|
116
117
|
end
|
|
117
118
|
|
|
118
|
-
def valkyrie_save(resource:)
|
|
119
|
+
def valkyrie_save(resource:, is_valid:)
|
|
119
120
|
permissions = resource.permission_manager.acl.permissions
|
|
120
|
-
resource = Hyrax.persister.save(resource: resource)
|
|
121
|
+
resource = Hyrax.persister.save(resource: resource, perform_af_validation: !is_valid)
|
|
121
122
|
|
|
122
123
|
resource.permission_manager.acl.permissions = permissions
|
|
123
124
|
resource.permission_manager.acl.save
|
|
@@ -15,8 +15,11 @@ module Hyrax
|
|
|
15
15
|
case work
|
|
16
16
|
when Valkyrie::Resource
|
|
17
17
|
embargo_manager = Hyrax::EmbargoManager.new(resource: work)
|
|
18
|
-
|
|
19
|
-
|
|
18
|
+
return if embargo_manager.embargo.embargo_release_date.blank?
|
|
19
|
+
|
|
20
|
+
embargo_manager.deactivate!
|
|
21
|
+
work.embargo = Hyrax.persister.save(resource: embargo_manager.embargo)
|
|
22
|
+
Hyrax::AccessControlList(work).save
|
|
20
23
|
else
|
|
21
24
|
work.embargo_visibility! # If the embargo has lapsed, update the current visibility.
|
|
22
25
|
work.deactivate_embargo!
|
|
@@ -15,8 +15,11 @@ module Hyrax
|
|
|
15
15
|
case work
|
|
16
16
|
when Valkyrie::Resource
|
|
17
17
|
lease_manager = Hyrax::LeaseManager.new(resource: work)
|
|
18
|
-
|
|
19
|
-
|
|
18
|
+
return if lease_manager.lease.lease_expiration_date.blank?
|
|
19
|
+
|
|
20
|
+
lease_manager.deactivate!
|
|
21
|
+
work.lease = Hyrax.persister.save(resource: lease_manager.lease)
|
|
22
|
+
Hyrax::AccessControlList(work).save
|
|
20
23
|
else
|
|
21
24
|
work.lease_visibility! # If the lease has lapsed, update the current visibility.
|
|
22
25
|
work.deactivate_lease!
|
|
@@ -4,6 +4,7 @@ export default class SortManager {
|
|
|
4
4
|
this.sorting_info = {}
|
|
5
5
|
this.initialize_sort()
|
|
6
6
|
this.element.data("current-order", this.order)
|
|
7
|
+
this.sort_property = this.element.data("sort-property")
|
|
7
8
|
this.save_manager = save_manager
|
|
8
9
|
this.initialize_alpha_sort_button()
|
|
9
10
|
}
|
|
@@ -38,9 +39,9 @@ export default class SortManager {
|
|
|
38
39
|
params() {
|
|
39
40
|
let params = {}
|
|
40
41
|
params[this.singular_class_name] = {
|
|
41
|
-
"version": this.version
|
|
42
|
-
"ordered_member_ids": this.order
|
|
42
|
+
"version": this.version
|
|
43
43
|
}
|
|
44
|
+
params[this.singular_class_name][this.sort_property] = this.order
|
|
44
45
|
params["_method"] = "PATCH"
|
|
45
46
|
return params
|
|
46
47
|
}
|
|
@@ -15,7 +15,7 @@ module Hyrax
|
|
|
15
15
|
# Removes a single embargo
|
|
16
16
|
def destroy
|
|
17
17
|
Hyrax::Actors::EmbargoActor.new(curation_concern).destroy
|
|
18
|
-
flash[:notice] = embargo_history(curation_concern)
|
|
18
|
+
flash[:notice] = embargo_history(curation_concern).last
|
|
19
19
|
if curation_concern.work? && work_has_file_set_members?(curation_concern)
|
|
20
20
|
redirect_to confirm_permission_path
|
|
21
21
|
else
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
module Hyrax
|
|
3
|
+
module ValkyrieDownloadsControllerBehavior
|
|
4
|
+
def show_valkyrie
|
|
5
|
+
file_set_id = params.require(:id)
|
|
6
|
+
file_set = Hyrax.query_service.find_by(id: file_set_id)
|
|
7
|
+
send_file_contents_valkyrie(file_set)
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
private
|
|
11
|
+
|
|
12
|
+
def send_file_contents_valkyrie(file_set)
|
|
13
|
+
response.headers["Accept-Ranges"] = "bytes"
|
|
14
|
+
self.status = 200
|
|
15
|
+
use = params.fetch(:file, :original_file).to_sym
|
|
16
|
+
file_metadata = find_file_metadata(file_set: file_set, use: use)
|
|
17
|
+
return unless stale?(last_modified: file_metadata.updated_at, template: false)
|
|
18
|
+
|
|
19
|
+
file = Hyrax.storage_adapter.find_by(id: file_metadata.file_identifier)
|
|
20
|
+
prepare_file_headers_valkyrie(metadata: file_metadata, file: file)
|
|
21
|
+
|
|
22
|
+
# Warning - using the range header will load the range selection in to memory
|
|
23
|
+
# this can cause memory bloat
|
|
24
|
+
if request.headers['Range']
|
|
25
|
+
file.rewind
|
|
26
|
+
send_data send_range_valkyrie(file: file), data_options(file_metadata)
|
|
27
|
+
else
|
|
28
|
+
send_file file.disk_path
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
def data_options(file_metadata)
|
|
33
|
+
{
|
|
34
|
+
type: file_metadata.mime_type,
|
|
35
|
+
filename: file_metadata.original_filename,
|
|
36
|
+
disposition: "inline",
|
|
37
|
+
status: status
|
|
38
|
+
}
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
def send_range_valkyrie(file:)
|
|
42
|
+
_, range = request.headers['Range'].split('bytes=')
|
|
43
|
+
from, to = range.split('-').map(&:to_i)
|
|
44
|
+
to = file.size - 1 unless to
|
|
45
|
+
length = to - from + 1
|
|
46
|
+
response.headers['Content-Range'] = "bytes #{from}-#{to}/#{file.size}"
|
|
47
|
+
response.headers['Content-Length'] = length.to_s
|
|
48
|
+
self.status = 206
|
|
49
|
+
file.read from # Seek to start of requested range
|
|
50
|
+
file.read length
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
def prepare_file_headers_valkyrie(metadata:, file:, inline: false)
|
|
54
|
+
inline_display = ActiveRecord::Type::Boolean.new.cast(params.fetch(:inline, inline))
|
|
55
|
+
response.headers["Content-Disposition"] = "#{inline_display ? 'inline' : 'attachment'}; filename=#{metadata.original_filename}"
|
|
56
|
+
response.headers["Content-Type"] = metadata.mime_type
|
|
57
|
+
response.headers["Content-Length"] ||= (file.try(:size) || metadata.size.first).to_s
|
|
58
|
+
# Prevent Rack::ETag from calculating a digest over body
|
|
59
|
+
response.headers["Last-Modified"] = metadata.updated_at.utc.strftime("%a, %d %b %Y %T GMT")
|
|
60
|
+
self.content_type = metadata.mime_type
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
def find_file_metadata(file_set:, use: :original_file)
|
|
64
|
+
use = :thumbnail_file if use == :thumbnail
|
|
65
|
+
begin
|
|
66
|
+
use = Hyrax::FileMetadata::Use.uri_for(use: use)
|
|
67
|
+
rescue ArgumentError
|
|
68
|
+
raise Hyrax::ObjectNotFoundError
|
|
69
|
+
end
|
|
70
|
+
results = Hyrax.custom_queries.find_many_file_metadata_by_use(resource: file_set, use: use)
|
|
71
|
+
results.first || raise(Hyrax::ObjectNotFoundError)
|
|
72
|
+
end
|
|
73
|
+
end
|
|
74
|
+
end
|
|
@@ -125,7 +125,7 @@ module Hyrax
|
|
|
125
125
|
end
|
|
126
126
|
|
|
127
127
|
def file_manager
|
|
128
|
-
@form =
|
|
128
|
+
@form = presenter
|
|
129
129
|
end
|
|
130
130
|
|
|
131
131
|
def inspect_work
|
|
@@ -180,15 +180,18 @@ module Hyrax
|
|
|
180
180
|
|
|
181
181
|
##
|
|
182
182
|
# @return [#errors]
|
|
183
|
+
# rubocop:disable Metrics/MethodLength
|
|
183
184
|
def create_valkyrie_work
|
|
184
185
|
form = build_form
|
|
185
|
-
|
|
186
|
+
# fallback to an empty hash to avoid: # NoMethodError: undefined method `has_key?` for nil:NilClass
|
|
187
|
+
original_input_params_for_form = params[hash_key_for_curation_concern] ? params[hash_key_for_curation_concern] : {}
|
|
188
|
+
return after_create_error(form_err_msg(form), original_input_params_for_form) unless form.validate(original_input_params_for_form)
|
|
186
189
|
|
|
187
190
|
result =
|
|
188
191
|
transactions['change_set.create_work']
|
|
189
192
|
.with_step_args(
|
|
190
193
|
'work_resource.add_to_parent' => { parent_id: params[:parent_id], user: current_user },
|
|
191
|
-
'work_resource.add_file_sets' => { uploaded_files: uploaded_files, file_set_params:
|
|
194
|
+
'work_resource.add_file_sets' => { uploaded_files: uploaded_files, file_set_params: original_input_params_for_form[:file_set] },
|
|
192
195
|
'change_set.set_user_as_depositor' => { user: current_user },
|
|
193
196
|
'work_resource.change_depositor' => { user: ::User.find_by_user_key(form.on_behalf_of) },
|
|
194
197
|
'work_resource.save_acl' => { permissions_params: form.input_params["permissions"] }
|
|
@@ -197,6 +200,7 @@ module Hyrax
|
|
|
197
200
|
@curation_concern = result.value_or { return after_create_error(transaction_err_msg(result)) }
|
|
198
201
|
after_create_response
|
|
199
202
|
end
|
|
203
|
+
# rubocop:enable Metrics/MethodLength
|
|
200
204
|
|
|
201
205
|
def update_valkyrie_work
|
|
202
206
|
form = build_form
|
|
@@ -370,10 +374,15 @@ module Hyrax
|
|
|
370
374
|
end
|
|
371
375
|
end
|
|
372
376
|
|
|
377
|
+
def format_error_messages(errors)
|
|
378
|
+
# the error may already be a string
|
|
379
|
+
errors.respond_to?(:messages) ? errors.messages.values.flatten.join("\n") : errors
|
|
380
|
+
end
|
|
381
|
+
|
|
373
382
|
def after_create_error(errors, original_input_params_for_form = nil)
|
|
374
383
|
respond_to do |wants|
|
|
375
384
|
wants.html do
|
|
376
|
-
flash[:error] = errors
|
|
385
|
+
flash[:error] = format_error_messages(errors)
|
|
377
386
|
rebuild_form(original_input_params_for_form) if original_input_params_for_form.present?
|
|
378
387
|
render 'new', status: :unprocessable_entity
|
|
379
388
|
end
|
|
@@ -402,7 +411,7 @@ module Hyrax
|
|
|
402
411
|
def after_update_error(errors)
|
|
403
412
|
respond_to do |wants|
|
|
404
413
|
wants.html do
|
|
405
|
-
flash[:error] = errors
|
|
414
|
+
flash[:error] = format_error_messages(errors)
|
|
406
415
|
build_form unless @form.is_a? Hyrax::ChangeSet
|
|
407
416
|
render 'edit', status: :unprocessable_entity
|
|
408
417
|
end
|
|
@@ -15,9 +15,8 @@ module Hyrax
|
|
|
15
15
|
add_breadcrumb t(:'hyrax.dashboard.breadcrumbs.admin'), hyrax.dashboard_path
|
|
16
16
|
add_breadcrumb t(:'hyrax.admin.sidebar.tasks'), '#'
|
|
17
17
|
add_breadcrumb t(:'hyrax.admin.sidebar.workflow_review'), request.path
|
|
18
|
-
|
|
19
|
-
@
|
|
20
|
-
@published_list = actionable_objects.select(&:published?)
|
|
18
|
+
assign_action_objects_params
|
|
19
|
+
@response = WorkflowResponse.new(actionable_objects.to_a, actionable_objects.total_count, current_page, per_page, under_review?)
|
|
21
20
|
end
|
|
22
21
|
|
|
23
22
|
private
|
|
@@ -30,5 +29,51 @@ module Hyrax
|
|
|
30
29
|
@actionable_objects ||=
|
|
31
30
|
Hyrax::Workflow::ActionableObjects.new(user: current_user)
|
|
32
31
|
end
|
|
32
|
+
|
|
33
|
+
def current_page
|
|
34
|
+
@page ||= params.fetch('page', 1).to_i
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
def per_page
|
|
38
|
+
@per_page ||= params.fetch('per_page', 10).to_i
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
def assign_action_objects_params
|
|
42
|
+
actionable_objects.page = current_page
|
|
43
|
+
actionable_objects.per_page = per_page
|
|
44
|
+
actionable_objects.workflow_state_filter = (under_review? ? '!' : '') + deposited_workflow_state_name
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
def under_review?
|
|
48
|
+
@under_review = params['state'] != 'published'
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
class WorkflowResponse
|
|
52
|
+
attr_reader :total_count
|
|
53
|
+
attr_reader :current_page
|
|
54
|
+
attr_reader :per_page
|
|
55
|
+
attr_reader :docs
|
|
56
|
+
attr_reader :under_review
|
|
57
|
+
|
|
58
|
+
def initialize(docs, total_count, page, per_page, under_review)
|
|
59
|
+
@docs = docs
|
|
60
|
+
@total_count = total_count
|
|
61
|
+
@per_page = per_page.to_i
|
|
62
|
+
@current_page = page.to_i
|
|
63
|
+
@under_review = under_review
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
def total_pages
|
|
67
|
+
(total_count.to_f / per_page).ceil
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
def limit_value
|
|
71
|
+
docs.length
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
def viewing_under_review?
|
|
75
|
+
under_review
|
|
76
|
+
end
|
|
77
|
+
end
|
|
33
78
|
end
|
|
34
79
|
end
|
|
@@ -52,7 +52,7 @@ module Hyrax
|
|
|
52
52
|
def update_document(obj)
|
|
53
53
|
interpret_visiblity_params(obj)
|
|
54
54
|
obj.attributes = work_params(admin_set_id: obj.admin_set_id).except(*visibility_params)
|
|
55
|
-
obj.date_modified =
|
|
55
|
+
obj.date_modified = TimeService.time_in_utc
|
|
56
56
|
|
|
57
57
|
InheritPermissionsJob.perform_now(obj)
|
|
58
58
|
VisibilityCopyJob.perform_now(obj)
|
|
@@ -60,11 +60,30 @@ module Hyrax
|
|
|
60
60
|
obj.save
|
|
61
61
|
end
|
|
62
62
|
|
|
63
|
+
def valkyrie_update_document(obj)
|
|
64
|
+
form = form_class.new(obj, current_ability, nil)
|
|
65
|
+
return unless form.validate(params[form_class.model_class.model_name.param_key])
|
|
66
|
+
|
|
67
|
+
cleanup_form_fields form
|
|
68
|
+
|
|
69
|
+
result = transactions['change_set.update_work']
|
|
70
|
+
.with_step_args('work_resource.save_acl' => { permissions_params: form.input_params["permissions"] })
|
|
71
|
+
.call(form)
|
|
72
|
+
obj = result.value!
|
|
73
|
+
|
|
74
|
+
InheritPermissionsJob.perform_now(obj)
|
|
75
|
+
VisibilityCopyJob.perform_now(obj)
|
|
76
|
+
end
|
|
77
|
+
|
|
63
78
|
def update
|
|
64
79
|
case params["update_type"]
|
|
65
80
|
when "update"
|
|
66
81
|
batch.each do |doc_id|
|
|
67
|
-
|
|
82
|
+
if Hyrax.config.use_valkyrie?
|
|
83
|
+
valkyrie_update_document(Hyrax.query_service.find_by(id: doc_id))
|
|
84
|
+
else
|
|
85
|
+
update_document(Hyrax.query_service.find_by_alternate_identifier(alternate_identifier: doc_id, use_valkyrie: false))
|
|
86
|
+
end
|
|
68
87
|
end
|
|
69
88
|
flash[:notice] = "Batch update complete"
|
|
70
89
|
after_update
|
|
@@ -97,7 +116,7 @@ module Hyrax
|
|
|
97
116
|
end
|
|
98
117
|
|
|
99
118
|
def form_class
|
|
100
|
-
Forms::BatchEditForm
|
|
119
|
+
Hyrax.config.use_valkyrie? ? Forms::ResourceBatchEditForm : Forms::BatchEditForm
|
|
101
120
|
end
|
|
102
121
|
|
|
103
122
|
def terms
|
|
@@ -105,7 +124,7 @@ module Hyrax
|
|
|
105
124
|
end
|
|
106
125
|
|
|
107
126
|
def work_params(extra_params = {})
|
|
108
|
-
work_params = params[form_class.model_name.param_key] || ActionController::Parameters.new
|
|
127
|
+
work_params = params[form_class.model_class.model_name.param_key] || ActionController::Parameters.new
|
|
109
128
|
form_class.model_attributes(work_params.merge(extra_params))
|
|
110
129
|
end
|
|
111
130
|
|
|
@@ -135,5 +154,15 @@ module Hyrax
|
|
|
135
154
|
redirect_to hyrax.dashboard_path
|
|
136
155
|
end
|
|
137
156
|
end
|
|
157
|
+
|
|
158
|
+
# Clean up form fields
|
|
159
|
+
# @param form Hyrax::Froms::ResourceBatchEditForm
|
|
160
|
+
def cleanup_form_fields(form)
|
|
161
|
+
form.lease = nil if form.lease && form.lease.fields['lease_expiration_date'].nil?
|
|
162
|
+
form.embargo = nil if form.embargo && form.embargo.fields['embargo_release_date'].nil?
|
|
163
|
+
form.fields.keys.each do |k|
|
|
164
|
+
form.fields[k] = nil if form.fields[k].is_a?(Array) && form.fields[k].blank?
|
|
165
|
+
end
|
|
166
|
+
end
|
|
138
167
|
end
|
|
139
168
|
end
|
|
@@ -3,6 +3,7 @@ module Hyrax
|
|
|
3
3
|
class DownloadsController < ApplicationController
|
|
4
4
|
include Hydra::Controller::DownloadBehavior
|
|
5
5
|
include Hyrax::LocalFileDownloadsControllerBehavior
|
|
6
|
+
include Hyrax::ValkyrieDownloadsControllerBehavior
|
|
6
7
|
include Hyrax::WorkflowsHelper # Provides #workflow_restriction?
|
|
7
8
|
|
|
8
9
|
def self.default_content_path
|
|
@@ -12,6 +13,8 @@ module Hyrax
|
|
|
12
13
|
# Render the 404 page if the file doesn't exist.
|
|
13
14
|
# Otherwise renders the file.
|
|
14
15
|
def show
|
|
16
|
+
return show_valkyrie if Hyrax.config.use_valkyrie?
|
|
17
|
+
|
|
15
18
|
case file
|
|
16
19
|
when ActiveFedora::File
|
|
17
20
|
# For original files that are stored in fedora
|
|
@@ -39,7 +42,11 @@ module Hyrax
|
|
|
39
42
|
end
|
|
40
43
|
|
|
41
44
|
def file_set_parent(file_set_id)
|
|
42
|
-
file_set =
|
|
45
|
+
file_set = if defined?(Wings) && Hyrax.metadata_adapter.is_a?(Wings::Valkyrie::MetadataAdapter)
|
|
46
|
+
Hyrax.query_service.find_by_alternate_identifier(alternate_identifier: file_set_id, use_valkyrie: Hyrax.config.use_valkyrie?)
|
|
47
|
+
else
|
|
48
|
+
Hyrax.query_service.find_by(id: file_set_id)
|
|
49
|
+
end
|
|
43
50
|
@parent ||=
|
|
44
51
|
case file_set
|
|
45
52
|
when Hyrax::Resource
|