Open main menu

Erweiterungen:BetaFeatures

This page is a translated version of the page Extension:BetaFeatures and the translation is 100% complete.

Other languages:
Bahasa Indonesia • ‎Deutsch • ‎English • ‎español • ‎français • ‎italiano • ‎polski • ‎português do Brasil • ‎sicilianu • ‎русский • ‎עברית • ‎سنڌي • ‎中文 • ‎日本語 • ‎한국어
MediaWiki-Erweiterungen
OOjs UI icon advanced.svg
BetaFeatures
Erscheinungsstatus: stabil
BetaFeatures 2013-09-06.png
Einbindung Media, Hook , Datenbank
Beschreibung Ermöglicht anderen Erweiterungen, ihre Betafunktionen in den Benutzereinstellungen zu registrieren
Autor(en) Mark Holmquist (MarkTraceurtalk)
Letzte Version 0.1 (Continous updates)
MediaWiki 1.25+
PHP 5.4+
Datenbankänderungen Ja
Tabellen betafeatures_user_counts
Lizenz GNU General Public License 2.0 or later
Herunterladen Template:WikimediaDownload/gerritonly
Beispiel Multimedia Alpha site
Special
  • $wgBetaFeaturesWhitelist
  • $wgBetaFeatures
Übersetze die BetaFeatures Erweiterung wenn sie auf translatewiki.net verfügbar ist
Prüfe die Benutzungs- und Versionsmatrix.
Probleme Offene Aufgaben · Einen Fehler melden

Die BetaFeatures-Erweiterung ermöglicht es anderen MediaWiki-Erweiterungen, Beta-Funktionen mit der Liste der Benutzereinstellungen im Wiki zu registrieren. Es verwendet die vorhandene Architektur der Benutzereinstellungen und einige spezielle Seiten, um seine Funktion zu erfüllen.

Installation

  • Füge folgenden Code am Ende deiner LocalSettings.php hinzu:
    wfLoadExtension( 'BetaFeatures' );
    
  • Führe das Aktualisierungsskript aus, welches automatisch die notwendigen Datenbanktabellen erstellt, die diese Erweiterung braucht.
  •   Erledigt – Navigiere zu Special:Version in deinem Wiki (bei Einstellung auf deutsch nach Spezial:Version), um zu prüfen, dass die Erweiterung erfolgreich installiert ist.

An Nutzer, die MediaWiki 1.24 und früher betreiben:

Die oben stehenden Anweisungen beschreiben die neue Installationsanweisung für diese Erweiterung unter Verwendung von wfLoadExtension(). Falls du diese Erweiterung in einer dieser früheren Versionen (MediaWiki 1.24 und früher)  – an Stelle von wfLoadExtension( 'BetaFeatures' ); – installieren musst, benutze:

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

Verwendung der neuen Hooks in Deiner Erweiterung

Die Verwendung dieser Erweiterung zur Unterstützung Deiner Beta-Funktion ist einfach. Registriere einen Hook vom Typ "Abruf der Beta-Funktionseinstellungen" in Deiner Datei extension.json – die Syntax ist fast identisch mit der des Hooks Abruf der Einstellungen, mit geringfügigen Änderungen, um die Art der Funktion, die wir in diesem Fall brauchen, zu unterstützen.

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' );
        $prefs['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',
        ];
    }
}
Nunmehr sind 'label-message', 'desc-message', 'info-link' und 'discussion-link' erforderlich. Bitte stelle sicher, dass Du alle einsetzt!

Anschließend kannst Du mithilfe der von BetaFeatures bereitgestellten zweckdienlichen Funktion überprüfen, ob die Funktion aktiviert ist.

// SpecialMyExtension.php
class SpecialMyExtension extends SpecialPage {

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

Du kannst auch eine normale Prüfung der Einstellungen anwenden, jedoch keine Prüfung mit "true" oder "false" Einstellungen - verwende nur die Werte aus der HTMLFeatureField-Kategorie.

// SpecialMyExtension.php
class SpecialMyExtension extends SpecialPage {

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

Da die BetaFeatures-Katwegorie überall vorhanden sein sollte, kannst Du die zweckdienliche Funktion in beliebigen Hooks, Spezialseiten oder anderen gewünschten Elementen verwenden. Beachte nur die potenziellen Performance- oder Caching-Probleme, die durch diese Änderungen möglicherweise verursacht werden.

Wenn Du Deine Erweiterung auch ohne BetaFeatures verwenden möchtest, solltest Du auch überprüfen, ob sie überhaupt vorhanden ist, z. B.:

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

Konfiguration

Mit der Konfigurationsvariablen $wgBetaFeaturesWhitelist kannst Du einschränken, welche Betafunktionen in den Einstellungen angezeigt werden. Standardmäßig ist es leer und alle Beta-Funktionen werden angezeigt.

Wenn es verwendet wird, muss es in der Whitelist aufgeführt sein, damit eine Beta-Funktion in den Einstellungen angezeigt wird. Diese Konfigurationsvariable akzeptiert ein Reihe von Zeichenfolgen. Jeder String sollte der Name eines Beta-Features sein, wie in der Definition der Einstellungen angegeben, die an onGetBetaFeaturePreferences() übergeben wird. In dem oben angegebenen Code lautet der Name des Beta-Features beispielsweise myextension-awesome-feature, sodass Du diesen String zum Array $wgBetaFeaturesWhitelist in Deinen wiki configs hinzufügen musst.

Verwendung für Fortgeschrittene

Willst du etwas wirklich tolles sehen?

Gruppen automatisch registrieren

In diesem Beispiel wird eine Voreinstellung vorgenommen, mit der automatisch mehrere Einstellungen aktiviert werden. Wenn ein Benutzer dies aktiviert und neue Funktionen in einer bestimmten Gruppe enthalten sind, aktiviert der Benutzer automatisch alle diese Funktionen auf einmal.

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

Management untergeordneter Features

Als Nächstes können wir tatsächlich das Management pro Feature definieren. Dazu registrieren wir zuerst den Namen eines Hooks, den wir dafür verwenden möchten, mit dem Hook "GetBetaFeatureDependencyHooks", dann aktivieren wir einen Hook dieses Typs, der die etwaige Zugehörigkeit prüft und true zurück gibt, wenn es erfüllt ist, oder false, falls nicht.

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

Du kannst diese Funktion missbrauchen, um die Funktionen pro Wiki zu deaktivieren, wenn sie als untergeordnet markiert sind. Aber das klingt wirklich abgedreht. Das solltest du möglichst nicht tun. Ich kann mir vorstellen, wie du darüber denkst, aber lass es lieber.

Datenbank Material

Es gibt eine Datenbanktabelle (betafeatures_user_counts), die von BetaFeatures definiert und verwendet wird. Es kann jedoch unübersichtlich sein, wenn Du versuchen solltest, sie lokal zu verwenden.

Wir verwenden die Jobwarteschlange, um Aktualisierungen für diese Tabelle auszuführen, wenn der Cache abläuft (30 Minuten Lebenszeit). Wenn Dein Wiki so konfiguriert ist, dass Jobs für jede Anforderung ausgeführt werden, wird dadurch etwa alle 30 Minuten eine Anforderung ausgeführt. Dies ist zwar sehr langsam, der Rest ist jedoch relativ schnell. Wenn Du Dein Wiki so konfigurierst, dass Jobs über den Cron-Daemon ausgeführt werden, funktioniert es viel besser.

Siehe auch