Code Coverage |
||||||||||
Lines |
Functions and Methods |
Classes and Traits |
||||||||
Total | |
0.00% |
0 / 24 |
|
0.00% |
0 / 2 |
CRAP | |
0.00% |
0 / 1 |
WikiPageConfigWriterFactory | |
0.00% |
0 / 24 |
|
0.00% |
0 / 2 |
12 | |
0.00% |
0 / 1 |
__construct | |
0.00% |
0 / 8 |
|
0.00% |
0 / 1 |
2 | |||
newWikiPageConfigWriter | |
0.00% |
0 / 16 |
|
0.00% |
0 / 1 |
6 |
1 | <?php |
2 | |
3 | namespace GrowthExperiments\Config; |
4 | |
5 | use GrowthExperiments\Config\Validation\ConfigValidatorFactory; |
6 | use InvalidArgumentException; |
7 | use MediaWiki\HookContainer\HookContainer; |
8 | use MediaWiki\Linker\LinkTarget; |
9 | use MediaWiki\Page\WikiPageFactory; |
10 | use MediaWiki\Title\TitleFactory; |
11 | use MediaWiki\User\User; |
12 | use MediaWiki\User\UserFactory; |
13 | use MediaWiki\User\UserIdentity; |
14 | use Psr\Log\LoggerInterface; |
15 | |
16 | class 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 | } |