Extension:BetaFeatures/nl
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 | |
Voorbeeld | Special:Preferences#mw-prefsection-betafeatures |
Special |
|
|
|
Downloads kwartaal | 44 (Ranked 93rd) |
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 mapextensions/
.
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',
];
}
}
'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 functie convenience in elke hook, op elke speciale pagina of elders 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.
Probleemoplossing
Tellingen van gebruik
Het aantal keren gebruikt geeft mogelijk niet precies het aantal gebruikers weer dat op dit moment bepaalde bètafuncties heeft geactiveerd. Deze moeten worden geïnterpreteerd als een schatting.
Dit aantal wordt berekend door een taak, die vertraagd of langlopend kan zijn. In het verleden was er ook een cache van 30 minuten op deze tellingen.
Zie ook
Deze uitbreiding wordt gebruikt op een of meerdere Wikimedia projecten. Dit betekent waarschijnlijk dat de uitbreiding stabiel is en goed werkt op dergelijke vaak bezochte websites. Zoek op de naam van deze uitbreiding in Wikimedia's CommonSettings.php en InitialiseSettings.php om te zien waar deze is geïnstalleerd. Een volledige lijst van de uitbreidingen die geïnstalleerd zijn op een bepaalde wiki kan worden gevonden op de Special:Version pagina van de wiki. |
Deze uitbreiding is beschikbaar op de volgende wiki-families en/of onderdeel van de volgende pakketten: Dit is geen gezaghebbende lijst. Sommige wikifarms/hosts en/of pakketten kunnen deze extensie bevatten, zelfs als ze hier niet worden vermeld. Controleer het altijd bij uw wiki farms/hosts of bundel. |
- Stable extensions/nl
- Media handling extensions/nl
- Hook extensions/nl
- Database extensions/nl
- GPL licensed extensions/nl
- Extensions in Wikimedia version control/nl
- ExtensionTypes extensions/nl
- GetPreferences extensions/nl
- LoadExtensionSchemaUpdates extensions/nl
- MakeGlobalVariablesScript extensions/nl
- PreferencesGetIcon extensions/nl
- SaveUserOptions extensions/nl
- SkinTemplateNavigation::Universal extensions/nl
- UserGetDefaultOptions extensions/nl
- All extensions/nl
- Extensions used on Wikimedia/nl
- Extensions included in Canasta/nl
- Extensions included in Miraheze/nl
- Extensions included in WikiForge/nl
- Beta Features/nl