Code Coverage |
||||||||||
Lines |
Functions and Methods |
Classes and Traits |
||||||||
Total | |
18.75% |
3 / 16 |
|
20.00% |
1 / 5 |
CRAP | |
0.00% |
0 / 1 |
PageConfigurationLoader | |
18.75% |
3 / 16 |
|
20.00% |
1 / 5 |
63.64 | |
0.00% |
0 / 1 |
__construct | |
0.00% |
0 / 5 |
|
0.00% |
0 / 1 |
2 | |||
makeTitle | |
0.00% |
0 / 6 |
|
0.00% |
0 / 1 |
30 | |||
loadTaskTypesConfig | |
0.00% |
0 / 1 |
|
0.00% |
0 / 1 |
2 | |||
loadTopicsConfig | |
0.00% |
0 / 1 |
|
0.00% |
0 / 1 |
2 | |||
loadTopics | |
100.00% |
3 / 3 |
|
100.00% |
1 / 1 |
2 |
1 | <?php |
2 | |
3 | namespace GrowthExperiments\NewcomerTasks\ConfigurationLoader; |
4 | |
5 | use GrowthExperiments\Config\WikiPageConfigLoader; |
6 | use GrowthExperiments\NewcomerTasks\TaskType\TaskTypeHandlerRegistry; |
7 | use GrowthExperiments\Util; |
8 | use LogicException; |
9 | use MediaWiki\Linker\LinkTarget; |
10 | use MediaWiki\Title\TitleFactory; |
11 | |
12 | class PageConfigurationLoader extends AbstractDataConfigurationLoader { |
13 | |
14 | private TitleFactory $titleFactory; |
15 | private WikiPageConfigLoader $configLoader; |
16 | |
17 | /** @var LinkTarget|string */ |
18 | private $taskConfigurationPage; |
19 | |
20 | /** @var LinkTarget|string|null */ |
21 | private $topicConfigurationPage; |
22 | |
23 | /** |
24 | * @param ConfigurationValidator $configurationValidator |
25 | * @param TaskTypeHandlerRegistry $taskTypeHandlerRegistry |
26 | * @param string $topicType |
27 | * @param TitleFactory $titleFactory |
28 | * @param WikiPageConfigLoader $configLoader |
29 | * @param string|LinkTarget $taskConfigurationPage Wiki page to load task configuration from |
30 | * (local or interwiki). |
31 | * @param string|LinkTarget|null $topicConfigurationPage Wiki page to load task configuration from |
32 | * (local or interwiki). Can be omitted, in which case topic matching will be disabled. |
33 | */ |
34 | public function __construct( |
35 | ConfigurationValidator $configurationValidator, |
36 | TaskTypeHandlerRegistry $taskTypeHandlerRegistry, |
37 | string $topicType, |
38 | TitleFactory $titleFactory, |
39 | WikiPageConfigLoader $configLoader, |
40 | $taskConfigurationPage, |
41 | $topicConfigurationPage |
42 | ) { |
43 | parent::__construct( $configurationValidator, $taskTypeHandlerRegistry, $topicType ); |
44 | |
45 | $this->titleFactory = $titleFactory; |
46 | $this->configLoader = $configLoader; |
47 | $this->taskConfigurationPage = $taskConfigurationPage; |
48 | $this->topicConfigurationPage = $topicConfigurationPage; |
49 | } |
50 | |
51 | /** |
52 | * @param string|LinkTarget|null $target |
53 | * @return LinkTarget|null |
54 | */ |
55 | private function makeTitle( $target ) { |
56 | if ( is_string( $target ) ) { |
57 | $target = $this->titleFactory->newFromText( $target ); |
58 | } |
59 | if ( $target && !$target->isExternal() && !$target->inNamespace( NS_MEDIAWIKI ) ) { |
60 | Util::logException( new LogicException( 'Configuration page not in NS_MEDIAWIKI' ), |
61 | [ 'title' => $target->__toString() ] ); |
62 | } |
63 | return $target; |
64 | } |
65 | |
66 | /** |
67 | * @inheritDoc |
68 | */ |
69 | protected function loadTaskTypesConfig() { |
70 | return $this->configLoader->load( $this->makeTitle( $this->taskConfigurationPage ) ); |
71 | } |
72 | |
73 | /** |
74 | * @inheritDoc |
75 | */ |
76 | protected function loadTopicsConfig() { |
77 | return $this->configLoader->load( $this->makeTitle( $this->topicConfigurationPage ) ); |
78 | } |
79 | |
80 | /** |
81 | * @inheritDoc |
82 | */ |
83 | public function loadTopics() { |
84 | if ( $this->topicConfigurationPage === null ) { |
85 | // NOTE: This has to be here, rather than loadTopicsConfig(), as empty data does not |
86 | // pass validation tests in the parent. |
87 | return []; |
88 | } |
89 | |
90 | return parent::loadTopics(); |
91 | } |
92 | } |