MediaWiki  REL1_23
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 
00101             return $instance;
00102         }
00103     }
00104 
00110     public function getNames( $group = null ) {
00111         if ( $group === null ) {
00112             return array_keys( $this->mModules );
00113         }
00114         $result = array();
00115         foreach ( $this->mModules as $name => $grpCls ) {
00116             if ( $grpCls[0] === $group ) {
00117                 $result[] = $name;
00118             }
00119         }
00120 
00121         return $result;
00122     }
00123 
00129     public function getNamesWithClasses( $group = null ) {
00130         $result = array();
00131         foreach ( $this->mModules as $name => $grpCls ) {
00132             if ( $group === null || $grpCls[0] === $group ) {
00133                 $result[$name] = $grpCls[1];
00134             }
00135         }
00136 
00137         return $result;
00138     }
00139 
00146     public function isDefined( $moduleName, $group = null ) {
00147         if ( isset( $this->mModules[$moduleName] ) ) {
00148             return $group === null || $this->mModules[$moduleName][0] === $group;
00149         }
00150 
00151         return false;
00152     }
00153 
00159     public function getModuleGroup( $moduleName ) {
00160         if ( isset( $this->mModules[$moduleName] ) ) {
00161             return $this->mModules[$moduleName][0];
00162         }
00163 
00164         return null;
00165     }
00166 
00171     public function getGroups() {
00172         return array_keys( $this->mGroups );
00173     }
00174 }