Extension:BetaFeatures/nl

This page is a translated version of the page Extension:BetaFeatures and the translation is 100% complete.
MediaWiki Handleiding extensies
BetaFeatures
Release status: stabiel
Implementatie Media, Hook , Database
Beschrijving Maakt het voor extensies mogelijk om hun betafuncties in de gebruikersvoorkeuren te registreren.
Auteur(s) Mark Holmquist (MarkTraceuroverleg)
Laatste versie 0.1 (Continous updates)
Compatibiliteit beleid Snapshots releases samen met MediaWiki. Master is niet achterwaarts compatibel.
MediaWiki 1.25+
PHP 5.4+
Database wijzigingen Ja
Tabellen betafeatures_user_counts
Licentie GNU General Public Licentie 2.0 of hoger
Download Template:WikimediaDownload/gerritonly
Voorbeeld Special:Preferences#mw-prefsection-betafeatures
Special
  • $wgBetaFeatures
  • $wgBetaFeaturesAllowList
Downloads kwartaal 80 (Ranked 79th)
Publieke wiki's die het gebruiken 1,031 (Ranked 249th)
Vertaal de BetaFeatures extensie indien beschikbaar op translatewiki.net
Problemen Open taken · Rapporteer een bug

De extensie BetaFeatures staat toe dat andere MediaWiki extensies hun betafuncties registeren in de lijst met gebruikersvoorkeuren op de wiki. Het gebruikt hiervoor de bestaande structuur van gebruikersvoorkeuren en een aantal speciale pagina's.

Installatie

  • Download en plaats de bestanden in de map BetaFeatures in de map extensions/.
    Ontwikkelaars en bijdragers van code moeten in plaats daarvan de extensie van Git installeren, met behulp van:cd extensions/
    git clone https://gerrit.wikimedia.org/r/mediawiki/extensions/BetaFeatures
  • Voeg de volgende code onderaan het bestand LocalSettings.php toe:
    wfLoadExtension( 'BetaFeatures' );
    
  • Voer het update script uit, dat automatisch de vereiste database-tabellen creëert die nodig zijn voor de extensie.
  • Als verplicht configureren.
  •   Klaar – Navigeer naar Special:Version op de wiki om te controleren dat de extensie geïnstalleerd is.

De nieuwe hooks in uw extensie gebruiken

Het gebruik van deze extensie is eenvoudig. Registreer een hook van type "GetBetaFeaturePreferences " in uw bestand extension.json , de syntaxis is bijna gelijk aan de hook GetPreferences , met wat kleine aanpassingen om het type voorkeur te ondersteunen.

In extension.json:

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

In MyExtension/includes/Hooks.php:

namespace MediaWiki\Extension\MyExtension;
class Hooks {
    public static function onGetBetaFeaturePreferences( User $user, array &$betaPrefs ) {
        $extensionAssetsPath = MediaWikiServices::getInstance()
			->getMainConfig()
			->get( 'ExtensionAssetsPath' );
        $betaPrefs['myextension-awesome-feature'] = [
            // The first two are message keys
            'label-message' => 'myextension-awesome-feature-message',
            'desc-message' => 'myextension-awesome-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' => "$extensionAssetsPath/MyExtension/images/screenshot-ru.png",
                'ltr' => "$extensionAssetsPath/MyExtension/images/screenshot-ltr.png",
                'rtl' => "$extensionAssetsPath/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/MyFeature',
            // Link to discussion about the feature - talk pages might work
            'discussion-link' => 'https://www.mediawiki.org/wiki/Special:MyLanguage/Help_talk:Extension:MyExtension/MyFeature',
        ];
    }
}
Op dit moment zijn 'label-message', 'desc-message', 'info-link' en 'discussion-link' verplicht. Gebruik deze items dus allemaal!

U kunt daarna de functie convenience van BetaFeatures gebruiken om te controleren of de functie is ingeschakeld.

// SpecialMyExtension.php
class SpecialMyExtension extends SpecialPage {

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

Dit kan ook met een normale controle van de voorkeur, maar test niet of true of false, gebruik de waarden in de class HTMLFeatureField om te testen.

// SpecialMyExtension.php
class SpecialMyExtension extends SpecialPage {

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

Omdat de class BetaFeatures overal aanwezig moet zijn kunt u de convenience functie in elke hook, op elke speciale pagina of eldere gebruiken. Kijk wel uit voor de mogelijke performance problemen bij het cachen die door deze wijziging kunnen ontstaan.

Als u uw extensie ook zonder BetaFeatures wilt gebruiken, voeg dan ook een test of het bestaat uit:

if (
    !ExtensionRegistry::getInstance()->isLoaded( 'BetaFeatures' )
    || \BetaFeatures::isFeatureEnabled( $user, 'my-awesome-feature' )
) {
    // Implement the feature!
}

Configuratie

De configuratie instelling $wgBetaFeaturesWhitelist kan worden gebruikt om het aantal betafuncties dat in de voorkeuren wordt getoond, te beperken. Standaard is het leeg, dat betekent dat alle betafuncties worden getoond.

Als het wordt gebruikt dan wordt een betafunctie getoond in de voorkeuren als het in de 'whitelist' staat. Deze variabele is een array van strings. Elke string is dan de naam van een betafunctie zoals gespecificeerd in de voorkeursdefinitie doorgegeven aan onGetBetaFeaturePreferences(). In het voorbeeld hierboven is de naam van de betafunctie myextension-awesome-feature, dus dient die naam toegevoegd worden als string in het array $wgBetaFeaturesWhitelist in de configuratie van uw wiki:

$wgBetaFeaturesWhitelist = [
        'myextension-awesome-feature' 
];

Geavanceerd gebruik

Wilt u iets te gek zien?

Automatische inschrijvingsgroepen

In dit voorbeeld registreren we een voorkeur die er een automatisch aanmeld, als een gebruiker dit aanvinkt dan en er komt een nieuwe functie bij in een bepaalde groep, dan wordt de gebruiker automatisch aangemeld voor die functies.

// 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',
        );
    }
}

Beheer van afhankelijkheden

Vervolgens kunnen we zelfs afhankelijkheden aangeven per functie. Daarvoor registreren we eerst de name van een hook die we hiervoor willen gebruiken met de hook "GetBetaFeatureDependencyHooks ", daarna registreren we een hook van dat type die wat afhankelijkheden controleert en true' of false teruggeeft, als resp. wel/niet aan de afhankelijkheden is voldaan.

// 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;
    }
}

U kunt deze functie misbruiken gebruiken voor het per wiki uitschakelen van functies, als ze als afhankelijk zijn aangegeven. Maar dat klinkt wel als een echt knutselen. Doe dat liever niet.

Database notities

Er is een database-tabel (betafeatures_user_counts) gedefinieerd door BetaFeatures. U kunt het overzicht kunnen verliezen als u deze tabel lokaal probeert te gebruiken.

We gebruiken de job wachtrij op updates op deze tabel te doen, wanneer de cache vervalt (30 minuten TTL). Als de wiki is geconfigureerd om jobs per verzoek uit te voeren, dan wordt een verzoek per 30 minuten wel heel erg langzaam, maar is het overige relatief snel. Het werkt beter als u de wiki geconfigureerd om jobs uit te voeren via cron.

Zie ook