Extension:BetaFeatures

From MediaWiki.org
Jump to: navigation, search
This page is a translated version of the page Extension:BetaFeatures and the translation is 45% complete.

Other languages:
العربية • ‎български • ‎català • ‎Deutsch • ‎English • ‎español • ‎suomi • ‎français • ‎עברית • ‎Հայերեն • ‎Bahasa Indonesia • ‎italiano • ‎日本語 • ‎한국어 • ‎polski • ‎português • ‎português do Brasil • ‎русский • ‎sicilianu • ‎سنڌي • ‎中文
Manuel des extensions MediaWikiManual:Extensions
Crystal Clear action run.png
BetaFeatures

État de la version :Extension status stable

BetaFeatures 2013-09-06.png
ImplémentationTemplate:Extension#type Media, Hook, Database
DescriptionTemplate:Extension#description Autorise les autres extensions à enregistrer leur fonctionnalités beta dans les préférences utilisateur.
Auteur(s)Template:Extension#username Mark Holmquist (MarkTraceurtalk)
Dernière versionTemplate:Extension#version 0.1 (Continous updates)
MediaWikiTemplate:Extension#mediawiki 1.25+
PHPTemplate:Extension#php 5.4+
Changements de la base de donnéesTemplate:Extension#needs-updatephp Oui
LicenceTemplate:Extension#license GNU General Public License 2.0 or later
Téléchargement Template:WikimediaDownload/gerritonly
ExempleTemplate:Extension#example Multimedia Alpha site
Espace de nomTemplate:Extension#namespace

Special

ParamètresTemplate:Extension#parameters
  • $wgBetaFeaturesWhitelist
  • $wgBeatFeatures
Accroches utiliséesTemplate:Extension#hook
UserSaveOptionsManual:Hooks/UserSaveOptions
GetPreferencesManual:Hooks/GetPreferences
PersonalUrlsManual:Hooks/PersonalUrls
LoadExtensionSchemaUpdatesManual:Hooks/LoadExtensionSchemaUpdates
MakeGlobalVariablesScriptManual:Hooks/MakeGlobalVariablesScript
ExtensionTypesManual:Hooks/ExtensionTypes

Traduisez l’extension BetaFeatures sur translatewiki.net

Vérifiez la matrice des utilisations et des versions.

ProblèmesPhabricator

Tâches ouvertes · Signalez un bug

L'extension BetaFeatures autorise les autres extensions MediaWiki à enregistrer leur fonctionnalités beta avec la liste des préférences utilisateur sur le wiki. Elle utilise l'architecture des préférences déjà existante et quelques pages spéciales pour accomplir sa fonction.

Installation[edit]

  • Téléchargez et placez le(s) fichiers (s) dans un répertoire appelé BetaFeatures dans votre dossier extensions/.
  • Ajoutez le code suivant à la fin de votre fichier LocalSettings.php :
    wfLoadExtension( 'BetaFeatures' );
    
  • Lancez le script de mise à jour qui va créer automatiquement les tables de base de données dont cette extension a besoin.
  • YesY Fait - Accédez à Special:Version sur votre wiki pour vérifier que l'extension a bien été installée.

Pour les utilisateurs de MediaWiki 1.24 ou précédents :

Les instructions ci-dessous décrivent la nouvelle procédure pour installer cette extension en utilisant wfLoadExtension() Si vous avez besoin d'installer cette extensions sur les précédentes versions de MediaWiki (1.24 ou précédent), à la place de wfLoadExtension( 'BetaFeatures' );, vous devez utiliser :

require_once "$IP/extensions/BetaFeatures/BetaFeatures.php";

Using the new hooks in your extension[edit]

Using this extension to support your beta feature is easy. Register a hook of type "GetBetaFeaturePreferences" in your extension's main file - the syntax is almost identical to the GetPreferences hook, with small changes to support the type of preference we need in this case.

// MyExtension.php
$wgAutoloadClasses['MyExtensionHooks'] = __DIR__ . '/MyExtensionHooks.php';
$wgHooks['GetBetaFeaturePreferences'][] = 'MyExtensionHooks::getPreferences';
Pour l'instant, 'label-message', 'desc-message', 'info-link', and 'discussion-link' sont requis. S'il vous plait soyez sur de tous les utiliser !
// MyExtensionHooks.php
class MyExtensionHooks {

    static function getPreferences( $user, &$prefs ) {
        global $wgExtensionAssetsPath;

        $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 represents the feature.
            // The image is usually different for ltr and rtl languages.
            // Images for specific languages can also specified using the language code.
            'screenshot' => array(
                'ru' => "$wgExtensionAssetsPath/MyExtension/images/screenshot-ru.png",
                'ltr' => "$wgExtensionAssetsPath/MyExtension/images/screenshot-ltr.png",
                'rtl' => "$wgExtensionAssetsPath/MyExtension/images/screenshot-rtl.png",
            ),
            // Link to information on the feature - use subpages on mw.org, maybe?
            'info-link' => 'https://www.mediawiki.org/wiki/Special:MyLanguage/MyFeature',
            // Link to discussion about the feature - talk pages might work
            'discussion-link' => 'https://www.mediawiki.org/wiki/Talk:MyFeature',
        );
    }
}

Alors vous pouvez utiliser la fonction commodité fournie par les Fonctionnalités Bêta pour vérifier si la fonctionnalité est activée.

// SpecialMyExtension.php
class SpecialMyExtension extends SpecialPage {

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

You can also use a normal preference check, but don't check against truthy or falsy values - use the values from the HTMLFeatureField class.

// SpecialMyExtension.php
class SpecialMyExtension extends SpecialPage {

    public function execute() {
        if ( $this->getUser()->getOption( 'my-awesome-feature' ) === HTMLFeatureField::OPTION_ENABLED ) {
            // Implement the feature!
        }
    }
}

Because the BetaFeatures class should be present everywhere, you could use the convenience function in any hook, special page, or anything else you wanted. Just be aware of potential performance or caching issues you may introduce with those changes.

Utilisation avancée[edit]

Vous voulez voir quelque chose de vraiment cool ?

Auto-enroll groups[edit]

With this example, we register a preference that's an "auto-enroll" one - if a user checks this, and new features come out that are in a particular group, the user will be automatically enrolled in those features.

// MyExtensionHooks.php
class MyExtensionHooks {

    static function getPreferences( $user, &$prefs ) {
        global $wgExtensionAssetsPath;

        $prefs['my-awesome-feature-auto-enroll'] = array(
            // The first two are message keys
            'label-message' => 'beta-feature-autoenroll-message',
            'desc-message' => 'beta-feature-autoenroll-description',
            // Link to information on the feature - use subpages on mw.org, maybe?
            'info-link' => 'https://wwww.mediawiki.org/wiki/Special:MyLanguage/MyFeature',
            // Link to discussion about the feature - talk pages might work
            'discussion-link' => 'https://www.mediawiki.org/wiki/Talk:MyFeature',
            // Enable auto-enroll for this group
            'auto-enrollment' => 'my-awesome-feature-group',
        );

        $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 represents the feature.
            // The image is usually different for ltr and rtl languages.
            // Images for specific languages can also specified using the language code.
            'screenshot' => array(
                'ru' => "$wgExtensionAssetsPath/MyExtension/images/screenshot-ru.png",
                'ltr' => "$wgExtensionAssetsPath/MyExtension/images/screenshot-ltr.png",
                'rtl' => "$wgExtensionAssetsPath/MyExtension/images/screenshot-rtl.png",
            ),
            // Link to information on the feature - use subpages on mw.org, maybe?
            'info-link' => 'https://www.mediawiki.org/wiki/Special:MyLanguage/Extension:MyExtension/SomeFeature',
            // Link to discussion about the feature - talk pages might work
            'discussion-link' => 'https://www.mediawiki.org/wiki/Extension_talk:MyExtension/SomeFeature',
            // Add feature to this group
            'group' => 'my-awesome-feature-group',
        );
    }
}

Gestion des dépendances[edit]

Next up, we can actually define dependency management per-feature. To do this we first register the name of a hook that we want to use for this with the hook "GetBetaFeatureDependencyHooks", then we register a hook of that type that checks some dependency, and returns true if it's met or false if not.

// MyExtension.php
$wgAutoloadClasses['MyExtensionHooks'] = __DIR__ . '/MyExtensionHooks.php';
Hooks::register( 'GetBetaFeaturePreferences', 'MyExtensionHooks::getPreferences' );
Hooks::register( 'GetBetaFeatureDependencyHooks', 'MyExtensionHooks::getDependencyCallbacks' );
Hooks::register( 'CheckDependenciesForMyExtensionFeature', 'MyExtensionHooks::checkDependencies' );
// MyExtensionHooks.php
class MyExtensionHooks {

    static function getPreferences( $user, &$prefs ) {
        global $wgExtensionAssetsPath;

        $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 represents the feature.
            // The image is usually different for ltr and rtl languages.
            // Images for specific languages can also specified using the language code.
            'screenshot' => array(
                'ru' => "$wgExtensionAssetsPath/MyExtension/images/screenshot-ru.png",
                'ltr' => "$wgExtensionAssetsPath/MyExtension/images/screenshot-ltr.png",
                'rtl' => "$wgExtensionAssetsPath/MyExtension/images/screenshot-rtl.png",
            ),
            // Link to information on the feature - use subpages on mw.org, maybe?
            'info-link' => 'https://www.mediawiki.org/wiki/Special:MyLanguage/Extension:MyExtension/SomeFeature',
            // Link to discussion about the feature - talk pages might work
            'discussion-link' => 'https://www.mediawiki.org/wiki/Extension_talk:MyExtension/SomeFeature',
            // Mark as dependent on something
            'dependent' => true,
        );
    }

    static function getDependencyCallbacks( &$depHooks ) {
        $depHooks['my-awesome-feature'] = 'CheckDependenciesForMyExtensionFeature';
        return true;
    }

    static function checkDependencies() {
        $dependenciesMet = false;
        // Do some fancy checking and return the result
        return $dependenciesMet;
    }
}

You can abuse use this feature to do per-wiki disabling of features, if they're marked as dependent. But that sounds really hacky. You probably shouldn't. I can hear you thinking about it right now, just stop it.

Database stuff[edit]

There's a database table (betafeatures_user_counts) defined, and used, by BetaFeatures. But you might get confused by it if you try to use it locally.

We use the job queue to run updates for this table, when the cache expires (30 minutes TTL). If your wiki is configured to run jobs on each request, this will make about one request every 30 minutes reeeeeeally slow, but the rest will be relatively fast. If you configure your wiki to run jobs via cron, things will work much better.

Voir aussi[edit]