| Class | Page |
| In: |
app/models/page.rb
|
| Parent: | ActiveRecord::Base |
# File app/models/page.rb, line 245
245: def self.find_live_by_path(path)
246: published.not_archived.first(:conditions => {:path => path})
247: end
# File app/models/page.rb, line 56
56: def after_build_new_version(new_version)
57: copy_connectors(
58: :from_version_number => @copy_connectors_from_version || (new_version.version - 1),
59: :to_version_number => new_version.version
60: )
61: @copy_connectors_from_version = nil
62: true
63: end
Publish all
# File app/models/page.rb, line 66
66: def after_publish
67: self.reload # Get's the correct version number loaded
68: self.connectors.for_page_version(self.version).all(:order => "position").each do |c|
69: if c.connectable_type.constantize.publishable? && con = c.connectable
70: con.publish
71: end
72: end
73: end
# File app/models/page.rb, line 194
194: def append_leading_slash_to_path
195: if path.blank?
196: self.path = "/"
197: elsif path[0,1] != "/"
198: self.path = "/#{path}"
199: end
200: end
# File app/models/page.rb, line 266
266: def assigned_to
267: current_task ? current_task.assigned_to : nil
268: end
Returns the number of connectables in the given container for this version of this page
# File app/models/page.rb, line 241
241: def connectable_count_for_container(container)
242: connectors.for_page_version(version).in_container(container.to_s).count
243: end
Returns true if the block attached to each connector in the given container are published
# File app/models/page.rb, line 234
234: def container_published?(container)
235: connectors.for_page_version(draft.version).in_container(container.to_s).all? do |c|
236: c.connectable_type.constantize.publishable? ? c.connectable.live? : true
237: end
238: end
# File app/models/page.rb, line 75
75: def copy_connectors(options={})
76: connectors.for_page_version(options[:from_version_number]).all(:order => "connectors.container, connectors.position").each do |c|
77: # The connector won't have a connectable if it has been deleted
78: # Also need to see if the draft has been deleted,
79: # in which case we are in the process of deleting it
80: if c.should_be_copied?
81: connectable = c.connectable_type.constantize.versioned? ? c.connectable.as_of_version(c.connectable_version) : c.connectable
82:
83: #If we are copying connectors from a previous version, that means we are reverting this page,
84: #in which case we should create a new version of the block, and connect this page to that block
85: if @copy_connectors_from_version && connectable.class.versioned? && (connectable.version != connectable.draft.version)
86: connectable = connectable.class.find(connectable.id)
87: connectable.updated_by_page = self
88: connectable.revert_to(c.connectable_version)
89: end
90:
91: new_connector = connectors.build(
92: :page_version => options[:to_version_number],
93: :connectable => connectable,
94: :connectable_version => connectable.class.versioned? ? connectable.version : nil,
95: :container => c.container,
96: :position => c.position
97: )
98: end
99: end
100: true
101: end
# File app/models/page.rb, line 103
103: def create_connector(connectable, container)
104: transaction do
105: raise "Connectable is nil" unless connectable
106: raise "Container is required" if container.blank?
107: update_attributes(
108: :version_comment => "#{connectable} was added to the '#{container}' container",
109: :publish_on_save => (
110: published? &&
111: connectable.connected_page &&
112: (connectable.class.publishable? ? connectable.published? : true)))
113: connectors.create(
114: :page_version => draft.version,
115: :connectable => connectable,
116: :connectable_version => connectable.class.versioned? ? connectable.version : nil,
117: :container => container)
118: end
119: end
# File app/models/page.rb, line 151
151: def delete_connectors
152: connectors.for_page_version(version).all.each{|c| c.destroy }
153: end
# File app/models/page.rb, line 225
225: def in_section?(section_or_section_name)
226: sec = section_or_section_name.is_a?(String) ?
227: Section.first(:conditions => {:name => section_or_section_name}) :
228: section_or_section_name
229: fn = lambda{|s| s ? (s == sec || fn.call(s.parent)) : false}
230: fn.call(section)
231: end
# File app/models/page.rb, line 208
208: def layout
209: template_file_name && "templates/#{template_file_name.split('.').first}"
210: end
# File app/models/page.rb, line 121
121: def move_connector(connector, direction)
122: transaction do
123: raise "Connector is nil" unless connector
124: raise "Direction is nil" unless direction
125: orientation = direction[/_/] ? "#{direction.sub('_', ' the ')} of" : "#{direction} within"
126: update_attributes(:version_comment => "#{connector.connectable} was moved #{orientation} the '#{connector.container}' container")
127: connectors.for_page_version(draft.version).like(connector).first.send("move_#{direction}")
128: end
129: end
# File app/models/page.rb, line 249
249: def name_with_section_path
250: a = ancestors
251: (a[1..a.size].map{|a| a.name} + [name]).join(" / ")
252: end
# File app/models/page.rb, line 202
202: def path_not_reserved
203: if Cms.reserved_paths.include?(path)
204: errors.add(:path, "is invalid, '#{path}' a reserved path")
205: end
206: end
# File app/models/page.rb, line 186
186: def public?
187: section ? section.public? : false
188: end
# File app/models/page.rb, line 137
137: def remove_connector(connector)
138: transaction do
139: raise "Connector is nil" unless connector
140: update_attributes(:version_comment => "#{connector.connectable} was removed from the '#{connector.container}' container")
141:
142: #The logic of this is to go ahead and let the container get copied forward, then delete the new connector
143: if new_connector = connectors.for_page_version(draft.version).like(connector).first
144: new_connector.destroy
145: else
146: raise "Error occurred while trying to remove connector #{connector.id}"
147: end
148: end
149: end
This is done to let copy_connectors know which version to pull from copy_connectors will get called later as an after_update callback
# File app/models/page.rb, line 157
157: def revert_to(version)
158: @copy_connectors_from_version = version
159: super(version)
160: end
# File app/models/page.rb, line 170
170: def section
171: section_node ? section_node.section : nil
172: end
# File app/models/page.rb, line 178
178: def section=(sec)
179: if section_node
180: section_node.move_to_end(sec)
181: else
182: build_section_node(:node => self, :section => sec)
183: end
184: end
# File app/models/page.rb, line 174
174: def section_id=(sec_id)
175: self.section = Section.find(sec_id)
176: end
# File app/models/page.rb, line 217
217: def template_name
218: template_file_name && PageTemplate.display_name(template_file_name)
219: end
This will return the "top level section" for a page, which is the section directly below the root (a.k.a My Site) that this page is in. If this page is in root, then this will return root.
# File app/models/page.rb, line 257
257: def top_level_section
258: a = ancestors
259: (a.size > 0 && ancestors[1]) ? ancestors[1] : Section.root.first
260: end