page.rb 2.03 KB
require 'acts_as_list'
require 'acts_as_tree'

module Kanjai
    class Page < ActiveRecord::Base
    extend ActsAsTree::TreeWalker

    include ActiveRecord::Acts::Tree
    include ActiveRecord::Acts::List

    acts_as_tree order: 'position'
    acts_as_list :scope => :parent_id

    belongs_to :page_template

    has_many :images, as: :object
    has_many :page_data, dependent: :destroy
    accepts_nested_attributes_for :page_data

    #validates :title, :url, presence: true

    #serialize :template_content, Array

    attr_accessor :title

    def menu_url(scheme, lang = nil)

      lang = I18n.locale.to_s if lang.nil?

      url = self.lang_attributes(lang, :url)

      if url.present?
        return generate_url(scheme, url, lang)
      else
        url = self.lang_attributes(ADMIN_CONFIG['default_lang'], :url)
        if url.present?
          return generate_url(scheme, url, ADMIN_CONFIG['default_lang'])
        else
          ''
        end
      end
    end

    def generate_url(scheme, url, lang)
      lang = I18n.locale.to_s if lang.nil?


      if /(http|https):\/\//.match url
        url
      else
        if /\//.match url
          if url  == '/'
            scheme + ADMIN_CONFIG['domain_name'] + '/' +  lang
          else
            scheme + ADMIN_CONFIG['domain_name'] + '/' +  lang + url
          end
        else
          scheme + ADMIN_CONFIG['domain_name'] + '/' +  lang + '/' + url
        end
      end

    end

    def lang_attributes(lang_code, attributes)
      data = self.page_data.find_by_lang(lang_code)
      if data
        data[attributes]
      else
        nil
      end
    end

    def self.default_public_page_url
      page = Page.where(private_flag: false, root_page: true).first
      if page
        return page.lang_attributes(I18n.locale, 'url')
      end
      return '/'
    end

    def self.default_private_page_url
      page = Page.where(private_flag: true, default_private_page: true).first
      if page
        return page.lang_attributes(I18n.locale, 'url')
      end
      return '/'
    end

  end
end