module OrbitApp module Module module SideBarRegistration Version = "0.5" module ClassMethods #initiate a blank array for generating the side bar cattr_accessor :side_bars self.side_bars = [] def add(var) self.side_bars << var end def find_by_key(key) self.side_bars.each{|t| return t if t.name.eql?(key) } return nil end def render_all(request,params,user,current_module_app) self.side_bars.collect{|t| t.render(request,params,user,current_module_app)}.join.html_safe end def all return self.side_bars end def all_get_ordered! self.side_bars.sort! {|x,y| x.get_sidebar_order! <=> y.get_sidebar_order! } end end extend ClassMethods def self.included(other) other.extend(ClassMethods) end class SideBar include SideBarRenderer def initialize(name = '', key, get_module_app, &block) @head_label = name @context_links = [] @head_link = "" @app_base_path = '' @active_for_controllers = [] @available_for = [] @active_for_app_auth = [] @module_app_key = key @get_module_app = get_module_app @sidebar_order = 0 block.arity < 1 ? instance_eval(&block) : block.call(self) if block_given? SideBarRegistration.add(self) SideBarRegistration.all_get_ordered! end def get_sidebar_order! @sidebar_order = (get_module_app.sidebar_order rescue 0) end def get_icon_class @icon_class end def get_module_app @get_module_app.call end def get_module_app_key @module_app_key end def get_active_for_controllers @active_for_controllers end def head_label_i18n(var,options ={}) @head_label = var @icon_class = options[:icon_class] end def head_link_path(var) @head_link = var end def available_for(var) @available_for = set_avaibility(var || "admin") end def get_availability @available_for end def set_avaibility(af) temp = [] case af when 'users' temp << 'users' temp << 'sub_managers' temp << 'managers' temp << 'admin' when 'sub_managers' temp << 'sub_managers' temp << 'managers' temp << 'admin' when 'managers' temp << 'managers' temp << 'admin' when 'admin' temp << 'admin' end temp end def active_for_controllers(var) @active_for_controllers = var end def get_context_links @context_links end def context_link(*var) var[1].merge!({:module_app_key=>@module_app_key,:get_module_app=>@get_module_app}) unless @module_app_key.nil? new_context_link = ContextLink.new(*var) @context_links << new_context_link end def finalize! set_controllers_scope # set_default_active_app_auth current_priority = @context_links.count if @authorizable_with_link context_link 'module_authorization', :link_path => "admin_authorizations_path(get_module_app.key)", :priority => current_priority + 2, :available_for => "managers" end @context_links.each do |t| # t.set_module_app = @module_app t.finalize! end end protected def set_controllers_scope var = @active_for_controllers @active_for_controllers = [] var[:private].each do |controller| @active_for_controllers << "#{locale}/admin/"+controller end unless var[:private].nil? var[:public].each do |controller| @active_for_controllers << controller end unless var[:public].nil? end end class ContextLink include ContextLinkRenderer attr_reader :label_i18n,:available_for,:priority,:path,:active_for_action def initialize(label_i18n="NoNameLink",options={}) @label_i18n = label_i18n @priority = options[:priority] || 0 @path = options[:link_path] || "" @arg = options[:link_arg] || "" @available_for = set_avaibility(options[:available_for] || "admin") @active_for_action = options[:active_for_action] || [] @active_for_app_auth = options[:active_for_app_auth] || [] @module_app_key = options[:module_app_key] @get_module_app = options[:get_module_app] end def get_module_app @get_module_app.call end def available_for @available_for end def set_avaibility(af) temp = [] case af when 'users' temp << 'users' temp << 'sub_managers' temp << 'managers' temp << 'admin' when 'sub_managers' temp << 'sub_managers' temp << 'managers' temp << 'admin' when 'managers' temp << 'managers' temp << 'admin' when 'admin' temp << 'admin' end temp end def active? for_action = @active_for_action.blank? ? false : active_for_action? for_app_auth = @active_for_app_auth.blank? ? false : active_for_app_auth? for_action || for_app_auth end def active_for_action? @active_for_action[controller] == action end def get_active_action @active_for_action end def finalize! set_active_actions end protected def set_active_actions controller_action_hash = @active_for_action @active_for_action = Hash[controller_action_hash.map{|controller,action| ["#{locale}/admin/"+controller.to_s,action.to_s]}] end end end end end