Skip to content
Snippets Groups Projects
with_menus.rb 1.76 KiB
Newer Older
Arnaud Levy's avatar
Arnaud Levy committed
module Communication::Website::WithMenus
Arnaud Levy's avatar
Arnaud Levy committed
  extend ActiveSupport::Concern

Arnaud Levy's avatar
Arnaud Levy committed
  included do
    has_many    :menus,
                class_name: 'Communication::Website::Menu',
                foreign_key: :communication_website_id,
                dependent: :destroy

Arnaud Levy's avatar
Arnaud Levy committed
    after_save :initialize_menus
Arnaud Levy's avatar
Arnaud Levy committed
  end

Arnaud Levy's avatar
Arnaud Levy committed
  def menu_item_kinds
    Communication::Website::Menu::Item.kinds.reject do |key, value|
pabois's avatar
pabois committed
      method_name = "menu_item_kind_#{key}?"
      respond_to?(method_name) && !public_send(method_name)
Arnaud Levy's avatar
Arnaud Levy committed
    end
  end

  def menu_item_kind_programs?
pabois's avatar
pabois committed
    has_education_programs?
Arnaud Levy's avatar
Arnaud Levy committed
  end

  def menu_item_kind_program?
pabois's avatar
pabois committed
    has_education_programs?
Arnaud Levy's avatar
Arnaud Levy committed
  end

Arnaud Levy's avatar
Arnaud Levy committed
  def menu_item_kind_diploma?
    has_education_diplomas?
  end

pabois's avatar
pabois committed
  def menu_item_kind_diplomas?
    has_education_diplomas?
  end

Arnaud Levy's avatar
Arnaud Levy committed
  def menu_item_kind_administrators?
pabois's avatar
pabois committed
    has_administrators?
Arnaud Levy's avatar
Arnaud Levy committed
  end

  def menu_item_kind_researchers?
pabois's avatar
pabois committed
    has_researchers?
Arnaud Levy's avatar
Arnaud Levy committed
  end

  def menu_item_kind_teachers?
pabois's avatar
pabois committed
    has_teachers?
Arnaud Levy's avatar
Arnaud Levy committed
  end

pabois's avatar
pabois committed
  def menu_item_kind_volumes?
pabois's avatar
pabois committed
    has_research_volumes?
Arnaud Levy's avatar
Arnaud Levy committed
  end

pabois's avatar
pabois committed
  def menu_item_kind_volume?
pabois's avatar
pabois committed
    has_research_volumes?
Arnaud Levy's avatar
Arnaud Levy committed
  end

Arnaud Levy's avatar
Arnaud Levy committed
  def menu_item_kind_papers?
    has_research_papers?
Arnaud Levy's avatar
Arnaud Levy committed
  end

Arnaud Levy's avatar
Arnaud Levy committed
  def menu_item_kind_paper?
    has_research_papers?
Arnaud Levy's avatar
Arnaud Levy committed
  end
Arnaud Levy's avatar
Arnaud Levy committed

  def initialize_menus
Arnaud Levy's avatar
Arnaud Levy committed
    find_or_create_menu 'primary'
    find_or_create_menu 'social'
Arnaud Levy's avatar
Arnaud Levy committed
    find_or_create_menu 'legal'
    generate_automatic_menus
  end

  def generate_automatic_menus
    menus.automatic.find_each do |menu|
      menu.generate_automatically
Sébastien Gaya's avatar
Sébastien Gaya committed
  def find_or_create_menu(identifier)
    menu = menus.where(identifier: identifier, university: university, language: default_language).first_or_initialize do |menu|
Arnaud Levy's avatar
Arnaud Levy committed
      menu.title = I18n.t("communication.website.menus.default_title.#{identifier}")
Sébastien Gaya's avatar
Sébastien Gaya committed
    end
Arnaud Levy's avatar
Arnaud Levy committed
    menu.save unless menu.persisted?
Arnaud Levy's avatar
Arnaud Levy committed
  end
Arnaud Levy's avatar
Arnaud Levy committed
end