page.rb
2.96 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
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, presence: true, :if => lambda { |o| o.new_record? }
#serialize :template_content, Array
attr_accessor :title
enum status: {
active: 0,
block: 1
}
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
''
end
end
def clone
Page.transaction do
new_page = self.dup
new_page.save(validate: false)
self.page_data.each do |item|
new_item = item.dup
new_item.page = new_page
new_item.title = "Copy #{item.title}"
new_item.save(validate: false)
item.page_contents.each do |page_content|
new_page_content = page_content.dup
new_page_content.page_datum = new_item
new_page_content.save(validate: false)
page_content.page_content_markers.each do |page_content_marker|
new_page_content_marker = page_content_marker.dup
new_page_content_marker.page_content = new_page_content
new_page_content_marker.save(validate: false)
end
end
end
new_page.insert_at(self.position + 1)
end
end
def self.default_public_page_url(scheme)
page = Page.where(private_flag: false, root_page: true).first
if page
return page.menu_url(scheme)
end
return '/'
end
def self.default_private_page_url(scheme)
page = Page.where(private_flag: true, default_private_page: true).first
if page
return page.menu_url(scheme)
end
return '/'
end
end
end