Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
0.00% covered (danger)
0.00%
0 / 24
0.00% covered (danger)
0.00%
0 / 2
CRAP
0.00% covered (danger)
0.00%
0 / 1
WikiPageConfigWriterFactory
0.00% covered (danger)
0.00%
0 / 24
0.00% covered (danger)
0.00%
0 / 2
12
0.00% covered (danger)
0.00%
0 / 1
 __construct
0.00% covered (danger)
0.00%
0 / 8
0.00% covered (danger)
0.00%
0 / 1
2
 newWikiPageConfigWriter
0.00% covered (danger)
0.00%
0 / 16
0.00% covered (danger)
0.00%
0 / 1
6
1<?php
2
3namespace GrowthExperiments\Config;
4
5use GrowthExperiments\Config\Validation\ConfigValidatorFactory;
6use InvalidArgumentException;
7use MediaWiki\HookContainer\HookContainer;
8use MediaWiki\Linker\LinkTarget;
9use MediaWiki\Page\WikiPageFactory;
10use MediaWiki\Title\TitleFactory;
11use MediaWiki\User\User;
12use MediaWiki\User\UserFactory;
13use MediaWiki\User\UserIdentity;
14use Psr\Log\LoggerInterface;
15
16class WikiPageConfigWriterFactory {
17
18    private WikiPageConfigLoader $wikiPageConfigLoader;
19    private ConfigValidatorFactory $configValidatorFactory;
20    private WikiPageFactory $wikiPageFactory;
21    private TitleFactory $titleFactory;
22    private UserFactory $userFactory;
23    private HookContainer $hookContainer;
24    private LoggerInterface $logger;
25
26    /** @var User|null Injected system user, to allow injecting from tests */
27    private ?User $systemUser;
28
29    /**
30     * @param WikiPageConfigLoader $wikiPageConfigLoader
31     * @param ConfigValidatorFactory $configValidatorFactory
32     * @param WikiPageFactory $wikiPageFactory
33     * @param TitleFactory $titleFactory
34     * @param UserFactory $userFactory
35     * @param HookContainer $hookContainer
36     * @param LoggerInterface $logger
37     * @param User|null $systemUser
38     */
39    public function __construct(
40        WikiPageConfigLoader $wikiPageConfigLoader,
41        ConfigValidatorFactory $configValidatorFactory,
42        WikiPageFactory $wikiPageFactory,
43        TitleFactory $titleFactory,
44        UserFactory $userFactory,
45        HookContainer $hookContainer,
46        LoggerInterface $logger,
47        ?User $systemUser = null
48    ) {
49        $this->wikiPageConfigLoader = $wikiPageConfigLoader;
50        $this->configValidatorFactory = $configValidatorFactory;
51        $this->wikiPageFactory = $wikiPageFactory;
52        $this->titleFactory = $titleFactory;
53        $this->userFactory = $userFactory;
54        $this->hookContainer = $hookContainer;
55        $this->logger = $logger;
56        $this->systemUser = $systemUser;
57    }
58
59    /**
60     * @param LinkTarget $configPage
61     * @param UserIdentity|null $performer If null is passed, a system account will be used.
62     * @return WikiPageConfigWriter
63     */
64    public function newWikiPageConfigWriter(
65        LinkTarget $configPage,
66        ?UserIdentity $performer = null
67    ): WikiPageConfigWriter {
68        $performerTmp = $performer
69            ?? $this->systemUser
70            ?? User::newSystemUser( 'MediaWiki default', [ 'steal' => true ] );
71        if ( $performerTmp === null ) {
72            throw new InvalidArgumentException( 'Invalid performer passed' );
73        }
74        return new WikiPageConfigWriter(
75            $this->configValidatorFactory->newConfigValidator( $configPage ),
76            $this->wikiPageConfigLoader,
77            $this->wikiPageFactory,
78            $this->titleFactory,
79            $this->userFactory,
80            $this->hookContainer,
81            $this->logger,
82            $configPage,
83            $performerTmp
84        );
85    }
86}