Code Coverage |
||||||||||
Lines |
Functions and Methods |
Classes and Traits |
||||||||
Total | |
0.00% |
0 / 32 |
|
0.00% |
0 / 3 |
CRAP | |
0.00% |
0 / 1 |
DashboardEditorCapability | |
0.00% |
0 / 32 |
|
0.00% |
0 / 3 |
30 | |
0.00% |
0 / 1 |
__construct | |
0.00% |
0 / 3 |
|
0.00% |
0 / 1 |
2 | |||
getProviders | |
0.00% |
0 / 12 |
|
0.00% |
0 / 1 |
12 | |||
execute | |
0.00% |
0 / 17 |
|
0.00% |
0 / 1 |
2 |
1 | <?php |
2 | |
3 | namespace MediaWiki\Extension\CommunityConfiguration\EditorCapabilities; |
4 | |
5 | use MediaWiki\Context\IContextSource; |
6 | use MediaWiki\Extension\CommunityConfiguration\Provider\ConfigurationProviderFactory; |
7 | use MediaWiki\Extension\CommunityConfiguration\Provider\IConfigurationProvider; |
8 | use MediaWiki\Html\TemplateParser; |
9 | use MediaWiki\SpecialPage\SpecialPageFactory; |
10 | use MediaWiki\Title\Title; |
11 | |
12 | class DashboardEditorCapability extends AbstractEditorCapability { |
13 | |
14 | private ConfigurationProviderFactory $providerFactory; |
15 | private SpecialPageFactory $specialPageFactory; |
16 | private TemplateParser $templateParser; |
17 | |
18 | private const GUIDELINES = [ |
19 | [ |
20 | 'title' => 'communityconfiguration-guidelines-guideline1-title', |
21 | 'description' => 'communityconfiguration-guidelines-guideline1-description' |
22 | ], |
23 | [ |
24 | 'title' => 'communityconfiguration-guidelines-guideline2-title', |
25 | 'description' => 'communityconfiguration-guidelines-guideline2-description' |
26 | ] |
27 | ]; |
28 | |
29 | public function __construct( |
30 | IContextSource $ctx, |
31 | Title $parentTitle, |
32 | ConfigurationProviderFactory $providerFactory |
33 | ) { |
34 | parent::__construct( $ctx, $parentTitle ); |
35 | |
36 | $this->providerFactory = $providerFactory; |
37 | $this->templateParser = new TemplateParser( __DIR__ . '/templates' ); |
38 | } |
39 | |
40 | private function getProviders(): array { |
41 | $availableProviders = []; |
42 | foreach ( $this->providerFactory->getSupportedKeys() as $providerName ) { |
43 | $provider = $this->providerFactory->newProvider( $providerName ); |
44 | if ( $provider->getOptionValue( IConfigurationProvider::OPTION_SKIP_DASHBOARD_LISTING ) ) { |
45 | continue; |
46 | } |
47 | $lowerCaseProviderName = strtolower( $providerName ); |
48 | $availableProviders[] = [ |
49 | 'href' => $this->getParentTitle()->getSubpage( $providerName )->getLinkURL(), |
50 | 'title' => $this->msg( 'communityconfiguration-' . $lowerCaseProviderName . '-title' ), |
51 | 'description' => $this->msg( 'communityconfiguration-' . $lowerCaseProviderName . '-description' ) |
52 | ]; |
53 | } |
54 | return $availableProviders; |
55 | } |
56 | |
57 | /** |
58 | * @inheritDoc |
59 | */ |
60 | public function execute( ?string $subpage ): void { |
61 | $out = $this->getContext()->getOutput(); |
62 | $out->addModuleStyles( [ 'codex-styles' ] ); |
63 | $out->addModuleStyles( [ 'ext.communityConfiguration.Dashboard' ] ); |
64 | $data = [ |
65 | 'title' => $this->msg( 'communityconfiguration-guidelines-title' ), |
66 | 'description' => $this->msg( 'communityconfiguration-guidelines-description' ), |
67 | 'guidelines' => array_map( function ( array $guideline ): array { |
68 | return [ |
69 | 'title' => $this->msg( $guideline['title'] ), |
70 | 'description' => $this->msg( $guideline['description'] )->parse() |
71 | ]; |
72 | }, self::GUIDELINES ), |
73 | 'providers-title' => $this->msg( 'communityconfiguration-providers-list-title' ), |
74 | 'providers' => $this->getProviders() |
75 | ]; |
76 | $templateHtml = $this->templateParser->processTemplate( 'Layout', $data ); |
77 | $out->addHTML( $templateHtml ); |
78 | } |
79 | } |