188 lines
6.1 KiB
Ruby
188 lines
6.1 KiB
Ruby
class SiteMenuWidgetsController < ApplicationController
|
|
def create_json_process_ip_later(pages)
|
|
items = []
|
|
pages.each do |page|
|
|
item = {}
|
|
item["obj"] = page
|
|
if (!(page.always_show_on_menu) rescue true)
|
|
is_ip = (page.access_level == 'ip')
|
|
next if !is_ip && !page.user_can_access?(@current_user)
|
|
end
|
|
if page.child_page.size > 0
|
|
item["page_name"] = page.name
|
|
item['dropdown'] = 'dropdown-menu'
|
|
item["children"] = create_json_process_ip_later(page.sorted_published_child_pages)
|
|
else
|
|
item["page_name"] = page.name
|
|
item['dropdown'] = ''
|
|
item["children"] = []
|
|
end
|
|
if page.page_type == "link"
|
|
item["url"] = page.external_url
|
|
item["target"] = (is_internal_url?(page.external_url) ? "_self" : "_blank") rescue "_blank"
|
|
else
|
|
item["url"] = "/#{locale.to_s}" + page.url
|
|
item["target"] = "_self"
|
|
end
|
|
item['active_class'] = (@page_id==page.id ? 'active' : '')
|
|
if is_ip
|
|
item['category'] = '" data-ip="true'
|
|
end
|
|
items << item
|
|
end
|
|
items
|
|
end
|
|
def create_json(pages)
|
|
items = []
|
|
pages.each do |page|
|
|
item = {}
|
|
item["obj"] = page
|
|
next if !page.user_can_access?(current_user)
|
|
next if page.access_level == 'ip' && !@need_process_ip && (!(page.always_show_on_menu) rescue true)
|
|
if page.child_page.size > 0
|
|
item["page_name"] = page.name
|
|
item['dropdown'] = 'dropdown-menu'
|
|
item["children"] = create_json(page.sorted_published_child_pages)
|
|
else
|
|
item["page_name"] = page.name
|
|
item['dropdown'] = ''
|
|
item["children"] = []
|
|
end
|
|
if page.page_type == "link"
|
|
item["url"] = page.external_url
|
|
item["target"] = (is_internal_url?(page.external_url) ? "_self" : "_blank") rescue "_blank"
|
|
else
|
|
item["url"] = "/#{locale.to_s}" + page.url
|
|
item["target"] = "_self"
|
|
end
|
|
item['active_class'] = (@page_id==page.id ? 'active' : '')
|
|
items << item
|
|
end
|
|
items
|
|
end
|
|
def create_menu_bool_object (items)
|
|
#item_all = []
|
|
items.each do |item1|
|
|
#item = []
|
|
@count += 1
|
|
if (!item1["children"].nil? && item1["children"].length!=0)
|
|
@count1 += 1
|
|
if (@expand_current_layer && children_is_current(item1['obj'])) || (@expand_next_layer && item1['obj'].id == @page_id)
|
|
@ul_index << [@count1, @count]
|
|
end
|
|
create_menu_bool_object(item1['children'])
|
|
#item = [children_is_current(item1['obj']),item1['obj'].id==@page_id,create_menu_bool_object(item1['children'])]
|
|
else
|
|
#item = [children_is_current(item1['obj']),item1['obj'].id==@page_id]
|
|
end
|
|
#item_all << item
|
|
end
|
|
#item_all
|
|
end
|
|
def children_is_current (page)
|
|
page.sorted_published_child_pages.select{|v| v.id==@page_id}.length!=0 rescue false
|
|
end
|
|
def widget
|
|
subpart = OrbitHelper.get_current_widget
|
|
params = OrbitHelper.params
|
|
page = OrbitHelper.page rescue Page.where(:page_id => params[:page_id]).first
|
|
@page_id = page.id rescue nil
|
|
@expand_layer = false
|
|
@expand_next_layer = false
|
|
@expand_current_layer = false
|
|
@site = (current_site rescue Site.first)
|
|
@need_process_ip = (@site.need_process_ip rescue false)
|
|
@has_privileged_page = (@site.has_privileged_page rescue false)
|
|
@process_ip_later = false
|
|
@current_user = OrbitHelper.current_user
|
|
if @need_process_ip
|
|
@process_ip_later = @current_user.nil? && @site.enable_cache unless @no_cache_for_this_request
|
|
unless @process_ip_later
|
|
@need_process_ip = @site.check_ip_is_privileged?((OrbitHelper.request.remote_ip rescue ""))
|
|
end
|
|
end
|
|
if page.parent_page == Page.root
|
|
@pages = page.sorted_published_child_pages
|
|
else
|
|
@pages = page.parent_page ? page.parent_page.sorted_published_child_pages : page.sorted_published_child_pages
|
|
if subpart.methods.include? 'select_options'.to_sym
|
|
@show_options = OrbitWidget.where(:key=>"site_menu_widget").select{|orbit_widget| (orbit_widget.methods.include?(:show_options) rescue false) }.first.show_options rescue nil
|
|
subpart.select_options.each do |select_option|
|
|
if (!@show_options.nil?) && (select_option.field_name == @show_options.keys.first.to_s)
|
|
value = YAML.load(select_option.value)
|
|
if value[I18n.locale] == t('site_menu.yes')
|
|
if page.parent_page.parent_page == Page.root
|
|
@pages = Array(page.parent_page)
|
|
else
|
|
@pages = page.parent_page.parent_page.sorted_published_child_pages
|
|
end
|
|
end
|
|
elsif !(@show_options.nil?) && select_option.field_name == @show_options.keys[1].to_s
|
|
value = YAML.load(select_option.value)
|
|
if value[I18n.locale] == t('site_menu.yes')
|
|
@expand_layer = true
|
|
@expand_current_layer = true
|
|
end
|
|
elsif !(@show_options.nil?) && select_option.field_name == @show_options.keys[2].to_s
|
|
value = YAML.load(select_option.value)
|
|
if value[I18n.locale] == t('site_menu.yes')
|
|
@expand_layer = true
|
|
@expand_next_layer = true
|
|
end
|
|
end
|
|
end
|
|
end
|
|
if @expand_next_layer && !@expand_current_layer
|
|
@pages = page.sorted_published_child_pages
|
|
end
|
|
end
|
|
@ul_index=[]
|
|
@count = -1
|
|
@count1 = -1
|
|
@li_index = []
|
|
title = subpart.title
|
|
if true #@process_ip_later
|
|
items = create_json_process_ip_later(@pages)
|
|
else
|
|
items = create_json(@pages)
|
|
end
|
|
if @expand_layer
|
|
create_menu_bool_object(items)
|
|
temp = @ul_index.reverse.collect do |ul_index|
|
|
"var ul_tp = $('div[data-subpart-id=#{subpart.id}]').find('ul.dropdown-menu').eq(#{ul_index[0]})
|
|
ul_tp.removeClass('dropdown-menu')
|
|
$('div[data-subpart-id=#{subpart.id}]').find('li').eq(#{ul_index[1]}).find('span').eq(0).remove()
|
|
"
|
|
end
|
|
if temp.length != 0
|
|
temp = temp.join(' ')
|
|
expand_script = "<script type='text/javascript'>" +
|
|
"$('div[data-subpart-id=#{subpart.id}]').ready(function(){" +
|
|
temp + '})'+
|
|
"</script>"
|
|
else
|
|
expand_script = ''
|
|
end
|
|
else
|
|
expand_script=""
|
|
end
|
|
{
|
|
"pages" => items,
|
|
"extras" => {"widget_title" => title.to_s,"expand-script"=>expand_script}
|
|
}
|
|
|
|
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
|