Merge branch 'features/bioeddie-integration' into ma_SCI_5879

This commit is contained in:
artoscinote 2021-07-20 09:48:13 +02:00 committed by GitHub
commit 888131a465
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
10 changed files with 167 additions and 19 deletions

View file

@ -132,6 +132,7 @@ var bioEddieEditor = (function() {
bioEddieModal.data('update-url', updateUrl);
bioEddieModal.find('.file-name input').val(name);
bioEddieModal.modal('show');
}
};
}());
@ -152,5 +153,6 @@ var bioEddieEditor = (function() {
this.dataset.moleculeDescription,
this.dataset.updateUrl
);
$.post(this.dataset.editUrl);
});
}());

View file

@ -1,6 +1,7 @@
# frozen_string_literal: true
class BioEddieAssetsController < ApplicationController
include BioEddieActions
include ActiveStorage::SetCurrent
before_action :load_vars, except: :create
@ -12,6 +13,8 @@ class BioEddieAssetsController < ApplicationController
def create
asset = BioEddieService.create_molecule(bio_eddie_params, current_user, current_team)
create_create_bio_eddie_activity(asset, current_user)
if asset && bio_eddie_params[:object_type] == 'Step'
render json: {
html: render_to_string(partial: 'assets/asset.html.erb', locals: {
@ -29,6 +32,8 @@ class BioEddieAssetsController < ApplicationController
def update
asset = BioEddieService.update_molecule(bio_eddie_params, current_user, current_team)
create_edit_bio_eddie_activity(asset, current_user, :finish_editing)
if asset
render json: { url: rails_representation_url(asset.medium_preview),
id: asset.id,
@ -39,7 +44,7 @@ class BioEddieAssetsController < ApplicationController
end
def start_editing
# Activity here
create_edit_bio_eddie_activity(@asset, current_user, :start_editing)
end
private

View file

@ -0,0 +1,105 @@
# frozen_string_literal: true
module BioEddieActions
extend ActiveSupport::Concern
private
def create_edit_bio_eddie_activity(asset, current_user, started_editing)
action = case started_editing
when :start_editing
t('activities.file_editing.started')
when :finish_editing
t('activities.file_editing.finished')
end
return unless bio_eddie_asset_validation(asset)
bio_eddie_find_target_object(asset, current_user, 'edit', action)
end
def create_create_bio_eddie_activity(asset, current_user)
return unless bio_eddie_asset_validation(asset)
bio_eddie_find_target_object(asset, current_user, 'create')
end
def create_delete_bio_eddie_activity(asset, current_user)
return unless bio_eddie_asset_validation(asset)
bio_eddie_find_target_object(asset, current_user, 'delete')
end
def bio_eddie_asset_validation(asset)
asset && asset.file.metadata[:asset_type] == 'bio_eddie'
end
def bio_eddie_asset_type(asset, klass)
return true if asset.step_asset&.step.instance_of?(klass)
return true if asset.result_asset&.result.instance_of?(klass)
false
end
def bio_eddie_find_target_object(asset, current_user, activity_type, action = nil)
if bio_eddie_asset_type(asset, Step)
bio_eddie_step_activity(asset, current_user, activity_type, action)
elsif bio_eddie_asset_type(asset, Result)
bio_eddie_result_activity(asset, current_user, activity_type, action)
end
end
def bio_eddie_step_activity(asset, current_user, activity, action = nil)
step = asset.step_asset&.step
asset_type = 'asset_name'
protocol = step&.protocol
return unless step && protocol
default_step_items =
{ step: step.id,
step_position: { id: step.id, value_for: 'position_plus_one' },
asset_type => { id: asset.id, value_for: 'file_name' } }
default_step_items[:action] = action if action
if protocol.in_module?
project = protocol.my_module.experiment.project
team = project.team
type_of = "#{activity}_molecule_on_step".to_sym
message_items = { my_module: protocol.my_module.id }
else
type_of = "#{activity}_molecule_on_step_in_repository".to_sym
team = protocol.team
message_items = { protocol: protocol.id }
end
message_items = default_step_items.merge(message_items)
Activities::CreateActivityService
.call(activity_type: type_of,
owner: current_user,
subject: protocol,
team: team,
project: project,
message_items: message_items)
end
def bio_eddie_result_activity(asset, current_user, activity, action = nil)
result = asset.result_asset&.result
asset_type = 'asset_name'
my_module = result&.my_module
return unless result && my_module
message_items = {
result: result.id,
asset_type => { id: asset.id, value_for: 'file_name' }
}
message_items[:action] = action if action
Activities::CreateActivityService
.call(activity_type: "#{activity}_molecule_on_step_on_result".to_sym,
owner: current_user,
subject: result,
team: my_module.experiment.project.team,
project: my_module.experiment.project,
message_items: message_items)
end
end

View file

@ -533,6 +533,10 @@ class StepsController < ApplicationController
marvin_js_assets_attributes: %i(
id
_destroy
),
bio_eddie_assets_attributes: %i(
id
_destroy
)
)
end

View file

@ -6,8 +6,8 @@ class BioEddieService
ApplicationSettings.instance.values['bio_eddie_url']
end
def enabled?
url.present?
def enabled?(current_user)
url.present? && current_user.settings.fetch('bio_eddie_enabled', false)
end
def create_molecule(params, current_user, current_team)

View file

@ -1,11 +1,13 @@
<li>
<a
class="new-bio-eddie-upload-button"
data-object-id="<%= element_id %>"
data-object-type="<%= element_type %>"
data-assets-container="<%= assets_container %>"
>
<%= image_tag 'icon_small/bio_eddie.png' %>
<%= t('bio_eddie.new_button') %>
</a>
</li>
<% if BioEddieService.enabled?(current_user) %>
<li>
<a
class="new-bio-eddie-upload-button"
data-object-id="<%= element_id %>"
data-object-type="<%= element_type %>"
data-assets-container="<%= assets_container %>"
>
<%= image_tag 'icon_small/bio_eddie.png' %>
<%= t('bio_eddie.new_button') %>
</a>
</li>
<% end %>

View file

@ -1,4 +1,4 @@
<% if BioEddieService.enabled? %>
<% if BioEddieService.enabled?(current_user) %>
<div id="bioEddieModal"
class="modal modal-bio-eddie"
role="dialog"

View file

@ -21,10 +21,11 @@
<span class="fas fa-pencil-alt"></span>
<%= t('assets.file_preview.edit_in_marvinjs') %>
</button>
<% elsif asset.file.metadata[:asset_type] == 'bio_eddie' %>
<% elsif asset.file.metadata[:asset_type] == 'bio_eddie' && BioEddieService.enabled?(current_user) %>
<button class="btn btn-light bio-eddie-edit-button"
data-molecule-id="<%= asset.id %>"
data-update-url="<%= bio_eddie_asset_path(asset) %>"
data-edit-url="<%= start_editing_bio_eddie_asset_path(asset) %>"
data-molecule-name="<%= asset.file.metadata[:name] %>"
data-molecule-description="<%= asset.file.metadata[:description] %>"
>

View file

@ -316,21 +316,30 @@ class Extends
delete_project_folder: 162,
generate_pdf_report: 163,
generate_docx_report: 164,
edit_molecule_on_step: 168,
edit_molecule_on_result: 169,
edit_molecule_on_step_in_repository: 170,
create_molecule_on_step: 171,
create_molecule_on_result: 172,
create_molecule_on_step_in_repository: 173,
delete_molecule_on_step: 174,
delete_molecule_on_result: 175,
delete_molecule_on_step_in_repository: 176,
register_molecule: 165
}
ACTIVITY_GROUPS = {
projects: [*0..7, 32, 33, 34, 95, 108, 65, 109, *158..162],
task_results: [23, 26, 25, 42, 24, 40, 41, 99, 110, 122, 116, 128],
task_results: [23, 26, 25, 42, 24, 40, 41, 99, 110, 122, 116, 128, 169, 172, 175],
task: [8, 58, 9, 59, *10..14, 35, 36, 37, 53, 54, *60..63, 138, 139, 140, 64, 66, 106, 126, 120, 132,
*146..148],
*146..148, 168, 171, 174],
task_protocol: [15, 22, 16, 18, 19, 20, 21, 17, 38, 39, 100, 111, 45, 46, 47, 121, 124, 115, 118, 127, 130, 137],
task_inventory: [55, 56, 146, 147],
experiment: [*27..31, 57],
reports: [48, 50, 49, 163, 164],
inventories: [70, 71, 105, 144, 145, 72, 73, 74, 102, 142, 143, 75, 76, 77, 78, 96, 107, 113, 114, *133..136],
protocol_repository: [80, 103, 89, 87, 79, 90, 91, 88, 85, 86, 84, 81, 82,
83, 101, 112, 123, 125, 117, 119, 129, 131],
83, 101, 112, 123, 125, 117, 119, 129, 131, 170, 173, 176],
team: [92, 94, 93, 97, 104]
}

View file

@ -184,6 +184,16 @@ en:
move_project_folder_html: "%{user} moved folder %{project_folder} from folder %{project_folder_from}</strong> to folder %{project_folder_to}."
generate_pdf_report_html: "%{user} generated PDF report %{report}."
generate_docx_report_html: "%{user} generated DOCX report %{report}."
edit_molecule_on_step_html: "%{user} edited molecule %{asset_name} on protocol's step %{step_position} %{step} on task %{my_module}: %{action}."
edit_molecule_on_result_html: "%{user} edited molecule %{asset_name} on result %{result}: %{action}."
edit_molecule_on_step_in_repository_html: "%{user} edited molecule %{asset_name} on protocol %{protocol}'s step %{step_position} %{step}: %{action}."
create_molecule_on_step_html: "%{user} created molecule %{asset_name} on protocol's step %{step_position} %{step} on task %{my_module}."
create_molecule_on_result_html: "%{user} created molecule %{asset_name} on result %{result}."
create_molecule_on_step_in_repository_html: "%{user} created molecule %{asset_name} on protocol %{protocol}'s step %{step_position} %{step}."
delete_molecule_on_step_html: "%{user} deleted molecule %{asset_name} on protocol's step %{step_position} %{step} on task %{my_module}."
delete_molecule_on_result_html: "%{user} deleted molecule %{asset_name} on result %{result}."
delete_molecule_on_step_in_repository_html: "%{user} deleted molecule %{asset_name} on protocol %{protocol}'s step %{step_position} %{step}."
register_molecule_html: "%{user} scheduled the %{name} molecule for registration."
@ -334,6 +344,16 @@ en:
move_project_folder: "Project folder moved"
generate_pdf_report: "PDF Report generated"
generate_docx_report: "DOCX Report generated"
edit_molecule_on_step: "Molecule on task step edited"
edit_molecule_on_result: "Molecule on result edited"
edit_molecule_on_step_in_repository: "Molecule on step edited"
create_molecule_on_step: "Molecule on task step created"
create_molecule_on_result: "Molecule on result created"
create_molecule_on_step_in_repository: "Molecule on step created"
delete_molecule_on_step: "Molecule on task step deleted"
delete_molecule_on_result: "Molecule on result deleted"
delete_molecule_on_step_in_repository: "Molecule on step deleted"
activity_group:
projects: "Projects"