Skip to content
Draft
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
21 changes: 21 additions & 0 deletions app/controllers/concerns/deepblue/box_controller_behavior.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
# frozen_string_literal: true

module Deepblue
module BoxControllerBehavior

def box_create_dir_and_add_collaborator
return nil unless DeepBlueDocs::Application.config.box_integration_enabled
user_email = Deepblue::EmailHelper.user_email_from( current_user )
BoxHelper.create_dir_and_add_collaborator( curation_concern.id, user_email: user_email )
end

def box_link
return nil unless DeepBlueDocs::Application.config.box_integration_enabled
BoxHelper.box_link( curation_concern.id )
end

def box_work_created
box_create_dir_and_add_collaborator
end
end
end
201 changes: 201 additions & 0 deletions app/controllers/concerns/deepblue/globus_controller_behavior.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,201 @@
# frozen_string_literal: true

module Deepblue
module GlobusControllerBehavior
extend ActiveSupport::Concern

included do
protect_from_forgery with: :null_session, only: [:globus_add_email,
:globus_download,
:globus_download_add_email,
:globus_download_notify_me]
attr_accessor :user_email_one, :user_email_two
end

def globus_add_email
if user_signed_in?
user_email = Deepblue::EmailHelper.user_email_from( current_user )
globus_copy_job( user_email: user_email, delay_per_file_seconds: 0 )
flash_and_go_back globus_files_prepping_msg( user_email: user_email )
elsif params[:user_email_one].present? || params[:user_email_two].present?
user_email_one = params[:user_email_one].present? ? params[:user_email_one].strip : ''
user_email_two = params[:user_email_two].present? ? params[:user_email_two].strip : ''
# if user_email_one === user_email_two
if user_email_one == user_email_two
globus_copy_job( user_email: user_email_one, delay_per_file_seconds: 0 )
flash_and_redirect_to_main_cc globus_files_prepping_msg( user_email: user_email_one )
else
flash.now[:error] = emails_did_not_match_msg( user_email_one, user_email_two )
render 'globus_download_add_email_form'
end
else
flash_and_redirect_to_main_cc globus_status_msg
end
end

def globus_clean_download
::GlobusCleanJob.perform_later( curation_concern.id, clean_download: true )
globus_ui_delay
dirs = []
dirs << ::GlobusJob.target_download_dir( curation_concern.id )
dirs << ::GlobusJob.target_prep_dir( curation_concern.id, prefix: nil )
dirs << ::GlobusJob.target_prep_tmp_dir( curation_concern.id, prefix: nil )
flash_and_redirect_to_main_cc globus_clean_msg( dirs )
end

def globus_clean_prep
::GlobusCleanJob.perform_later( curation_concern.id, clean_download: false )
globus_ui_delay
end

def globus_complete?
::GlobusJob.copy_complete? curation_concern.id
end

def globus_copy_job( user_email: nil,
delay_per_file_seconds: DeepBlueDocs::Application.config.globus_debug_delay_per_file_copy_job_seconds )

::GlobusCopyJob.perform_later( curation_concern.id,
user_email: user_email,
delay_per_file_seconds: delay_per_file_seconds )
globus_ui_delay
end

def globus_download
if globus_complete?
flash_and_redirect_to_main_cc globus_files_available_here
else
user_email = Deepblue::EmailHelper.user_email_from( current_user, user_signed_in: user_signed_in? )
msg = if globus_prepping?
globus_files_prepping_msg( user_email: user_email )
else
globus_file_prep_started_msg( user_email: user_email )
end
if user_signed_in?
globus_copy_job( user_email: user_email )
flash_and_redirect_to_main_cc msg
else
render 'globus_download_notify_me_form'
end
end
end

def globus_download_add_email
if user_signed_in?
globus_add_email
else
render 'globus_download_add_email_form'
end
end

def globus_download_enabled?
DeepBlueDocs::Application.config.globus_enabled
end

def globus_download_notify_me
if user_signed_in?
user_email = Deepblue::EmailHelper.user_email_from( current_user )
globus_copy_job( user_email: user_email )
flash_and_go_back globus_file_prep_started_msg( user_email: user_email )
elsif params[:user_email_one].present? || params[:user_email_two].present?
user_email_one = params[:user_email_one].present? ? params[:user_email_one].strip : ''
user_email_two = params[:user_email_two].present? ? params[:user_email_two].strip : ''
# if user_email_one === user_email_two
if user_email_one == user_email_two
globus_copy_job( user_email: user_email_one )
flash_and_redirect_to_main_cc globus_file_prep_started_msg( user_email: user_email_one )
else
# flash_and_go_back emails_did_not_match_msg( user_email_one, user_email_two )
flash.now[:error] = emails_did_not_match_msg( user_email_one, user_email_two )
render 'globus_download_notify_me_form'
end
else
globus_copy_job( user_email: nil )
flash_and_redirect_to_main_cc globus_file_prep_started_msg
end
end

def globus_enabled?
DeepBlueDocs::Application.config.globus_enabled
end

def globus_last_error_msg
::GlobusJob.error_file_contents curation_concern.id
end

def globus_prepping?
::GlobusJob.files_prepping? curation_concern.id
end

def globus_ui_delay( delay_seconds: DeepBlueDocs::Application.config.globus_after_copy_job_ui_delay_seconds )
sleep delay_seconds if delay_seconds.positive?
end

def globus_url
::GlobusJob.external_url curation_concern.id
end

protected

def emails_did_not_match_msg( _user_email_one, _user_email_two )
"Emails did not match" # + ": '#{user_email_one}' != '#{user_email_two}'"
end

def flash_and_go_back( msg )
Deepblue::LoggingHelper.debug msg
redirect_back fallback_location: root_url, notice: msg
end

# FIXME: never called
def flash_error_and_go_back( msg )
Deepblue::LoggingHelper.debug msg
redirect_back fallback_location: root_url, alert: msg
end

def flash_and_redirect_to_main_cc( msg )
Deepblue::LoggingHelper.debug msg
redirect_to [main_app, curation_concern], notice: msg
end


private
def globus_clean_msg( dir )
dirs = dir.join( MsgHelper.t( 'data_set.globus_clean_join_html' ) )
rv = MsgHelper.t( 'data_set.globus_clean', dirs: dirs )
return rv
end

def globus_file_prep_started_msg( user_email: nil )
MsgHelper.t( 'data_set.globus_file_prep_started',
when_available: globus_files_when_available( user_email: user_email ) )
end

def globus_files_prepping_msg( user_email: nil )
MsgHelper.t( 'data_set.globus_files_prepping',
when_available: globus_files_when_available( user_email: user_email ) )
end

def globus_files_when_available( user_email: nil )
if user_email.nil?
MsgHelper.t( 'data_set.globus_files_when_available' )
else
MsgHelper.t( 'data_set.globus_files_when_available_email', user_email: user_email )
end
end

def globus_files_available_here
MsgHelper.t( 'data_set.globus_files_available_here', globus_url: globus_url.to_s )
end

def globus_status_msg( user_email: nil )
msg = if globus_complete?
globus_files_available_here
elsif globus_prepping?
globus_files_prepping_msg( user_email: user_email )
else
globus_file_prep_started_msg( user_email: user_email )
end
msg
end
end
end
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
# frozen_string_literal: true

module Deepblue
module ProvenanceLogControllerBehavior
extend ActiveSupport::Concern

included do
before_action :provenance_log_update_before, only: [:update]
after_action :provenance_log_update_after, only: [:update]
protect_from_forgery with: :null_session, only: [:display_provenance_log]
attr_accessor :provenance_log_entries
end

def provenance_log_update_after
curation_concern.provenance_log_update_after( current_user: current_user,
# event_note: 'DataSetsController.provenance_log_update_after',
update_attr_key_values: @update_attr_key_values )
end

def provenance_log_update_before
@update_attr_key_values = curation_concern.provenance_log_update_before( form_params: params[params_key].dup )
end

def display_provenance_log
# load provenance log for this work
file_path = Deepblue::ProvenancePath.path_for_reference( curation_concern.id )
Deepblue::LoggingHelper.bold_debug [ "DataSetsController", "display_provenance_log", file_path ]
Deepblue::ProvenanceLogService.entries( curation_concern.id, refresh: true )
# continue on to normal display
redirect_to polymorphic_url([main_app, curation_concern], anchor: "prov_log")
end

def display_provenance_log_enabled?
true
end

def provenance_log_entries_present?
provenance_log_entries.present?
end
end
end
49 changes: 49 additions & 0 deletions app/controllers/concerns/deepblue/tombstone_controller_behavior.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
# frozen_string_literal: true

module Deepblue
module TombstoneControllerBehavior
extend ActiveSupport::Concern

included do
before_action :prepare_permissions, only: [:show]
after_action :reset_permissions, only: [:show]
end

# FIXME: review behavior, drop?
# These methods (prepare_permissions, and reset_permissions) are used so that
# when viewing a tombstoned work, and the user is not admin, the user
# will be able to see the metadata.
def prepare_permissions
if current_ability.admin?
else
# Need to add admin group to current_ability
# or presenter will not be accessible.
current_ability.user_groups << "admin"
if presenter&.tombstone.present?
else
current_ability.user_groups.delete("admin")
end
end
end

def reset_permissions
current_ability.user_groups.delete("admin")
end

def tombstone
epitaph = params[:tombstone]
success = curation_concern.entomb!( epitaph, current_user )
msg = if success
MsgHelper.t( 'data_set.tombstone_notice', title: curation_concern.title.first.to_s, reason: epitaph.to_s )
else
"#{curation_concern.title.first} is already tombstoned."
end
redirect_to dashboard_works_path, notice: msg
end

# FIXME: never called
def tombstone_enabled?
true
end
end
end
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
# frozen_string_literal: true

module Deepblue
module VisibilityChangeControllerBehavior
extend ActiveSupport::Concern

included do
before_action :visibility_changed, only: [:update]
after_action :visibility_changed_update, only: [:update]
end

def visibility_changed
# ::Deepblue::LoggingHelper.bold_debug [ Deepblue::LoggingHelper.here,
# Deepblue::LoggingHelper.called_from,
# Deepblue::LoggingHelper.obj_class( 'class', self ),
# "" ]
if visibility_to_private?
mark_as_set_to_private
elsif visibility_to_public?
mark_as_set_to_public
end
end

def visibility_changed_update
# ::Deepblue::LoggingHelper.bold_debug [ Deepblue::LoggingHelper.here,
# Deepblue::LoggingHelper.called_from,
# Deepblue::LoggingHelper.obj_class( 'class', self ),
# "" ]
if curation_concern.private? && @visibility_changed_to_private
workflow_unpublish
elsif curation_concern.public? && @visibility_changed_to_public
workflow_publish
end
end

def visibility_to_private?
# ::Deepblue::LoggingHelper.bold_debug [ Deepblue::LoggingHelper.here,
# Deepblue::LoggingHelper.called_from,
# Deepblue::LoggingHelper.obj_class( 'class', self ),
# "" ]
return false if curation_concern.private?
params[params_key]['visibility'] == Hydra::AccessControls::AccessRight::VISIBILITY_TEXT_VALUE_PRIVATE
end

def visibility_to_public?
# ::Deepblue::LoggingHelper.bold_debug [ Deepblue::LoggingHelper.here,
# Deepblue::LoggingHelper.called_from,
# Deepblue::LoggingHelper.obj_class( 'class', self ),
# "" ]
return false if curation_concern.public?
params[PARAMS_KEY]['visibility'] == Hydra::AccessControls::AccessRight::VISIBILITY_TEXT_VALUE_PUBLIC
end

def mark_as_set_to_private
@visibility_changed_to_public = false
@visibility_changed_to_private = true
end

def mark_as_set_to_public
@visibility_changed_to_public = true
@visibility_changed_to_private = false
end
end
end
Loading