Class: Cms::Section
Constant Summary
collapse
- SECTION =
"Cms::Section"
- PAGE =
"Cms::Page"
- LINK =
"Cms::Link"
- VISIBLE_NODE_TYPES =
[SECTION, PAGE, LINK]
Instance Attribute Summary collapse
Class Method Summary
collapse
Instance Method Summary
collapse
#node, #node=
#ancestors, #cache_parent, #parent, #parent=, #partial_for
Instance Attribute Details
#full_path ⇒ Object
Returns the value of attribute full_path.
43
44
45
|
# File 'app/models/cms/section.rb', line 43
def full_path
@full_path
end
|
Class Method Details
.find_by_name_path(name_path) ⇒ Section
Used by the file browser to look up a section by the combined names as a path.
i.e. /A/B/
156
157
158
159
160
161
162
163
164
165
166
167
|
# File 'app/models/cms/section.rb', line 156
def self.find_by_name_path(name_path)
current_section = Cms::Section.root.first
path_names = name_path.split("/")[1..-1] || []
path_names.each do |name|
current_section.sections.each do |s|
current_section = s if s.name == name
end
end
current_section
end
|
.sitemap ⇒ Object
86
87
88
|
# File 'app/models/cms/section.rb', line 86
def self.sitemap
SectionNode.of_type(VISIBLE_NODE_TYPES).fetch_nodes.arrange(:order => :position)
end
|
Instance Method Details
#actual_path ⇒ Object
189
190
191
192
193
194
195
196
|
# File 'app/models/cms/section.rb', line 189
def actual_path
if root?
"/"
else
p = first_page_or_link
p ? p.path : "#"
end
end
|
#allow_groups=(code = :none) ⇒ Object
Set which groups are allowed to access this section.
207
208
209
210
211
|
# File 'app/models/cms/section.rb', line 207
def allow_groups=(code=:none)
if code == :all
self.groups = Cms::Group.all
end
end
|
#ancestry ⇒ Object
47
48
49
|
# File 'app/models/cms/section.rb', line 47
def ancestry
self.node.ancestry
end
|
#build_section ⇒ Object
Since #sections isn’t an association anymore, callers can use this rather than #sections.build
70
71
72
|
# File 'app/models/cms/section.rb', line 70
def build_section
Section.new(:parent => self)
end
|
#child_nodes ⇒ Object
Used by the sitemap to find children to iterate over.
75
76
77
|
# File 'app/models/cms/section.rb', line 75
def child_nodes
self.node.children
end
|
#deletable? ⇒ Boolean
Callback to determine if this section can be deleted.
136
137
138
|
# File 'app/models/cms/section.rb', line 136
def deletable?
!root? && empty?
end
|
#destroy_node ⇒ Object
Callback to clean up related nodes
141
142
143
|
# File 'app/models/cms/section.rb', line 141
def destroy_node
node.destroy
end
|
#editable_by_group?(group) ⇒ Boolean
145
146
147
|
# File 'app/models/cms/section.rb', line 145
def editable_by_group?(group)
group.editable_by_section(self)
end
|
#empty? ⇒ Boolean
131
132
133
|
# File 'app/models/cms/section.rb', line 131
def empty?
child_nodes.empty?
end
|
#ensure_section_node_exists ⇒ Object
53
54
55
56
57
|
# File 'app/models/cms/section.rb', line 53
def ensure_section_node_exists
unless node
self.node = build_section_node
end
end
|
#first_page_or_link ⇒ Object
The first page that is a decendent of this section
170
171
172
173
174
175
176
177
178
|
# File 'app/models/cms/section.rb', line 170
def first_page_or_link
section_node = child_nodes.of_type([LINK, PAGE]).fetch_nodes.in_order.first
return section_node.node if section_node
sections.each do |s|
node = s.first_page_or_link
return node if node
end
nil
end
|
#master_section_list ⇒ Object
Returns a complete list of all sections that are desecendants of this sections, in order, as a single flat list. Used by Section selectors where users have to pick a single section from a complete list of all sections.
99
100
101
102
103
104
|
# File 'app/models/cms/section.rb', line 99
def master_section_list
sections.map do |section|
section.full_path = root? ? section.name : "#{name} / #{section.name}"
[section] << section.master_section_list
end.flatten.compact
end
|
#move_to(section) ⇒ Object
119
120
121
122
123
124
125
|
# File 'app/models/cms/section.rb', line 119
def move_to(section)
if root?
false
else
node.move_to_end(section)
end
end
|
#pages ⇒ Object
79
80
81
82
83
84
|
# File 'app/models/cms/section.rb', line 79
def pages
child_pages = self.node.children.collect do |section_node|
section_node.node if section_node.page?
end
child_pages.compact
end
|
#parent_id ⇒ Object
106
107
108
|
# File 'app/models/cms/section.rb', line 106
def parent_id
parent ? parent.id : nil
end
|
#parent_id=(sec_id) ⇒ Object
110
111
112
|
# File 'app/models/cms/section.rb', line 110
def parent_id=(sec_id)
self.parent = Section.find(sec_id)
end
|
#path_not_reserved ⇒ Object
198
199
200
201
202
|
# File 'app/models/cms/section.rb', line 198
def path_not_reserved
if Cms.reserved_paths.include?(path)
errors.add(:path, "is invalid, '#{path}' a reserved path")
end
end
|
#prependable_path ⇒ Object
Returns the path for this section with a trailing slash
181
182
183
184
185
186
187
|
# File 'app/models/cms/section.rb', line 181
def prependable_path
if path.ends_with?("/")
path
else
"#{path}/"
end
end
|
#public? ⇒ Boolean
127
128
129
|
# File 'app/models/cms/section.rb', line 127
def public?
!!(groups.find_by_code('guest'))
end
|
#sections ⇒ Array<Section>
Also known as:
child_sections
Returns a list of all children which are sections.
61
62
63
64
65
|
# File 'app/models/cms/section.rb', line 61
def sections
child_nodes.of_type(SECTION).fetch_nodes.in_order.collect do |section_node|
section_node.node
end
end
|
#status ⇒ Object
149
150
151
|
# File 'app/models/cms/section.rb', line 149
def status
@status ||= public? ? :unlocked : :locked
end
|
#visible_child_nodes(options = {}) ⇒ Object
90
91
92
93
94
|
# File 'app/models/cms/section.rb', line 90
def visible_child_nodes(options={})
children = child_nodes.of_type(VISIBLE_NODE_TYPES).fetch_nodes.in_order.all
visible_children = children.select { |sn| sn.visible? }
options[:limit] ? visible_children[0...options[:limit]] : visible_children
end
|
#with_ancestors(options = {}) ⇒ Object
114
115
116
117
|
# File 'app/models/cms/section.rb', line 114
def with_ancestors(options = {})
options.merge! :include_self => true
self.ancestors(options)
end
|