Nicolas Bally f20fe482c6 initial
2020-04-06 10:38:07 +02:00

120 lines
2.3 KiB
Ruby

#require 'elasticsearch/model'
# -*- encoding : utf-8 -*-
class Page < ApplicationRecord
searchkick # default_fields: [:html1, :title1, :description1]
#include Elasticsearch::Model
#include Elasticsearch::Model::Callbacks
attr_accessor :skip_save_menu_item
PAGE_TYPE = [["Page simple", 1], ["Page chapitrée", 2], ["Chapitre", 3], ["Page thématique", 4]]
has_many :lang_pages
accepts_nested_attributes_for :lang_pages
has_one :menu_item, :as => :menu_content
has_many :blocks, :as => :blockable, :dependent => :destroy
after_save do
if !self.skip_save_menu_item
if self.menu_item
self.menu_item.updated_at = Time.now
self.menu_item.save
end
end
end
#validates :title, :presence => true
HUMAN_NAME = "Page"
after_create :after_creation
def after_creation
LangSite.all.each do |lang|
@block = Block.new(:block_name => "general", :lang_site => lang)
@block.blockable = self
@block.save
end
end
def dup
@new = Page.new(self.attributes)
@new.id = nil
@new.save
@new.blocks.destroy_all
self.lang_pages.each do |lang_page|
new_p = lang_page.dup
new_p.title = lang_page.title+" copie"
new_p.page = @new
new_p.save
end
self.blocks.each do |block|
new_b = block.dup
new_b.blockable = @new
new_b.save
end
@new
end
def search_data
{
html: lang_pages.map(&:html),
title: lang_pages.map(&:title),
description: lang_pages.map(&:description),
category_names: (menu_item.categories.map(&:name) if menu_item),
category_ids: (menu_item.categories.map(&:id) if menu_item),
animals_names: (menu_item.animals.map(&:name) if menu_item),
animals_ids: (menu_item.animals.map(&:id) if menu_item),
document: "page",
created_at: created_at
}
end
def as_indexed_json(options={})
self.as_json(
include: { lang_pages: { methods: [:html], only: [:title, :description, :html]}#,
# authors: { methods: [:full_name], only: [:full_name] },
# comments: { only: :text }
})
end
end
#Page.import