From b5079acd297d8b696d251eea3c579d5bf47f7dcd Mon Sep 17 00:00:00 2001
From: pabois <pierreandre.boissinot@noesya.coop>
Date: Mon, 20 Jun 2022 17:15:51 +0200
Subject: [PATCH] scripts migration blocks

---
 app/services/blocks_migration.rb | 115 +++++++++++++++++++++++++++++++
 config/application.rb            |   2 +-
 lib/tasks/app.rake               |   2 +
 3 files changed, 118 insertions(+), 1 deletion(-)
 create mode 100644 app/services/blocks_migration.rb

diff --git a/app/services/blocks_migration.rb b/app/services/blocks_migration.rb
new file mode 100644
index 000000000..d5b0e3cdb
--- /dev/null
+++ b/app/services/blocks_migration.rb
@@ -0,0 +1,115 @@
+class BlocksMigration
+
+  def self.cleanup
+    clean_cta
+    clean_chapter
+    clean_definitions
+    clean_gallery
+    clean_image
+    clean_posts
+    clean_pages
+  end
+
+  private
+
+  def self.clean_cta
+    Communication::Block.where(template_kind: 'call_to_action').each do |block|
+      data = block['data']
+      if data && data['url'].present?
+        elements = []
+        if data['url'].present?
+          elements << { title: data['button'], url: data['url'], target_blank: data['target_blank']}
+        end
+        if data['url_secondary'].present?
+          elements << { title: data['button_secondary'], url: data['url_secondary'], target_blank: data['target_blank_secondary']}
+        end
+        if data['url_tertiary'].present?
+          elements << { title: data['button_tertiary'], url: data['url_tertiary'], target_blank: data['target_blank_tertiary']}
+        end
+        data['elements'] = elements
+        data['alt'] = data['image_alt']
+        data['credit'] = data['image_credit']
+        block['data'] = data
+
+        block.save
+      end
+    end
+  end
+
+  def self.clean_chapter
+    Communication::Block.where(template_kind: 'chapter').each do |block|
+      data = block['data']
+      if data && (data['image_alt'].present? || data['image_credit'].present?)
+        data['alt'] = data['image_alt']
+        data['credit'] = data['image_credit']
+        block['data'] = data
+        block.save
+      end
+    end
+  end
+
+  def self.clean_definitions
+    Communication::Block.where(template_kind: 'definitions').each do |block|
+      data = block['data']
+      if data && data['elements'].any? && data['elements'].first.has_key?('text')
+        elements = []
+        data['elements'].each do |elmt|
+          elements << { title: elmt['title'], description: elmt['text'] }
+        end
+        data['elements'] = elements
+        block['data'] = data
+        block.save
+      end
+    end
+  end
+
+  def self.clean_gallery
+    Communication::Block.where(template_kind: 'gallery').each do |block|
+      data = block['data']
+      if data && data['elements'].any? && data['elements'].first.has_key?('file')
+        elements = []
+        data['elements'].each do |elmt|
+          elements << { alt: elmt['alt'], text: elmt['text'], credit: elmt['credit'], image: elmt['file'] }
+        end
+        data['elements'] = elements
+        block['data'] = data
+        block.save
+      end
+    end
+  end
+
+  def self.clean_image
+    Communication::Block.where(template_kind: 'image').each do |block|
+      data = block['data']
+      if data && (data['image_alt'].present? || data['image_credit'].present?)
+        data['alt'] = data['image_alt']
+        data['credit'] = data['image_credit']
+        block['data'] = data
+        block.save
+      end
+    end
+  end
+
+  def self.clean_posts
+    Communication::Block.where(template_kind: 'posts').each do |block|
+      data = block['data']
+      if data && data['kind'].present?
+        data['mode'] = data['kind']
+        block['data'] = data
+        block.save
+      end
+    end
+  end
+
+  def self.clean_pages
+    Communication::Block.where(template_kind: 'pages').each do |block|
+      data = block['data']
+      if data && data['kind'].present?
+        data['mode'] = data['kind']
+        block['data'] = data
+        block.save
+      end
+    end
+  end
+
+end
diff --git a/config/application.rb b/config/application.rb
index 959a1b37c..1759bf440 100644
--- a/config/application.rb
+++ b/config/application.rb
@@ -64,7 +64,7 @@ module Osuny
       "decoding", "frameborder", "height", "href", "loading", "mozallowfullscreen",
       "name", "sizes", "src", "srcset", "target", "title", "type",
       "webkitallowfullscreen", "width", "xml:lang",
-      "sgid", "content-type", "url", "filename", "filesize", "previewable"
+      "sgid", "content-type", "url", "filename", "filesize", "previewable", "referrerpolicy"
     ]
 
     config.allowed_special_chars = '#?!,_@$%^&*+:;£µ-'
diff --git a/lib/tasks/app.rake b/lib/tasks/app.rake
index d8cb814a9..1dda42bfe 100644
--- a/lib/tasks/app.rake
+++ b/lib/tasks/app.rake
@@ -17,6 +17,8 @@ namespace :app do
       clean_header_text = ActionController::Base.helpers.strip_tags(page.header_text)
       page.update(header_text: clean_header_text)
     }
+
+    BlocksMigration.cleanup
   end
 
   namespace :websites do
-- 
GitLab