Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
0.00% covered (danger)
0.00%
0 / 32
0.00% covered (danger)
0.00%
0 / 3
CRAP
0.00% covered (danger)
0.00%
0 / 1
DashboardEditorCapability
0.00% covered (danger)
0.00%
0 / 32
0.00% covered (danger)
0.00%
0 / 3
30
0.00% covered (danger)
0.00%
0 / 1
 __construct
0.00% covered (danger)
0.00%
0 / 3
0.00% covered (danger)
0.00%
0 / 1
2
 getProviders
0.00% covered (danger)
0.00%
0 / 12
0.00% covered (danger)
0.00%
0 / 1
12
 execute
0.00% covered (danger)
0.00%
0 / 17
0.00% covered (danger)
0.00%
0 / 1
2
1<?php
2
3namespace MediaWiki\Extension\CommunityConfiguration\EditorCapabilities;
4
5use MediaWiki\Context\IContextSource;
6use MediaWiki\Extension\CommunityConfiguration\Provider\ConfigurationProviderFactory;
7use MediaWiki\Extension\CommunityConfiguration\Provider\IConfigurationProvider;
8use MediaWiki\Html\TemplateParser;
9use MediaWiki\SpecialPage\SpecialPageFactory;
10use MediaWiki\Title\Title;
11
12class 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}