When using the OR operator, if the left side of the expression evaluates to false, its right side is taken into consideration. Since in Ruby nil is false, we can avoid using conditionals for this particular scenario
77 lines
2.0 KiB
Ruby
77 lines
2.0 KiB
Ruby
class Admin::SiteCustomization::InformationTextsController < Admin::SiteCustomization::BaseController
|
|
include Translatable
|
|
|
|
def index
|
|
fetch_existing_keys
|
|
append_or_create_keys
|
|
@content = @content[@tab.to_s]
|
|
end
|
|
|
|
def update
|
|
content_params.each do |content|
|
|
values = content[:values].slice(*translation_params(I18nContent))
|
|
|
|
unless values.empty?
|
|
values.each do |key, value|
|
|
locale = key.split('_').last
|
|
|
|
if value == t(content[:id], locale: locale) || value.match(/translation missing/)
|
|
next
|
|
else
|
|
text = I18nContent.find_or_create_by(key: content[:id])
|
|
Globalize.locale = locale
|
|
text.update(value: value)
|
|
end
|
|
end
|
|
end
|
|
|
|
end
|
|
|
|
redirect_to admin_site_customization_information_texts_path,
|
|
notice: t('flash.actions.update.translation')
|
|
end
|
|
|
|
private
|
|
|
|
def resource
|
|
I18nContent.find(content_params[:id])
|
|
end
|
|
|
|
def content_params
|
|
params.require(:contents).values
|
|
end
|
|
|
|
def delete_translations
|
|
languages_to_delete = params[:enabled_translations].select { |_, v| v == '0' }
|
|
.keys
|
|
|
|
languages_to_delete.each do |locale|
|
|
I18nContentTranslation.destroy_all(locale: locale)
|
|
end
|
|
end
|
|
|
|
def fetch_existing_keys
|
|
@existing_keys = {}
|
|
@tab = params[:tab] || :debates
|
|
|
|
I18nContent.begins_with_key(@tab).map { |content|
|
|
@existing_keys[content.key] = content
|
|
}
|
|
end
|
|
|
|
def append_or_create_keys
|
|
@content = {}
|
|
I18n.backend.send(:init_translations) unless I18n.backend.initialized?
|
|
|
|
locale = params[:locale] || I18n.locale
|
|
translations = I18n.backend.send(:translations)[locale.to_sym]
|
|
|
|
translations.each do |key, value|
|
|
@content[key.to_s] = I18nContent.flat_hash(value).keys.map { |string|
|
|
@existing_keys["#{key.to_s}.#{string}"] || I18nContent.new(key: "#{key.to_s}.#{string}")
|
|
}
|
|
end
|
|
end
|
|
|
|
end
|