forked from saurabh/orbit4-5
119 lines
3.2 KiB
Ruby
119 lines
3.2 KiB
Ruby
class Page
|
|
include Mongoid::Document
|
|
include Mongoid::Timestamps
|
|
include OrbitModel::Impression
|
|
include OrbitCategory::Categorizable
|
|
|
|
field :name, localize: true
|
|
field :number, type: Integer
|
|
field :module
|
|
field :url
|
|
field :page_type, type: String, default: "page"
|
|
field :external_url, localize: true
|
|
field :page_id
|
|
field :layout, type: String, default: "index"
|
|
field :data_count, type: Integer, default: 10
|
|
field :enabled_for, type: Array, default: []
|
|
field :enabled_for_mobile, :type => Boolean, :default => true
|
|
field :menu_enabled_for, type: Array, default: []
|
|
field :categories, type: Array, :default => []
|
|
field :tags, type: Array, :default => []
|
|
field :role_status, type: Array, :default => []
|
|
field :member_sort_position, type: Boolean, :default => false
|
|
field :enabled_for_sitemap, type: Array, :default => []
|
|
field :rss2_id, type: String
|
|
field :custom_string_field, type: String
|
|
field :custom_array_field, type: Array, :default => []
|
|
|
|
has_many :page_parts, :autosave => true, :dependent => :destroy
|
|
has_many :mobile_page_parts, :autosave => true, :dependent => :destroy
|
|
|
|
has_many :page_contexts, :autosave => true, :dependent => :destroy
|
|
has_many :child_page, :class_name => 'Page', :inverse_of => :parent_page, :dependent => :destroy
|
|
belongs_to :parent_page, :class_name => 'Page', :inverse_of => :child_page
|
|
|
|
before_create :assign_page_number
|
|
|
|
# after_save :clear_cache
|
|
# after_destroy :clear_cache
|
|
|
|
def clear_cache
|
|
I18n.available_locales.each do |locale|
|
|
Rails.cache.delete_matched( /main_menu/ )
|
|
end
|
|
end
|
|
|
|
def assign_page_number
|
|
parent_page = self.parent_page
|
|
if !parent_page.nil?
|
|
if parent_page.child_page.count == 0
|
|
number = 0
|
|
else
|
|
number = parent_page.child_page.max(:number) + 1
|
|
end
|
|
self.number = number
|
|
end
|
|
end
|
|
|
|
def parent_pages
|
|
parent_page = self.parent_page
|
|
pages = []
|
|
while parent_page != nil
|
|
pages << parent_page.id
|
|
parent_page = parent_page.parent_page
|
|
end
|
|
pages
|
|
end
|
|
|
|
def parent_pages_without_root
|
|
parent_page = self.parent_page
|
|
pages = []
|
|
while parent_page != nil
|
|
if parent_page.parent_page_id != nil
|
|
pages << parent_page.id
|
|
end
|
|
parent_page = parent_page.parent_page
|
|
end
|
|
pages
|
|
end
|
|
|
|
def to_param
|
|
page_id.parameterize
|
|
end
|
|
|
|
def self.find_by_param(input)
|
|
self.find_by(page_id: input) rescue nil
|
|
end
|
|
|
|
def self.root
|
|
self.where(:parent_page_id.ne => "" , :parent_page_id.exists => false).first
|
|
end
|
|
|
|
def root?
|
|
self.parent_page_id.nil?
|
|
end
|
|
|
|
def sorted_published_child_pages
|
|
self.child_page.where(:menu_enabled_for => I18n.locale).asc(:number)
|
|
end
|
|
|
|
def sorted_published_child_pages_for_mobile
|
|
self.child_page.where(:menu_enabled_for => I18n.locale).and(:enabled_for_mobile => true).asc(:number)
|
|
end
|
|
|
|
def child_pages_enabled_for_sitemap
|
|
self.child_page.where(:enabled_for_sitemap => I18n.locale).asc(:number)
|
|
end
|
|
|
|
def child_pages_enabled_for_sitemap_for_mobile
|
|
self.child_page.where(:enabled_for_sitemap => I18n.locale).and(:enabled_for_mobile => true).asc(:number)
|
|
end
|
|
|
|
def published_child_pages
|
|
self.child_page.where(:menu_enabled_for => I18n.locale).asc(:number)
|
|
end
|
|
|
|
def published_child_pages_for_mobile
|
|
self.child_page.where(:menu_enabled_for => I18n.locale).and(:enabled_for_mobile => true).asc(:number)
|
|
end
|
|
end |