Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
0.00% covered (danger)
0.00%
0 / 16
0.00% covered (danger)
0.00%
0 / 2
CRAP
0.00% covered (danger)
0.00%
0 / 1
BetaFeatureHookHandler
0.00% covered (danger)
0.00%
0 / 16
0.00% covered (danger)
0.00%
0 / 2
20
0.00% covered (danger)
0.00%
0 / 1
 __construct
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 1
2
 onGetBetaFeaturePreferences
0.00% covered (danger)
0.00%
0 / 15
0.00% covered (danger)
0.00%
0 / 1
12
1<?php
2
3namespace MediaWiki\Extension\MultimediaViewer;
4
5use MediaWiki\Config\Config;
6use MediaWiki\Extension\BetaFeatures\Hooks\GetBetaFeaturePreferencesHook;
7use MediaWiki\MainConfigNames;
8use MediaWiki\User\User;
9
10/**
11 * This handler is separated from the main HookHandler to allow use of type
12 * validation via the hook interface, without a hard dependency on BetaFeatures.
13 * It is important that this class only be referenced/loaded by code
14 * controlled by the BetaFeatures extension, to keep it a soft dependency.
15 */
16class BetaFeatureHookHandler implements GetBetaFeaturePreferencesHook {
17    public function __construct(
18        private readonly Config $config,
19    ) {
20    }
21
22    /**
23     * @see https://www.mediawiki.org/wiki/Manual:Hooks/GetBetaFeaturePreferences
24     *
25     * @param User $user
26     * @param array[] &$prefs
27     */
28    public function onGetBetaFeaturePreferences( User $user, array &$prefs ) {
29        // Don't offer the opt-in where the carousel is already enabled
30        // sitewide; the MediaViewerMobileCarousel flag takes precedence, and a
31        // beta toggle for an already-default feature is just confusing.
32        if ( $this->config->get( 'MediaViewerBetaFeature' ) &&
33            !$this->config->get( 'MediaViewerMobileCarousel' )
34        ) {
35            $path = $this->config->get( MainConfigNames::ExtensionAssetsPath );
36            $prefs[Hooks::BETA_FEATURES_KEY] = [
37                'label-message' => 'multimediaviewer-beta-feature-name',
38                'desc-message' => 'multimediaviewer-beta-feature-description',
39                'screenshot' => [
40                    'ltr' => "$path/MultimediaViewer/resources/assets/beta-feature-ltr.png",
41                    'rtl' => "$path/MultimediaViewer/resources/assets/beta-feature-rtl.png",
42                ],
43                'info-link'
44                => 'https://www.mediawiki.org/wiki/Readers/Reader_Growth/Image_Browsing',
45                'discussion-link'
46                => 'https://www.mediawiki.org/wiki/Talk:Readers/Reader_Growth/Image_Browsing',
47            ];
48        }
49    }
50}