module Admin::AdminsiteMenuHelper def recognize_path(path) return {} if path.try(:strip).blank? begin return Adminsite::Engine.routes.recognize_path(path) # '/admin/profiles' return Rails.application.routes.recognize_path(path) rescue Exception => e end end def current_admin_menu @current_admin_menu ||= params[:admin_menu] end def menu_item(label, url, child_controller_names = [], klasses = nil, method = nil, admin_menu = label) result = '' child_menus = [] child_controller_names_authorized = child_controller_names.select do |child_controller_name| controller_class_name = "#{child_controller_name}_controller".classify controller_class = eval("defined?(Adminsite::" + "#{controller_class_name}) ? Adminsite::#{controller_class_name} : Adminsite::Admin::#{controller_class_name}".classify) can?(:read, controller_class.new.authorize_resource_class) end if current_url?(url, label) || ( child_controller_active?(child_controller_names) && current_admin_menu == admin_menu) child_controller_names_authorized.each do |child_controller_name| child_menus << content_menu_item(child_controller_name, admin_menu, nil, nil ) end end child_menus = child_menus.compact if child_controller_names_authorized.count > 0 begin url_controller_class = "#{recognize_path(url)[:controller]}_controller".classify.constantize if !can?(:read, url_controller_class.new.authorize_resource_class) url = content_index_path(child_controller_names_authorized.first) end rescue end html_options = {method: method} html_options[:title] = current_adminsite_admin_user.email if klasses == 'log_out' link = link_to(label, "#{url}?admin_menu=#{admin_menu}", html_options) result = raw "