47use Liuggio\StatsdClient\Factory\StatsdDataFactoryInterface;
84use Wikimedia\ObjectFactory;
94 return wfMessage(
'bad_image_list' )->inContentLanguage()->plain();
96 $services->getLocalServerObjectCache(),
97 $services->getRepoGroup(),
98 $services->getTitleParser()
103 return $services->getService(
'_SqlBlobStore' );
108 $services->getDBLoadBalancerFactory(),
109 $services->getExternalStoreAccess(),
110 $services->getMainWANObjectCache(),
112 $services->getMainConfig() )
119 BlockManager::CONSTRUCTOR_OPTIONS, $services->getMainConfig()
128 $services->getDBLoadBalancer()
134 $services->getContentLanguage(),
141 $registry = $services->getBootstrapConfig()->get(
'ConfigRegistry' );
144 foreach ( $registry as $name => $callback ) {
145 $factory->register( $name, $callback );
155 $config = $services->getMainConfig();
157 $config->get(
'ReadOnly' ),
158 $config->get(
'ReadOnlyFile' )
163 return Language::factory( $services->getMainConfig()->get(
'LanguageCode' ) );
167 $config = $services->getMainConfig();
169 $secret = $config->get(
'HKDFSecret' ) ?: $config->get(
'SecretKey' );
171 throw new RuntimeException(
"Cannot use MWCryptHKDF without a secret." );
176 $context = [ microtime(), getmypid(), gethostname() ];
179 $cache = $services->getLocalServerObjectCache();
193 return $services->getDBLoadBalancerFactory()->getMainLB();
196 'DBLoadBalancerFactory' =>
198 $mainConfig = $services->getMainConfig();
201 $mainConfig->get(
'LBFactoryConf' ),
202 new ServiceOptions( MWLBFactory::APPLY_DEFAULT_CONFIG_OPTIONS, $mainConfig ),
203 $services->getConfiguredReadOnlyMode(),
204 $services->getLocalServerObjectCache(),
205 $services->getMainObjectStash(),
206 $services->getMainWANObjectCache()
210 return new $class( $lbConf );
219 $services->getExternalStoreFactory(),
225 $config = $services->getMainConfig();
226 $writeStores = $config->get(
'DefaultExternalStore' );
229 $config->get(
'ExternalStores' ),
230 ( $writeStores !==
false ) ? (array)$writeStores : [],
231 $services->getDBLoadBalancer()->getLocalDomainID(),
237 $nsInfo = $services->getNamespaceInfo();
239 $dbLoadBalancer = $services->isServiceDisabled(
'DBLoadBalancer' )
241 : $services->getDBLoadBalancer();
242 return new GenderCache( $nsInfo, $dbLoadBalancer );
245 'HttpRequestFactory' =>
251 $config = $services->getMainConfig();
253 $services->getContentLanguage(),
254 $services->getMainWANObjectCache(),
255 $config->get(
'InterwikiExpiry' ),
256 $config->get(
'InterwikiCache' ),
257 $config->get(
'InterwikiScopes' ),
258 $config->get(
'InterwikiFallbackSite' )
265 $services->getMainConfig()
271 $services->getTitleFormatter(),
272 $services->getMainWANObjectCache(),
273 $services->getNamespaceInfo()
278 if ( defined(
'MW_NO_SESSION' ) ) {
279 return $services->getLinkRendererFactory()->create();
283 return $services->getLinkRendererFactory()->createForUser(
284 RequestContext::getMain()->
getUser()
291 $services->getTitleFormatter(),
292 $services->getLinkCache(),
293 $services->getNamespaceInfo()
298 $conf = $services->getMainConfig()->get(
'LocalisationCacheConf' );
300 $logger = LoggerFactory::getInstance(
'localisation' );
303 $conf, $services->getMainConfig()->get(
'CacheDirectory' ) );
304 $logger->debug(
'LocalisationCache: using store ' . get_class( $store ) );
306 return new $conf[
'class'](
308 LocalisationCache::CONSTRUCTOR_OPTIONS,
313 'forceRecache' =>
false,
314 'manualRecache' =>
false,
317 $services->getMainConfig()
321 [
function () use ( $services ) {
327 $services->getLanguageNameUtils()
332 $config = $services->getMainConfig();
340 WikiMap::getCurrentWikiDbDomain()->getId(),
341 $services->getMainConfig()->get(
'LockManagers' ),
342 $services->getDBLoadBalancerFactory()
352 return $services->getConfigFactory()->makeConfig(
'main' );
356 $mainConfig = $services->getMainConfig();
358 $id = $mainConfig->
get(
'MainStash' );
359 if ( !isset( $mainConfig->get(
'ObjectCaches' )[$id] ) ) {
360 throw new UnexpectedValueException(
361 "Cache type \"$id\" is not present in \$wgObjectCaches." );
364 $params = $mainConfig->get(
'ObjectCaches' )[$id];
365 $logger = $params[
'logger'] = LoggerFactory::getInstance( $params[
'loggroup'] ??
'objectcache' );
368 $logger->debug(
'MainObjectStash using store {class}', [
369 'class' => get_class( $store )
376 $mainConfig = $services->getMainConfig();
378 $id = $mainConfig->
get(
'MainWANCache' );
379 if ( !isset( $mainConfig->get(
'WANObjectCaches' )[$id] ) ) {
380 throw new UnexpectedValueException(
381 "WAN cache type \"$id\" is not present in \$wgWANObjectCaches." );
384 $params = $mainConfig->get(
'WANObjectCaches' )[$id];
386 $logger = LoggerFactory::getInstance( $params[
'loggroup'] ??
'objectcache' );
388 $objectCacheId = $params[
'cacheId'];
389 if ( !isset( $mainConfig->get(
'ObjectCaches' )[$objectCacheId] ) ) {
390 throw new UnexpectedValueException(
391 "Cache type \"$objectCacheId\" is not present in \$wgObjectCaches." );
393 $storeParams = $mainConfig->get(
'ObjectCaches' )[$objectCacheId];
395 $logger->debug(
'MainWANObjectCache using store {class}', [
396 'class' => get_class( $store )
399 $params[
'logger'] = $logger;
400 $params[
'cache'] = $store;
401 $params[
'secret'] = $params[
'secret'] ?? $mainConfig->get(
'SecretKey' );
402 if ( !$mainConfig->get(
'CommandLineMode' ) ) {
404 $params[
'stats'] = $services->getStatsdDataFactory();
406 $params[
'asyncHandler'] = [ DeferredUpdates::class,
'addCallableUpdate' ];
409 $class = $params[
'class'];
410 $instance =
new $class( $params );
412 '@phan-var WANObjectCache $instance';
418 $services->getMainConfig()->get(
'MediaHandlers' )
423 $mainConfig = $services->getMainConfig();
425 $srvCache = $mainConfig->get(
'UseLocalMessageCache' )
426 ? $services->getLocalServerObjectCache()
430 $logger = LoggerFactory::getInstance(
'MessageCache' );
431 $logger->debug(
'MessageCache using store {class}', [
432 'class' => get_class( $clusterCache )
436 $services->getMainWANObjectCache(),
439 $mainConfig->get(
'UseDatabaseMessages' ),
440 $services->getContentLanguage()
444 'MessageFormatterFactory' =>
452 $mainConfig = $services->getMainConfig();
454 'typeFile' => $mainConfig->get(
'MimeTypeFile' ),
455 'infoFile' => $mainConfig->get(
'MimeInfoFile' ),
456 'xmlTypes' => $mainConfig->get(
'XMLMimeTypes' ),
458 function ( $mimeAnalyzer, &$head, &$tail,
$file, &$mime ) use ( $logger ) {
461 if ( $deja->isValid() ) {
462 $logger->info(
"Detected $file as image/vnd.djvu\n" );
463 $mime =
'image/vnd.djvu';
469 'MimeMagicGuessFromContent',
470 [ $mimeAnalyzer, &$head, &$tail,
$file, &$mime ]
473 'extCallback' =>
function ( $mimeAnalyzer,
$ext, &$mime ) {
475 Hooks::run(
'MimeMagicImproveFromExtension', [ $mimeAnalyzer,
$ext, &$mime ] );
477 'initCallback' =>
function ( $mimeAnalyzer ) {
479 Hooks::run(
'MimeMagicInit', [ $mimeAnalyzer ] );
484 if ( $params[
'infoFile'] ===
'includes/mime.info' ) {
485 $params[
'infoFile'] = __DIR__ .
"/libs/mime/mime.info";
488 if ( $params[
'typeFile'] ===
'includes/mime.types' ) {
489 $params[
'typeFile'] = __DIR__ .
"/libs/mime/mime.types";
492 $detectorCmd = $mainConfig->get(
'MimeDetectorCommand' );
493 if ( $detectorCmd ) {
494 $factory = $services->getShellCommandFactory();
495 $params[
'detectCallback'] =
function (
$file ) use ( $detectorCmd, $factory ) {
496 $result = $factory->create()
498 ->unsafeParams( $detectorCmd )
501 return $result->getStdout();
505 return new MimeAnalyzer( $params );
511 $services->getDBLoadBalancer(),
512 $services->getNamespaceInfo(),
513 $services->getWatchedItemStore(),
515 $services->getRepoGroup()
521 $services->getMainConfig() ) );
526 $services->getDBLoadBalancerFactory(),
527 $services->getMainWANObjectCache(),
533 return new ObjectFactory( $services );
540 $services->getDBLoadBalancer()
545 $config = $services->getMainConfig();
548 ObjectCache::getLocalClusterInstance(),
549 $services->getDBLoadBalancer(),
550 LoggerFactory::getInstance(
'StashEdit' ),
551 $services->getStatsdDataFactory(),
552 defined(
'MEDIAWIKI_JOB_RUNNER' ) || $config->get(
'CommandLineMode' )
553 ? PageEditStash::INITIATOR_JOB_OR_CLI
559 return $services->getParserFactory()->create();
563 $config = $services->getMainConfig();
569 $config->get(
'CacheEpoch' )
576 $services->getMainConfig()->get(
'ParserConf' ),
580 $services->getMainConfig()
585 $services->getMagicWordFactory(),
586 $services->getContentLanguage(),
588 $services->getSpecialPageFactory(),
589 $services->getLinkRendererFactory(),
590 $services->getNamespaceInfo(),
591 LoggerFactory::getInstance(
'Parser' )
596 $config = $services->getMainConfig();
598 $config->get(
'PasswordConfig' ),
599 $config->get(
'PasswordDefault' )
607 AuthManager::singleton(),
608 $services->getPermissionManager(),
609 $services->getDBLoadBalancer(),
610 LoggerFactory::getInstance(
'authentication' )
614 'PerDbNameStatsdDataFactory' =>
616 $config = $services->getMainConfig();
617 $wiki = $config->get(
'DBname' );
619 $services->getStatsdDataFactory(),
629 $services->getSpecialPageFactory(),
630 $services->getRevisionLookup(),
631 $services->getNamespaceInfo()
639 $services->getContentLanguage(),
641 $services->getLinkRendererFactory()->create(),
642 $services->getNamespaceInfo(),
645 $factory->setLogger( LoggerFactory::getInstance(
'preferences' ) );
651 $mainConfig = $services->getMainConfig();
653 $mainConfig->get(
'CdnServers' ),
654 $mainConfig->get(
'CdnServersNoPurge' )
660 $services->getConfiguredReadOnlyMode(),
661 $services->getDBLoadBalancer()
666 $config = $services->getMainConfig();
668 $config->get(
'LocalFileRepo' ),
669 $config->get(
'ForeignFileRepos' ),
670 $services->getMainWANObjectCache()
678 $config = $services->getMainConfig();
682 LoggerFactory::getInstance(
'resourceloader' )
685 $rl->addSource( $config->get(
'ResourceLoaderSources' ) );
688 $rl->register( include
"$IP/resources/Resources.php" );
689 $rl->register( $config->get(
'ResourceModules' ) );
690 Hooks::run(
'ResourceLoaderRegisterModules', [ &$rl ] );
692 if ( $config->get(
'EnableJavaScriptTest' ) ===
true ) {
693 $rl->registerTestModules();
700 return $services->getRevisionStore();
704 return $services->getRevisionStore();
709 $services->getDBLoadBalancer(),
710 $services->getSlotRoleRegistry()
713 $renderer->
setLogger( LoggerFactory::getInstance(
'SaveParse' ) );
718 return $services->getRevisionStoreFactory()->getRevisionStore();
722 $config = $services->getMainConfig();
724 $services->getDBLoadBalancerFactory(),
725 $services->getBlobStoreFactory(),
726 $services->getNameTableStoreFactory(),
727 $services->getSlotRoleRegistry(),
728 $services->getMainWANObjectCache(),
729 $services->getCommentStore(),
730 $services->getActorMigration(),
731 $config->get(
'MultiContentRevisionSchemaMigrationStage' ),
732 LoggerFactory::getInstance(
'RevisionStore' ),
733 $config->get(
'ContentHandlerUseDB' )
743 $services->getContentLanguage() );
751 $config = $services->getMainConfig();
754 'time' => $config->get(
'MaxShellTime' ),
755 'walltime' => $config->get(
'MaxShellWallClockTime' ),
756 'memory' => $config->get(
'MaxShellMemory' ),
757 'filesize' => $config->get(
'MaxShellFileSize' ),
759 $cgroup = $config->get(
'ShellCgroup' );
760 $restrictionMethod = $config->get(
'ShellRestrictionMethod' );
762 $factory =
new CommandFactory( $limits, $cgroup, $restrictionMethod );
763 $factory->setLogger( LoggerFactory::getInstance(
'exec' ) );
764 $factory->logStderr();
773 return $services->getSiteStore();
777 $rawSiteStore = new
DBSiteStore( $services->getDBLoadBalancer() );
779 $cache = $services->getLocalServerObjectCache();
790 $names = $services->getMainConfig()->get(
'ValidSkinNames' );
792 foreach ( $names as $name => $skin ) {
793 $factory->
register( $name, $skin,
function () use ( $name, $skin ) {
794 $class =
"Skin$skin";
795 return new $class( $name );
799 $factory->register(
'fallback',
'Fallback',
function () {
803 $factory->register(
'apioutput',
'ApiOutput',
function () {
811 $config = $services->getMainConfig();
814 $services->getNameTableStoreFactory()->getSlotRoles()
817 $registry->defineRole(
'main',
function () use ( $config ) {
819 $config->get(
'NamespaceContentModels' )
830 $services->getContentLanguage(),
831 $services->getObjectFactory()
837 rtrim( $services->getMainConfig()->get(
'StatsdMetricPrefix' ),
'.' )
846 return $services->getService(
'_MediaWikiTitleCodec' );
850 return $services->getService(
'_MediaWikiTitleCodec' );
855 $services->getMainConfig()->get(
'EnableUploads' ),
860 'VirtualRESTServiceClient' =>
862 $config = $services->getMainConfig()->get(
'VirtualRestConfig' );
865 foreach ( $config[
'paths'] as $prefix => $serviceConfig ) {
866 $class = $serviceConfig[
'class'];
868 $constructArg = $serviceConfig[
'options'] ?? [];
869 $constructArg += $config[
'global'];
871 $vrsClient->mount( $prefix, [
'class' => $class,
'config' => $constructArg ] );
877 'WatchedItemQueryService' =>
880 $services->getDBLoadBalancer(),
881 $services->getCommentStore(),
882 $services->getActorMigration(),
883 $services->getWatchedItemStore(),
890 $services->getDBLoadBalancerFactory(),
892 $services->getMainObjectStash(),
894 $services->getReadOnlyMode(),
895 $services->getMainConfig()->get(
'UpdateRowsPerQuery' ),
896 $services->getNamespaceInfo(),
897 $services->getRevisionLookup()
901 if ( $services->getMainConfig()->get(
'ReadOnlyWatchedItemStore' ) ) {
908 'WikiRevisionOldRevisionImporterNoUpdates' =>
913 $services->getDBLoadBalancer()
919 $services->getContentLanguage(),
920 $services->getGenderCache(),
921 $services->getMainConfig()->get(
'LocalInterwikis' ),
922 $services->getInterwikiLookup(),
923 $services->getNamespaceInfo()
929 return $services->getBlobStoreFactory()->newSqlBlobStore();
wfUrlProtocols( $includeProtocolRelative=true)
Returns a regular expression of url protocols.
wfDebugLog( $logGroup, $text, $dest='all', array $context=[])
Send a line to a supplementary debug log file, if configured, or main debug log if not.
wfMessage( $key,... $params)
This is the function for getting translated interface messages.
return[ 'ActorMigration'=> function(MediaWikiServices $services) :ActorMigration { return new ActorMigration(SCHEMA_COMPAT_NEW);}, 'BadFileLookup'=> function(MediaWikiServices $services) :BadFileLookup { return new BadFileLookup(function() { return wfMessage( 'bad_image_list') ->inContentLanguage() ->plain();}, $services->getLocalServerObjectCache(), $services->getRepoGroup(), $services->getTitleParser());}, 'BlobStore'=> function(MediaWikiServices $services) :BlobStore { return $services->getService( '_SqlBlobStore');}, 'BlobStoreFactory'=> function(MediaWikiServices $services) :BlobStoreFactory { return new BlobStoreFactory($services->getDBLoadBalancerFactory(), $services->getExternalStoreAccess(), $services->getMainWANObjectCache(), new ServiceOptions(BlobStoreFactory::CONSTRUCTOR_OPTIONS, $services->getMainConfig()));}, 'BlockManager'=> function(MediaWikiServices $services) :BlockManager { return new BlockManager(new ServiceOptions(BlockManager::CONSTRUCTOR_OPTIONS, $services->getMainConfig()), $services->getPermissionManager(), LoggerFactory::getInstance( 'BlockManager'));}, 'BlockRestrictionStore'=> function(MediaWikiServices $services) :BlockRestrictionStore { return new BlockRestrictionStore($services->getDBLoadBalancer());}, 'CommentStore'=> function(MediaWikiServices $services) :CommentStore { return new CommentStore($services->getContentLanguage(), MIGRATION_NEW);}, 'ConfigFactory'=> function(MediaWikiServices $services) :ConfigFactory { $registry=$services->getBootstrapConfig() ->get( 'ConfigRegistry');$factory=new ConfigFactory();foreach( $registry as $name=> $callback) { $factory->register( $name, $callback);} return $factory;}, 'ConfigRepository'=> function(MediaWikiServices $services) :ConfigRepository { return new ConfigRepository( $services->getConfigFactory());}, 'ConfiguredReadOnlyMode'=> function(MediaWikiServices $services) :ConfiguredReadOnlyMode { $config=$services->getMainConfig();return new ConfiguredReadOnlyMode($config->get( 'ReadOnly'), $config->get( 'ReadOnlyFile'));}, 'ContentLanguage'=> function(MediaWikiServices $services) :Language { return Language::factory( $services->getMainConfig() ->get( 'LanguageCode'));}, 'CryptHKDF'=> function(MediaWikiServices $services) :CryptHKDF { $config=$services->getMainConfig();$secret=$config->get( 'HKDFSecret') ?:$config->get( 'SecretKey');if(! $secret) { throw new RuntimeException("Cannot use MWCryptHKDF without a secret.");} $context=[microtime(), getmypid(), gethostname()];$cache=$services->getLocalServerObjectCache();if( $cache instanceof EmptyBagOStuff) { $cache=ObjectCache::getLocalClusterInstance();} return new CryptHKDF( $secret, $config->get( 'HKDFAlgorithm'), $cache, $context);}, 'DateFormatterFactory'=> function() :DateFormatterFactory { return new DateFormatterFactory;}, 'DBLoadBalancer'=> function(MediaWikiServices $services) :Wikimedia\Rdbms\ILoadBalancer { return $services->getDBLoadBalancerFactory() ->getMainLB();}, 'DBLoadBalancerFactory'=> function(MediaWikiServices $services) :Wikimedia\Rdbms\LBFactory { $mainConfig=$services->getMainConfig();$lbConf=MWLBFactory::applyDefaultConfig($mainConfig->get( 'LBFactoryConf'), new ServiceOptions(MWLBFactory::APPLY_DEFAULT_CONFIG_OPTIONS, $mainConfig), $services->getConfiguredReadOnlyMode(), $services->getLocalServerObjectCache(), $services->getMainObjectStash(), $services->getMainWANObjectCache());$class=MWLBFactory::getLBFactoryClass( $lbConf);return new $class( $lbConf);}, 'EventRelayerGroup'=> function(MediaWikiServices $services) :EventRelayerGroup { return new EventRelayerGroup( $services->getMainConfig() ->get( 'EventRelayerConfig'));}, 'ExternalStoreAccess'=> function(MediaWikiServices $services) :ExternalStoreAccess { return new ExternalStoreAccess($services->getExternalStoreFactory(), LoggerFactory::getInstance( 'ExternalStore'));}, 'ExternalStoreFactory'=> function(MediaWikiServices $services) :ExternalStoreFactory { $config=$services->getMainConfig();$writeStores=$config->get( 'DefaultExternalStore');return new ExternalStoreFactory($config->get( 'ExternalStores'),( $writeStores !==false) ?(array) $writeStores :[], $services->getDBLoadBalancer() ->getLocalDomainID(), LoggerFactory::getInstance( 'ExternalStore'));}, 'GenderCache'=> function(MediaWikiServices $services) :GenderCache { $nsInfo=$services->getNamespaceInfo();$dbLoadBalancer=$services->isServiceDisabled( 'DBLoadBalancer') ? null :$services->getDBLoadBalancer();return new GenderCache( $nsInfo, $dbLoadBalancer);}, 'HttpRequestFactory'=> function(MediaWikiServices $services) :HttpRequestFactory { return new HttpRequestFactory();}, 'InterwikiLookup'=> function(MediaWikiServices $services) :InterwikiLookup { $config=$services->getMainConfig();return new ClassicInterwikiLookup($services->getContentLanguage(), $services->getMainWANObjectCache(), $config->get( 'InterwikiExpiry'), $config->get( 'InterwikiCache'), $config->get( 'InterwikiScopes'), $config->get( 'InterwikiFallbackSite'));}, 'LanguageNameUtils'=> function(MediaWikiServices $services) :LanguageNameUtils { return new LanguageNameUtils(new ServiceOptions(LanguageNameUtils::CONSTRUCTOR_OPTIONS, $services->getMainConfig()));}, 'LinkCache'=> function(MediaWikiServices $services) :LinkCache { return new LinkCache($services->getTitleFormatter(), $services->getMainWANObjectCache(), $services->getNamespaceInfo());}, 'LinkRenderer'=> function(MediaWikiServices $services) :LinkRenderer { if(defined( 'MW_NO_SESSION')) { return $services->getLinkRendererFactory() ->create();} else { return $services->getLinkRendererFactory() ->createForUser(RequestContext::getMain() ->getUser());} }, 'LinkRendererFactory'=> function(MediaWikiServices $services) :LinkRendererFactory { return new LinkRendererFactory($services->getTitleFormatter(), $services->getLinkCache(), $services->getNamespaceInfo());}, 'LocalisationCache'=> function(MediaWikiServices $services) :LocalisationCache { $conf=$services->getMainConfig() ->get( 'LocalisationCacheConf');$logger=LoggerFactory::getInstance( 'localisation');$store=LocalisationCache::getStoreFromConf($conf, $services->getMainConfig() ->get( 'CacheDirectory'));$logger->debug( 'LocalisationCache:using store ' . get_class( $store));return new $conf['class'](new ServiceOptions(LocalisationCache::CONSTRUCTOR_OPTIONS, $conf, ['forceRecache'=> false, 'manualRecache'=> false,], $services->getMainConfig()), $store, $logger, [function() use( $services) { MessageBlobStore::clearGlobalCacheEntry( $services->getMainWANObjectCache());}], $services->getLanguageNameUtils());}, 'LocalServerObjectCache'=> function(MediaWikiServices $services) :BagOStuff { $config=$services->getMainConfig();$cacheId=ObjectCache::detectLocalServerCache();return ObjectCache::newFromParams( $config->get( 'ObjectCaches')[$cacheId]);}, 'LockManagerGroupFactory'=> function(MediaWikiServices $services) :LockManagerGroupFactory { return new LockManagerGroupFactory(WikiMap::getCurrentWikiDbDomain() ->getId(), $services->getMainConfig() ->get( 'LockManagers'), $services->getDBLoadBalancerFactory());}, 'MagicWordFactory'=> function(MediaWikiServices $services) :MagicWordFactory { return new MagicWordFactory( $services->getContentLanguage());}, 'MainConfig'=> function(MediaWikiServices $services) :Config { return $services->getConfigFactory() ->makeConfig( 'main');}, 'MainObjectStash'=> function(MediaWikiServices $services) :BagOStuff { $mainConfig=$services->getMainConfig();$id=$mainConfig->get( 'MainStash');if(!isset( $mainConfig->get( 'ObjectCaches')[$id])) { throw new UnexpectedValueException("Cache type \"$id\" is not present in \$wgObjectCaches.");} $params=$mainConfig->get( 'ObjectCaches')[$id];$logger=$params['logger']=LoggerFactory::getInstance( $params['loggroup'] ?? 'objectcache');$store=ObjectCache::newFromParams( $params);$logger->debug( 'MainObjectStash using store {class}', ['class'=> get_class( $store)]);return $store;}, 'MainWANObjectCache'=> function(MediaWikiServices $services) :WANObjectCache { $mainConfig=$services->getMainConfig();$id=$mainConfig->get( 'MainWANCache');if(!isset( $mainConfig->get( 'WANObjectCaches')[$id])) { throw new UnexpectedValueException("WAN cache type \"$id\" is not present in \$wgWANObjectCaches.");} $params=$mainConfig->get( 'WANObjectCaches')[$id];$logger=LoggerFactory::getInstance( $params['loggroup'] ?? 'objectcache');$objectCacheId=$params['cacheId'];if(!isset( $mainConfig->get( 'ObjectCaches')[$objectCacheId])) { throw new UnexpectedValueException("Cache type \"$objectCacheId\" is not present in \$wgObjectCaches.");} $storeParams=$mainConfig->get( 'ObjectCaches')[$objectCacheId];$store=ObjectCache::newFromParams( $storeParams);$logger->debug( 'MainWANObjectCache using store {class}', ['class'=> get_class( $store)]);$params['logger']=$logger;$params['cache']=$store;$params['secret']=$params['secret'] ?? $mainConfig->get( 'SecretKey');if(! $mainConfig->get( 'CommandLineMode')) { $params['stats']=$services->getStatsdDataFactory();$params['asyncHandler']=[DeferredUpdates::class, 'addCallableUpdate'];} $class=$params['class'];$instance=new $class( $params);' @phan-var WANObjectCache $instance';return $instance;}, 'MediaHandlerFactory'=> function(MediaWikiServices $services) :MediaHandlerFactory { return new MediaHandlerFactory($services->getMainConfig() ->get( 'MediaHandlers'));}, 'MessageCache'=> function(MediaWikiServices $services) :MessageCache { $mainConfig=$services->getMainConfig();$clusterCache=ObjectCache::getInstance( $mainConfig->get( 'MessageCacheType'));$srvCache=$mainConfig->get( 'UseLocalMessageCache') ? $services->getLocalServerObjectCache() :new EmptyBagOStuff();$logger=LoggerFactory::getInstance( 'MessageCache');$logger->debug( 'MessageCache using store {class}', ['class'=> get_class( $clusterCache)]);return new MessageCache($services->getMainWANObjectCache(), $clusterCache, $srvCache, $mainConfig->get( 'UseDatabaseMessages'), $services->getContentLanguage());}, 'MessageFormatterFactory'=> function(MediaWikiServices $services) :IMessageFormatterFactory { return new MessageFormatterFactory();}, 'MimeAnalyzer'=> function(MediaWikiServices $services) :MimeAnalyzer { $logger=LoggerFactory::getInstance( 'Mime');$mainConfig=$services->getMainConfig();$params=['typeFile'=> $mainConfig->get( 'MimeTypeFile'), 'infoFile'=> $mainConfig->get( 'MimeInfoFile'), 'xmlTypes'=> $mainConfig->get( 'XMLMimeTypes'), 'guessCallback'=> function( $mimeAnalyzer, &$head, &$tail, $file, &$mime) use( $logger) { $deja=new DjVuImage( $file);if( $deja->isValid()) { $logger->info("Detected $file as image/vnd.djvu\n");$mime='image/vnd.djvu';return;} Hooks::run('MimeMagicGuessFromContent', [ $mimeAnalyzer, &$head, &$tail, $file, &$mime]);}, 'extCallback'=> function( $mimeAnalyzer, $ext, &$mime) { Hooks::run( 'MimeMagicImproveFromExtension', [ $mimeAnalyzer, $ext, &$mime]);}, 'initCallback'=> function( $mimeAnalyzer) { Hooks::run( 'MimeMagicInit', [ $mimeAnalyzer]);}, 'logger'=> $logger];if( $params['infoFile']==='includes/mime.info') { $params['infoFile']=__DIR__ . "/libs/mime/mime.info";} if( $params['typeFile']==='includes/mime.types') { $params['typeFile']=__DIR__ . "/libs/mime/mime.types";} $detectorCmd=$mainConfig->get( 'MimeDetectorCommand');if( $detectorCmd) { $factory=$services->getShellCommandFactory();$params['detectCallback']=function( $file) use( $detectorCmd, $factory) { $result=$factory->create() ->unsafeParams( $detectorCmd) ->params( $file) ->execute();return $result->getStdout();};} return new MimeAnalyzer( $params);}, 'MovePageFactory'=> function(MediaWikiServices $services) :MovePageFactory { return new MovePageFactory(new ServiceOptions(MovePageFactory::$constructorOptions, $services->getMainConfig()), $services->getDBLoadBalancer(), $services->getNamespaceInfo(), $services->getWatchedItemStore(), $services->getPermissionManager(), $services->getRepoGroup());}, 'NamespaceInfo'=> function(MediaWikiServices $services) :NamespaceInfo { return new NamespaceInfo(new ServiceOptions(NamespaceInfo::$constructorOptions, $services->getMainConfig()));}, 'NameTableStoreFactory'=> function(MediaWikiServices $services) :NameTableStoreFactory { return new NameTableStoreFactory($services->getDBLoadBalancerFactory(), $services->getMainWANObjectCache(), LoggerFactory::getInstance( 'NameTableSqlStore'));}, 'ObjectFactory'=> function(MediaWikiServices $services) :ObjectFactory { return new ObjectFactory( $services);}, 'OldRevisionImporter'=> function(MediaWikiServices $services) :OldRevisionImporter { return new ImportableOldRevisionImporter(true, LoggerFactory::getInstance( 'OldRevisionImporter'), $services->getDBLoadBalancer());}, 'PageEditStash'=> function(MediaWikiServices $services) :PageEditStash { $config=$services->getMainConfig();return new PageEditStash(ObjectCache::getLocalClusterInstance(), $services->getDBLoadBalancer(), LoggerFactory::getInstance( 'StashEdit'), $services->getStatsdDataFactory(), defined( 'MEDIAWIKI_JOB_RUNNER')|| $config->get( 'CommandLineMode') ? PageEditStash::INITIATOR_JOB_OR_CLI :PageEditStash::INITIATOR_USER);}, 'Parser'=> function(MediaWikiServices $services) :Parser { return $services->getParserFactory() ->create();}, 'ParserCache'=> function(MediaWikiServices $services) :ParserCache { $config=$services->getMainConfig();$cache=ObjectCache::getInstance( $config->get( 'ParserCacheType'));wfDebugLog( 'caches', 'parser:' . get_class( $cache));return new ParserCache($cache, $config->get( 'CacheEpoch'));}, 'ParserFactory'=> function(MediaWikiServices $services) :ParserFactory { $options=new ServiceOptions(Parser::$constructorOptions, $services->getMainConfig() ->get( 'ParserConf'), [ 'class'=> Parser::class, 'preprocessorClass'=> Preprocessor_Hash::class], $services->getMainConfig());return new ParserFactory($options, $services->getMagicWordFactory(), $services->getContentLanguage(), wfUrlProtocols(), $services->getSpecialPageFactory(), $services->getLinkRendererFactory(), $services->getNamespaceInfo(), LoggerFactory::getInstance( 'Parser'));}, 'PasswordFactory'=> function(MediaWikiServices $services) :PasswordFactory { $config=$services->getMainConfig();return new PasswordFactory($config->get( 'PasswordConfig'), $config->get( 'PasswordDefault'));}, 'PasswordReset'=> function(MediaWikiServices $services) :PasswordReset { $options=new ServiceOptions(PasswordReset::CONSTRUCTOR_OPTIONS, $services->getMainConfig());return new PasswordReset($options, AuthManager::singleton(), $services->getPermissionManager(), $services->getDBLoadBalancer(), LoggerFactory::getInstance( 'authentication'));}, 'PerDbNameStatsdDataFactory'=> function(MediaWikiServices $services) :StatsdDataFactoryInterface { $config=$services->getMainConfig();$wiki=$config->get( 'DBname');return new PrefixingStatsdDataFactoryProxy($services->getStatsdDataFactory(), $wiki);}, 'PermissionManager'=> function(MediaWikiServices $services) :PermissionManager { return new PermissionManager(new ServiceOptions(PermissionManager::CONSTRUCTOR_OPTIONS, $services->getMainConfig()), $services->getSpecialPageFactory(), $services->getRevisionLookup(), $services->getNamespaceInfo());}, 'PreferencesFactory'=> function(MediaWikiServices $services) :PreferencesFactory { $factory=new DefaultPreferencesFactory(new ServiceOptions(DefaultPreferencesFactory::CONSTRUCTOR_OPTIONS, $services->getMainConfig()), $services->getContentLanguage(), AuthManager::singleton(), $services->getLinkRendererFactory() ->create(), $services->getNamespaceInfo(), $services->getPermissionManager());$factory->setLogger(LoggerFactory::getInstance( 'preferences'));return $factory;}, 'ProxyLookup'=> function(MediaWikiServices $services) :ProxyLookup { $mainConfig=$services->getMainConfig();return new ProxyLookup($mainConfig->get( 'CdnServers'), $mainConfig->get( 'CdnServersNoPurge'));}, 'ReadOnlyMode'=> function(MediaWikiServices $services) :ReadOnlyMode { return new ReadOnlyMode($services->getConfiguredReadOnlyMode(), $services->getDBLoadBalancer());}, 'RepoGroup'=> function(MediaWikiServices $services) :RepoGroup { $config=$services->getMainConfig();return new RepoGroup($config->get( 'LocalFileRepo'), $config->get( 'ForeignFileRepos'), $services->getMainWANObjectCache());}, 'ResourceLoader'=> function(MediaWikiServices $services) :ResourceLoader { global $IP;$config=$services->getMainConfig();$rl=new ResourceLoader($config, LoggerFactory::getInstance( 'resourceloader'));$rl->addSource( $config->get( 'ResourceLoaderSources'));$rl->register(include "$IP/resources/Resources.php");$rl->register( $config->get( 'ResourceModules'));Hooks::run( 'ResourceLoaderRegisterModules', [&$rl]);if( $config->get( 'EnableJavaScriptTest')===true) { $rl->registerTestModules();} return $rl;}, 'RevisionFactory'=> function(MediaWikiServices $services) :RevisionFactory { return $services->getRevisionStore();}, 'RevisionLookup'=> function(MediaWikiServices $services) :RevisionLookup { return $services->getRevisionStore();}, 'RevisionRenderer'=> function(MediaWikiServices $services) :RevisionRenderer { $renderer=new RevisionRenderer($services->getDBLoadBalancer(), $services->getSlotRoleRegistry());$renderer->setLogger(LoggerFactory::getInstance( 'SaveParse'));return $renderer;}, 'RevisionStore'=> function(MediaWikiServices $services) :RevisionStore { return $services->getRevisionStoreFactory() ->getRevisionStore();}, 'RevisionStoreFactory'=> function(MediaWikiServices $services) :RevisionStoreFactory { $config=$services->getMainConfig();$store=new RevisionStoreFactory($services->getDBLoadBalancerFactory(), $services->getBlobStoreFactory(), $services->getNameTableStoreFactory(), $services->getSlotRoleRegistry(), $services->getMainWANObjectCache(), $services->getCommentStore(), $services->getActorMigration(), $config->get( 'MultiContentRevisionSchemaMigrationStage'), LoggerFactory::getInstance( 'RevisionStore'), $config->get( 'ContentHandlerUseDB'));return $store;}, 'SearchEngineConfig'=> function(MediaWikiServices $services) :SearchEngineConfig { return new SearchEngineConfig( $services->getMainConfig(), $services->getContentLanguage());}, 'SearchEngineFactory'=> function(MediaWikiServices $services) :SearchEngineFactory { return new SearchEngineFactory( $services->getSearchEngineConfig());}, 'ShellCommandFactory'=> function(MediaWikiServices $services) :CommandFactory { $config=$services->getMainConfig();$limits=['time'=> $config->get( 'MaxShellTime'), 'walltime'=> $config->get( 'MaxShellWallClockTime'), 'memory'=> $config->get( 'MaxShellMemory'), 'filesize'=> $config->get( 'MaxShellFileSize'),];$cgroup=$config->get( 'ShellCgroup');$restrictionMethod=$config->get( 'ShellRestrictionMethod');$factory=new CommandFactory( $limits, $cgroup, $restrictionMethod);$factory->setLogger(LoggerFactory::getInstance( 'exec'));$factory->logStderr();return $factory;}, 'SiteLookup'=> function(MediaWikiServices $services) :SiteLookup { return $services->getSiteStore();}, 'SiteStore'=> function(MediaWikiServices $services) :SiteStore { $rawSiteStore=new DBSiteStore( $services->getDBLoadBalancer());$cache=$services->getLocalServerObjectCache();if( $cache instanceof EmptyBagOStuff) { $cache=ObjectCache::getLocalClusterInstance();} return new CachingSiteStore( $rawSiteStore, $cache);}, 'SkinFactory'=> function(MediaWikiServices $services) :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);});} $factory->register( 'fallback', 'Fallback', function() { return new SkinFallback;});$factory->register( 'apioutput', 'ApiOutput', function() { return new SkinApi;});return $factory;}, 'SlotRoleRegistry'=> function(MediaWikiServices $services) :SlotRoleRegistry { $config=$services->getMainConfig();$registry=new SlotRoleRegistry($services->getNameTableStoreFactory() ->getSlotRoles());$registry->defineRole( 'main', function() use( $config) { return new MainSlotRoleHandler($config->get( 'NamespaceContentModels'));});return $registry;}, 'SpecialPageFactory'=> function(MediaWikiServices $services) :SpecialPageFactory { return new SpecialPageFactory(new ServiceOptions(SpecialPageFactory::$constructorOptions, $services->getMainConfig()), $services->getContentLanguage(), $services->getObjectFactory());}, 'StatsdDataFactory'=> function(MediaWikiServices $services) :IBufferingStatsdDataFactory { return new BufferingStatsdDataFactory(rtrim( $services->getMainConfig() ->get( 'StatsdMetricPrefix'), '.'));}, 'TempFSFileFactory'=> function(MediaWikiServices $services) :TempFSFileFactory { return new TempFSFileFactory( $services->getMainConfig() ->get( 'TmpDirectory'));}, 'TitleFormatter'=> function(MediaWikiServices $services) :TitleFormatter { return $services->getService( '_MediaWikiTitleCodec');}, 'TitleParser'=> function(MediaWikiServices $services) :TitleParser { return $services->getService( '_MediaWikiTitleCodec');}, 'UploadRevisionImporter'=> function(MediaWikiServices $services) :UploadRevisionImporter { return new ImportableUploadRevisionImporter($services->getMainConfig() ->get( 'EnableUploads'), LoggerFactory::getInstance( 'UploadRevisionImporter'));}, 'VirtualRESTServiceClient'=> function(MediaWikiServices $services) :VirtualRESTServiceClient { $config=$services->getMainConfig() ->get( 'VirtualRestConfig');$vrsClient=new VirtualRESTServiceClient(new MultiHttpClient([]));foreach( $config['paths'] as $prefix=> $serviceConfig) { $class=$serviceConfig['class'];$constructArg=$serviceConfig['options'] ??[];$constructArg+=$config['global'];$vrsClient->mount( $prefix, [ 'class'=> $class, 'config'=> $constructArg]);} return $vrsClient;}, 'WatchedItemQueryService'=> function(MediaWikiServices $services) :WatchedItemQueryService { return new WatchedItemQueryService($services->getDBLoadBalancer(), $services->getCommentStore(), $services->getActorMigration(), $services->getWatchedItemStore(), $services->getPermissionManager());}, 'WatchedItemStore'=> function(MediaWikiServices $services) :WatchedItemStore { $store=new WatchedItemStore($services->getDBLoadBalancerFactory(), JobQueueGroup::singleton(), $services->getMainObjectStash(), new HashBagOStuff([ 'maxKeys'=> 100]), $services->getReadOnlyMode(), $services->getMainConfig() ->get( 'UpdateRowsPerQuery'), $services->getNamespaceInfo(), $services->getRevisionLookup());$store->setStatsdDataFactory( $services->getStatsdDataFactory());if( $services->getMainConfig() ->get( 'ReadOnlyWatchedItemStore')) { $store=new NoWriteWatchedItemStore( $store);} return $store;}, 'WikiRevisionOldRevisionImporterNoUpdates'=> function(MediaWikiServices $services) :ImportableOldRevisionImporter { return new ImportableOldRevisionImporter(false, LoggerFactory::getInstance( 'OldRevisionImporter'), $services->getDBLoadBalancer());}, '_MediaWikiTitleCodec'=> function(MediaWikiServices $services) :MediaWikiTitleCodec { return new MediaWikiTitleCodec($services->getContentLanguage(), $services->getGenderCache(), $services->getMainConfig() ->get( 'LocalInterwikis'), $services->getInterwikiLookup(), $services->getNamespaceInfo());}, '_SqlBlobStore'=> function(MediaWikiServices $services) :SqlBlobStore { return $services->getBlobStoreFactory() ->newSqlBlobStore();},]
if(ini_get('mbstring.func_overload')) if(!defined('MW_ENTRY_POINT'))
Pre-config setup: Before loading LocalSettings.php.
This class handles the logic for the actor table migration.
Class representing a cache/ephemeral data store.
get( $key, $flags=0)
Get an item with the given key.
A factory for application metric data.
Factory class to create Config objects.
Support for detecting/validating DjVu image files and getting some basic file metadata (resolution et...
A BagOStuff object with no objects in it.
Factory class for spawning EventRelayer objects using configuration.
Key/value blob storage for a collection of storage medium types (e.g.
Caches user genders when needed to use correct namespace aliases.
Simple store for keeping values in an associative array for the current process.
static run( $event, array $args=[], $deprecatedVersion=null)
Call hook functions defined in Hooks::register and $wgHooks.
Class to handle enqueueing of background jobs.
Internationalisation code.
Cache for article titles (prefixed DB keys) and ids linked from one source.
Class for caching the contents of localisation files, Messages*.php and *.i18n.php.
static getStoreFromConf(array $conf, $fallbackCacheDir)
Return a suitable LCStore as specified by the given configuration.
static getLBFactoryClass(array $config)
Returns the LBFactory class to use and the load balancer configuration.
static applyDefaultConfig(array $lbConf, ServiceOptions $options, ConfiguredReadOnlyMode $readOnlyMode, BagOStuff $srvCache, BagOStuff $mainStash, WANObjectCache $wanCache)
A factory that stores information about MagicWords, and creates them on demand with caching.
A SlotRoleHandler for the main slot.
Factory for handling the special page list and generating SpecialPage objects.
Class for managing stashed edits used by the page updater classes.
static clearGlobalCacheEntry(WANObjectCache $cache)
Invalidate cache keys for all known modules.
Cache of messages that are defined by MediaWiki namespace pages or by hooks.
Class to handle multiple HTTP requests.
This is a utility class for dealing with namespaces that encodes all the "magic" behaviors of them ba...
static detectLocalServerCache()
Detects which local server cache library is present and returns a configuration for it.
static getInstance( $id)
Get a cached instance of the specified type of cache object.
static newFromParams( $params)
Create a new cache object from parameters.
static getLocalClusterInstance()
Get the main cluster-local cache object.
PHP Parser - Processes wiki markup (which uses a more user-friendly syntax, such as "[[link]]" for ma...
Factory class for creating and checking Password objects.
Helper class for the password reset functionality shared by the web UI and the API.
Proxy to prefix metric keys sent to a StatsdDataFactoryInterface.
Differences from DOM schema:
A service class for fetching the wiki's current read-only mode.
Prioritized list of file repositories.
ResourceLoader is a loading system for JavaScript and CSS resources.
Configuration handling class for SearchEngine.
Factory class for SearchEngine.
SkinTemplate class for API output.
Factory class to create Skin objects.
register( $name, $displayName, $callback)
Register a new Skin factory function.
SkinTemplate class for the fallback skin.
Virtual HTTP service client loosely styled after a Virtual File System.
Multi-datacenter aware caching interface.
get( $key, &$curTTL=null, array $checkKeys=[], &$info=null)
Fetch the value of a key from cache.
Storage layer class for WatchedItems.
setStatsdDataFactory(StatsdDataFactoryInterface $stats)
Helper tools for dealing with other locally-hosted wikis.
Interface for configuration instances.
MediaWiki adaptation of StatsdDataFactory that provides buffering functionality.
A title parser service for MediaWiki.
if(PHP_SAPI !='cli-server') if(!isset( $_SERVER['SCRIPT_FILENAME'])) $file
Item class for a filearchive table row.
if(!is_readable( $file)) $ext