Merge pull request #8048 from artoscinote/ma_SCI_11295

Fix recording of asset authors when duplicating stuff and restoring versions [SCI-11295]
This commit is contained in:
Martin Artnik 2024-11-18 15:52:34 +01:00 committed by GitHub
commit 50240647cf
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
5 changed files with 18 additions and 7 deletions

View file

@ -361,7 +361,8 @@ class AssetsController < ApplicationController
when Step, Result
new_asset = @asset.duplicate(
new_name:
"#{@asset.file.filename.base} (1).#{@asset.file.filename.extension}"
"#{@asset.file.filename.base} (1).#{@asset.file.filename.extension}",
created_by: current_user
)
@asset.parent.assets << new_asset
@ -416,6 +417,8 @@ class AssetsController < ApplicationController
def restore_version
render_403 unless VersionedAttachments.enabled?
@asset.last_modified_by = current_user
@asset.restore_file_version(params[:version].to_i)
@asset.restore_preview_image_version(params[:version].to_i) if @asset.preview_image.attached?
@ -445,6 +448,8 @@ class AssetsController < ApplicationController
@repository.team, nil, message_items)
end
@asset.save!
render json: @asset.file.blob
end

View file

@ -145,10 +145,15 @@ class Asset < ApplicationRecord
file&.blob&.content_type
end
def duplicate(new_name: nil, include_file_versions: false)
def duplicate(new_name: nil, include_file_versions: false, created_by: nil)
new_asset = dup
file.filename = new_name if new_name
if created_by
new_asset.created_by = created_by
new_asset.last_modified_by = created_by
end
return unless new_asset.save
duplicate_file(new_asset, new_name: new_name, include_file_versions: include_file_versions)
@ -163,7 +168,7 @@ class Asset < ApplicationRecord
new_blob = ActiveStorage::Blob.create_and_upload!(
io: tmp_file,
filename: blob.filename,
metadata: metadata || blob.metadata
metadata: (metadata || blob.metadata)
)
attach_method.call(new_blob)
@ -194,6 +199,7 @@ class Asset < ApplicationRecord
unless include_file_versions
metadata.delete('version')
metadata.delete('restored_from_version')
metadata['created_by_id'] = to_asset.created_by_id
end
duplicate_file_versions(to_asset) if include_file_versions

View file

@ -14,7 +14,7 @@ module VersionedAttachments
__send__(name).attach(*args, **options)
new_blob = __send__(name).blob
new_blob.metadata['created_by_id'] = last_modified_by_id
new_blob.metadata['created_by_id'] ||= last_modified_by_id
# set version of current latest file if previous versions exist
new_blob.save! and next unless __send__(:"previous_#{name.to_s.pluralize}").any?
@ -36,7 +36,7 @@ module VersionedAttachments
new_blob = ActiveStorage::Blob.create_and_upload!(
io: tmp_file,
filename: blob.filename,
metadata: blob.metadata.merge({ 'restored_from_version' => version })
metadata: blob.metadata.merge({ 'restored_from_version' => version, 'created_by_id' => last_modified_by_id })
)
__send__(:"attach_#{name}_version", new_blob)

View file

@ -142,7 +142,7 @@ class Step < ApplicationRecord
# "Shallow" Copy assets
assets.each do |asset|
new_asset = asset.dup
new_asset.save!
new_asset.update!(created_by: user, last_modified_by: user)
new_step.assets << new_asset
assets_to_clone << [asset.id, new_asset.id]
end

View file

@ -25,7 +25,7 @@ module RepositoryActions
private
def repository_asset_value_extra_attributes(value)
new_asset = @cell.value.asset.duplicate
new_asset = @cell.value.asset.duplicate(created_by: @user)
value.asset = new_asset
end