diff --git a/app/services/blocks_migration.rb b/app/services/blocks_migration.rb new file mode 100644 index 0000000000000000000000000000000000000000..d5b0e3cdbe92d9467e6d7e83780d11553fcbb6f5 --- /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 959a1b37c9dd48f10200d5d67e983c9b720b337b..1759bf440d4f4585af936ac41f8afceb1fc5856d 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 d8cb814a9e5b3bece58a93182314ad199923f683..1dda42bfe2c89d2f48f95021f1d2a84d22c1e7b3 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