hyrax 1.0.0.rc1 → 1.0.0.rc2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.rubocop.yml +3 -0
- data/.travis.yml +1 -0
- data/README.md +7 -1
- data/app/actors/hyrax/actors/file_set_actor.rb +22 -32
- data/app/assets/javascripts/hyrax/editor.es6 +1 -1
- data/app/assets/javascripts/hyrax/monkey_patch_turbolinks.js.coffee +8 -7
- data/app/assets/javascripts/hyrax/select_work_type.es6 +4 -0
- data/app/assets/stylesheets/hyrax/_dashboard.scss +10 -0
- data/app/assets/stylesheets/hyrax/_forms.scss +8 -0
- data/app/controllers/concerns/hyrax/controller.rb +2 -5
- data/app/controllers/hyrax/admin/workflow_roles_controller.rb +1 -1
- data/app/controllers/hyrax/workflow_actions_controller.rb +14 -4
- data/app/forms/hyrax/forms/permission_template_form.rb +38 -1
- data/app/forms/hyrax/forms/work_form.rb +16 -31
- data/app/forms/hyrax/forms/workflow_responsibility_form.rb +5 -2
- data/app/helpers/hyrax/hyrax_helper_behavior.rb +1 -1
- data/app/jobs/attach_files_to_work_job.rb +5 -15
- data/app/models/concerns/hyrax/naming.rb +1 -0
- data/app/models/hyrax/permission_template_access.rb +10 -10
- data/app/models/sipity/workflow.rb +30 -0
- data/app/presenters/hyrax/admin/workflow_role_presenter.rb +17 -31
- data/app/presenters/hyrax/admin/workflow_roles_presenter.rb +43 -0
- data/app/presenters/hyrax/collection_options_presenter.rb +30 -0
- data/app/presenters/hyrax/workflow_presenter.rb +2 -2
- data/app/search_builders/hyrax/active_works_search_builder.rb +13 -0
- data/app/search_builders/hyrax/my_works_search_builder.rb +9 -12
- data/app/search_builders/hyrax/works_search_builder.rb +7 -0
- data/app/services/hyrax/actor_factory.rb +1 -1
- data/app/services/hyrax/admin_set_create_service.rb +24 -2
- data/app/services/hyrax/form_metadata_service.rb +13 -0
- data/app/services/hyrax/persist_directly_contained_output_file_service.rb +3 -3
- data/app/services/hyrax/workflow/abstract_notification.rb +3 -1
- data/app/services/hyrax/workflow/activate_object.rb +1 -1
- data/app/services/hyrax/workflow/deactivate_object.rb +1 -1
- data/app/services/hyrax/workflow/grant_edit_to_depositor.rb +1 -1
- data/app/services/hyrax/workflow/grant_read_to_depositor.rb +13 -0
- data/app/services/hyrax/workflow/revoke_edit_from_depositor.rb +11 -0
- data/app/services/hyrax/workflow/workflow_schema.rb +1 -1
- data/app/views/catalog/_facet_limit.html.erb +5 -3
- data/app/views/hyrax/base/_form_visibility_component.html.erb +1 -0
- data/app/views/hyrax/homepage/index.html.erb +11 -4
- data/app/views/hyrax/my/_facet_limit.html.erb +11 -8
- data/app/views/hyrax/my/_index_partials/_default_group.html.erb +2 -1
- data/app/views/hyrax/my/_index_partials/_list_works.html.erb +1 -0
- data/config/locales/hyrax.en.yml +5 -0
- data/config/locales/hyrax.es.yml +8 -3
- data/config/locales/hyrax.zh.yml +730 -0
- data/hyrax.gemspec +5 -8
- data/lib/generators/hyrax/install_generator.rb +2 -3
- data/lib/generators/hyrax/models_generator.rb +1 -1
- data/lib/generators/hyrax/templates/catalog_controller.rb +37 -37
- data/lib/generators/hyrax/templates/config/locales/hyrax.en.yml +43 -0
- data/lib/generators/hyrax/templates/config/locales/hyrax.es.yml +43 -0
- data/lib/generators/hyrax/templates/config/locales/hyrax.zh.yml +55 -0
- data/lib/generators/hyrax/templates/mediated_deposit_workflow.json.erb +4 -1
- data/lib/generators/hyrax/work/templates/controller.rb.erb +1 -1
- data/lib/generators/hyrax/work/templates/feature_spec.rb.erb +12 -5
- data/lib/generators/hyrax/work/templates/locale.zh.yml.erb +10 -0
- data/lib/generators/hyrax/work/work_generator.rb +29 -13
- data/lib/hyrax/collections_migration.rb +18 -0
- data/lib/hyrax/engine.rb +1 -2
- data/lib/hyrax/errors.rb +11 -0
- data/lib/hyrax/rails/routes.rb +1 -1
- data/lib/hyrax/search_state.rb +1 -9
- data/lib/hyrax/specs/shared_specs.rb +1 -0
- data/lib/hyrax/specs/shared_specs/workflow_method.rb +46 -0
- data/lib/hyrax/version.rb +1 -1
- data/lib/tasks/migrate.rake +5 -0
- data/spec/controllers/hyrax/admin/workflow_roles_controller_spec.rb +3 -3
- data/spec/controllers/hyrax/batch_uploads_controller_spec.rb +1 -1
- data/spec/controllers/hyrax/workflow_actions_controller_spec.rb +18 -0
- data/spec/features/browse_catalog_spec.rb +1 -1
- data/spec/features/workflow_roles_spec.rb +1 -1
- data/spec/forms/hyrax/forms/work_form_spec.rb +19 -0
- data/spec/forms/hyrax/forms/workflow_responsibility_form_spec.rb +15 -7
- data/spec/helpers/blacklight_helper_spec.rb +1 -1
- data/spec/helpers/hyrax_helper_spec.rb +1 -1
- data/spec/jobs/attach_files_to_work_job_spec.rb +8 -14
- data/spec/lib/hyrax/collections_migration_spec.rb +34 -0
- data/spec/lib/hyrax/search_state_spec.rb +2 -2
- data/spec/models/hyrax/permission_template_spec.rb +1 -1
- data/spec/models/sipity/workflow_role_spec.rb +1 -0
- data/spec/presenters/hyrax/admin/workflow_role_presenter_spec.rb +8 -10
- data/spec/presenters/hyrax/admin/workflow_roles_presenter_spec.rb +18 -0
- data/spec/presenters/hyrax/collection_options_presenter_spec.rb +14 -0
- data/spec/search_builders/hyrax/active_works_search_builder_spec.rb +53 -0
- data/spec/search_builders/hyrax/works_search_builder_spec.rb +24 -0
- data/spec/services/hyrax/admin_set_create_service_spec.rb +64 -35
- data/spec/services/hyrax/persist_directly_contained_output_file_service_spec.rb +11 -7
- data/spec/services/hyrax/workflow/activate_object_spec.rb +4 -0
- data/spec/services/hyrax/workflow/changes_required_notification_spec.rb +2 -2
- data/spec/services/hyrax/workflow/deactivate_object_spec.rb +4 -0
- data/spec/services/hyrax/workflow/deposited_notification_spec.rb +2 -2
- data/spec/services/hyrax/workflow/grant_edit_to_depositor_spec.rb +4 -0
- data/spec/services/hyrax/workflow/pending_review_notification_spec.rb +2 -2
- data/spec/services/hyrax/workflow/revoke_edit_from_depositor_spec.rb +35 -0
- data/spec/support/controller_level_helpers.rb +1 -1
- data/spec/test_app_templates/lib/generators/test_app_generator.rb +10 -2
- data/spec/views/catalog/_index_list_default.html.erb_spec.rb +1 -2
- data/spec/views/hyrax/admin/workflow_roles/index.html.erb_spec.rb +2 -2
- data/spec/views/hyrax/homepage/index.html.erb_spec.rb +22 -2
- data/spec/views/shared/select_work_type_modal.html.erb_spec.rb +3 -3
- data/template.rb +1 -1
- metadata +34 -45
- data/lib/hyrax/single_use_error.rb +0 -3
- data/lib/hyrax/workflow_authorization_exception.rb +0 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 99e1fa3e513ad51bdf68404a23597596504fe7bf
|
4
|
+
data.tar.gz: 79efe8dbd4eca246b5b6252f19390dbd86a9dba7
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 363166554478d540eb6afc4c2b5179fc81ce18307c7c88874d11c0f0b9510845bc5e322ab6824dc9c5023b2360d311fbc4437c0d3a1daa559dc32b7119605e1a
|
7
|
+
data.tar.gz: 05c71ebf86f994a796c24833b4d231e31cb2ba1d4d5d91be5e1eeb596c1226e3575fbf31389677f22f5d94be1e210ae941c7a330734c94333bbf5255ad3a2bb5
|
data/.rubocop.yml
CHANGED
data/.travis.yml
CHANGED
data/README.md
CHANGED
@@ -59,7 +59,7 @@ If you have questions or need help, please email [the Hydra community tech list]
|
|
59
59
|
# Getting started
|
60
60
|
|
61
61
|
This document contains instructions specific to setting up an app with __Hyrax
|
62
|
-
v1.0.0.
|
62
|
+
v1.0.0.rc2__. If you are looking for instructions on installing a different
|
63
63
|
version, be sure to select the appropriate branch or tag from the drop-down
|
64
64
|
menu above.
|
65
65
|
|
@@ -160,6 +160,12 @@ or
|
|
160
160
|
rails generate hyrax:work MovingImage
|
161
161
|
```
|
162
162
|
|
163
|
+
Namespaces can be included in the work My::MovingImage by adding the path.
|
164
|
+
|
165
|
+
```
|
166
|
+
rails generate hyrax:work My/MovingImage
|
167
|
+
```
|
168
|
+
|
163
169
|
You may wish to [customize your work type](https://github.com/projecthydra/sufia/wiki/Customizing-your-work-types) now that it's been generated.
|
164
170
|
|
165
171
|
## Start servers
|
@@ -3,7 +3,6 @@ module Hyrax
|
|
3
3
|
# Actions are decoupled from controller logic so that they may be called from a controller or a background job.
|
4
4
|
class FileSetActor
|
5
5
|
include Lockable
|
6
|
-
|
7
6
|
attr_reader :file_set, :user, :attributes
|
8
7
|
|
9
8
|
def initialize(file_set, user)
|
@@ -12,21 +11,17 @@ module Hyrax
|
|
12
11
|
end
|
13
12
|
|
14
13
|
# Adds the appropriate metadata, visibility and relationships to file_set
|
15
|
-
#
|
16
|
-
#
|
17
|
-
#
|
18
|
-
# we have to save both the parent work and the file_set in order to record the "metadata" relationship
|
19
|
-
# between them.
|
14
|
+
# @note In past versions of Hyrax this method did not perform a save because it is mainly used in conjunction with
|
15
|
+
# create_content, which also performs a save. However, due to the relationship between Hydra::PCDM objects,
|
16
|
+
# we have to save both the parent work and the file_set in order to record the "metadata" relationship between them.
|
20
17
|
# @param [Hash] file_set_params specifying the visibility, lease and/or embargo of the file set.
|
21
|
-
#
|
22
|
-
# lease_expiration_date, visibility will be copied from the parent.
|
18
|
+
# Without visibility, embargo_release_date or lease_expiration_date, visibility will be copied from the parent.
|
23
19
|
def create_metadata(file_set_params = {})
|
24
20
|
file_set.apply_depositor_metadata(user)
|
25
21
|
now = TimeService.time_in_utc
|
26
22
|
file_set.date_uploaded = now
|
27
23
|
file_set.date_modified = now
|
28
24
|
file_set.creator = [user.user_key]
|
29
|
-
|
30
25
|
Actors::ActorStack.new(file_set, ability, [InterpretVisibilityActor]).create(file_set_params) if assign_visibility?(file_set_params)
|
31
26
|
yield(file_set) if block_given?
|
32
27
|
end
|
@@ -39,29 +34,21 @@ module Hyrax
|
|
39
34
|
# If the file set doesn't have a title or label assigned, set a default.
|
40
35
|
file_set.label ||= file.respond_to?(:original_filename) ? file.original_filename : ::File.basename(file)
|
41
36
|
file_set.title = [file_set.label] if file_set.title.blank?
|
42
|
-
|
43
|
-
# Need to save the file_set in order to get an id
|
44
|
-
return false unless file_set.save
|
45
|
-
|
37
|
+
return false unless file_set.save # Need to save the file_set in order to get an id
|
46
38
|
file_actor_class.new(file_set, relation, user).ingest_file(file, asynchronous)
|
47
39
|
true
|
48
40
|
end
|
49
41
|
|
50
42
|
# Adds a FileSet to the work using ore:Aggregations.
|
51
|
-
# Locks to ensure that only one process is operating on
|
52
|
-
# the list at a time.
|
43
|
+
# Locks to ensure that only one process is operating on the list at a time.
|
53
44
|
def attach_file_to_work(work, file_set_params = {})
|
54
45
|
acquire_lock_for(work.id) do
|
55
|
-
# Ensure we have an up-to-date copy of the members association, so
|
56
|
-
# that we append to the end of the list.
|
46
|
+
# Ensure we have an up-to-date copy of the members association, so that we append to the end of the list.
|
57
47
|
work.reload unless work.new_record?
|
58
|
-
unless assign_visibility?(file_set_params)
|
59
|
-
copy_visibility(work, file_set)
|
60
|
-
end
|
48
|
+
copy_visibility(work, file_set) unless assign_visibility?(file_set_params)
|
61
49
|
work.ordered_members << file_set
|
62
50
|
set_representative(work, file_set)
|
63
51
|
set_thumbnail(work, file_set)
|
64
|
-
|
65
52
|
# Save the work so the association between the work and the file_set is persisted (head_id)
|
66
53
|
# NOTE: the work may not be valid, in which case this save doesn't do anything.
|
67
54
|
work.save
|
@@ -72,12 +59,9 @@ module Hyrax
|
|
72
59
|
# @param [String] relation ('original_file')
|
73
60
|
def revert_content(revision_id, relation = 'original_file')
|
74
61
|
file_actor = file_actor_class.new(file_set, relation, user)
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
else
|
79
|
-
false
|
80
|
-
end
|
62
|
+
return false unless file_actor.revert_to(revision_id)
|
63
|
+
Hyrax.config.callback.run(:after_revert_content, file_set, user, revision_id)
|
64
|
+
true
|
81
65
|
end
|
82
66
|
|
83
67
|
# @param [File, ActionDigest::HTTP::UploadedFile, Tempfile] file the file uploaded by the user.
|
@@ -105,6 +89,14 @@ module Hyrax
|
|
105
89
|
Hyrax::Actors::FileActor
|
106
90
|
end
|
107
91
|
|
92
|
+
# Spawns async job to attach file to fileset
|
93
|
+
# @param [#to_s] url
|
94
|
+
def import_url(url)
|
95
|
+
file_set.update(import_url: url.to_s)
|
96
|
+
operation = Hyrax::Operation.create!(user: user, operation_type: "Attach File")
|
97
|
+
ImportUrlJob.perform_later(file_set, operation)
|
98
|
+
end
|
99
|
+
|
108
100
|
private
|
109
101
|
|
110
102
|
def ability
|
@@ -112,7 +104,7 @@ module Hyrax
|
|
112
104
|
end
|
113
105
|
|
114
106
|
# Takes an optional block and executes the block if the save was successful.
|
115
|
-
#
|
107
|
+
# @return [Boolean] false if the save was unsuccessful
|
116
108
|
def save
|
117
109
|
on_retry = ->(exception, _, _, _) { ActiveFedora::Base.logger.warn "Hyrax::Actors::FileSetActor#save Caught RSOLR error #{exception.inspect}" }
|
118
110
|
Retriable.retriable on: RSolr::Error::Http,
|
@@ -147,10 +139,8 @@ module Hyrax
|
|
147
139
|
def unlink_from_work
|
148
140
|
work = file_set.parent
|
149
141
|
return unless work && (work.thumbnail_id == file_set.id || work.representative_id == file_set.id)
|
150
|
-
#
|
151
|
-
#
|
152
|
-
# ActiveFedora clears the children nodes it leaves the work's
|
153
|
-
# thumbnail_id and representative_id fields in Solr populated.
|
142
|
+
# Must clear the thumbnail_id and representative_id fields on the work and force it to be re-solrized.
|
143
|
+
# Although ActiveFedora clears the children nodes it leaves those fields in Solr populated.
|
154
144
|
work.thumbnail = nil if work.thumbnail_id == file_set.id
|
155
145
|
work.representative = nil if work.representative_id == file_set.id
|
156
146
|
work.save!
|
@@ -17,7 +17,7 @@ export default class {
|
|
17
17
|
// Display the sharing tab if they select an admin set that permits sharing
|
18
18
|
sharingTab() {
|
19
19
|
if(this.adminSetWidget && !this.adminSetWidget.isEmpty()) {
|
20
|
-
this.adminSetWidget.on('change', (
|
20
|
+
this.adminSetWidget.on('change', () => this.sharingTabVisiblity(this.adminSetWidget.isSharing()))
|
21
21
|
this.sharingTabVisiblity(this.adminSetWidget.isSharing())
|
22
22
|
}
|
23
23
|
}
|
@@ -1,10 +1,11 @@
|
|
1
1
|
# Monkey patch Turbolinks to render 401
|
2
2
|
# See https://github.com/turbolinks/turbolinks/issues/179
|
3
3
|
# https://github.com/projecthydra-labs/hyrax/issues/617
|
4
|
-
Turbolinks
|
5
|
-
|
6
|
-
|
7
|
-
@
|
8
|
-
|
9
|
-
|
10
|
-
|
4
|
+
if Turbolinks?
|
5
|
+
Turbolinks.HttpRequest.prototype.requestLoaded = ->
|
6
|
+
@endRequest =>
|
7
|
+
if 200 <= @xhr.status < 300 or @xhr.status == 401
|
8
|
+
@delegate.requestCompletedWithResponse(@xhr.responseText, @xhr.getResponseHeader("Turbolinks-Location"))
|
9
|
+
else
|
10
|
+
@failed = true
|
11
|
+
@delegate.requestFailedWithStatusCode(@xhr.status, @xhr.responseText)
|
@@ -14,6 +14,7 @@ export default class SelectWorkType {
|
|
14
14
|
e.preventDefault()
|
15
15
|
this.modal.modal()
|
16
16
|
// ensure the type is set for the last clicked element
|
17
|
+
// type is either "batch" or "single" (work)
|
17
18
|
this.type = element.data('create-type')
|
18
19
|
// add custom routing logic when the modal is shown
|
19
20
|
this.form.on('submit', this.routingLogic.bind(this))
|
@@ -34,6 +35,9 @@ export default class SelectWorkType {
|
|
34
35
|
window.location.href = this.destination()
|
35
36
|
}
|
36
37
|
|
38
|
+
// Each input has two attributes that contain paths, one for the batch and one
|
39
|
+
// for a single work. So, given the value of 'this.type', return the appropriate
|
40
|
+
// path.
|
37
41
|
destination() {
|
38
42
|
return this.form.find('input[type="radio"]:checked').data(this.type)
|
39
43
|
}
|
@@ -52,6 +52,14 @@ form {
|
|
52
52
|
label { font-weight: normal; }
|
53
53
|
& .form-group { padding: 0 1.75em; }
|
54
54
|
|
55
|
+
#collapseEmbargo .form-group {
|
56
|
+
padding: 0;
|
57
|
+
|
58
|
+
&.generic_work_visibility_after_embargo {
|
59
|
+
margin-top: 6px;
|
60
|
+
}
|
61
|
+
}
|
62
|
+
|
55
63
|
.form-inline {
|
56
64
|
.control-label, label {
|
57
65
|
padding-left: 0;
|
@@ -4,6 +4,8 @@ module Hyrax::Controller
|
|
4
4
|
included do
|
5
5
|
class_attribute :create_work_presenter_class
|
6
6
|
self.create_work_presenter_class = Hyrax::SelectTypeListPresenter
|
7
|
+
self.search_state_class = Hyrax::SearchState
|
8
|
+
|
7
9
|
# Adds Hydra behaviors into the application controller
|
8
10
|
include Hydra::Controller::ControllerBehavior
|
9
11
|
helper_method :create_work_presenter
|
@@ -28,11 +30,6 @@ module Hyrax::Controller
|
|
28
30
|
super.merge(locale: I18n.locale)
|
29
31
|
end
|
30
32
|
|
31
|
-
# Override Blacklight to use the Hyrax::SearchState
|
32
|
-
def search_state
|
33
|
-
@search_state ||= Hyrax::SearchState.new(self)
|
34
|
-
end
|
35
|
-
|
36
33
|
private
|
37
34
|
|
38
35
|
def set_locale
|
@@ -8,7 +8,7 @@ module Hyrax
|
|
8
8
|
add_breadcrumb t(:'hyrax.controls.home'), root_path
|
9
9
|
add_breadcrumb t(:'hyrax.toolbar.admin.menu'), hyrax.admin_path
|
10
10
|
add_breadcrumb t(:'hyrax.admin.workflow_roles.header'), hyrax.admin_workflow_roles_path
|
11
|
-
@presenter =
|
11
|
+
@presenter = WorkflowRolesPresenter.new
|
12
12
|
end
|
13
13
|
|
14
14
|
def destroy
|
@@ -3,16 +3,19 @@ module Hyrax
|
|
3
3
|
before_action :authenticate_user!
|
4
4
|
|
5
5
|
def update
|
6
|
-
|
6
|
+
@curation_concern = ActiveFedora::Base.find(params[:id])
|
7
7
|
workflow_action_form = Hyrax::Forms::WorkflowActionForm.new(
|
8
8
|
current_ability: current_ability,
|
9
|
-
work:
|
9
|
+
work: @curation_concern,
|
10
10
|
attributes: workflow_action_params
|
11
11
|
)
|
12
12
|
if workflow_action_form.save
|
13
|
-
|
13
|
+
after_update_response
|
14
14
|
else
|
15
|
-
|
15
|
+
respond_to do |wants|
|
16
|
+
wants.html { render 'hyrax/base/unauthorized', status: :unauthorized }
|
17
|
+
wants.json { render_json_response(response_type: :unprocessable_entity, options: { errors: @curation_concern.errors }) }
|
18
|
+
end
|
16
19
|
end
|
17
20
|
end
|
18
21
|
|
@@ -21,5 +24,12 @@ module Hyrax
|
|
21
24
|
def workflow_action_params
|
22
25
|
params.require(:workflow_action).permit(:name, :comment)
|
23
26
|
end
|
27
|
+
|
28
|
+
def after_update_response
|
29
|
+
respond_to do |wants|
|
30
|
+
wants.html { redirect_to [main_app, @curation_concern], notice: "The #{@curation_concern.human_readable_type} has been updated." }
|
31
|
+
wants.json { render 'hyrax/base/show', status: :ok, location: polymorphic_path([main_app, @curation_concern]) }
|
32
|
+
end
|
33
|
+
end
|
24
34
|
end
|
25
35
|
end
|
@@ -57,6 +57,14 @@ module Hyrax
|
|
57
57
|
return_info
|
58
58
|
end
|
59
59
|
|
60
|
+
# If management roles have been granted or removed, then copy this access
|
61
|
+
# to the edit permissions of the AdminSet and to the WorkflowResponsibilities
|
62
|
+
# of the active workflow
|
63
|
+
def update_management
|
64
|
+
admin_set.update_access_controls!
|
65
|
+
update_workflow_approving_responsibilities
|
66
|
+
end
|
67
|
+
|
60
68
|
private
|
61
69
|
|
62
70
|
# @return [String]
|
@@ -70,7 +78,36 @@ module Hyrax
|
|
70
78
|
def update_participants_options(attributes)
|
71
79
|
update_permission_template(attributes)
|
72
80
|
# if managers were added, recalculate update the access controls on the AdminSet
|
73
|
-
|
81
|
+
return unless managers_updated?(attributes)
|
82
|
+
update_management
|
83
|
+
end
|
84
|
+
|
85
|
+
# Grant workflow approve roles for any admin set managers
|
86
|
+
# and revoke the approving role for non-managers
|
87
|
+
def update_workflow_approving_responsibilities
|
88
|
+
return unless active_workflow
|
89
|
+
approving_role = Sipity::Role.find_by_name('approving')
|
90
|
+
return unless approving_role
|
91
|
+
active_workflow.update_responsibilities(role: approving_role, agents: manager_agents)
|
92
|
+
end
|
93
|
+
|
94
|
+
# @return [Array<Sipity::Agent>] a list of sipity agents corresponding to the manager role of the permission_template
|
95
|
+
def manager_agents
|
96
|
+
@manager_agents ||= begin
|
97
|
+
authorized_agents = manager_grants.map do |access|
|
98
|
+
if access.agent_type == 'user'
|
99
|
+
::User.find_by_user_key(access.agent_id)
|
100
|
+
else
|
101
|
+
Hyrax::Group.new(access.agent_id)
|
102
|
+
end
|
103
|
+
end
|
104
|
+
authorized_agents.map { |agent| PowerConverter.convert_to_sipity_agent(agent) }
|
105
|
+
end
|
106
|
+
end
|
107
|
+
|
108
|
+
# @return [Array<PermissionTemplateAccess>] a list of grants corresponding to the manager role of the permission_template
|
109
|
+
def manager_grants
|
110
|
+
model.access_grants.where(access: 'manage'.freeze)
|
74
111
|
end
|
75
112
|
|
76
113
|
# @return [String, Nil] error_code if validation fails, nil otherwise
|
@@ -31,6 +31,9 @@ module Hyrax
|
|
31
31
|
|
32
32
|
self.required_fields = [:title, :creator, :keyword, :rights]
|
33
33
|
|
34
|
+
# The service that determines the cardinality of each field
|
35
|
+
self.field_metadata_service = Hyrax::FormMetadataService
|
36
|
+
|
34
37
|
def initialize(model, current_ability, controller)
|
35
38
|
@current_ability = current_ability
|
36
39
|
@agreement_accepted = !model.new_record?
|
@@ -81,41 +84,12 @@ module Hyrax
|
|
81
84
|
# Get a list of collection id/title pairs for the select form
|
82
85
|
def collections_for_select
|
83
86
|
service = Hyrax::CollectionsService.new(@controller)
|
84
|
-
|
85
|
-
end
|
86
|
-
|
87
|
-
def convert_solr_docs_to_select_options(results)
|
88
|
-
option_values = results.map do |r|
|
89
|
-
[r.to_s, r.id]
|
90
|
-
end
|
91
|
-
option_values.sort do |a, b|
|
92
|
-
if a.first && b.first
|
93
|
-
a.first <=> b.first
|
94
|
-
else
|
95
|
-
a.first ? -1 : 1
|
96
|
-
end
|
97
|
-
end
|
98
|
-
end
|
99
|
-
|
100
|
-
# This determines whether the allowed parameters are single or multiple.
|
101
|
-
# We are returning true for properties that are backed by methods, for
|
102
|
-
# which the HydraEditor::FieldMetadataService cannot determine are multiple.
|
103
|
-
# The instance variable is used when choosing which UI widget to draw.
|
104
|
-
def multiple?(field)
|
105
|
-
return true if ['ordered_member_ids', 'in_works_ids', 'member_of_collection_ids'].include? field.to_s
|
106
|
-
super
|
107
|
-
end
|
108
|
-
|
109
|
-
# The class method _multiple?_ is used for building the permitted params
|
110
|
-
# for the update action
|
111
|
-
def self.multiple?(field)
|
112
|
-
return true if ['ordered_member_ids', 'in_works_ids', 'member_of_collection_ids'].include? field.to_s
|
113
|
-
super
|
87
|
+
CollectionOptionsPresenter.new(service).select_options(:edit)
|
114
88
|
end
|
115
89
|
|
116
90
|
def self.sanitize_params(form_params)
|
117
91
|
admin_set_id = form_params[:admin_set_id]
|
118
|
-
if admin_set_id &&
|
92
|
+
if admin_set_id && workflow_for(admin_set_id: admin_set_id).allows_access_grant?
|
119
93
|
return super
|
120
94
|
end
|
121
95
|
params_without_permissions = permitted_params.reject { |arg| arg.respond_to?(:key?) && arg.key?(:permissions_attributes) }
|
@@ -132,6 +106,17 @@ module Hyrax
|
|
132
106
|
]
|
133
107
|
end
|
134
108
|
|
109
|
+
def self.workflow_for(admin_set_id:)
|
110
|
+
begin
|
111
|
+
workflow = Hyrax::PermissionTemplate.find_by!(admin_set_id: admin_set_id).active_workflow
|
112
|
+
rescue ActiveRecord::RecordNotFound
|
113
|
+
raise "Missing permission template for AdminSet(id:#{admin_set_id})"
|
114
|
+
end
|
115
|
+
raise Hyrax::MissingWorkflowError, "PermissionTemplate for AdminSet(id:#{admin_set_id}) does not have an active_workflow" unless workflow
|
116
|
+
workflow
|
117
|
+
end
|
118
|
+
private_class_method :workflow_for
|
119
|
+
|
135
120
|
private
|
136
121
|
|
137
122
|
# @return [Array<FileSetPresenter>] presenters for the file sets in order of the ids
|
@@ -26,9 +26,12 @@ module Hyrax
|
|
26
26
|
::User.all
|
27
27
|
end
|
28
28
|
|
29
|
-
# The select options for choosing a responsibility
|
29
|
+
# The select options for choosing a responsibility sorted by label
|
30
30
|
def workflow_role_options
|
31
|
-
Sipity::WorkflowRole.all.map
|
31
|
+
options = Sipity::WorkflowRole.all.map do |wf_role|
|
32
|
+
[Hyrax::Admin::WorkflowRolePresenter.new(wf_role).label, wf_role.id]
|
33
|
+
end
|
34
|
+
options.sort_by(&:first)
|
32
35
|
end
|
33
36
|
|
34
37
|
private
|