diff --git a/app/models/communication/website/with_menus.rb b/app/models/communication/website/with_menus.rb index 8ed45032fc4cdc2f4c721ab795b723444d17da9e..256f7343ff18133830966dd02c807762e30192a6 100644 --- a/app/models/communication/website/with_menus.rb +++ b/app/models/communication/website/with_menus.rb @@ -66,33 +66,34 @@ module Communication::Website::WithMenus def initialize_menus find_or_create_menu 'primary' find_or_create_menu 'social' - menu = find_or_create_menu 'legal' - fill_legal_menu menu + find_or_create_menu('legal') do |menu| + # Only executed after menu creation + fill_legal_menu(menu) + end + end + + def find_or_create_menu(identifier) + menu = menus.where(identifier: identifier, university: university, language: default_language).first_or_initialize do |menu| + menu.title = t("communication.menus.default_title.#{identifier}") + end + unless menu.persisted? + menu.save + yield(menu) if block_given? + end + menu end def fill_legal_menu(menu) - return if menu.items.any? [ Communication::Website::Page::LegalTerm, Communication::Website::Page::PrivacyPolicy, Communication::Website::Page::Accessibility, Communication::Website::Page::Sitemap ].each do |page_class| - page = special_page(page_class) - menu.items.where( kind: 'page', - about: page, - university: university, - website: self) - .first_or_create do |item| + page = special_page(page_class, language: menu.language) + menu.items.where(kind: 'page', about: page, university: university, website: self).first_or_create do |item| item.title = page.title end end end - - def find_or_create_menu(identifier) - title = Communication::Website::Menu.human_attribute_name(identifier) - menus.where(identifier: identifier, university: university).first_or_create do |menu| - menu.title = title - end - end end diff --git a/config/locales/communication/en.yml b/config/locales/communication/en.yml index 1c6fb718b1c1b80e08dc75920e6c04ba2a5532d9..fd15b9cdb5477b9f980f69406c75c899e5876a11 100644 --- a/config/locales/communication/en.yml +++ b/config/locales/communication/en.yml @@ -97,9 +97,6 @@ en: communication/website/menu: identifier: Identifier items: Items - legal: Legal - primary: Main menu - social: Social title: Title communication/website/menu/item: about: Target @@ -569,6 +566,11 @@ en: pending: Import in progress last_pages: Last pages last_posts: Last posts + menus: + default_title: + legal: Legal + primary: Main menu + social: Social pages: defaults: accessibility: diff --git a/config/locales/communication/fr.yml b/config/locales/communication/fr.yml index 2e66b0651c8b0d7c72328421100bbe9b4f893582..2b8feaaae71c88531856cac8a6c34355223216a5 100644 --- a/config/locales/communication/fr.yml +++ b/config/locales/communication/fr.yml @@ -97,9 +97,6 @@ fr: communication/website/menu: identifier: Identifiant items: Éléments - legal: Informations légales - primary: Menu principal - social: Liens sociaux title: Titre communication/website/menu/item: about: Cible @@ -569,6 +566,11 @@ fr: pending: Import en cours last_pages: Dernières pages last_posts: Dernières actualités + menus: + default_title: + legal: Informations légales + primary: Menu principal + social: Liens sociaux pages: defaults: accessibility: