Skip to content
Snippets Groups Projects
Unverified Commit bfcb6aa1 authored by Arnaud Levy's avatar Arnaud Levy Committed by GitHub
Browse files

Réparation des duplications (#2262)

* duplicable

* rescue

* fix
parent 6ed787ef
No related branches found
No related tags found
No related merge requests found
......@@ -32,10 +32,10 @@
#
class Communication::Website::Agenda::Event < ApplicationRecord
include AsDirectObject
include Duplicable
include Filterable
include Sanitizable
include Localizable
include WithDuplication
include WithMenuItemTarget
include WithTime
include WithTree
......
......@@ -24,10 +24,10 @@
#
class Communication::Website::Portfolio::Project < ApplicationRecord
include AsDirectObject
include Duplicable
include Filterable
include Sanitizable
include Localizable
include WithDuplication
include WithMenuItemTarget
include WithUniversity
......
......@@ -24,10 +24,10 @@
#
class Communication::Website::Post < ApplicationRecord
include AsDirectObject
include Duplicable
include Filterable
include Sanitizable
include Localizable
include WithDuplication
include WithMenuItemTarget
include WithUniversity
......
module WithDuplication
module Duplicable
extend ActiveSupport::Concern
def duplicate
instance = duplicate_instance
duplicate_contents_to(instance)
duplicate_featured_image_to(instance)
duplicate_localizations_for(instance)
instance
end
......@@ -12,21 +11,39 @@ module WithDuplication
def duplicate_instance
instance = self.dup
# note: fragile. It only works because every duplicate objects currently has a "title" property.
instance.title = I18n.t('copy_of', title: self.title)
instance.published = false if respond_to?(:published)
instance.published_at = nil if respond_to?(:published_at)
instance.save
instance
end
def duplicate_contents_to(instance)
return unless respond_to?(:contents)
blocks.without_heading.ordered.each do |block|
duplicate_block(instance, block)
def duplicate_localizations_for(instance)
localizations.each do |l10n|
instance_l10n = l10n.dup
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.save
duplicate_featured_image(l10n, instance_l10n)
duplicate_blocks(l10n, instance_l10n)
end
headings.root.ordered.each do |heading|
duplicate_heading(instance, heading)
end
def duplicate_featured_image(from, to)
return unless from.respond_to?(:featured_image) && from.featured_image.attached?
to.featured_image.attach(
io: URI.parse(from.featured_image.url).open,
filename: from.featured_image.filename.to_s,
content_type: from.featured_image.content_type
)
rescue
end
def duplicate_blocks(from, to)
return unless from.respond_to?(:contents)
from.blocks.without_heading.ordered.each do |block|
duplicate_block(to, block)
end
from.headings.root.ordered.each do |heading|
duplicate_heading(to, heading)
end
end
......@@ -52,13 +69,4 @@ module WithDuplication
duplicate_heading(instance, child, duplicated_heading.id)
end
end
def duplicate_featured_image_to(instance)
return unless respond_to?(:featured_image) && featured_image.attached?
instance.featured_image.attach(
io: URI.open(featured_image.url),
filename: featured_image.filename.to_s,
content_type: featured_image.content_type
)
end
end
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment