mirror of https://github.com/docusealco/docuseal
				
				
				
			
			You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							55 lines
						
					
					
						
							1.6 KiB
						
					
					
				
			
		
		
	
	
							55 lines
						
					
					
						
							1.6 KiB
						
					
					
				| # frozen_string_literal: true
 | |
| 
 | |
| module Templates
 | |
|   module CloneAttachments
 | |
|     module_function
 | |
| 
 | |
|     def call(template:, original_template:)
 | |
|       schema_uuids_replacements = {}
 | |
| 
 | |
|       cloned_schema = original_template['schema'].deep_dup
 | |
|       cloned_fields = template['fields'].deep_dup
 | |
| 
 | |
|       cloned_schema.each do |schema_item|
 | |
|         new_schema_item_uuid = SecureRandom.uuid
 | |
| 
 | |
|         schema_uuids_replacements[schema_item['attachment_uuid']] = new_schema_item_uuid
 | |
|         schema_item['attachment_uuid'] = new_schema_item_uuid
 | |
|       end
 | |
| 
 | |
|       cloned_fields.each do |field|
 | |
|         next if field['areas'].blank?
 | |
| 
 | |
|         field['areas'].each do |area|
 | |
|           area['attachment_uuid'] = schema_uuids_replacements[area['attachment_uuid']]
 | |
|         end
 | |
|       end
 | |
| 
 | |
|       template.update!(schema: cloned_schema, fields: cloned_fields)
 | |
| 
 | |
|       original_template.schema_documents.preload(:preview_images_attachments).each do |document|
 | |
|         new_document = ActiveStorage::Attachment.create!(
 | |
|           uuid: schema_uuids_replacements[document.uuid],
 | |
|           blob_id: document.blob_id,
 | |
|           name: 'documents',
 | |
|           record: template
 | |
|         )
 | |
| 
 | |
|         clone_document_preview_images_attachments(document:, new_document:)
 | |
|       end
 | |
|     end
 | |
| 
 | |
|     def clone_document_preview_images_attachments(document:, new_document:)
 | |
|       ApplicationRecord.no_touching do
 | |
|         document.preview_images_attachments.each do |preview_image|
 | |
|           ActiveStorage::Attachment.create!(
 | |
|             blob_id: preview_image.blob_id,
 | |
|             name: 'preview_images',
 | |
|             record: new_document
 | |
|           )
 | |
|         end
 | |
|       end
 | |
|     end
 | |
|   end
 | |
| end
 |