site-menu-widget/app/controllers/site_menu_widgets_controlle...

81 lines
1.8 KiB
Ruby

class SiteMenuWidgetsController < ApplicationController
def widget
params = OrbitHelper.params
page = Page.where(:page_id => params[:page_id]).first
if page.parent_page == Page.root
pages = page.sorted_published_child_pages
else
pages = page.parent_page.sorted_published_child_pages
end
page.page_parts.collect do |pp|
pp.sub_parts.collect do |sp|
@title = sp.title if sp.module == "site_menu_widget"
end
end
def create_json(pages)
items = []
pages.each do |page|
item = {}
if page.child_page.size > 0
if page.page_type == "page" or page.page_type == "link"
item["page_name"] = page.name
item["url"] = (page.page_type == "link") ? "/#{locale.to_s}" + page.external_url : "/#{locale.to_s}" + page.url
item["children"] = create_json(page.sorted_published_child_pages)
item["target"] = "_self"
else
item["page_name"] = page.name
item["url"] = "/#{locale.to_s}" + page.url
item["children"] = create_json(page.sorted_published_child_pages)
item["target"] = "_blank"
end
else
if page.page_type == "page"
item["page_name"] = page.name
item["url"] = "/#{locale.to_s}" + page.url
item["target"] = "_self"
item["children"] = []
else
item["page_name"] = page.name
item["url"] = page.external_url
item["target"] = (is_internal_url?(page.external_url) ? "_self" : "_blank") rescue "_blank"
item["children"] = []
end
end
items << item
end
items
end
items = create_json(pages)
{
"pages" => items,
"extras" => {"widget_title" => @title}
}
end
def is_internal_url?(link)
internal = false
if !link.nil?
link = link.split("?").first
temp_url = URI.parse(link)
if temp_url.host.nil?
internal = true
end
end
return internal
end
end