Your IP : 216.73.216.54


Current Path : /var/www/html/mediawiki-1.43.1/extensions/FileImporter/src/
Upload File :
Current File : /var/www/html/mediawiki-1.43.1/extensions/FileImporter/src/ServiceWiring.php

<?php

namespace FileImporter;

use FileImporter\Remote\MediaWiki\AnyMediaWikiFileUrlChecker;
use FileImporter\Remote\MediaWiki\ApiDetailRetriever;
use FileImporter\Remote\MediaWiki\HttpApiLookup;
use FileImporter\Remote\MediaWiki\InterwikiTablePrefixLookup;
use FileImporter\Remote\MediaWiki\RemoteApiActionExecutor;
use FileImporter\Remote\MediaWiki\RemoteApiImportTitleChecker;
use FileImporter\Remote\MediaWiki\RemoteSourceFileEditDeleteAction;
use FileImporter\Remote\MediaWiki\SiteTableSiteLookup;
use FileImporter\Remote\MediaWiki\SiteTableSourceUrlChecker;
use FileImporter\Remote\MediaWiki\SuggestManualTemplateAction;
use FileImporter\Remote\NullPrefixLookup;
use FileImporter\Services\CategoryExtractor;
use FileImporter\Services\DuplicateFileRevisionChecker;
use FileImporter\Services\FileTextRevisionValidator;
use FileImporter\Services\Http\HttpRequestExecutor;
use FileImporter\Services\Importer;
use FileImporter\Services\ImportPlanFactory;
use FileImporter\Services\NullRevisionCreator;
use FileImporter\Services\SourceSite;
use FileImporter\Services\SourceSiteLocator;
use FileImporter\Services\SuccessCache;
use FileImporter\Services\UploadBase\UploadBaseFactory;
use FileImporter\Services\WikidataTemplateLookup;
use FileImporter\Services\WikimediaSourceUrlNormalizer;
use FileImporter\Services\WikiRevisionFactory;
use FileImporter\Services\Wikitext\WikiLinkParserFactory;
use ImportableUploadRevisionImporter;
use MediaWiki\Context\RequestContext;
use MediaWiki\Logger\LoggerFactory;
use MediaWiki\MainConfigNames;
use MediaWiki\MediaWikiServices;
use MediaWiki\Registration\ExtensionRegistry;
use UploadBase;

/** @phpcs-require-sorted-array */
return [

	// Sites

	/**
	 * This configuration example can be used for development and is very plain and lenient!
	 * It will allow importing files form ANY mediawiki site.
	 */
	'FileImporter-Site-DefaultMediaWiki' => static function ( MediaWikiServices $services ): SourceSite {
		/** @var HttpApiLookup $httpApiLookup */
		$httpApiLookup = $services->getService( 'FileImporterMediaWikiHttpApiLookup' );
		/** @var HttpRequestExecutor $httpRequestExecutor */
		$httpRequestExecutor = $services->getService( 'FileImporterHttpRequestExecutor' );
		$logger = LoggerFactory::getInstance( 'FileImporter' );
		$maxFileSize = UploadBase::getMaxUploadSize( 'import' );

		/** @var RemoteApiActionExecutor $remoteApiActionExecutor */
		$remoteApiActionExecutor = $services->getService(
			'FileImporterMediaWikiRemoteApiActionExecutor'
		);

		/** @var WikidataTemplateLookup $templateLookup */
		$templateLookup = $services->getService( 'FileImporterTemplateLookup' );

		$postImportHandler = new SuggestManualTemplateAction( $templateLookup );
		$config = $services->getMainConfig();
		if ( ExtensionRegistry::getInstance()->isLoaded( 'CentralAuth' ) &&
			( $config->get( 'FileImporterSourceWikiTemplating' ) ||
				$config->get( 'FileImporterSourceWikiDeletion' ) )
		) {
			$postImportHandler = new RemoteSourceFileEditDeleteAction(
				$postImportHandler,
				$templateLookup,
				$remoteApiActionExecutor,
				$services->getUrlUtils(),
				$logger,
				$services->getStatsFactory()
			);
		}

		return new SourceSite(
			new AnyMediaWikiFileUrlChecker(),
			new ApiDetailRetriever(
				$httpApiLookup,
				$httpRequestExecutor,
				$maxFileSize,
				$logger
			),
			new RemoteApiImportTitleChecker(
				$httpApiLookup,
				$httpRequestExecutor,
				$logger
			),
			new WikimediaSourceUrlNormalizer(),
			new NullPrefixLookup(),
			$postImportHandler
		);
	},

	/**
	 * This configuration example is setup to handle the wikimedia style setup.
	 * This only allows importing files from sites in the sites table.
	 */
	'FileImporter-WikimediaSitesTableSite' => static function ( MediaWikiServices $services ): SourceSite {
		/** @var SiteTableSiteLookup $siteTableLookup */
		$siteTableLookup = $services->getService( 'FileImporterMediaWikiSiteTableSiteLookup' );
		/** @var HttpApiLookup $httpApiLookup */
		$httpApiLookup = $services->getService( 'FileImporterMediaWikiHttpApiLookup' );
		/** @var HttpRequestExecutor $httpRequestExecutor */
		$httpRequestExecutor = $services->getService( 'FileImporterHttpRequestExecutor' );
		$logger = LoggerFactory::getInstance( 'FileImporter' );
		$maxFileSize = UploadBase::getMaxUploadSize( 'import' );

		/** @var RemoteApiActionExecutor $remoteApiActionExecutor */
		$remoteApiActionExecutor = $services->getService(
			'FileImporterMediaWikiRemoteApiActionExecutor'
		);

		/** @var WikidataTemplateLookup $templateLookup */
		$templateLookup = $services->getService( 'FileImporterTemplateLookup' );

		$postImportHandler = new SuggestManualTemplateAction( $templateLookup );
		$config = $services->getMainConfig();
		if ( ExtensionRegistry::getInstance()->isLoaded( 'CentralAuth' ) &&
			( $config->get( 'FileImporterSourceWikiTemplating' ) ||
				$config->get( 'FileImporterSourceWikiDeletion' ) )
		) {
			$postImportHandler = new RemoteSourceFileEditDeleteAction(
				$postImportHandler,
				$templateLookup,
				$remoteApiActionExecutor,
				$services->getUrlUtils(),
				$logger,
				$services->getStatsFactory()
			);
		}

		return new SourceSite(
			new SiteTableSourceUrlChecker(
				$siteTableLookup,
				$logger
			),
			new ApiDetailRetriever(
				$httpApiLookup,
				$httpRequestExecutor,
				$maxFileSize,
				$logger
			),
			new RemoteApiImportTitleChecker(
				$httpApiLookup,
				$httpRequestExecutor,
				$logger
			),
			new WikimediaSourceUrlNormalizer(),
			new InterwikiTablePrefixLookup(
				$services->getInterwikiLookup(),
				$httpApiLookup,
				$httpRequestExecutor,
				$services->getMainConfig()->get( 'FileImporterInterWikiMap' ),
				$logger
			),
			$postImportHandler
		);
	},

	'FileImporterCategoryExtractor' => static function ( MediaWikiServices $services ): CategoryExtractor {
		return new CategoryExtractor(
			$services->getParserFactory(),
			$services->getConnectionProvider(),
			$services->getLinkBatchFactory()
		);
	},

	'FileImporterDuplicateFileRevisionChecker' => static function (
		MediaWikiServices $services
	): DuplicateFileRevisionChecker {
		$localRepo = $services->getRepoGroup()->getLocalRepo();
		return new DuplicateFileRevisionChecker( $localRepo );
	},

	'FileImporterHttpRequestExecutor' => static function ( MediaWikiServices $services ): HttpRequestExecutor {
		$config = $services->getMainConfig();
		$maxFileSize = UploadBase::getMaxUploadSize( 'import' );
		$service = new HttpRequestExecutor(
			$services->getHttpRequestFactory(),
			[
				'originalRequest' => RequestContext::getMain()->getRequest(),
				'proxy' => $config->get( MainConfigNames::CopyUploadProxy ),
				'timeout' => $config->get( MainConfigNames::CopyUploadTimeout ),
			],
			$maxFileSize
		);
		$service->setLogger( LoggerFactory::getInstance( 'FileImporter' ) );
		return $service;
	},

	'FileImporterImporter' => static function ( MediaWikiServices $services ): Importer {
		/** @var WikiRevisionFactory $wikiRevisionFactory */
		$wikiRevisionFactory = $services->getService( 'FileImporterWikiRevisionFactory' );
		/** @var NullRevisionCreator $nullRevisionCreator */
		$nullRevisionCreator = $services->getService( 'FileImporterNullRevisionCreator' );
		/** @var HttpRequestExecutor $httpRequestExecutor */
		$httpRequestExecutor = $services->getService( 'FileImporterHttpRequestExecutor' );
		/** @var UploadBaseFactory $uploadBaseFactory */
		$uploadBaseFactory = $services->getService( 'FileImporterUploadBaseFactory' );

		$uploadRevisionImporter = $services->getUploadRevisionImporter();
		// FIXME: Should be part of the UploadRevisionImporter interface or the import() method
		if ( $uploadRevisionImporter instanceof ImportableUploadRevisionImporter ) {
			$uploadRevisionImporter->setNullRevisionCreation( false );
		}

		return new Importer(
			$services->getWikiPageFactory(),
			$wikiRevisionFactory,
			$nullRevisionCreator,
			$services->getUserIdentityLookup(),
			$httpRequestExecutor,
			$uploadBaseFactory,
			$services->getOldRevisionImporter(),
			$uploadRevisionImporter,
			new FileTextRevisionValidator(),
			$services->getRestrictionStore(),
			LoggerFactory::getInstance( 'FileImporter' ),
			$services->getStatsFactory()
		);
	},

	'FileImporterImportPlanFactory' => static function ( MediaWikiServices $services ): ImportPlanFactory {
		/** @var HttpRequestExecutor $httpRequestExecutor */
		$httpRequestExecutor = $services->getService( 'FileImporterHttpRequestExecutor' );
		/** @var SourceSiteLocator $sourceSiteLocator */
		$sourceSiteLocator = $services->getService( 'FileImporterSourceSiteLocator' );
		/** @var DuplicateFileRevisionChecker $duplicateFileChecker */
		$duplicateFileChecker = $services->getService( 'FileImporterDuplicateFileRevisionChecker' );
		/** @var UploadBaseFactory $uploadBaseFactory */
		$uploadBaseFactory = $services->getService( 'FileImporterUploadBaseFactory' );

		return new ImportPlanFactory(
			$services->getMainConfig(),
			new WikiLinkParserFactory(
				$services->getTitleParser(),
				$services->getNamespaceInfo(),
				$services->getLanguageFactory()
			),
			$services->getRestrictionStore(),
			$httpRequestExecutor,
			$sourceSiteLocator,
			$duplicateFileChecker,
			$uploadBaseFactory
		);
	},

	'FileImporterNullRevisionCreator' => static function ( MediaWikiServices $services ): NullRevisionCreator {
		return new NullRevisionCreator(
			$services->getRevisionStore(),
			$services->getConnectionProvider()
		);
	},

	'FileImporterSourceSiteLocator' => static function ( MediaWikiServices $services ): SourceSiteLocator {
		$sourceSiteServices = $services->getMainConfig()->get( 'FileImporterSourceSiteServices' );
		$sourceSites = [];

		foreach ( $sourceSiteServices as $serviceName ) {
			$sourceSites[] = $services->getService( $serviceName );
		}

		if ( $sourceSites === [] ) {
			$sourceSites[] = $services->getService( 'FileImporter-Site-DefaultMediaWiki' );
		}

		return new SourceSiteLocator( $sourceSites );
	},

	'FileImporterSuccessCache' => static function ( MediaWikiServices $services ): SuccessCache {
		return new SuccessCache(
			$services->getMainObjectStash(),
			LoggerFactory::getInstance( 'FileImporter' )
		);
	},

	'FileImporterTemplateLookup' => static function ( MediaWikiServices $services ): WikidataTemplateLookup {
		return new WikidataTemplateLookup(
			$services->getMainConfig(),
			$services->getService( 'FileImporterMediaWikiSiteTableSiteLookup' ),
			$services->getService( 'FileImporterHttpRequestExecutor' ),
			LoggerFactory::getInstance( 'FileImporter' )
		);
	},

	'FileImporterUploadBaseFactory' => static function ( MediaWikiServices $services ): UploadBaseFactory {
		return new UploadBaseFactory( LoggerFactory::getInstance( 'FileImporter' ) );
	},

	'FileImporterWikiRevisionFactory' => static function ( MediaWikiServices $services ): WikiRevisionFactory {
		return new WikiRevisionFactory(
			$services->getContentHandlerFactory()
		);
	},

];