module Sitemap
extend ActiveSupport::Concern
def render_sitemap(options = {})
if Fullstack::Cms.localized?
render_sitemap_localized(options[:allowed_locales])
else
render_sitemap_not_localized
end
end
def render_sitemap_not_localized
@pages = Page.all.sort do |p1, p2|
(p1.path || "").split("/").size <=> (p2.path || "").split("/").size
end
erb = <<-eos
<% @pages.each do |page| -%>
<% if !page.resourceful? -%>
<% begin -%>
<% loc = polymorphic_url([:site, page.uid.split("#").last].compact) -%>
<%= loc %>
<% rescue Exception => e -%>
<% end -%>
<% else -%>
<% page.resource_class.all.each do |resource| -%>
<% unless (resource.respond_to?(:published) && !resource.published?) ||
(resource.respond_to?(:sitemap) && !resource.sitemap?) -%>
<%= page_url_for(resource) -%>
<% if resource.respond_to?(:updated_at) -%>
<%= resource.updated_at.strftime("%F") -%>
<% end -%>
<% end -%>
<% end -%>
<% end -%>
<% end -%>
eos
render :inline => erb, :layout => false
end
def render_sitemap_localized(allowed_locales = nil)
allowed_locales ||= I18n.available_locales.map(&:to_s)
@pages = Page.where("locale IN (?)", allowed_locales).sort do |p1, p2|
(p1.path || "").split("/").size <=> (p2.path || "").split("/").size
end
erb = <<-eos
<% @pages.each do |page| -%>
<% if !page.resourceful? -%>
<% begin -%>
<% loc = polymorphic_url([:site, page.uid.split("#").last, page.locale].compact) -%>
<%= loc %>
<% rescue Exception => e -%>
<% end -%>
<% else -%>
<% page.resource_class.where(:locale => page.locale).each do |resource| -%>
<%= page_url_for(resource) -%>
<% if resource.respond_to?(:updated_at) -%>
<%= resource.updated_at.strftime("%F") -%>
<% end -%>
<% end -%>
<% end -%>
<% end -%>
eos
render :inline => erb, :layout => false
end
end