hyrax 3.0.0.pre.rc3 → 3.0.0.pre.rc4
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/.dassie/config/locales/hyrax.es.yml +3 -1
- data/.dassie/config/tinymce.yml +3 -2
- data/.regen +1 -1
- data/CONTAINERS.md +12 -0
- data/Dockerfile +10 -8
- data/README.md +5 -0
- data/app/assets/javascripts/hyrax.js +1 -0
- data/app/assets/javascripts/hyrax/app.js.erb +0 -10
- data/app/assets/stylesheets/hyrax/_catalog.scss +1 -0
- data/app/assets/stylesheets/hyrax/_representative-media.scss +2 -2
- data/app/controllers/hyrax/file_sets_controller.rb +55 -4
- data/app/controllers/hyrax/my_controller.rb +1 -1
- data/app/forms/hyrax/forms/file_manager_form.rb +9 -2
- data/app/helpers/hyrax/ability_helper.rb +2 -1
- data/app/helpers/hyrax/contact_form_helper.rb +1 -2
- data/app/helpers/hyrax/hyrax_helper_behavior.rb +16 -1
- data/app/helpers/hyrax/workflows_helper.rb +42 -0
- data/app/models/concerns/hyrax/ability.rb +2 -2
- data/app/models/hyrax/contact_form.rb +1 -7
- data/app/models/hyrax/permission_template.rb +14 -0
- data/app/models/proxy_deposit_request.rb +8 -4
- data/app/presenters/hyrax/file_set_presenter.rb +10 -0
- data/app/presenters/hyrax/google_scholar_presenter.rb +86 -0
- data/app/presenters/hyrax/work_show_presenter.rb +1 -1
- data/app/search_builders/hyrax/dashboard/nested_collections_search_builder.rb +0 -24
- data/app/services/hyrax/admin_set_member_service.rb +1 -1
- data/app/services/hyrax/change_content_depositor_service.rb +29 -7
- data/app/services/hyrax/collections/permissions_service.rb +5 -6
- data/app/services/hyrax/custom_queries/find_ids_by_model.rb +37 -0
- data/app/services/hyrax/edit_permissions_service.rb +201 -0
- data/app/services/hyrax/identifier/dispatcher.rb +1 -1
- data/app/services/hyrax/listeners/active_fedora_acl_index_listener.rb +26 -0
- data/app/services/hyrax/listeners/metadata_index_listener.rb +5 -1
- data/app/views/catalog/_index_header_list_collection.html.erb +1 -1
- data/app/views/catalog/_index_header_list_default.html.erb +1 -1
- data/app/views/catalog/_index_list_default.html.erb +1 -1
- data/app/views/hyrax/admin/admin_sets/_show_document_list_row.html.erb +1 -1
- data/app/views/hyrax/base/_currently_shared.html.erb +46 -0
- data/app/views/hyrax/base/_form_share.html.erb +5 -33
- data/app/views/hyrax/base/_show_actions.html.erb +16 -14
- data/app/views/hyrax/base/unavailable.html.erb +1 -1
- data/app/views/hyrax/batch_edits/_currently_shared.html.erb +8 -0
- data/app/views/hyrax/collections/_show_document_list_row.html.erb +1 -1
- data/app/views/hyrax/collections/_sort_and_per_page.html.erb +1 -1
- data/app/views/hyrax/contact_form/new.html.erb +3 -1
- data/app/views/hyrax/dashboard/collections/_show_document_list_menu.html.erb +1 -1
- data/app/views/hyrax/dashboard/collections/_show_document_list_row.html.erb +1 -1
- data/app/views/hyrax/dashboard/collections/_sort_and_per_page.html.erb +1 -1
- data/app/views/hyrax/file_sets/_actions.html.erb +1 -2
- data/app/views/hyrax/file_sets/_permission_form.html.erb +2 -31
- data/app/views/hyrax/file_sets/_show_actions.html.erb +1 -1
- data/app/views/hyrax/file_sets/media_display/_audio.html.erb +2 -2
- data/app/views/hyrax/file_sets/media_display/_default.html.erb +1 -1
- data/app/views/hyrax/file_sets/media_display/_image.html.erb +1 -1
- data/app/views/hyrax/file_sets/media_display/_office_document.html.erb +1 -1
- data/app/views/hyrax/file_sets/media_display/_pdf.html.erb +2 -2
- data/app/views/hyrax/file_sets/media_display/_video.html.erb +2 -2
- data/app/views/hyrax/my/_sort_and_per_page.html.erb +1 -1
- data/app/views/layouts/_head_tag_content.html.erb +1 -1
- data/app/views/shared/_citations.html.erb +16 -12
- data/bin/hyrax-entrypoint.sh +9 -2
- data/chart/hyrax/Chart.yaml +2 -2
- data/config/initializers/listeners.rb +1 -0
- data/config/locales/hyrax.de.yml +71 -13
- data/config/locales/hyrax.en.yml +31 -19
- data/config/locales/hyrax.es.yml +60 -2
- data/config/locales/hyrax.fr.yml +60 -2
- data/config/locales/hyrax.it.yml +60 -2
- data/config/locales/hyrax.pt-BR.yml +60 -2
- data/config/locales/hyrax.zh.yml +60 -2
- data/documentation/developing-your-hyrax-based-app.md +2 -2
- data/hyrax.gemspec +2 -2
- data/lib/generators/hyrax/templates/catalog_controller.rb +4 -0
- data/lib/generators/hyrax/templates/config/tinymce.yml +3 -2
- data/lib/generators/hyrax/work_resource/work_resource_generator.rb +11 -0
- data/lib/hyrax/configuration.rb +14 -0
- data/lib/hyrax/engine.rb +1 -0
- data/lib/hyrax/version.rb +1 -1
- data/lib/wings.rb +1 -0
- data/lib/wings/services/custom_queries/find_ids_by_model.rb +46 -0
- data/lib/wings/setup.rb +1 -0
- data/template.rb +1 -1
- metadata +21 -7
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 684ca77fe907962abffc140cd9b96081584650df75282c35e0ccd6fc041473ca
|
|
4
|
+
data.tar.gz: 661b6c451fa1fbd7f25d91ab56331e88827a4f3e88fddb85bbcb1623a7d9f068
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 2f884204185783729a1d7a8d00dfa41c27e592097749f773418cdecf033aff2804e853ccefadf48d7d0c7c18da7576d3d1fa30aba05a58e687814f6d337b8c7c
|
|
7
|
+
data.tar.gz: ae5b51cbb3949d03967a5d4aa1650aaf77c8776d799df5456db09ff4b615ed8665699277f092e50267277afb654ca09e75200863f02f91c92b0f8f08465c0a60
|
|
@@ -19,6 +19,7 @@ es:
|
|
|
19
19
|
date_created_tesim: Fecha de Creacion
|
|
20
20
|
date_modified_dtsi: Fecha Modificada
|
|
21
21
|
date_uploaded_dtsi: Fecha de Subida
|
|
22
|
+
depositor_tesim: Propietario
|
|
22
23
|
description_tesim: Descripción
|
|
23
24
|
file_format_tesim: Formato de Archivo
|
|
24
25
|
identifier_tesim: Identificador
|
|
@@ -35,6 +36,7 @@ es:
|
|
|
35
36
|
date_created_tesim: Fecha de Creacion
|
|
36
37
|
date_modified_dtsi: Fecha Modificada
|
|
37
38
|
date_uploaded_dtsi: Fecha de Subida
|
|
39
|
+
depositor_tesim: Propietario
|
|
38
40
|
description_tesim: Descripción
|
|
39
41
|
file_format_tesim: Formato de Archivo
|
|
40
42
|
identifier_tesim: Identificador
|
|
@@ -51,7 +53,7 @@ es:
|
|
|
51
53
|
suffix: "@example.org"
|
|
52
54
|
footer:
|
|
53
55
|
copyright_html: "<strong>Copyright © 2018 Samvera</strong> bajo licencia de Apache, Version 2.0"
|
|
54
|
-
service_html: Un servicio de <a href="http://samvera.org/" class="navbar-link" target="_blank">Samvera
|
|
56
|
+
service_html: Un servicio de <a href="http://samvera.org/" class="navbar-link" target="_blank">Samvera</a>.
|
|
55
57
|
institution_name: institución
|
|
56
58
|
institution_name_full: El nombre de la institución
|
|
57
59
|
product_name: Hyrax
|
data/.dassie/config/tinymce.yml
CHANGED
|
@@ -3,10 +3,11 @@ default: &default
|
|
|
3
3
|
content_block:
|
|
4
4
|
<<: *default
|
|
5
5
|
menubar: false
|
|
6
|
-
toolbar1: styleselect | bold italic |
|
|
7
|
-
toolbar2: table | fullscreen |
|
|
6
|
+
toolbar1: styleselect | bold italic | undo redo
|
|
7
|
+
toolbar2: table | fullscreen | image
|
|
8
8
|
plugins:
|
|
9
9
|
- table
|
|
10
10
|
- fullscreen
|
|
11
|
+
- image
|
|
11
12
|
custom:
|
|
12
13
|
<<: *default
|
data/.regen
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
|
|
1
|
+
36
|
data/CONTAINERS.md
CHANGED
|
@@ -42,6 +42,8 @@ To stop the containers for the Hyrax-based application, type <kbd>Ctrl</kbd>+<kb
|
|
|
42
42
|
|
|
43
43
|
_**Note:** Starting and stopping Docker in this way will preserve your data between restarts._
|
|
44
44
|
|
|
45
|
+
_**Note:** I (Jeremy) encountered a problem using `docker-compose build`. I ran `bundle update` in `./hyrax` as well as within `./hyrax/.dassie`. That appeared to clear up the problem of a failure to build a gem._
|
|
46
|
+
|
|
45
47
|
### Code Changes and Testing
|
|
46
48
|
|
|
47
49
|
With `docker-compose up` running, any changes you make to your cloned Hyrax code-base should show up in `http://localhost:3000`; There may be cases where you need to restart your test application (e.g. stop the containers and start them up again).
|
|
@@ -95,6 +97,16 @@ docker-compose exec -w /app/samvera/hyrax-engine app sh -c "bundle exec rake -T"
|
|
|
95
97
|
|
|
96
98
|
In the two examples, note the difference in the `-w` switch. In the first case, it's referencing the Hyrax-based application. In the latter case, it's referencing the Hyrax engine.
|
|
97
99
|
|
|
100
|
+
### Debugging
|
|
101
|
+
|
|
102
|
+
I (Jeremy) find myself wanting to debug the application. This requires a somewhat different approach than running Hyrax bare-metal. You need to use `docker attach` to debug the running docker instance.
|
|
103
|
+
|
|
104
|
+
1. With `docker-compose up` running open a new Terminal session.
|
|
105
|
+
2. In that new Terminal session, using `docker container ls` find the "CONTAINER ID" for the `hyrax-engine-dev`.
|
|
106
|
+
3. With the "CONTAINER ID", run `docker attach <CONTAINER ID>`.
|
|
107
|
+
|
|
108
|
+
This advice comes from [Debugging Rails App With Docker Compose: How to use Byebug in a dockerized rails app](https://medium.com/gogox-technology/debugging-rails-app-with-docker-compose-39a3767962f4).
|
|
109
|
+
|
|
98
110
|
<!-- NOTE: This title is referenced in the top-level documentation/developing-your-hyrax-based-app.md. Keep that in mind if you change it. -->
|
|
99
111
|
## Docker Image for Hyrax-based Applications
|
|
100
112
|
|
data/Dockerfile
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
ARG RUBY_VERSION=2.7.2
|
|
2
|
-
|
|
2
|
+
# lock at alpine3.12 because 3.13 has dns resolver problems
|
|
3
|
+
FROM ruby:$RUBY_VERSION-alpine3.12 as hyrax-base
|
|
3
4
|
|
|
4
5
|
ARG DATABASE_APK_PACKAGE="postgresql-dev"
|
|
5
6
|
ARG EXTRA_APK_PACKAGES="git"
|
|
@@ -50,8 +51,8 @@ ENV HYRAX_ENGINE_PATH /app/samvera/hyrax-engine
|
|
|
50
51
|
COPY --chown=1001:101 $APP_PATH /app/samvera/hyrax-webapp
|
|
51
52
|
COPY --chown=1001:101 . /app/samvera/hyrax-engine
|
|
52
53
|
|
|
53
|
-
RUN cd /app/samvera/hyrax-engine
|
|
54
|
-
RUN DB_ADAPTER=nulldb DATABASE_URL='postgresql://fake' bundle exec rake
|
|
54
|
+
RUN cd /app/samvera/hyrax-engine && bundle install --jobs "$(nproc)"
|
|
55
|
+
RUN DB_ADAPTER=nulldb DATABASE_URL='postgresql://fake' bundle exec rake yarn:install
|
|
55
56
|
|
|
56
57
|
|
|
57
58
|
FROM hyrax-engine-dev as hyrax-engine-dev-worker
|
|
@@ -65,11 +66,12 @@ RUN apk --no-cache add bash \
|
|
|
65
66
|
mediainfo
|
|
66
67
|
USER app
|
|
67
68
|
|
|
68
|
-
RUN
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
69
|
+
RUN mkdir -p /app/fits && \
|
|
70
|
+
cd /app/fits && \
|
|
71
|
+
wget https://github.com/harvard-lts/fits/releases/download/1.5.0/fits-1.5.0.zip -O fits.zip && \
|
|
72
|
+
unzip fits.zip && \
|
|
73
|
+
rm fits.zip && \
|
|
74
|
+
chmod a+x /app/fits/fits.sh
|
|
73
75
|
ENV PATH="${PATH}:/app/fits"
|
|
74
76
|
|
|
75
77
|
CMD bundle exec sidekiq
|
data/README.md
CHANGED
|
@@ -17,6 +17,7 @@ Jump in: [](http://slack.samv
|
|
|
17
17
|
|
|
18
18
|
* [What is Hyrax?](#what-is-hyrax)
|
|
19
19
|
* [Feature Documentation](#feature-documentation)
|
|
20
|
+
* [Support Policies](#support-policies)
|
|
20
21
|
* [Help](#help)
|
|
21
22
|
* [Working with Hyrax](#working-with-hyrax)
|
|
22
23
|
* [Developing the Hyrax Engine](#developing-the-hyrax-engine)
|
|
@@ -52,6 +53,10 @@ Hyrax offers the ability to:
|
|
|
52
53
|
* For general information about Hyrax: [Hyrax Site](https://hyrax.samvera.org/)
|
|
53
54
|
* A note about [versions of Hyrax](./documentation/note-about-versions.md)
|
|
54
55
|
|
|
56
|
+
## Support Policies
|
|
57
|
+
|
|
58
|
+
* Hyrax 3.x supports the latest browser versions for Chrome, Firefox, Edge, and Safari.
|
|
59
|
+
|
|
55
60
|
## Help
|
|
56
61
|
|
|
57
62
|
The Samvera community is here to help. Please see our [support guide](./.github/SUPPORT.md).
|
|
@@ -18,22 +18,12 @@ Hyrax = {
|
|
|
18
18
|
this.collectionTypeEditor();
|
|
19
19
|
this.collectionUtilities();
|
|
20
20
|
this.adminStatisticsGraphs();
|
|
21
|
-
this.tinyMCE();
|
|
22
21
|
this.sortAndPerPage();
|
|
23
22
|
this.sidebar();
|
|
24
23
|
this.batchSelect();
|
|
25
24
|
this.internationalizationHelper();
|
|
26
25
|
},
|
|
27
26
|
|
|
28
|
-
// Add WYSIWYG editor functionality to editable content blocks
|
|
29
|
-
tinyMCE: function() {
|
|
30
|
-
if (typeof tinyMCE === "undefined")
|
|
31
|
-
return;
|
|
32
|
-
tinyMCE.init({
|
|
33
|
-
selector: 'textarea.tinymce'
|
|
34
|
-
});
|
|
35
|
-
},
|
|
36
|
-
|
|
37
27
|
// The AdminSet edit page
|
|
38
28
|
adminSetEditor: function() {
|
|
39
29
|
var AdminSetControls = require('hyrax/admin/admin_set_controls');
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
module Hyrax
|
|
3
3
|
class FileSetsController < ApplicationController
|
|
4
|
+
rescue_from WorkflowAuthorizationException, with: :render_unavailable
|
|
5
|
+
|
|
4
6
|
include Blacklight::Base
|
|
5
7
|
include Blacklight::AccessControls::Catalog
|
|
6
8
|
include Hyrax::Breadcrumbs
|
|
@@ -42,9 +44,11 @@ module Hyrax
|
|
|
42
44
|
|
|
43
45
|
# GET /concern/parent/:parent_id/file_sets/:id
|
|
44
46
|
def show
|
|
47
|
+
presenter
|
|
48
|
+
guard_for_workflow_restriction_on!(parent: presenter.parent)
|
|
45
49
|
respond_to do |wants|
|
|
46
|
-
wants.html
|
|
47
|
-
wants.json
|
|
50
|
+
wants.html
|
|
51
|
+
wants.json
|
|
48
52
|
additional_response_formats(wants)
|
|
49
53
|
end
|
|
50
54
|
end
|
|
@@ -52,12 +56,15 @@ module Hyrax
|
|
|
52
56
|
# DELETE /concern/file_sets/:id
|
|
53
57
|
def destroy
|
|
54
58
|
parent = curation_concern.parent
|
|
59
|
+
guard_for_workflow_restriction_on!(parent: parent)
|
|
55
60
|
actor.destroy
|
|
56
61
|
redirect_to [main_app, parent], notice: view_context.t('hyrax.file_sets.asset_deleted_flash.message')
|
|
57
62
|
end
|
|
58
63
|
|
|
59
64
|
# PATCH /concern/file_sets/:id
|
|
60
65
|
def update
|
|
66
|
+
parent = curation_concern.parent
|
|
67
|
+
guard_for_workflow_restriction_on!(parent: parent)
|
|
61
68
|
if attempt_update
|
|
62
69
|
after_update_response
|
|
63
70
|
else
|
|
@@ -146,11 +153,23 @@ module Hyrax
|
|
|
146
153
|
|
|
147
154
|
def initialize_edit_form
|
|
148
155
|
@parent = @file_set.in_objects.first
|
|
156
|
+
guard_for_workflow_restriction_on!(parent: @parent)
|
|
149
157
|
original = @file_set.original_file
|
|
150
158
|
@version_list = Hyrax::VersionListPresenter.new(original ? original.versions.all : [])
|
|
151
159
|
@groups = current_user.groups
|
|
152
160
|
end
|
|
153
161
|
|
|
162
|
+
include WorkflowsHelper # Provides #workflow_restriction?, and yes I mean include not helper; helper exposes the module methods
|
|
163
|
+
# @param parent [Hyrax::WorkShowPresenter, GenericWork, #suppressed?] an
|
|
164
|
+
# object on which we check if the current can take action.
|
|
165
|
+
#
|
|
166
|
+
# @return true if we did not encounter any workflow restrictions
|
|
167
|
+
# @raise WorkflowAuthorizationException if we encountered some workflow_restriction
|
|
168
|
+
def guard_for_workflow_restriction_on!(parent:)
|
|
169
|
+
return true unless workflow_restriction?(parent, ability: current_ability)
|
|
170
|
+
raise WorkflowAuthorizationException
|
|
171
|
+
end
|
|
172
|
+
|
|
154
173
|
def actor
|
|
155
174
|
@actor ||= Hyrax::Actors::FileSetActor.new(@file_set, current_user)
|
|
156
175
|
end
|
|
@@ -161,8 +180,10 @@ module Hyrax
|
|
|
161
180
|
|
|
162
181
|
def presenter
|
|
163
182
|
@presenter ||= begin
|
|
164
|
-
|
|
165
|
-
|
|
183
|
+
presenter = show_presenter.new(curation_concern_document, current_ability, request)
|
|
184
|
+
raise WorkflowAuthorizationException if presenter.parent.blank?
|
|
185
|
+
presenter
|
|
186
|
+
end
|
|
166
187
|
end
|
|
167
188
|
|
|
168
189
|
def curation_concern_document
|
|
@@ -200,5 +221,35 @@ module Hyrax
|
|
|
200
221
|
end
|
|
201
222
|
File.join(theme, layout)
|
|
202
223
|
end
|
|
224
|
+
|
|
225
|
+
# rubocop:disable Metrics/MethodLength
|
|
226
|
+
def render_unavailable
|
|
227
|
+
message = I18n.t("hyrax.workflow.unauthorized_parent")
|
|
228
|
+
respond_to do |wants|
|
|
229
|
+
wants.html do
|
|
230
|
+
unavailable_presenter
|
|
231
|
+
flash[:notice] = message
|
|
232
|
+
render 'unavailable', status: :unauthorized
|
|
233
|
+
end
|
|
234
|
+
wants.json do
|
|
235
|
+
render plain: message, status: :unauthorized
|
|
236
|
+
end
|
|
237
|
+
additional_response_formats(wants)
|
|
238
|
+
wants.ttl do
|
|
239
|
+
render plain: message, status: :unauthorized
|
|
240
|
+
end
|
|
241
|
+
wants.jsonld do
|
|
242
|
+
render plain: message, status: :unauthorized
|
|
243
|
+
end
|
|
244
|
+
wants.nt do
|
|
245
|
+
render plain: message, status: :unauthorized
|
|
246
|
+
end
|
|
247
|
+
end
|
|
248
|
+
end
|
|
249
|
+
# rubocop:enable Metrics/MethodLength
|
|
250
|
+
|
|
251
|
+
def unavailable_presenter
|
|
252
|
+
@presenter ||= show_presenter.new(::SolrDocument.find(params[:id]), current_ability, request)
|
|
253
|
+
end
|
|
203
254
|
end
|
|
204
255
|
end
|
|
@@ -53,7 +53,7 @@ module Hyrax
|
|
|
53
53
|
# TODO: Extract a presenter object that wrangles all of these instance variables.
|
|
54
54
|
def prepare_instance_variables_for_batch_control_display
|
|
55
55
|
# set up some parameters for allowing the batch controls to show appropriately
|
|
56
|
-
max_batch_size =
|
|
56
|
+
max_batch_size = Hyrax.config.range_for_number_of_results_to_display_per_page.max
|
|
57
57
|
count_on_page = @document_list.count { |doc| batch.index(doc.id) }
|
|
58
58
|
@disable_select_all = @document_list.count > max_batch_size
|
|
59
59
|
@result_set_size = @response.response["numFound"]
|
|
@@ -6,10 +6,17 @@ module Hyrax
|
|
|
6
6
|
self.terms = []
|
|
7
7
|
delegate :id, :thumbnail_id, :representative_id, :to_s, to: :model
|
|
8
8
|
attr_reader :current_ability, :request
|
|
9
|
-
|
|
9
|
+
|
|
10
|
+
##
|
|
11
|
+
# @param work [Object] a work with members
|
|
12
|
+
# @param ability [::Ability] the current ability
|
|
13
|
+
# @param member_factory [Class] the member_presenter factory object to use
|
|
14
|
+
# when constructing presenters
|
|
15
|
+
def initialize(work, ability, member_factory: MemberPresenterFactory)
|
|
10
16
|
super(work)
|
|
11
17
|
@current_ability = ability
|
|
12
18
|
@request = nil
|
|
19
|
+
@member_factory = member_factory
|
|
13
20
|
end
|
|
14
21
|
|
|
15
22
|
def version
|
|
@@ -21,7 +28,7 @@ module Hyrax
|
|
|
21
28
|
private
|
|
22
29
|
|
|
23
30
|
def member_presenter_factory
|
|
24
|
-
|
|
31
|
+
@member_factory.new(model, current_ability)
|
|
25
32
|
end
|
|
26
33
|
end
|
|
27
34
|
end
|
|
@@ -17,8 +17,7 @@ module Hyrax
|
|
|
17
17
|
#
|
|
18
18
|
# @see https://apidock.com/rails/ActionView/Helpers/FormOptionsHelper/options_for_select
|
|
19
19
|
def contact_form_issue_type_options
|
|
20
|
-
|
|
21
|
-
types.unshift([t('hyrax.contact_form.select_type'), nil])
|
|
20
|
+
Hyrax::ContactForm.issue_types_for_locale.dup
|
|
22
21
|
end
|
|
23
22
|
end
|
|
24
23
|
end
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
# coding: utf-8
|
|
1
2
|
# frozen_string_literal: true
|
|
2
3
|
module Hyrax
|
|
3
4
|
module HyraxHelperBehavior
|
|
@@ -17,6 +18,7 @@ module Hyrax
|
|
|
17
18
|
include Hyrax::MembershipHelper
|
|
18
19
|
include Hyrax::PermissionLevelsHelper
|
|
19
20
|
include Hyrax::WorkFormHelper
|
|
21
|
+
include Hyrax::WorkflowsHelper
|
|
20
22
|
|
|
21
23
|
# Which translations are available for the user to select
|
|
22
24
|
# @return [Hash{String => String}] locale abbreviations as keys and flags as values
|
|
@@ -192,6 +194,7 @@ module Hyrax
|
|
|
192
194
|
# *Sometimes* a Blacklight index field helper_method
|
|
193
195
|
# @param [String,User,Hash{Symbol=>Array}] args if a hash, the user_key must be under :value
|
|
194
196
|
# @return [ActiveSupport::SafeBuffer] the html_safe link
|
|
197
|
+
# rubocop:disable Metrics/CyclomaticComplexity
|
|
195
198
|
def link_to_profile(args)
|
|
196
199
|
user_or_key = args.is_a?(Hash) ? args[:value].first : args
|
|
197
200
|
user = case user_or_key
|
|
@@ -202,8 +205,20 @@ module Hyrax
|
|
|
202
205
|
end
|
|
203
206
|
return user_or_key if user.nil?
|
|
204
207
|
text = user.respond_to?(:name) ? user.name : user_or_key
|
|
205
|
-
|
|
208
|
+
user_path_params = [user]
|
|
209
|
+
|
|
210
|
+
# Oh the antics, because in some cases (stares at
|
|
211
|
+
# jobs/content_deposit_event_job_spec.rb) the controller is nil,
|
|
212
|
+
# which means calling params will raise a NoMethodError. I also
|
|
213
|
+
# suppose it's possible that the controller won't have a set
|
|
214
|
+
# params. These precautions should help with that. I'd love to
|
|
215
|
+
# use params[:locale] in this case, but the & try syntax doesn't
|
|
216
|
+
# work with that. So you get this lovely bit of logic.
|
|
217
|
+
locale = controller&.params&.fetch(:locale, nil) || controller&.params&.fetch('locale', nil)
|
|
218
|
+
user_path_params << { locale: locale } if locale
|
|
219
|
+
link_to text, Hyrax::Engine.routes.url_helpers.user_path(*user_path_params)
|
|
206
220
|
end
|
|
221
|
+
# rubocop:enable Metrics/CyclomaticComplexity
|
|
207
222
|
|
|
208
223
|
# A Blacklight index field helper_method
|
|
209
224
|
# @param [Hash] options from blacklight helper_method invocation. Maps license URIs to links with labels.
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
module Hyrax
|
|
3
|
+
module WorkflowsHelper
|
|
4
|
+
# Does a workflow restriction exist for the given :object and
|
|
5
|
+
# given :ability?
|
|
6
|
+
#
|
|
7
|
+
# @note If the object responds to a :workflow_restriction?, we'll
|
|
8
|
+
# use that answer.
|
|
9
|
+
#
|
|
10
|
+
# This method doesn't answer what kind of restriction is in place
|
|
11
|
+
# (that requires a far more nuanced permissioning system than
|
|
12
|
+
# Hyrax presently has). Instead, it answers is there one in
|
|
13
|
+
# place. From that answer, you may opt out of rendering a region
|
|
14
|
+
# on a view (e.g. don't show links to the edit page).
|
|
15
|
+
#
|
|
16
|
+
# @param object [Object]
|
|
17
|
+
# @param ability [Ability]
|
|
18
|
+
#
|
|
19
|
+
# @return [false] when there are no applicable workflow restrictions
|
|
20
|
+
#
|
|
21
|
+
# @return [true] when there is an applicable workflow restriction,
|
|
22
|
+
# and you likely want to not render something.
|
|
23
|
+
#
|
|
24
|
+
# @note This is Jeremy, I encourage you to look at the views that
|
|
25
|
+
# call this method to understand the conceptual space this
|
|
26
|
+
# method covers.
|
|
27
|
+
#
|
|
28
|
+
# @todo As I noodle on this, I'm fairly certain we should be
|
|
29
|
+
# registering a CanCan ability check. I believe in
|
|
30
|
+
# promoting this to a helper method it will be easier to
|
|
31
|
+
# incorporate this into an ability.
|
|
32
|
+
#
|
|
33
|
+
# @see Hyrax::FileSetsController for non-view usage.
|
|
34
|
+
def workflow_restriction?(object, ability: current_ability)
|
|
35
|
+
return false if object.nil? # Yup, we may get nil, and there's no restriction on nil
|
|
36
|
+
return object.workflow_restriction? if object.respond_to?(:workflow_restriction?)
|
|
37
|
+
return false if ability.can?(:edit, object)
|
|
38
|
+
return object.suppressed? if object.respond_to?(:suppressed?)
|
|
39
|
+
false
|
|
40
|
+
end
|
|
41
|
+
end
|
|
42
|
+
end
|