From 2fdc2c4f4d197c3797b467fe1f3dd908b77c69ce Mon Sep 17 00:00:00 2001 From: fherreazcue Date: Wed, 25 Oct 2023 20:12:04 +0100 Subject: [PATCH 01/16] Adds items that work with setup_new_asset and streamlines functionality --- app/views/investigations/_form.html.erb | 9 --------- app/views/projects/_project_selector.html.erb | 15 +++++++++++---- lib/seek/add_buttons.rb | 13 ++++++++++++- 3 files changed, 23 insertions(+), 14 deletions(-) diff --git a/app/views/investigations/_form.html.erb b/app/views/investigations/_form.html.erb index 9b13fa8add..0786224709 100644 --- a/app/views/investigations/_form.html.erb +++ b/app/views/investigations/_form.html.erb @@ -42,12 +42,3 @@ <%= form_submit_buttons(@investigation) %> - diff --git a/app/views/projects/_project_selector.html.erb b/app/views/projects/_project_selector.html.erb index b89c0dc3bd..52fd423377 100644 --- a/app/views/projects/_project_selector.html.erb +++ b/app/views/projects/_project_selector.html.erb @@ -118,12 +118,19 @@ }); $j(document).ready(function () { - <% if params[:project_ids] && resource && resource.new_record? %> - // Auto select projects from params if this is a new object - <% params[:project_ids].each do |project_id| %> - Sharing.projectsSelector.add(<%= project_id %>, true); + // Auto select projects from params[:project_ids] or params[resource][:project_ids] if this is a new object + <% if resource && resource.new_record? %> + <% if params[:project_ids] %> + <% params[:project_ids].each do |project_id| %> + Sharing.projectsSelector.add(<%= project_id %>, true); + <% end %> <% end %> + <% if params[controller_name.singularize] && params[controller_name.singularize][:project_ids] %> + <% params[controller_name.singularize][:project_ids].each do |project_id| %> + Sharing.projectsSelector.add(<%= project_id %>, true); + <% end %> <% end %> + <% end %> // Auto select project if there is only one if (Sharing.projectsSelector.possibilities.length === 1 && Sharing.projectsSelector.selected.length === 0) { diff --git a/lib/seek/add_buttons.rb b/lib/seek/add_buttons.rb index 8b0fe05a25..78aa83eb5b 100644 --- a/lib/seek/add_buttons.rb +++ b/lib/seek/add_buttons.rb @@ -2,7 +2,18 @@ module Seek # defines what can be added to a particular item, and the params used class AddButtons DEFINITIONS = { - 'Project' => [[Investigation, 'investigation[project_id]']], + 'Project' => [ + [Investigation, 'investigation[project_ids][]'], + [Collection, 'collection[project_ids][]'], + [Document, 'document[project_ids][]'], + [Event, 'event[project_ids][]'], + [FileTemplate, 'file_template[project_ids][]'], + [Model, 'model[project_ids][]'], + [Placeholder, 'placeholder[project_ids][]'], + [Presentation, 'presentation[project_ids][]'], + [SampleType, 'sample_type[project_ids][]'], + [Sop, 'sop[project_ids][]'] + ], 'Investigation' => [[Study, 'study[investigation_id]']], 'Study' => [[Assay, 'assay[study_id]']], 'Modelling Analysis' => [[DataFile, 'data_file[assay_assets_attributes[][assay_id]]'], From 1d3e8dfe94a5cda6a5b2d2d799ce84131196dea8 Mon Sep 17 00:00:00 2001 From: fherreazcue Date: Wed, 25 Oct 2023 20:13:52 +0100 Subject: [PATCH 02/16] Modifies Publication Strain and Template to work with setup_new_asset --- app/controllers/publications_controller.rb | 9 --------- app/controllers/strains_controller.rb | 2 +- app/controllers/templates_controller.rb | 2 +- lib/seek/add_buttons.rb | 5 ++++- 4 files changed, 6 insertions(+), 12 deletions(-) diff --git a/app/controllers/publications_controller.rb b/app/controllers/publications_controller.rb index 4b3ae2a496..75f0a331ae 100644 --- a/app/controllers/publications_controller.rb +++ b/app/controllers/publications_controller.rb @@ -56,15 +56,6 @@ def show end end - # GET /publications/new - def new - @publication = Publication.new - @publication.parent_name = params[:parent_name] - respond_to do |format| - format.html # new.html.erb - end - end - # GET /publications/1/edit def edit; end diff --git a/app/controllers/strains_controller.rb b/app/controllers/strains_controller.rb index 7a3dd2bcd4..9bb6857758 100644 --- a/app/controllers/strains_controller.rb +++ b/app/controllers/strains_controller.rb @@ -16,7 +16,7 @@ def new @strain = parent_strain.clone_with_associations @strain.parent_id = parent_strain.id else - @strain = Strain.new + @strain = setup_new_asset end end diff --git a/app/controllers/templates_controller.rb b/app/controllers/templates_controller.rb index 9143eef2f3..fcb49a8bd0 100644 --- a/app/controllers/templates_controller.rb +++ b/app/controllers/templates_controller.rb @@ -29,7 +29,7 @@ def default_templates def new @tab = 'manual' - @template = Template.new + @template = setup_new_asset @template.organism = 'any' respond_with(@template) end diff --git a/lib/seek/add_buttons.rb b/lib/seek/add_buttons.rb index 78aa83eb5b..f59f932e71 100644 --- a/lib/seek/add_buttons.rb +++ b/lib/seek/add_buttons.rb @@ -11,8 +11,11 @@ class AddButtons [Model, 'model[project_ids][]'], [Placeholder, 'placeholder[project_ids][]'], [Presentation, 'presentation[project_ids][]'], + [Publication, 'publication[project_ids][]'], [SampleType, 'sample_type[project_ids][]'], - [Sop, 'sop[project_ids][]'] + [Sop, 'sop[project_ids][]'], + [Strain, 'strain[project_ids][]'], + [Template, 'template[project_ids][]'] ], 'Investigation' => [[Study, 'study[investigation_id]']], 'Study' => [[Assay, 'assay[study_id]']], From 38833c9f2dc8876ebcbd56f1b2129ddd79c8cd9e Mon Sep 17 00:00:00 2001 From: fherreazcue Date: Wed, 25 Oct 2023 20:15:01 +0100 Subject: [PATCH 03/16] Forwards params to make datafile work --- app/helpers/multi_step_wizard_helper.rb | 6 +++++- lib/seek/add_buttons.rb | 1 + 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/app/helpers/multi_step_wizard_helper.rb b/app/helpers/multi_step_wizard_helper.rb index 700104185d..2516645933 100644 --- a/app/helpers/multi_step_wizard_helper.rb +++ b/app/helpers/multi_step_wizard_helper.rb @@ -46,6 +46,9 @@ def forward_params(key) if params[key][:publication_ids] html << hidden_field_tag('data_file[publication_ids][]', params[key][:publication_ids]) end + params[key][:project_ids]&.each do |p| + html << hidden_field_tag('data_file[project_ids][]', p) + end end html.html_safe end @@ -56,7 +59,8 @@ def extraction_forward_payload_json(resource, key) key => { assay_assets_attributes: resource.assay_assets.collect(&:assay_id).collect { |id| { assay_id: id.to_s } }, event_ids: resource.events.collect(&:id), - publication_ids: resource.publications.collect(&:id) + publication_ids: resource.publications.collect(&:id), + project_ids: resource.projects.collect(&:id) } } end diff --git a/lib/seek/add_buttons.rb b/lib/seek/add_buttons.rb index f59f932e71..99999228b9 100644 --- a/lib/seek/add_buttons.rb +++ b/lib/seek/add_buttons.rb @@ -5,6 +5,7 @@ class AddButtons 'Project' => [ [Investigation, 'investigation[project_ids][]'], [Collection, 'collection[project_ids][]'], + [DataFile, 'data_file[project_ids][]'], [Document, 'document[project_ids][]'], [Event, 'event[project_ids][]'], [FileTemplate, 'file_template[project_ids][]'], From bdc23de7e85e32359d76aa13d2a1b5e7e4b8a8a8 Mon Sep 17 00:00:00 2001 From: fherreazcue Date: Wed, 1 Nov 2023 14:37:23 +0000 Subject: [PATCH 04/16] Forwards params to make samples --- app/controllers/samples_controller.rb | 2 +- app/views/sample_types/select.html.erb | 2 +- app/views/sample_types/select/_filtered_sample_types.html.erb | 2 +- lib/seek/add_buttons.rb | 1 + 4 files changed, 4 insertions(+), 3 deletions(-) diff --git a/app/controllers/samples_controller.rb b/app/controllers/samples_controller.rb index 91d53f5645..28a4903906 100644 --- a/app/controllers/samples_controller.rb +++ b/app/controllers/samples_controller.rb @@ -43,7 +43,7 @@ def new @sample = Sample.new(sample_type_id: params[:sample_type_id]) respond_with(@sample) else - redirect_to select_sample_types_path(act: :create) + redirect_to select_sample_types_path(act: :create, project_ids: params[:sample][:project_ids]) end end diff --git a/app/views/sample_types/select.html.erb b/app/views/sample_types/select.html.erb index 578d222872..5e439b7112 100644 --- a/app/views/sample_types/select.html.erb +++ b/app/views/sample_types/select.html.erb @@ -63,7 +63,7 @@ From 614e01f14bc648f007a7c4d0857ffc667434044a Mon Sep 17 00:00:00 2001 From: fherreazcue Date: Wed, 22 Nov 2023 12:29:25 +0000 Subject: [PATCH 14/16] Add project_ids to legacy_ro_crate_params --- app/controllers/concerns/legacy/workflow_support.rb | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/app/controllers/concerns/legacy/workflow_support.rb b/app/controllers/concerns/legacy/workflow_support.rb index edbef66ce8..75ae62025e 100644 --- a/app/controllers/concerns/legacy/workflow_support.rb +++ b/app/controllers/concerns/legacy/workflow_support.rb @@ -11,7 +11,6 @@ module WorkflowSupport def create_ro_crate @crate_builder = Legacy::WorkflowCrateBuilder.new(legacy_ro_crate_params) @workflow.workflow_class = @crate_builder.workflow_class = WorkflowClass.find_by_id(params[:workflow_class_id]) - @workflow.project_ids |= params[:workflow] ? params[:workflow][:project_ids] : params[:project_ids] || [] blob_params = @crate_builder.build @content_blob = ContentBlob.new(blob_params) @@ -32,7 +31,6 @@ def create_content_blob if handle_upload_data && @workflow.content_blob.save @content_blob = @workflow.content_blob @workflow = workflow - @workflow.project_ids |= params[:workflow] ? params[:workflow][:project_ids] : params[:project_ids] || [] if extract_metadata(@content_blob) format.html { render :provide_metadata } else @@ -48,9 +46,11 @@ def create_content_blob private def legacy_ro_crate_params - params.require(:ro_crate).permit({ workflow: [:data, :data_url, :make_local_copy] }, + l_params = params.require(:ro_crate).permit({ workflow: [:data, :data_url, :make_local_copy]}, { abstract_cwl: [:data, :data_url, :make_local_copy] }, { diagram: [:data, :data_url, :make_local_copy] }) + l_params[:workflow][:project_ids] = params.dig(:workflow, :project_ids) || [] + l_params end def legacy_set_workflow From 888fdf72f5d3daadc654d9c333089f9c678d5dfd Mon Sep 17 00:00:00 2001 From: Finn Bacall Date: Tue, 21 Nov 2023 15:10:19 +0000 Subject: [PATCH 15/16] Include `project_ids` in params --- app/controllers/workflows_controller.rb | 7 +++---- app/models/workflow_repository_builder.rb | 4 ++-- 2 files changed, 5 insertions(+), 6 deletions(-) diff --git a/app/controllers/workflows_controller.rb b/app/controllers/workflows_controller.rb index 4e2d7b3eef..f5d8600699 100644 --- a/app/controllers/workflows_controller.rb +++ b/app/controllers/workflows_controller.rb @@ -104,9 +104,8 @@ def update # Takes a single RO-Crate zip file def create_from_ro_crate - @crate_extractor = WorkflowCrateExtractor.new(ro_crate_extractor_params) + @crate_extractor = WorkflowCrateExtractor.new(ro_crate_extractor_params.merge(params: workflow_params)) @workflow = @crate_extractor.build - @workflow.project_ids |= params[:workflow] ? params[:workflow][:project_ids] : params[:project_ids] || [] respond_to do |format| if @crate_extractor.valid? @@ -122,7 +121,6 @@ def create_from_files @crate_builder = WorkflowRepositoryBuilder.new(ro_crate_params) @crate_builder.workflow_class = @workflow.workflow_class @workflow = @crate_builder.build - @workflow.project_ids |= params[:workflow] ? params[:workflow][:project_ids] : params[:project_ids] || [] respond_to do |format| if @crate_builder.valid? @@ -372,7 +370,8 @@ def workflow_params def ro_crate_params params.require(:ro_crate).permit({ main_workflow: [:data, :data_url, :make_local_copy] }, { abstract_cwl: [:data, :data_url, :make_local_copy] }, - { diagram: [:data, :data_url, :make_local_copy] }) + { diagram: [:data, :data_url, :make_local_copy] }).merge( + params.fetch(:workflow, {}).permit(project_ids: [])) end def ro_crate_extractor_params diff --git a/app/models/workflow_repository_builder.rb b/app/models/workflow_repository_builder.rb index a355d9c39e..def75543c8 100644 --- a/app/models/workflow_repository_builder.rb +++ b/app/models/workflow_repository_builder.rb @@ -6,14 +6,14 @@ class WorkflowRepositoryBuilder include ActiveModel::Model - attr_accessor :main_workflow, :abstract_cwl, :diagram, :workflow_class + attr_accessor :main_workflow, :abstract_cwl, :diagram, :workflow_class, :project_ids validates :main_workflow, presence: true validate :resolve_remotes validate :workflow_data_present def build - @workflow = Workflow.new(workflow_class: workflow_class, is_git_versioned: true) + @workflow = Workflow.new(workflow_class: workflow_class, is_git_versioned: true, project_ids: project_ids || []) if valid? gv = @workflow.git_version From dadfe1c5c6cef961c09086aabea4f613b2a470c5 Mon Sep 17 00:00:00 2001 From: Finn Bacall Date: Wed, 22 Nov 2023 14:53:02 +0000 Subject: [PATCH 16/16] Handle case where workflow params not provided --- app/controllers/workflows_controller.rb | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/app/controllers/workflows_controller.rb b/app/controllers/workflows_controller.rb index f5d8600699..1929cf7960 100644 --- a/app/controllers/workflows_controller.rb +++ b/app/controllers/workflows_controller.rb @@ -104,7 +104,8 @@ def update # Takes a single RO-Crate zip file def create_from_ro_crate - @crate_extractor = WorkflowCrateExtractor.new(ro_crate_extractor_params.merge(params: workflow_params)) + @crate_extractor = WorkflowCrateExtractor.new(ro_crate_extractor_params.merge( + params: params.key?(:workflow) ? workflow_params : {})) @workflow = @crate_extractor.build respond_to do |format|