224 lines
		
	
	
		
			7.4 KiB
		
	
	
	
		
			Ruby
		
	
	
	
			
		
		
	
	
			224 lines
		
	
	
		
			7.4 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, approvable_with_link, authorizable_with_link, &block)     
 | |
|             @head_label = name
 | |
|             @context_links = []
 | |
|             @available_for = []
 | |
|             @active_for_controllers = []
 | |
|             @active_for_object_auth = []
 | |
|             @active_for_app_auth = []
 | |
|             @active_for_tag = []
 | |
|             @head_link = ""
 | |
|             @app_base_path = ''
 | |
|             @module_app_key = key
 | |
|             @get_module_app = get_module_app
 | |
|             @sidebar_order = 0 
 | |
|             @approvable_with_link = approvable_with_link
 | |
|             @authorizable_with_link = authorizable_with_link
 | |
|             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_icon_class
 | |
|             @icon_class
 | |
|           end
 | |
| 
 | |
|           def get_module_app
 | |
|             @get_module_app.call
 | |
|           end
 | |
| 
 | |
|           def get_module_app_key
 | |
|             @module_app_key
 | |
|           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
 | |
|             current_priority = @context_links.count
 | |
|             if @approvable_with_link
 | |
|               context_link 'approval_setting',
 | |
|                             :link_path => "admin_authorizations_path(get_module_app.key, 'approval')",
 | |
|                             :priority => current_priority + 1,
 | |
|                             :available_for => [:manager]
 | |
|             end
 | |
|             if @authorizable_with_link
 | |
|               context_link 'module_authorization',
 | |
|                             :link_path => "admin_authorizations_path(get_module_app.key)",
 | |
|                             :priority => current_priority + 2,
 | |
|                             :available_for => [:manager]
 | |
|             end
 | |
|             @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] || []
 | |
|             @active_for_category = options[:active_for_category] || []
 | |
|             @active_for_tag = options[:active_for_tag] || []
 | |
|             @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_category = @active_for_category.blank? ? false : active_for_category?
 | |
|             for_tag = @active_for_tag.blank? ? false : active_for_tag?
 | |
|             for_action || for_app_auth || for_ob_auth || for_tag
 | |
|           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 |