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 when Step, Result
new_asset = @asset.duplicate( new_asset = @asset.duplicate(
new_name: 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 @asset.parent.assets << new_asset
@ -416,6 +417,8 @@ class AssetsController < ApplicationController
def restore_version def restore_version
render_403 unless VersionedAttachments.enabled? render_403 unless VersionedAttachments.enabled?
@asset.last_modified_by = current_user
@asset.restore_file_version(params[:version].to_i) @asset.restore_file_version(params[:version].to_i)
@asset.restore_preview_image_version(params[:version].to_i) if @asset.preview_image.attached? @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) @repository.team, nil, message_items)
end end
@asset.save!
render json: @asset.file.blob render json: @asset.file.blob
end end

View file

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

View file

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

View file

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

View file

@ -25,7 +25,7 @@ module RepositoryActions
private private
def repository_asset_value_extra_attributes(value) 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 value.asset = new_asset
end end