172 lines
		
	
	
		
			5.2 KiB
		
	
	
	
		
			Ruby
		
	
	
	
			
		
		
	
	
			172 lines
		
	
	
		
			5.2 KiB
		
	
	
	
		
			Ruby
		
	
	
	
| module OrbitApp
 | |
|     module Module
 | |
|       module SideBarRegisition
 | |
|           Version = "0.1"
 | |
| 
 | |
|           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
 | |
|         end
 | |
|       
 | |
|         extend ClassMethods
 | |
|         def self.included( other )
 | |
|           other.extend( ClassMethods )
 | |
|         end
 | |
| 
 | |
|         class SideBar
 | |
|           # include ApplicationHelper
 | |
|           # include AdminHelper
 | |
|           include SideBarRenderer
 | |
|           # def is_admin?
 | |
|           #   binding.pry
 | |
|           # end
 | |
|           # def is_manager?
 | |
|           #   binding.pry
 | |
|           # end
 | |
|           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
 | |
|             block.arity < 1 ? instance_eval(&block) : block.call(self) if block_given?
 | |
|             # setup_module_app(module_app_key)
 | |
|             finalize!
 | |
|             SideBarRegisition.add(self)
 | |
|           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
 | |
|             @available_for = options[:available_for] 
 | |
|             @priority = options[:priority] || 0
 | |
|             @path = options[:link_path] || ""
 | |
|             @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 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 |