47 use Liuggio\StatsdClient\Factory\StatsdDataFactoryInterface;
84 use 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()
121 $services->getPermissionManager(),
122 LoggerFactory::getInstance(
'BlockManager' )
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' )
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 );
214 return new EventRelayerGroup( $services->getMainConfig()->get(
'EventRelayerConfig' ) );
219 $services->getExternalStoreFactory(),
220 LoggerFactory::getInstance(
'ExternalStore' )
225 $config = $services->getMainConfig();
226 $writeStores = $config->get(
'DefaultExternalStore' );
229 $config->get(
'ExternalStores' ),
230 ( $writeStores !== false ) ? (array)$writeStores : [],
231 $services->getDBLoadBalancer()->getLocalDomainID(),
232 LoggerFactory::getInstance(
'ExternalStore' )
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' )
264 LanguageNameUtils::CONSTRUCTOR_OPTIONS,
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(
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();
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' =>
451 $logger = LoggerFactory::getInstance(
'Mime' );
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 ) {
460 $deja =
new DjVuImage(
$file );
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();
510 new ServiceOptions( MovePageFactory::$constructorOptions, $services->getMainConfig() ),
511 $services->getDBLoadBalancer(),
512 $services->getNamespaceInfo(),
513 $services->getWatchedItemStore(),
514 $services->getPermissionManager(),
515 $services->getRepoGroup()
521 $services->getMainConfig() ) );
526 $services->getDBLoadBalancerFactory(),
527 $services->getMainWANObjectCache(),
528 LoggerFactory::getInstance(
'NameTableSqlStore' )
533 return new ObjectFactory( $services );
539 LoggerFactory::getInstance(
'OldRevisionImporter' ),
540 $services->getDBLoadBalancer()
545 $config = $services->getMainConfig();
549 $services->getDBLoadBalancer(),
550 LoggerFactory::getInstance(
'StashEdit' ),
551 $services->getStatsdDataFactory(),
552 defined(
'MEDIAWIKI_JOB_RUNNER' ) || $config->get(
'CommandLineMode' )
553 ? PageEditStash::INITIATOR_JOB_OR_CLI
554 : PageEditStash::INITIATOR_USER
559 return $services->getParserFactory()->create();
563 $config = $services->getMainConfig();
569 $config->get(
'CacheEpoch' )
576 $services->getMainConfig()->get(
'ParserConf' ),
578 [
'class' => Parser::class,
'preprocessorClass' => Preprocessor_Hash::class ],
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(),
627 PermissionManager::CONSTRUCTOR_OPTIONS, $services->getMainConfig()
629 $services->getSpecialPageFactory(),
630 $services->getRevisionLookup(),
631 $services->getNamespaceInfo()
638 DefaultPreferencesFactory::CONSTRUCTOR_OPTIONS, $services->getMainConfig() ),
639 $services->getContentLanguage(),
640 AuthManager::singleton(),
641 $services->getLinkRendererFactory()->create(),
642 $services->getNamespaceInfo(),
643 $services->getPermissionManager()
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();
680 $rl =
new ResourceLoader(
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' )
829 SpecialPageFactory::$constructorOptions, $services->getMainConfig() ),
830 $services->getContentLanguage(),
831 $services->getObjectFactory()
837 rtrim( $services->getMainConfig()->get(
'StatsdMetricPrefix' ),
'.' )
842 return new TempFSFileFactory( $services->getMainConfig()->get(
'TmpDirectory' ) );
846 return $services->getService(
'_MediaWikiTitleCodec' );
850 return $services->getService(
'_MediaWikiTitleCodec' );
855 $services->getMainConfig()->get(
'EnableUploads' ),
856 LoggerFactory::getInstance(
'UploadRevisionImporter' )
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(),
884 $services->getPermissionManager()
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' =>
912 LoggerFactory::getInstance(
'OldRevisionImporter' ),
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();