Extension:BetaFeatures
État de la version : stable |
|
|---|---|
| Implémentation | Média, Accroche , Base de données |
| Description | Autorise les autres extensions à enregistrer leurs fonctionnalités beta dans les préférences utilisateur. |
| Auteur(s) | Mark Holmquist (MarkTraceur discussion ) |
| Dernière version | 0.1 (Continous updates) |
| Politique de compatibilité | Versions ponctuelles alignées avec MediaWiki. Le master n'est pas compatible arrière. |
| MediaWiki | 1.25+ |
| PHP | 5.4+ |
| Modifie la base de données |
Oui |
|
Special |
|
|
|
| Licence | Licence publique générale GNU v2.0 ou ultérieur |
| Téléchargement | Template:WikimediaDownload/gerritonly |
| Exemple | Special:Preferences#mw-prefsection-betafeatures |
| Traduire l’extension BetaFeatures sur translatewiki.net si elle y est disponible | |
| Problèmes | Tâches ouvertes · Signaler un bogue |
L'extension BetaFeatures autorise les autres extensions MediaWiki à enregistrer leurs fonctionnalités beta avec la liste des préférences utilisateur sur le wiki. Elle utilise l'architecture des préférences déjà existante et quelques pages spéciales pour accomplir sa fonction.
Installation
- Téléchargez et placez le(s) fichier(s) dans un répertoire appelé
BetaFeaturesdans votre dossierextensions/.
Les développeurs et les contributeurs au code doivent à la place installer l'extension à partir de Git en utilisant:cdextensions/ gitclonehttps://gerrit.wikimedia.org/r/mediawiki/extensions/BetaFeatures - Ajoutez le code suivant à la fin de votre fichier LocalSettings.php :
wfLoadExtension( 'BetaFeatures' );
- Exécutez le script de mise à jour qui va créer automatiquement les tables de base de données dont cette extension a besoin.
- Configurez selon vos besoins.
- Yes Fait – Accédez à
Special:Versionsur votre wiki pour vérifier que l'extension a bien été installée.
Utiliser les nouvelles accroches dans votre extension
L'utilisation de cette extension pour prendre en charge votre fonctionnalité bêta est facile. Enregistrez une accroche de type "GetBetaFeaturePreferences " dans votre fichier extension.json — la syntaxe est presque identique a l'accroche , avec de petites modifications pour prendre en charge le type de préférence dont nous avons besoin dans ce cas.
GetPreferences
Dans extension.json :
"Hooks":{ "GetBetaFeaturePreferences":"MediaWiki\\Extension\\MyExtension\\Hooks::onGetBetaFeaturePreferences" },
Dans 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/Help_talk:Extension:MyExtension/MyFeature', ]; } }
'label-message', 'desc-message', 'info-link', et 'discussion-link' sont requis. S'il vous plait soyez sûr de tous les utiliser !Alors vous pouvez utiliser la fonction commodité fournie par les fonctionnalités bêta pour vérifier si la fonctionnalité est activée.
// SpecialMyExtension.php class SpecialMyExtension extends SpecialPage { public function execute() { if ( BetaFeatures::isFeatureEnabled( $this->getUser(), 'my-awesome-feature' ) ) { // Implement the feature! } } }
Vous pouvez également utiliser une vérification de préférence normale, mais ne vérifiez pas les valeurs véridiques ou fausses - utilisez les valeurs de la classe HTMLFeatureField.
// SpecialMyExtension.php class SpecialMyExtension extends SpecialPage { public function execute() { if ( $this->getUser()->getOption( 'my-awesome-feature' ) === HTMLFeatureField::OPTION_ENABLED ) { // Implement the feature! } } }
Étant donné que la classe BetaFeatures doit être présente partout, vous pouvez utiliser la fonction de commodité dans n'importe quel accroche, page spéciale ou tout autre élément de votre choix. Soyez simplement conscient des problèmes potentiels de performances ou de mise en cache que vous pourriez introduire avec ces modifications.
Si vous souhaitez également utiliser votre extension sans BetaFeatures, vous devez également vérifier son existence, par exemple :
if ( !ExtensionRegistry::getInstance()->isLoaded( 'BetaFeatures' ) || \BetaFeatures::isFeatureEnabled( $user, 'my-awesome-feature' ) ) { // Implement the feature! }
Configuration
La variable de configuration $wgBetaFeaturesWhitelist peut être utilisée pour limiter les fonctionnalités bêta affichées dans les préférences.
Par défaut, il est vide et toutes les fonctionnalités bêta sont affichées.
S'il est utilisé, pour qu'une fonctionnalité bêta apparaisse dans les préférences, elle doit être répertoriée dans la liste blanche.
Cette variable de configuration accepte un tableau de chaînes.
Chaque chaîne doit être le nom d'une fonctionnalité bêta, comme spécifié dans la définition de préférence transmise à onGetBetaFeaturePreferences().
Par exemple, dans le code ci-dessus, le nom de la fonctionnalité bêta est myextension-awesome-feature, vous devez donc ajouter cette chaîne au tableau $wgBetaFeaturesWhitelist dans la configuration de votre wiki :
$wgBetaFeaturesWhitelist = [ 'myextension-awesome-feature' ];
Utilisation avancée
Vous voulez voir quelque chose de vraiment cool ?
Groupes d'inscription automatique
Avec cet exemple, nous enregistrons une préférence qui est une "inscription automatique" - si un utilisateur vérifie cela et que de nouvelles fonctionnalités sortent dans un groupe particulier, l'utilisateur sera automatiquement inscrit à ces fonctionnalités.
// 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', ); } }
Gestion des dépendances
Ensuite, nous pouvons en fait définir la gestion des dépendances par fonctionnalité. Pour ce faire, nous enregistrons d'abord le nom d'un crochet que nous voulons utiliser pour cela avec le crochet "1ドル", puis nous enregistrons un crochet de ce type qui vérifie certaines dépendances et renvoie true si elle est remplie ou false sinon.
To do this we first register the name of a hook that we want to use for this with the hook GetBetaFeatureDependencyHooks , then we register a hook of that type that checks some dependency, and returns true if it's met or false if not.
// 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; } }
Vous pouvez (削除) abuser (削除ここまで) utiliser cette fonctionnalité pour désactiver des fonctionnalités par wiki, si elles sont marquées comme dépendantes. Mais cela semble vraiment hacky. Vous ne devriez probablement pas. Je peux vous entendre y penser en ce moment, arrêtez simplement.
Contenu de la base de données
Il existe une table de base de données (betafeatures_user_counts) définie et utilisée par BetaFeatures. Mais vous pourriez être confus si vous essayez de l'utiliser localement.
Nous utilisons la file d'attente des tâches pour exécuter les mises à jour de cette table, lorsque le cache expire (30 minutes TTL). Si votre wiki est configuré pour exécuter des tâches à chaque requête, cela rendra très lente une requête environ toutes les 30 minutes, mais le reste sera relativement rapide. Si vous configurez votre wiki pour exécuter des tâches via cron, les choses fonctionneront beaucoup mieux.
Best practices
Process
The process for setting up a beta feature is documented at Extension:BetaFeatures/How to setup a beta feature
Do not make conditional
When shipping a beta feature that only works on certain skins, it is preferable to display the beta feature on all skins and note in the description if it does not apply on a certain skin or to certain people. This is particularly important for features that are mobile only as it can make beta features less discoverable.
Conditional beta features are also problematic, as when changing skin a user will be removed from beta testing.
Problèmes
Compteurs sur l’utilisation
Les compteurs sur l’utilisation des fonctionnalités beta peuvent ne pas refléter exactement le nombre d’utilisateurs ayant une certaine fonctionnalité beta activée à cet instant précis. Ils doivent être interprétés comme des nombres approximatifs.
Ce chiffre est calculé par un job, qui peut être mis en attente ou long à exécuter. Dans le passé, il y avait un cache de 30 minutes sur ces chiffres.
Voir aussi
- Stable extensions/fr
- Media handling extensions/fr
- Hook extensions/fr
- Database extensions/fr
- ExtensionTypes extensions/fr
- GetPreferences extensions/fr
- LoadExtensionSchemaUpdates extensions/fr
- MakeGlobalVariablesScript extensions/fr
- PreferencesGetIcon extensions/fr
- SaveUserOptions extensions/fr
- SkinTemplateNavigation::Universal extensions/fr
- UserGetDefaultOptions extensions/fr
- GPL licensed extensions/fr
- Extensions in Wikimedia version control/fr
- All extensions/fr
- Extensions used on Wikimedia/fr
- Extensions included in Canasta/fr
- Extensions included in Miraheze/fr
- Beta Features/fr