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