120 lines
2.3 KiB
Ruby
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
|