diff --git a/app/models/communication/website.rb b/app/models/communication/website.rb index 2022004ccb846dcab17e96f812181e45fec206e3..361cbb6b04c8f67256764b3fabdf1d667999e08c 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 d25cf040425b6139407765b2f8f99f0b938637a6..92ac0369b025df64e2fef870313ba8b352f36d97 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