home *** CD-ROM | disk | FTP | other *** search
/ PC World 2000 December / PCWorld_2000-12_cd.bin / Komunikace / Comanche / plugins / apache / apacheModuleManager.tcl < prev    next >
Text File  |  2000-11-02  |  5KB  |  170 lines

  1. #
  2. # apacheModuleManager.tcl --
  3. #
  4. #  The apacheModuleManager manages information about
  5. # different aspects of apache modules, as described in apacheModuleFormat.txt
  6. # in the docs directory.
  7. #  The apacheModuleManager has one propertyPagesManager per module, and keeps
  8. # track internally of which property pages belong to which modules.
  9. #   Things that apacheModuleManager allows:
  10. #   
  11. #   - Enable/disable modules on the fly
  12. #   - Request all property pages associated with a certain node
  13. #     (i.e virtual host) and a certain skill level (beginner, advanced)
  14.  
  15. class apacheModuleManager {
  16.     variable nodeArray
  17.     variable moduleArray
  18.     variable icon
  19.     variable description
  20.     variable directiveModuleRelationship
  21.     constructor {} {
  22.  
  23.     #  This array is going to be indexed by nodename, module
  24.     #   nodeArray($module,$nodeName)
  25.     #                             
  26.     #  Each one of the elements is a triplet:
  27.     #     pageName skillLevel hookPoint   
  28.  
  29.         array set nodeArray ""
  30.     array set icon ""
  31.     array set description ""
  32.     
  33.     # Module list. The value of the array should be 1 or 0 
  34.     # (enabled/disabled)
  35.  
  36.         array set moduleArray ""
  37.     array set directiveModuleRelationship ""
  38.     }
  39.     method addModuleDescription {name desc}
  40.     method addModuleIcon {name moduleIcon}
  41.     method getModuleDescription {name}
  42.     method getModuleIcon {name}
  43.     method getPropertyPagesByNodetypeList { nodeType }
  44.     method addPropertyPageNodeRelationship { module pageName nodeType args}
  45.     method getEnabledModuleList {}
  46.     method getDisabledModuleList {}    
  47.     method disableModule {module}
  48.     method enableModule {module}
  49.     method addModuleDirectivesRelationship 
  50.     method isDirectiveEnabled
  51. }
  52.     
  53. body apacheModuleManager::addModuleDescription {module desc} {
  54.      set description($module) $desc
  55. }
  56.  
  57. body apacheModuleManager::addModuleIcon {module moduleIcon} {
  58.      set icon($module) $moduleIcon
  59. }
  60.  
  61. body apacheModuleManager::getModuleDescription {module} {
  62.      return $description($module)
  63. }
  64.  
  65. body apacheModuleManager::getModuleIcon {module} {
  66.      return $icon($module)
  67. }
  68.  
  69. # getEnabledModules --
  70. #     Get all modules currently enabled
  71. #
  72.  
  73. body apacheModuleManager::getEnabledModuleList {} {
  74.      set result ""
  75.      foreach one [array names moduleArray] {
  76.      if $moduleArray($one) {
  77.            lappend result $one
  78.      }
  79.      }    
  80.      return $result 
  81. }
  82.  
  83. # getDisabledModules --
  84. #     Get all modules currently disabled
  85. #
  86.  
  87. body apacheModuleManager::getDisabledModuleList {} {
  88.      set result ""
  89.      foreach one [array names moduleArray] {
  90.      if !$moduleArray($one) {
  91.            lappend result $one
  92.      }
  93.      }    
  94.      return $result 
  95. }
  96.  
  97. # enableModule --
  98. #     Enables directives for a module
  99.  
  100. body apacheModuleManager::enableModule {module} {
  101.     set moduleArray($module) 1  
  102. }
  103.  
  104. # disableModule --
  105. #     Disables directives for a module
  106.  
  107. body apacheModuleManager::disableModule {module} {
  108.     set moduleArray($module) 0
  109. }
  110.  
  111. # getPropertyPagesByNodetypeList --
  112. #          Answers backs a list with the property pages objects that are
  113. # associated with a certain node type (mainserver, virtualhost, etc)
  114. #
  115. # Arguments
  116. #     nodeType   Type of the node
  117. #
  118. # Returns
  119. #     list of xuiObjects
  120.  
  121. body apacheModuleManager::getPropertyPagesByNodetypeList { nodeType } {
  122.     set result ""
  123.     foreach match [array names nodeArray *,[string tolower $nodeType]] {
  124.  
  125.     # Check if module enabled
  126.          
  127.     if $moduleArray([lindex [split $match ,] 0]) {
  128.         foreach page $nodeArray($match) {
  129.         lappend result $page
  130.         }
  131.     }
  132.     }
  133.     return $result
  134. }
  135.  
  136. # apacheModuleManager::addPropertyPageNodeRelationship --
  137. #   Associates, for a certain module and nodetype a property page, the skill
  138. # for that property page (newbie/advanced) and where to hook under that 
  139. # property page
  140.  
  141. body apacheModuleManager::addPropertyPageNodeRelationship { module pageName \
  142.     nodeType args } {
  143.     array set options {-hookUnder root -skillLevel all}
  144.     array set options $args
  145.     if ![info exists moduleArray($module)] {
  146.     set moduleArray($module) 1
  147.     }
  148.     lappend nodeArray($module,[string tolower $nodeType]) \
  149.         [list  $pageName $options(-skillLevel) $options(-hookUnder)]
  150. }
  151.  
  152.  
  153. # All directives that belong to that module
  154.  
  155. body apacheModuleManager::addModuleDirectivesRelationship {module directiveList} {
  156.     foreach dir $directiveList {
  157.     set directiveModuleRelationship([string tolower $dir]) $module
  158.     }
  159. }
  160.  
  161. body apacheModuleManager::isDirectiveEnabled {directive} {
  162.  
  163.     # If not exists, is unknown, thus enabled
  164.  
  165.     if ![ info exists directiveModuleRelationship($directive)] { return 1 }
  166.     return $moduleArray($directiveModuleRelationship($directive))
  167. }
  168.