Erweiterungen:BetaFeatures
BetaFeatures Freigabestatus: stabil |
|
---|---|
Einbindung | Medien, Hook , Datenbank |
Beschreibung | Ermöglicht anderen Erweiterungen, ihre Betafunktionen in den Benutzereinstellungen zu registrieren |
Autor(en) | Mark Holmquist (MarkTraceurDiskussion) |
Letzte Version | 0.1 (Continous updates) |
Kompatibilitätspolitik | Snapshots werden zusammen mit MediaWiki veröffentlicht. Der Master ist nicht abwärtskompatibel. |
MediaWiki | 1.25+ |
PHP | 5.4+ |
Datenbankänderungen | Ja |
Tabellen | betafeatures_user_counts |
Lizenz | GNU General Public License 2.0 oder neuer |
Herunterladen | |
Beispiel | Special:Preferences#mw-prefsection-betafeatures |
Special |
|
|
|
Quarterly downloads | 41 (Ranked 91st) |
Public wikis using | 1,031 (Ranked 249th) |
Übersetze die BetaFeatures-Erweiterung, wenn sie auf translatewiki.net verfügbar ist | |
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
- Die Erweiterung herunterladen und die Datei(en) in ein Verzeichnis namens
BetaFeatures
im Ordnerextensions/
ablegen.
Entwickler und Code-Beitragende sollten stattdessen die Erweiterung von Git installieren, mit:cd extensions/
git clone https://gerrit.wikimedia.org/r/mediawiki/extensions/BetaFeatures - Folgenden Code am Ende deiner LocalSettings.php -Datei einfügen:
wfLoadExtension( 'BetaFeatures' );
- Führe das Aktualisierungsskript aus, welches automatisch die notwendigen Datenbanktabellen erstellt, die diese Erweiterung braucht.
- Konfiguriere nach Bedarf.
- Erledigt – Navigiere zu Special:Version in deinem Wiki, um zu überprüfen, ob die Erweiterung erfolgreich installiert wurde.
Verwendung der neuen Hooks in Deiner Erweiterung
Die Verwendung dieser Erweiterung zur Unterstützung Deiner Beta-Funktion ist einfach. Registriere einen Hook vom Typ "GetBetaFeaturePreferences
" in Deiner Datei extension.json
– die Syntax ist fast identisch mit der des Hooks GetPreferences
, 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' );
$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',
];
}
}
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.
Beispielsweise lautet der Name des Beta-Features im oben angegebenen Code myextension-awesome-feature
, sodass du diesen String zum Array $wgBetaFeaturesWhitelist
in deinen Wiki-Einstellungen hinzufügen musst.
$wgBetaFeaturesWhitelist = [
'myextension-awesome-feature'
];
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.
Troubleshootings
Usage counts
The usage counts might not reflect exactly the number of users having some beta features activated at this precise moment. These should be interpreted as approximate numbers.
This number is computed by a job, which could be delayed or long-running. In the past, there was also a 30-minutes cache on these figures.
Siehe auch
Diese Erweiterung wird in einem oder mehreren Wikis von Wikimedia verwendet. Das bedeutet mit hoher Wahrscheinlichkeit, dass die Erweiterung stabil ist und gut genug funktioniert, um auf solch häufig besuchten Webseiten benutzt zu werden. Suche nach dem Erweiterungs-Namen in den Wikimedia CommonSettings.php und den InitialiseSettings.php-Konfigurations-Dateien, um nachzusehen, wo es installiert ist. Eine vollständige Liste der installierten Erweiterungen in einem bestimmten Wiki wird auf Special:Version im Wiki generiert und angezeigt. |
Diese Erweiterung ist in den folgenden Softwarepaketen enthalten und/oder wird von den folgenden Wiki-Farmen, bzw. Wiki-Hostern verwendet: Dies ist keine maßgebliche Liste. Softwarepakete und/oder Wiki-Farmen, bzw. Wiki-Hoster nutzen diese Erweiterung ggf., obwohl sie nicht in dieser Liste enthalten sind. Prüfe daher stets die Nutzung im verwendeten Softwarepaket und/oder bei der Wiki-Farm, bzw. dem Wiki-Hoster. |