The current tracking section had a few issues: * When browsing as an admin, this section becomes useless since no investments are shown * Browsing investments in the admin section, you're suddenly redirected to the tracking section, making navigation confusing * One test related to the officing dashboard failed due to these changes and had been commented * Several views and controller methods were copied from other sections, leading to duplication and making the code harder to maintain * Tracking routes were defined for proposals and legislation processes, but in the tracking section only investments were shown * Probably many more things, since these issues were detected after only an hour reviewing and testing the code So we're removing this untested section before releasing version 1.1. We might add it back afterwards.
100 lines
2.9 KiB
Ruby
100 lines
2.9 KiB
Ruby
module TranslatableFormHelper
|
|
def translatable_form_for(record, options = {})
|
|
form_for(record, options.merge(builder: TranslatableFormBuilder)) do |f|
|
|
yield(f)
|
|
end
|
|
end
|
|
|
|
def translations_interface_enabled?
|
|
Setting["feature.translation_interface"].present? || backend_translations_enabled?
|
|
end
|
|
|
|
def backend_translations_enabled?
|
|
(controller.class.parents & [Admin, Management, Valuation]).any?
|
|
end
|
|
|
|
def highlight_translation_html_class
|
|
"highlight" if translations_interface_enabled?
|
|
end
|
|
|
|
class TranslatableFormBuilder < ConsulFormBuilder
|
|
attr_accessor :translations
|
|
|
|
def translatable_fields(&block)
|
|
@translations = {}
|
|
visible_locales.map do |locale|
|
|
@translations[locale] = translation_for(locale)
|
|
end
|
|
safe_join(visible_locales.map do |locale|
|
|
Globalize.with_locale(locale) { fields_for_locale(locale, &block) }
|
|
end)
|
|
end
|
|
|
|
private
|
|
|
|
def fields_for_locale(locale)
|
|
fields_for_translation(@translations[locale]) do |translations_form|
|
|
@template.content_tag :div, translations_options(translations_form.object, locale) do
|
|
@template.concat translations_form.hidden_field(
|
|
:_destroy,
|
|
value: !@template.enabled_locale?(translations_form.object.globalized_model, locale),
|
|
data: { locale: locale }
|
|
)
|
|
|
|
@template.concat translations_form.hidden_field(:locale, value: locale)
|
|
|
|
yield translations_form
|
|
end
|
|
end
|
|
end
|
|
|
|
def fields_for_translation(translation)
|
|
fields_for(:translations, translation, builder: TranslationsFieldsBuilder) do |f|
|
|
yield f
|
|
end
|
|
end
|
|
|
|
def translation_for(locale)
|
|
existing_translation_for(locale) || new_translation_for(locale)
|
|
end
|
|
|
|
def existing_translation_for(locale)
|
|
@object.translations.find { |translation| translation.locale == locale }
|
|
end
|
|
|
|
def new_translation_for(locale)
|
|
@object.translations.new(locale: locale).tap(&:mark_for_destruction)
|
|
end
|
|
|
|
def highlight_translation_html_class
|
|
@template.highlight_translation_html_class
|
|
end
|
|
|
|
def translations_options(resource, locale)
|
|
{
|
|
class: "translatable-fields js-globalize-attribute #{highlight_translation_html_class}",
|
|
style: @template.display_translation_style(resource.globalized_model, locale),
|
|
data: { locale: locale }
|
|
}
|
|
end
|
|
|
|
def no_other_translations?(translation)
|
|
(@object.translations - [translation]).reject(&:_destroy).empty?
|
|
end
|
|
|
|
def visible_locales
|
|
if @template.translations_interface_enabled?
|
|
@object.globalize_locales
|
|
else
|
|
[I18n.locale]
|
|
end
|
|
end
|
|
end
|
|
|
|
class TranslationsFieldsBuilder < ConsulFormBuilder
|
|
def locale
|
|
@object.locale
|
|
end
|
|
end
|
|
end
|