mirror of
https://github.com/scinote-eln/scinote-web.git
synced 2025-09-30 08:54:31 +08:00
Implement unlinking on inventory unsharing [SCI-9714] (#6736)
This commit is contained in:
parent
dceb92021a
commit
00092b8059
2 changed files with 40 additions and 0 deletions
|
@ -37,6 +37,7 @@ class Repository < RepositoryBase
|
|||
after_save :assign_globally_shared_inventories, if: -> { saved_change_to_permission_level? && globally_shared? }
|
||||
after_save :unassign_globally_shared_inventories, if: -> { saved_change_to_permission_level? && !globally_shared? }
|
||||
after_save :unassign_unshared_items, if: :saved_change_to_permission_level
|
||||
after_save :unlink_unshared_items, if: -> { saved_change_to_permission_level? && !globally_shared? }
|
||||
|
||||
validates :name,
|
||||
presence: true,
|
||||
|
@ -249,6 +250,26 @@ class Repository < RepositoryBase
|
|||
.destroy_all
|
||||
end
|
||||
|
||||
def unlink_unshared_items
|
||||
repository_rows_ids = repository_rows.select(:id)
|
||||
rows_to_unlink = RepositoryRow.joins("LEFT JOIN repository_row_connections \
|
||||
ON repository_rows.id = repository_row_connections.parent_id \
|
||||
OR repository_rows.id = repository_row_connections.child_id")
|
||||
.where("repository_row_connections.parent_id IN (?) \
|
||||
OR repository_row_connections.child_id IN (?)",
|
||||
repository_rows_ids,
|
||||
repository_rows_ids)
|
||||
.joins(:repository)
|
||||
.where.not(repositories: self)
|
||||
.where.not(repositories: { team: team })
|
||||
.distinct
|
||||
|
||||
RepositoryRowConnection.where(parent: repository_rows_ids, child: rows_to_unlink)
|
||||
.destroy_all
|
||||
RepositoryRowConnection.where(child: repository_rows_ids, parent: rows_to_unlink)
|
||||
.destroy_all
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def sync_name_with_snapshots
|
||||
|
|
|
@ -4,6 +4,7 @@ class TeamSharedObject < ApplicationRecord
|
|||
enum permission_level: Extends::SHARED_OBJECTS_PERMISSION_LEVELS.except(:not_shared)
|
||||
|
||||
after_create :assign_shared_inventories, if: -> { shared_object.is_a?(Repository) }
|
||||
before_destroy :unlink_unshared_items, if: -> { shared_object.is_a?(Repository) }
|
||||
before_destroy :unassign_unshared_items, if: -> { shared_object.is_a?(Repository) }
|
||||
before_destroy :unassign_unshared_inventories, if: -> { shared_object.is_a?(Repository) }
|
||||
|
||||
|
@ -55,4 +56,22 @@ class TeamSharedObject < ApplicationRecord
|
|||
def unassign_unshared_inventories
|
||||
team.repository_sharing_user_assignments.where(assignable: shared_object).find_each(&:destroy!)
|
||||
end
|
||||
|
||||
def unlink_unshared_items
|
||||
repository_rows_ids = shared_object.repository_rows.select(:id)
|
||||
rows_to_unlink = RepositoryRow.joins("LEFT JOIN repository_row_connections \
|
||||
ON repository_rows.id = repository_row_connections.parent_id \
|
||||
OR repository_rows.id = repository_row_connections.child_id")
|
||||
.where("repository_row_connections.parent_id IN (?) \
|
||||
OR repository_row_connections.child_id IN (?)",
|
||||
repository_rows_ids,
|
||||
repository_rows_ids)
|
||||
.joins(:repository)
|
||||
.where(repositories: { team: team })
|
||||
|
||||
RepositoryRowConnection.where(parent: rows_to_unlink, child: repository_rows_ids)
|
||||
.destroy_all
|
||||
RepositoryRowConnection.where(parent: repository_rows_ids, child: rows_to_unlink)
|
||||
.destroy_all
|
||||
end
|
||||
end
|
||||
|
|
Loading…
Add table
Reference in a new issue