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| %> -
  • - - - <% if enable_counters %> - <% cache [repository, @my_module] do %> - <%= truncate(repository.name) %> - <%= "(#{@my_module.repository_rows_count(repository)})" %> - <% end %> - <% else %> - <%= truncate(repository.name) %> - - <% end %> - -
  • -<% end %> diff --git a/app/views/my_modules/unshared_inventory.html.erb b/app/views/my_modules/unshared_inventory.html.erb deleted file mode 100644 index ff203f0a5..000000000 --- a/app/views/my_modules/unshared_inventory.html.erb +++ /dev/null @@ -1,19 +0,0 @@ -<% provide(:head_title, t("my_modules.repository.head_title", - project: h(@project.name), - module: h(@my_module.name), - repository: h(@inventory.name)).html_safe) %> - -<%= render partial: "shared/sidebar", locals: { current_task: @my_module, page: 'task' } %> -<%= render partial: "shared/secondary_navigation" %> - -
    -
    -

    <%= t("my_modules.unshared_inventory.title_html", inventory_name: @inventory.name) %>

    - <%= t("my_modules.unshared_inventory.body_html", - inventory_name: @inventory.name, - team_name: @inventory.team.name, - admin_name: @inventory_admin.name, - admin_email: @inventory_admin.email) %> - -
    -
    diff --git a/config/routes.rb b/config/routes.rb index 70d951786..206b1649d 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -450,9 +450,6 @@ Rails.application.routes.draw do post 'unassign_repository_records/:repository_id', to: 'my_modules#unassign_repository_records', as: :unassign_repository_records - get 'unshared_inventory/:inventory_id', - to: 'my_modules#unshared_inventory', - as: :unshared_inventory get 'archive' # Archive view for single module get 'complete_my_module' post 'toggle_task_state'