From 5a3bfbdbce547491fd06f66229c3ff8c8247013f Mon Sep 17 00:00:00 2001 From: Arnaud Levy <contact@arnaudlevy.com> Date: Wed, 1 Feb 2023 10:26:47 +0100 Subject: [PATCH] Fix #771 --- app/models/communication/website.rb | 2 +- .../communication/website/with_menus.rb | 30 +++++++++++++++---- 2 files changed, 26 insertions(+), 6 deletions(-) diff --git a/app/models/communication/website.rb b/app/models/communication/website.rb index 2022004cc..361cbb6b0 100644 --- a/app/models/communication/website.rb +++ b/app/models/communication/website.rb @@ -43,9 +43,9 @@ class Communication::Website < ApplicationRecord include WithGit include WithGitRepository include WithImport - include WithMenus include WithProgramCategories include WithSpecialPages + include WithMenus # Menus must be created after special pages, so we can fill legal menu include WithStyle include WithTheme diff --git a/app/models/communication/website/with_menus.rb b/app/models/communication/website/with_menus.rb index d25cf0404..92ac0369b 100644 --- a/app/models/communication/website/with_menus.rb +++ b/app/models/communication/website/with_menus.rb @@ -7,7 +7,7 @@ module Communication::Website::WithMenus foreign_key: :communication_website_id, dependent: :destroy - after_create :initialize_menus + after_save :initialize_menus end def menu_item_kinds @@ -65,14 +65,34 @@ module Communication::Website::WithMenus def initialize_menus create_menu 'primary' - create_menu 'legal' create_menu 'social' + menu = create_menu 'legal' + fill_legal_menu 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| + item.title = page.title + end + end end def create_menu(identifier) title = Communication::Website::Menu.human_attribute_name(identifier) - menus.create title: title, - identifier: identifier, - university: university + menus.where(identifier: identifier, university: university).first_or_create do |menu| + menu.title = title + end end end -- GitLab