MediaWiki  REL1_21
ApiModuleManager.php
Go to the documentation of this file.
00001 <?php
00034 class ApiModuleManager extends ContextSource {
00035 
00036         private $mParent;
00037         private $mInstances = array();
00038         private $mGroups = array();
00039         private $mModules = array();
00040 
00045         public function __construct( ApiBase $parentModule ) {
00046                 $this->mParent = $parentModule;
00047         }
00048 
00054         public function addModules( array $modules, $group ) {
00055                 foreach ( $modules as $name => $class ) {
00056                         $this->addModule( $name, $group, $class );
00057                 }
00058         }
00059 
00069         public function addModule( $name, $group, $class ) {
00070                 $this->mGroups[$group] = null;
00071                 $this->mModules[$name] = array( $group, $class );
00072         }
00073 
00081         public function getModule( $moduleName, $group = null, $ignoreCache = false ) {
00082                 if ( !isset( $this->mModules[$moduleName] ) ) {
00083                         return null;
00084                 }
00085                 $grpCls = $this->mModules[$moduleName];
00086                 if ( $group !== null && $grpCls[0] !== $group ) {
00087                         return null;
00088                 }
00089                 if ( !$ignoreCache && isset( $this->mInstances[$moduleName] ) ) {
00090                         // already exists
00091                         return $this->mInstances[$moduleName];
00092                 } else {
00093                         // new instance
00094                         $class = $grpCls[1];
00095                         $instance = new $class ( $this->mParent, $moduleName );
00096                         if ( !$ignoreCache ) {
00097                                 // cache this instance in case it is needed later
00098                                 $this->mInstances[$moduleName] = $instance;
00099                         }
00100                         return $instance;
00101                 }
00102         }
00103 
00109         public function getNames( $group = null ) {
00110                 if ( $group === null ) {
00111                         return array_keys( $this->mModules );
00112                 }
00113                 $result = array();
00114                 foreach ( $this->mModules as $name => $grpCls ) {
00115                         if ( $grpCls[0] === $group ) {
00116                                 $result[] = $name;
00117                         }
00118                 }
00119                 return $result;
00120         }
00121 
00127         public function getNamesWithClasses( $group = null ) {
00128                 $result = array();
00129                 foreach ( $this->mModules as $name => $grpCls ) {
00130                         if ( $group === null || $grpCls[0] === $group ) {
00131                                 $result[$name] = $grpCls[1];
00132                         }
00133                 }
00134                 return $result;
00135         }
00136 
00143         public function isDefined( $moduleName, $group = null ) {
00144                 if ( isset( $this->mModules[$moduleName] ) ) {
00145                         return $group === null || $this->mModules[$moduleName][0] === $group;
00146                 } else {
00147                         return false;
00148                 }
00149         }
00150 
00156         public function getModuleGroup( $moduleName ) {
00157                 if ( isset( $this->mModules[$moduleName] ) ) {
00158                         return $this->mModules[$moduleName][0];
00159                 } else {
00160                         return null;
00161                 }
00162         }
00163 
00168         public function getGroups() {
00169                 return array_keys( $this->mGroups );
00170         }
00171 }