Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
# frozen_string_literal:true

module OregonDigital
# permission methods adapted from Hyrax::WorksControllerBehavior
# in order to capture permissions changed events
module CollectionsControllerBehavior
def save_permissions
@saved_permissions =
case collection
when ActiveFedora::Base
collection.permissions.map(&:to_hash)
else
Hyrax::AccessControl.for(resource: collection).permissions
end
end

def permissions_changed?
@saved_permissions !=
case collection
when ActiveFedora::Base
collection.permissions.map(&:to_hash)
else
Hyrax::AccessControl.for(resource: collection).permissions
end
end
end
end
21 changes: 21 additions & 0 deletions app/jobs/collection_event_job.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
# frozen_string_literal:true

# Similar to work event jobs except collections cannot be passed in
class CollectionEventJob < EventJob
attr_reader :collection
def perform(collid, depositor)
@collection = Collection.find(collid)
super(depositor)
log_event(collection)
end

# Log the event to the object's stream
def log_event(collection)
collection.log_event(event)
end

# log the event to the users profile stream
def log_user_event(depositor)
depositor.log_profile_event(event)
end
end
8 changes: 8 additions & 0 deletions app/jobs/collection_permission_change_event_job.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
# frozen_string_literal:true

# Provides a permission change message for collections
class CollectionPermissionChangeEventJob < CollectionEventJob
def action
"User #{link_to_profile depositor} has updated permission of #{link_to collection.title.first, Hyrax::Engine.routes.url_helpers.polymorphic_path(collection)} to #{visibility_badge(collection.visibility)}"
end
end
8 changes: 8 additions & 0 deletions app/jobs/collection_update_event_job.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
# frozen_string_literal:true

# Provides a catch-all update message
class CollectionUpdateEventJob < CollectionEventJob
def action
"User #{link_to_profile depositor} has updated #{link_to collection.title.first, Hyrax::Engine.routes.url_helpers.polymorphic_path(collection)}"
end
end
1 change: 1 addition & 0 deletions app/models/collection.rb
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ class Collection < ActiveFedora::Base
include OregonDigital::CollectionMetadata
include OregonDigital::MetadataDownload
include OregonDigital::AccessControls::Visibility
include Hyrax::WithEvents
self.indexer = OregonDigital::CollectionIndexer

delegate :facet_configurable?, to: :collection_type
Expand Down
13 changes: 13 additions & 0 deletions app/services/oregon_digital/listeners/collection_listener.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
# frozen_string_literal:true

module OregonDigital
module Listeners
# Listens for published collection events
class CollectionListener
# currently, collections do not have global id, and therefore cannot be passed to jobs
def on_collection_metadata_updated(event)
CollectionUpdateEventJob.perform_later(event[:collection].id, event[:user])
end
end
end
end
7 changes: 6 additions & 1 deletion config/initializers/hacks/hyrax_collections_controller.rb
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
end

Hyrax::Dashboard::CollectionsController.class_eval do
include OregonDigital::CollectionsControllerBehavior
self.form_class = OregonDigital::Forms::CollectionForm
self.presenter_class = OregonDigital::CollectionPresenter

Expand All @@ -29,7 +30,8 @@ def update_active_fedora_collection
process_branding
process_facets if collection.facet_configurable? && !params[:facet_configuration].blank?
process_representative_images

# will need to save permissions on valkyrie colls eventually
save_permissions
@collection.visibility = Hydra::AccessControls::AccessRight::VISIBILITY_TEXT_VALUE_PRIVATE unless Hyrax::CollectionType.for(collection: @collection).discoverable?
if @collection.update(collection_params.except(:members))
after_update_response
Expand Down Expand Up @@ -67,6 +69,9 @@ def after_create_response

# Override after update method to redirect users back to where they updated the collection from
def after_update_response
Hyrax.publisher.publish('collection.metadata.updated', collection: @collection, user: current_user)
# copying strategy for works permission change logging, enqueue job directly without pub/listen
OregonDigital::CollectionPermissionChangeEventJob.perform_later(collection.id, current_user) if permissions_changed?
respond_to do |format|
format.html do
case URI(request.referer).path.split('/')[1]
Expand Down
3 changes: 2 additions & 1 deletion config/initializers/oregon_digital_listeners.rb
Original file line number Diff line number Diff line change
@@ -1 +1,2 @@
Hyrax.publisher.subscribe(OregonDigital::Listeners::MetadataFetchListener.new)
Hyrax.publisher.subscribe(OregonDigital::Listeners::MetadataFetchListener.new)
Hyrax.publisher.subscribe(OregonDigital::Listeners::CollectionListener.new)