Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Admin basic customization texts #3488

Merged
merged 2 commits into from
May 21, 2019
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,8 @@ class Admin::SiteCustomization::InformationTextsController < Admin::SiteCustomiz
before_action :delete_translations, only: [:update]

def index
fetch_existing_keys
append_or_create_keys
@content = @content[@tab.to_s]
@tab = params[:tab] || :basic
@content = I18nContent.content_for(@tab)
end

def update
Expand Down Expand Up @@ -50,29 +49,6 @@ def delete_translations
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

def translation_params
I18nContent.translated_attribute_names.product(enabled_translations).map do |attr_name, loc|
I18nContent.localized_attr_name_for(attr_name, loc)
Expand Down
10 changes: 6 additions & 4 deletions app/helpers/site_customization_helper.rb
Original file line number Diff line number Diff line change
Expand Up @@ -8,15 +8,17 @@ def site_customization_display_translation_style(locale)
end

def translation_for_locale(content, locale)
i18n_content = I18nContent.where(key: content.key).first

if i18n_content.present?
if content.present?
I18nContentTranslation.where(
i18n_content_id: i18n_content.id,
i18n_content_id: content.id,
locale: locale
).first.try(:value)
else
false
end
end

def information_texts_tabs
[:basic, :debates, :community, :proposals, :polls, :layouts, :mailers, :management, :welcome]
end
end
52 changes: 51 additions & 1 deletion app/models/i18n_content.rb
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
class I18nContent < ApplicationRecord

scope :by_key, ->(key) { where(key: key) }
scope :begins_with_key, ->(key) { where("key ILIKE ?", "#{key}%") }

validates :key, uniqueness: true

Expand Down Expand Up @@ -46,4 +45,55 @@ def self.flat_hash(input, path = nil, output = {})
return output
end

def self.content_for(tab)
translations_for(tab).map do |string|
I18nContent.find_or_initialize_by(key: string)
end
end

def self.translations_for(tab)
if tab.to_s == "basic"
basic_translations
else
flat_hash(translations_hash_for(tab)).keys
end
end

def self.translations_hash_for(tab)
I18n.backend.send(:init_translations) unless I18n.backend.initialized?

I18n.backend.send(:translations)[I18n.locale].select do |key, _translations|
key.to_s == tab.to_s
end
end

def self.basic_translations
%w[
debates.index.section_footer.title
debates.index.section_footer.description
debates.index.section_footer.help_text_1
debates.index.section_footer.help_text_2
debates.new.info
debates.new.info_link
debates.new.more_info
debates.new.recommendation_one
debates.new.recommendation_two
debates.new.recommendation_three
debates.new.recommendation_four
debates.new.recommendations_title
proposals.index.section_footer.title
proposals.index.section_footer.description
proposals.new.more_info
proposals.new.recommendation_one
proposals.new.recommendation_two
proposals.new.recommendation_three
proposals.new.recommendations_title
polls.index.section_footer.title
polls.index.section_footer.description
legislation.processes.index.section_footer.title
legislation.processes.index.section_footer.description
budgets.index.section_footer.title
budgets.index.section_footer.description
]
end
end
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
<ul id="information-texts-tabs" class="tabs" >
<% [:debates, :community, :proposals, :polls, :layouts, :mailers, :management, :welcome].each do |tab| %>
<% information_texts_tabs.each do |tab| %>
<li class="tabs-title">
<% if tab.to_s == @tab %>
<%= link_to t("admin.menu.site_customization.information_texts_menu.#{tab}"), admin_site_customization_information_texts_path(tab: tab), :class => "is-active" %>
Expand Down
1 change: 1 addition & 0 deletions config/locales/en/admin.yml
Original file line number Diff line number Diff line change
Expand Up @@ -703,6 +703,7 @@ en:
content_blocks: Custom content blocks
information_texts: Custom information texts
information_texts_menu:
basic: "Basic customization"
debates: "Debates"
community: "Community"
proposals: "Proposals"
Expand Down
1 change: 1 addition & 0 deletions config/locales/es/admin.yml
Original file line number Diff line number Diff line change
Expand Up @@ -702,6 +702,7 @@ es:
content_blocks: Personalizar bloques
information_texts: Personalizar textos
information_texts_menu:
basic: "Personalización básica"
debates: "Debates"
community: "Comunidad"
proposals: "Propuestas"
Expand Down
33 changes: 21 additions & 12 deletions spec/features/admin/site_customization/information_texts_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,13 @@
scenario "page is correctly loaded" do
visit admin_site_customization_information_texts_path

click_link "Basic customization"
expect(page).to have_content "Help about debates"
expect(page).to have_content "Help about proposals"
expect(page).to have_content "Help about voting"
expect(page).to have_content "Help about collaborative legislation"
expect(page).to have_content "Help with participatory budgets"

click_link "Debates"
expect(page).to have_content "Help about debates"

Expand Down Expand Up @@ -57,39 +64,40 @@
context "Globalization" do

scenario "Add a translation", :js do
key = "debates.form.debate_title"
key = "debates.index.section_footer.title"

visit admin_site_customization_information_texts_path

select "Français", from: "translation_locale"
fill_in "contents_content_#{key}values_value_fr", with: "Titre personalise du débat"
fill_in "contents[content_#{key}]values[value_fr]", with: "Aide personalise sur les débats"

click_button "Save"

expect(page).to have_content "Translation updated successfully"

select "Français", from: "translation_locale"
visit admin_site_customization_information_texts_path

expect(page).to have_content "Titre personalise du débat"
expect(page).not_to have_content "Titre du débat"
select "Français", from: "translation_locale"
expect(page).to have_content "Aide personalise sur les débats"
expect(page).not_to have_content "Aide sur les débats"
end

scenario "Update a translation", :js do
key = "debates.form.debate_title"
content = create(:i18n_content, key: key, value_fr: "Titre personalise du débat")
key = "proposals.form.proposal_title"

visit admin_site_customization_information_texts_path
visit admin_site_customization_information_texts_path(tab: "proposals")

select "Français", from: "translation_locale"
fill_in "contents_content_#{key}values_value_fr", with: "Titre personalise again du débat"
fill_in "contents_content_#{key}values_value_fr", with: "Titre personalise de la proposition"

click_button "Save"
expect(page).to have_content "Translation updated successfully"

visit admin_site_customization_information_texts_path(tab: "proposals")
click_link "Français"

expect(page).to have_content "Titre personalise again du débat"
expect(page).not_to have_content "Titre personalise du débat"
expect(page).to have_content "Titre personalise de la proposition"
expect(page).not_to have_content "Titre de la proposition"
end

scenario "Remove a translation", :js do
Expand All @@ -103,14 +111,15 @@
value_en: "Custom debate text",
value_es: "Texto personalizado de debate")

visit admin_site_customization_information_texts_path
visit admin_site_customization_information_texts_path(tab: "debates")

click_link "Español"
click_link "Remove language"
click_button "Save"

expect(page).not_to have_link "Español"

visit admin_site_customization_information_texts_path(tab: "debates")
click_link "English"
expect(page).to have_content "Custom debate text"
expect(page).to have_content "Custom debate title"
Expand Down
34 changes: 34 additions & 0 deletions spec/features/site_customization/information_texts_spec.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
require "rails_helper"

feature "Custom information texts" do

scenario "Show custom texts instead of default ones" do
admin = create(:administrator)
login_as(admin.user)

debate_key = "debates.index.section_footer.title"
proposal_key = "proposals.index.section_footer.title"

visit admin_site_customization_information_texts_path(tab: "debates")
fill_in "contents[content_#{debate_key}]values[value_en]", with: "Custom help about debates"
click_button "Save"

visit admin_site_customization_information_texts_path(tab: "proposals")
fill_in "contents[content_#{proposal_key}]values[value_en]", with: "Custom help about proposals"
click_button "Save"

visit debates_path

within("#section_help") do
expect(page).to have_content "Custom help about debates"
expect(page).not_to have_content "Help about debates"
end

visit proposals_path

within("#section_help") do
expect(page).to have_content "Custom help about proposals"
expect(page).not_to have_content "Help about proposals"
end
end
end
14 changes: 0 additions & 14 deletions spec/models/i18n_content_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -27,20 +27,6 @@
expect(query.size).to eq(1)
expect(query).to eq([debate_title])
end

it "return all matching records when #begins_with_key is used" do
debate_text = create(:i18n_content, key: "debates.form.debate_text")
debate_title = create(:i18n_content, key: "debates.form.debate_title")
proposal_title = create(:i18n_content, key: "proposals.form.proposal_title")

expect(I18nContent.all.size).to eq(3)

query = I18nContent.begins_with_key("debates")

expect(query.size).to eq(2)
expect(query).to eq([debate_text, debate_title])
expect(query).not_to include(proposal_title)
end
end

context "Globalize" do
Expand Down