Extension:BetaFeatures/Hooks/GetBetaFeaturePreferences

From Linux Web Expert

GetBetaFeaturePreferences
Available from version 1.22.0
Register preferences that enable experimental features. Only available with Extension:BetaFeatures.
Define function:
public static function onGetBetaFeaturePreferences( User $user, array &$betaPrefs ) { ... }
Attach hook:
$wgHooks['GetBetaFeaturePreferences'][] = 'MyExtensionHooks::onGetBetaFeaturePreferences';
Called from:File(s): BetaFeatures / includes/Hooks.php

For more information about attaching hooks, see Manual:Hooks .
For examples of other extensions using this hook, see Category:GetBetaFeaturePreferences extensions.

Details

  • $user: User whose preferences are being modified.
  • &$betaPrefs: Array of beta features. Each key is the identifier of the feature and the associated value is an array with the keys:
    • label-message: (required) message key for the title of the feature
    • desc-message: (required) message key for the description of the feature
    • screenshot: (optional) either the path to an image representing the feature, either an array whose the keys are language codes or 'rtl' or 'ltr' for language-specific or language-direction-specific images; it can be used the global variable $wgExtensionAssetsPath
    • requirements: (optional) array with keys:
      • betafeatures: array of required preferences before activating this feature
      • blacklist: array of user agents blacklisted by this feature, this is only added in JavaScript variables
      • skins: array of skins supported by the feature
    • info-link: (optional) URL pointing to the description of the feature
    • info-message: (optional) message key containing an URL pointing to the description of the feature
    • discussion-link: (optional) URL pointing to a discussion page of the feature
    • discussion-message: (optional) message key containing an URL pointing to the description of the feature
    • auto-enrollment: (optional) when this feature is enabled, enable other features whose the group value is given by this auto-enrollment value
    • group: (optional) this feature can be enabled when the "parent" feature with a corresponding auto-enrollment name is enabled
    • dependent: (optional) if true, run for this feature the hook registered by the GetBetaFeatureDependencyHooks hook

Example

In MyExtension/extension.json:

	"Hooks": {
		"GetBetaFeaturePreferences": "MediaWiki\\Extension\\MyExtension\\Hooks::onGetBetaFeaturePreferences"
	},

In MyExtension/includes/Hooks.php:

namespace MediaWiki\Extension\MyExtension;
class Hooks {
    static function onGetBetaFeaturePreferences( $user, &$prefs ) {
		$extensionAssetsPath = MediaWikiServices::getInstance()
			->getMainConfig()
			->get( 'ExtensionAssetsPath' );
        $prefs['my-awesome-feature'] = array(
            // The first two are message keys
            'label-message' => 'beta-feature-message',
            'desc-message' => 'beta-feature-description',
            // Paths to images that represent the feature.
            'screenshot' => [
				'ltr' => "$extensionAssetsPath/MyExtension/images/betafeature-ltr.png",
				'rtl' => "$extensionAssetsPath/MyExtension/images/betafeature-rtl.png",
			],
            // Link to information on the feature - use subpages on mw.org, maybe?
            'info-link' => 'https://mediawiki.org/wiki/Special:MyLanguage/Help:Extension:MyExtension',
            // Link to discussion about the feature - talk pages might work
            'discussion-link' => 'https://mediawiki.org/wiki/Special:MyLanguage/Help_talk:Extension:MyExtension',
        );
    }
}
// SpecialMyExtension.php
class SpecialMyExtension extends SpecialPage {

    public function execute() {
        if ( BetaFeatures::isFeatureEnabled( $this->getUser(), 'my-awesome-feature' ) ) {
            // Implement the feature!
        }
    }
}