use MediaWiki\MediaWikiServices;
return [
+ 'DBLoadBalancerFactory' => function( MediaWikiServices $services ) {
+ $config = $services->getMainConfig()->get( 'LBFactoryConf' );
+
+ $class = LBFactory::getLBFactoryClass( $config );
+ if ( !isset( $config['readOnlyReason'] ) ) {
+ // TODO: replace the global wfConfiguredReadOnlyReason() with a service.
+ $config['readOnlyReason'] = wfConfiguredReadOnlyReason();
+ }
+
+ return new $class( $config );
+ },
+
+ 'DBLoadBalancer' => function( MediaWikiServices $services ) {
+ // just return the default LB from the DBLoadBalancerFactory service
+ return $services->getDBLoadBalancerFactory()->getMainLB();
+ },
+
'SiteStore' => function( MediaWikiServices $services ) {
- $loadBalancer = wfGetLB(); // TODO: use LB from MediaWikiServices
- $rawSiteStore = new DBSiteStore( $loadBalancer );
+ $rawSiteStore = new DBSiteStore( $services->getDBLoadBalancer() );
+ $rawSiteStore->setLanguageCodeMapping(
+ $services->getMainConfig()->get( 'DummyLanguageCodes' ) ?: []
+ );
// TODO: replace wfGetCache with a CacheFactory service.
// TODO: replace wfIsHHVM with a capabilities service.
},
'SearchEngineFactory' => function( MediaWikiServices $services ) {
- // Create search engine
- return new SearchEngineFactory( $services->getService( 'SearchEngineConfig' ) );
+ return new SearchEngineFactory( $services->getSearchEngineConfig() );
},
'SearchEngineConfig' => function( MediaWikiServices $services ) {
- // Create a search engine config from main config.
- $config = $services->getService( 'MainConfig' );
- return new SearchEngineConfig( $config );
+ global $wgContLang;
+ return new SearchEngineConfig( $services->getMainConfig(), $wgContLang );
},
'SkinFactory' => function( MediaWikiServices $services ) {
- return new SkinFactory();
+ $factory = new SkinFactory();
+
+ $names = $services->getMainConfig()->get( 'ValidSkinNames' );
+
+ foreach ( $names as $name => $skin ) {
+ $factory->register( $name, $skin, function () use ( $name, $skin ) {
+ $class = "Skin$skin";
+ return new $class( $name );
+ } );
+ }
+ // Register a hidden "fallback" skin
+ $factory->register( 'fallback', 'Fallback', function () {
+ return new SkinFallback;
+ } );
+ // Register a hidden skin for api output
+ $factory->register( 'apioutput', 'ApiOutput', function () {
+ return new SkinApi;
+ } );
+
+ return $factory;
+ },
+
+ 'WatchedItemStore' => function( MediaWikiServices $services ) {
+ $store = new WatchedItemStore(
+ $services->getDBLoadBalancer(),
+ new HashBagOStuff( [ 'maxKeys' => 100 ] )
+ );
+ $store->setStatsdDataFactory( $services->getStatsdDataFactory() );
+ return $store;
+ },
+
+ 'LinkCache' => function( MediaWikiServices $services ) {
+ return new LinkCache(
+ $services->getTitleFormatter()
+ );
+ },
+
+ 'GenderCache' => function( MediaWikiServices $services ) {
+ return new GenderCache();
+ },
+
+ '_MediaWikiTitleCodec' => function( MediaWikiServices $services ) {
+ global $wgContLang;
+
+ return new MediaWikiTitleCodec(
+ $wgContLang,
+ $services->getGenderCache(),
+ $services->getMainConfig()->get( 'LocalInterwikis' )
+ );
+ },
+
+ 'TitleFormatter' => function( MediaWikiServices $services ) {
+ return $services->getService( '_MediaWikiTitleCodec' );
+ },
+
+ 'TitleParser' => function( MediaWikiServices $services ) {
+ return $services->getService( '_MediaWikiTitleCodec' );
},
///////////////////////////////////////////////////////////////////////////