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 = "" 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