class Page include Mongoid::Document include Mongoid::Timestamps include OrbitModel::Impression 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 :enabled_for_sitemap, type: Array, :default => [] field :rss2_id, type: String 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 def assign_page_number parent_page = self.parent_page if parent_page.child_page.count == 0 number = 0 else number = parent_page.child_page.max(:number) + 1 end self.number = number 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