diff --git a/app/controllers/my_modules_controller.rb b/app/controllers/my_modules_controller.rb index d828ff408..1f5b32fbe 100644 --- a/app/controllers/my_modules_controller.rb +++ b/app/controllers/my_modules_controller.rb @@ -7,24 +7,14 @@ class MyModulesController < ApplicationController include ActionView::Helpers::UrlHelper include ApplicationHelper - before_action :load_vars, - only: %i(show update destroy description due_date protocols - results samples activities activities_tab - assign_samples unassign_samples delete_samples - toggle_task_state samples_index archive - complete_my_module repository repository_index - assign_repository_records unassign_repository_records - unassign_repository_records_modal - assign_repository_records_modal - repositories_dropdown update_description update_protocol_description unshared_inventory) - before_action :load_vars_nested, only: %i(new create) + before_action :load_vars before_action :load_repository, only: %i(assign_repository_records unassign_repository_records unassign_repository_records_modal assign_repository_records_modal repository_index) before_action :load_projects_tree, only: %i(protocols results activities - samples repository archive unshared_inventory) + samples repository archive) before_action :check_manage_permissions_archive, only: %i(update destroy) before_action :check_manage_permissions, only: %i(description due_date update_description update_protocol_description) @@ -527,11 +517,6 @@ class MyModulesController < ApplicationController end end - def unshared_inventory - @inventory = Repository.used_on_task_but_unshared(@my_module, current_team).find(params[:inventory_id]) - @inventory_admin = @inventory.created_by - end - private def task_completion_activity diff --git a/app/models/repository.rb b/app/models/repository.rb index c9cf45c85..0522a47fb 100644 --- a/app/models/repository.rb +++ b/app/models/repository.rb @@ -15,6 +15,7 @@ class Repository < RepositoryBase inverse_of: :original_repository before_save :sync_name_with_snapshots, if: :name_changed? + after_save :unassign_unshared_items, if: :saved_change_to_permission_level before_destroy :refresh_report_references_on_destroy, prepend: true validates :name, @@ -35,12 +36,6 @@ class Repository < RepositoryBase .distinct } - scope :used_on_task_but_unshared, lambda { |task, team| - where(id: task.repository_rows - .select(:repository_id)) - .where.not(id: accessible_by_teams(team.id).select(:id)).distinct - } - def self.within_global_limits? return true unless Rails.configuration.x.global_repositories_limit.positive? @@ -212,6 +207,17 @@ class Repository < RepositoryBase repository_rows.joins(:my_module_repository_rows).where(my_module_repository_rows: { my_module_id: my_module.id }) end + def unassign_unshared_items + return if shared_read? || shared_write? + + MyModuleRepositoryRow.joins(my_module: { experiment: { project: :team } }) + .joins(repository_row: :repository) + .where(repository_rows: { repository: self }) + .where.not(my_module: { experiment: { projects: { team: team } } }) + .where.not(my_module: { experiment: { projects: { team: teams_shared_with } } }) + .destroy_all + end + private def sync_name_with_snapshots diff --git a/app/models/team_repository.rb b/app/models/team_repository.rb index cc551160b..4f53a80bf 100644 --- a/app/models/team_repository.rb +++ b/app/models/team_repository.rb @@ -6,6 +6,8 @@ class TeamRepository < ApplicationRecord belongs_to :team belongs_to :repository + before_destroy :unassign_unshared_items + validates :permission_level, presence: true validates :repository, uniqueness: { scope: :team_id } validate :team_cannot_be_the_same @@ -15,4 +17,14 @@ class TeamRepository < ApplicationRecord def team_cannot_be_the_same errors.add(:team_id, :same_team) if repository&.team_id == team_id end + + def unassign_unshared_items + return if repository.shared_read? || repository.shared_write? + + MyModuleRepositoryRow.joins(my_module: { experiment: { project: :team } }) + .joins(repository_row: :repository) + .where(my_module: { experiment: { projects: { team: team } } }) + .where(repository_rows: { repository: repository }) + .destroy_all + end end diff --git a/app/views/my_modules/_repositories_dropdown.html.erb b/app/views/my_modules/_repositories_dropdown.html.erb index baa9fd2d8..c315629bb 100644 --- a/app/views/my_modules/_repositories_dropdown.html.erb +++ b/app/views/my_modules/_repositories_dropdown.html.erb @@ -16,23 +16,3 @@ <% end %> - - -<% Repository.used_on_task_but_unshared(@my_module, current_team).each do |repository| %> -