hyrax 3.0.0.pre.rc3 → 3.0.0.pre.rc4
Sign up to get free protection for your applications and to get access to all the features.
- 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: [![Slack Status](http://slack.samvera.org/badge.svg)](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
|