123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051 |
- class FixedTwitterTicketArticlePreferences7 < ActiveRecord::Migration[5.0]
- def up
- # return if it's a new setup
- return if !Setting.exists?(name: 'system_init_done')
- # find article preferences with Twitter::NullObject and replace it with nill to prevent elasticsearch index issue
- article_type_ids = Ticket::Article::Type.where(name: ['twitter status', 'twitter direct-message']).pluck(:id)
- article_ids = Ticket::Article.where(type_id: article_type_ids).pluck(:id)
- article_ids.each do |article_id|
- article = Ticket::Article.find(article_id)
- next if !article.preferences
- changed = false
- article.preferences.each_value do |value|
- next if value.class != ActiveSupport::HashWithIndifferentAccess
- value.each do |sub_key, sub_level|
- if sub_level.class == NilClass
- value[sub_key] = nil
- next
- end
- if sub_level.class == Twitter::Place || sub_level.class == Twitter::Geo
- value[sub_key] = sub_level.to_h
- changed = true
- next
- end
- next if sub_level.class != Twitter::NullObject
- value[sub_key] = nil
- changed = true
- end
- end
- if article.preferences[:twitter]&.key?(:geo) && article.preferences[:twitter][:geo].nil?
- article.preferences[:twitter][:geo] = {}
- changed = true
- end
- if article.preferences[:twitter]&.key?(:place) && article.preferences[:twitter][:place].nil?
- article.preferences[:twitter][:place] = {}
- changed = true
- end
- next if !changed
- article.save!
- end
- end
- end
|