Erweiterungen: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 | 169 (Ranked 63rd) |
Public wikis using | 1,262 (Ranked 176th) |
Ü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. - Folgenden Code am Ende der
LocalSettings.php
einfügen:wfLoadExtension( 'BetaFeatures' );
- Führe das Aktualisierungsskript aus, welches automatisch die notwendigen Datenbanktabellen erstellt, die diese Erweiterung braucht.
- Konfiguriere nach Bedarf.
- Erledigt – Zu Special:Version in dem Wiki (bei Einstellung auf deutsch nach Spezial:Version) navigieren, um die erfolgreiche Installierung der Erweiterung zu überprüfen.
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.
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 zu 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 Paketen und/oder WikiFarmen beinhalten: This is not an authoritative list. Some wiki farms/hosts may contain this extension even if they are not listed here. Always check with your wiki farms/hosts or bundle to confirm. |