196 lines
		
	
	
		
			6.1 KiB
		
	
	
	
		
			Ruby
		
	
	
	
			
		
		
	
	
			196 lines
		
	
	
		
			6.1 KiB
		
	
	
	
		
			Ruby
		
	
	
	
module OrbitApp
 | 
						|
    module Module
 | 
						|
      module SideBarRegisition
 | 
						|
          Version = "0.2"
 | 
						|
 | 
						|
          module ClassMethods
 | 
						|
            @@side_bars = []
 | 
						|
 | 
						|
          def add(var)
 | 
						|
            @@side_bars << var
 | 
						|
          end
 | 
						|
 | 
						|
          def find_by_key(key)
 | 
						|
            @@side_bars.each{|t|
 | 
						|
              return t if t.name == key
 | 
						|
            }
 | 
						|
            return nil
 | 
						|
          end
 | 
						|
 | 
						|
          def render_all(request,params,user,current_module_app)
 | 
						|
            @@side_bars.collect{|t| t.render(request,params,user,current_module_app)}.join.html_safe
 | 
						|
          end
 | 
						|
 | 
						|
          def all
 | 
						|
            return @@side_bars
 | 
						|
          end
 | 
						|
 | 
						|
          def all_get_ordered!
 | 
						|
            @@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 ApplicationHelper
 | 
						|
          # include AdminHelper
 | 
						|
          include SideBarRenderer
 | 
						|
 | 
						|
          def initialize(name = '',key,get_module_app,&block)     
 | 
						|
            @head_label = name
 | 
						|
            @context_links = []
 | 
						|
            @available_for = []
 | 
						|
            @active_for_controllers = []
 | 
						|
            @active_for_object_auth = []
 | 
						|
            @active_for_app_auth = []
 | 
						|
            @head_link = ""
 | 
						|
            @app_base_path = ''
 | 
						|
            @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?
 | 
						|
            # setup_module_app(module_app_key)
 | 
						|
            finalize!
 | 
						|
            SideBarRegisition.add(self)
 | 
						|
            SideBarRegisition.all_get_ordered!
 | 
						|
          end
 | 
						|
          
 | 
						|
          def get_sidebar_order!
 | 
						|
            @sidebar_order = (get_module_app.sidebar_order rescue 0)
 | 
						|
          end
 | 
						|
 | 
						|
          def get_module_app
 | 
						|
            @get_module_app.call
 | 
						|
          end
 | 
						|
 | 
						|
          def head_label_i18n(var,options ={})
 | 
						|
            @head_label = var
 | 
						|
            @icon_class = options[:icon_class]
 | 
						|
          end
 | 
						|
 | 
						|
          def available_for(var)
 | 
						|
            @available_for = var
 | 
						|
          end
 | 
						|
 | 
						|
          def active_for_controllers(var)
 | 
						|
            @active_for_controllers = var
 | 
						|
          end
 | 
						|
 | 
						|
          def active_for_object_auth(var)
 | 
						|
            @active_for_object_auth = var
 | 
						|
          end
 | 
						|
 | 
						|
          def head_link_path(var)
 | 
						|
            @head_link = var
 | 
						|
          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
 | 
						|
            @context_links.each do |t| 
 | 
						|
              # t.set_module_app = @module_app
 | 
						|
              t.finalize!
 | 
						|
            end
 | 
						|
          end
 | 
						|
 | 
						|
          protected
 | 
						|
          # def setup_module_app(var)
 | 
						|
          #   @module_app_title = var
 | 
						|
          #   @module_app = ModuleApp.where(:key=>var).desc(:create_date).first
 | 
						|
          #   @module_app_key = @module_app.key
 | 
						|
          # end
 | 
						|
 | 
						|
          # def set_default_active_app_auth
 | 
						|
          #   @active_for_app_auth = @module_app.title
 | 
						|
          # end
 | 
						|
 | 
						|
          def set_controllers_scope
 | 
						|
            var = @active_for_controllers
 | 
						|
            @active_for_controllers = []
 | 
						|
            var[:private].each do |controller|
 | 
						|
              @active_for_controllers <<   "panel/#{@module_app_key}/back_end/"+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] || ""
 | 
						|
            set_available_for_avoiding_sensitive_links(options[:available_for] )
 | 
						|
            @active_for_action = options[:active_for_action] || []
 | 
						|
            @active_for_object_auth = options[:active_for_object_auth] || []
 | 
						|
            @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 set_available_for_avoiding_sensitive_links(available_for)
 | 
						|
            sensitive_list = {}
 | 
						|
            sensitive_list[:module_app] =/.*manager_auth_proc.*/ 
 | 
						|
            sensitive_list[:object_auth] = /.*object_auth.*/
 | 
						|
            
 | 
						|
            sensitive_list.each do |index,regx|
 | 
						|
              if @path.match(regx)
 | 
						|
              @available_for = case index
 | 
						|
                when :module_app
 | 
						|
                   [:admin]
 | 
						|
                when :object_auth
 | 
						|
                   [:manager,:admin]
 | 
						|
              end #of case
 | 
						|
            end #of if
 | 
						|
            end #of each
 | 
						|
            @available_for = available_for if @available_for.nil?
 | 
						|
          end #of def
 | 
						|
 | 
						|
          def get_module_app
 | 
						|
            @get_module_app.call
 | 
						|
          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_ob_auth = @active_for_object_auth.blank? ? false : active_for_ob_auths?
 | 
						|
            for_action || for_app_auth || for_ob_auth
 | 
						|
          end
 | 
						|
 | 
						|
          def active_for_action?
 | 
						|
            @active_for_action[controller] == action
 | 
						|
          end
 | 
						|
 | 
						|
          # def set_module_app=(var)
 | 
						|
          #   @module_app = var
 | 
						|
          #   @module_app_key = var.key
 | 
						|
          # 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| ["panel/#{@module_app_key}/back_end/"+controller.to_s,action.to_s]}]
 | 
						|
          end
 | 
						|
        end
 | 
						|
    end
 | 
						|
  end
 | 
						|
end |