Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
0.00% covered (danger)
0.00%
0 / 29
0.00% covered (danger)
0.00%
0 / 2
CRAP
0.00% covered (danger)
0.00%
0 / 1
ImportPlanFactory
0.00% covered (danger)
0.00%
0 / 29
0.00% covered (danger)
0.00%
0 / 2
20
0.00% covered (danger)
0.00%
0 / 1
 __construct
0.00% covered (danger)
0.00%
0 / 3
0.00% covered (danger)
0.00%
0 / 1
2
 newPlan
0.00% covered (danger)
0.00%
0 / 26
0.00% covered (danger)
0.00%
0 / 1
12
1<?php
2
3namespace FileImporter\Services;
4
5use FileImporter\Data\ImportDetails;
6use FileImporter\Data\ImportPlan;
7use FileImporter\Data\ImportRequest;
8use FileImporter\Exceptions\ImportException;
9use FileImporter\Remote\MediaWiki\CommonsHelperConfigRetriever;
10use FileImporter\Services\UploadBase\UploadBaseFactory;
11use FileImporter\Services\Wikitext\WikiLinkParserFactory;
12use MediaWiki\Context\RequestContext;
13use MediaWiki\MediaWikiServices;
14use MediaWiki\User\User;
15
16/**
17 * @license GPL-2.0-or-later
18 * @author Addshore
19 */
20class ImportPlanFactory {
21
22    private SourceSiteLocator $sourceSiteLocator;
23    private DuplicateFileRevisionChecker $duplicateFileRevisionChecker;
24    private UploadBaseFactory $uploadBaseFactory;
25
26    public function __construct(
27        SourceSiteLocator $sourceSiteLocator,
28        DuplicateFileRevisionChecker $duplicateFileRevisionChecker,
29        UploadBaseFactory $uploadBaseFactory
30    ) {
31        $this->sourceSiteLocator = $sourceSiteLocator;
32        $this->duplicateFileRevisionChecker = $duplicateFileRevisionChecker;
33        $this->uploadBaseFactory = $uploadBaseFactory;
34    }
35
36    /**
37     * @return ImportPlan A valid ImportPlan
38     * @throws ImportException
39     */
40    public function newPlan( ImportRequest $importRequest, ImportDetails $importDetails, User $user ) {
41        $services = MediaWikiServices::getInstance();
42        $context = RequestContext::getMain();
43        $config = $services->getMainConfig();
44        $commonsHelperServer = $config->get( 'FileImporterCommonsHelperServer' );
45
46        if ( $commonsHelperServer ) {
47            $commonsHelperConfigRetriever = new CommonsHelperConfigRetriever(
48                $services->getService( 'FileImporterHttpRequestExecutor' ),
49                $commonsHelperServer,
50                $config->get( 'FileImporterCommonsHelperBasePageName' )
51            );
52            $commonsHelperHelpPage = $config->get( 'FileImporterCommonsHelperHelpPage' ) ?:
53                $commonsHelperServer;
54        }
55
56        $sourceSite = $this->sourceSiteLocator->getSourceSite( $importDetails->getSourceUrl() );
57        $interWikiPrefix = $sourceSite->getLinkPrefix( $importDetails->getSourceUrl() );
58        $importPlan = new ImportPlan( $importRequest, $importDetails, $config, $context, $interWikiPrefix );
59
60        $planValidator = new ImportPlanValidator(
61            $this->duplicateFileRevisionChecker,
62            $sourceSite->getImportTitleChecker(),
63            $this->uploadBaseFactory,
64            $commonsHelperConfigRetriever ?? null,
65            $commonsHelperHelpPage ?? null,
66            new WikiLinkParserFactory(),
67            $services->getRestrictionStore()
68        );
69        $planValidator->validate( $importPlan, $user );
70
71        return $importPlan;
72    }
73
74}