trabajo-afectivo/db/migrate/20220329075919_remove_duplicate_translations.rb

36 lines
1.4 KiB
Ruby

# Copyright (C) 2012-2022 Zammad Foundation, https://zammad-foundation.org/
class RemoveDuplicateTranslations < ActiveRecord::Migration[6.0]
def change
# return if it's a new setup
return if !Setting.exists?(name: 'system_init_done')
# For some obsure reason, in legacy systems there was a chance that Translation records with the same locale and source
# appeared multiple times.
Locale.all.each do |locale|
# Remove duplicates of all synchronized strings first.
cleanup_duplicates_of_synchronized(locale)
# Remove other duplicates of unsynchronized strings as well.
cleanup_duplicates_of_unsynchronized(locale)
end
end
def cleanup_duplicates_of_synchronized(locale)
unsync_translations = Translation.where(locale: locale.locale, is_synchronized_from_codebase: false).all
Translation.where(locale: locale.locale, is_synchronized_from_codebase: true).all.each do |t|
unsync_translations.select { |unsync_t| unsync_t.source == t.source }.each(&:destroy)
end
end
def cleanup_duplicates_of_unsynchronized(locale)
unsync_translations = Translation.where(locale: locale.locale, is_synchronized_from_codebase: false).order(:id).all
unsync_translations.each do |t|
next if t.destroyed?
unsync_translations.select { |check_t| check_t.id > t.id && check_t.source == t.source && !check_t.destroyed? }.each(&:destroy)
end
end
end