Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 6 additions & 9 deletions app/models/communication/block.rb
Original file line number Diff line number Diff line change
Expand Up @@ -100,24 +100,21 @@ def language
@language ||= about.language
end

def duplicate
def duplicate(to: about, reset_position: true)

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

maintain_position

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ou keep_position

block = self.dup
block.about = to
block.migration_identifier = nil
block.position = nil if reset_position
block.save
block
end

def paste(about)
block = self.dup
block.about = about
block.position = nil # Will be computed on save
block.save
block
duplicate(to: about)
end

def localize_for!(new_localization)
localized_block = self.dup
localized_block.about = new_localization
localized_block.save
duplicate(to: new_localization, reset_position: false)
end

def empty?
Expand Down
2 changes: 2 additions & 0 deletions app/models/concerns/as_localization.rb
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,8 @@ def localize_in!(language)
# Localized should not be published immediately
l10n.published = false if respond_to?(:published)

l10n.migration_identifier = nil if respond_to?(:migration_identifier)

localize_other_attachments(l10n)

# Blocks need an about, so we save before localizing blocks
Expand Down
11 changes: 3 additions & 8 deletions app/models/concerns/duplicable.rb
Original file line number Diff line number Diff line change
Expand Up @@ -15,14 +15,15 @@ def duplicate
def duplicate_blocks(from, to)
return unless from.respond_to?(:blocks)
from.blocks.ordered.each do |block|
duplicate_block(to, block)
block.duplicate(to: to)
end
end

protected

def duplicate_instance
instance = self.dup
instance.migration_identifier = nil if instance.respond_to?(:migration_identifier)
instance.position = nil if instance.respond_to?(:position)
instance.save
instance
Expand All @@ -39,17 +40,11 @@ def duplicate_localizations_for(instance)
instance_l10n.about = instance
# note: fragile. It only works because every duplicate objects currently has a "title" property.
instance_l10n.title = I18n.t('copy_of', title: l10n.title)
instance_l10n.migration_identifier = nil if instance_l10n.respond_to?(:migration_identifier)
instance_l10n.published = false if instance_l10n.respond_to?(:published)
instance_l10n.published_at = nil if instance_l10n.respond_to?(:published_at)
instance_l10n.save
duplicate_blocks(l10n, instance_l10n)
end
end

def duplicate_block(instance, block)
duplicated_block = block.dup
duplicated_block.about = instance
duplicated_block.position = block.position
duplicated_block.save
end
end
Loading