Extension:BetaFeatures
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 (MarkTraceurdiscussion) |
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 |
Tables | betafeatures_user_counts |
Licence | Licence publique générale GNU v2.0 ou supérieur |
Téléchargement | |
Exemple | Special:Preferences#mw-prefsection-betafeatures |
Special |
|
|
|
Téléchargements trimestriels | 41 (Ranked 91st) |
Utilisé par les wikis publics | 1,031 (Ranked 249th) |
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é
BetaFeatures
dans votre dossierextensions/
.
Les développeurs et les contributeurs au code doivent à la place installer l'extension à partir de Git en utilisant:cd extensions/
git clone https://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.
- Fait – Accédez à Special:Version sur 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 GetPreferences
, avec de petites modifications pour prendre en charge le type de préférence dont nous avons besoin dans ce cas.
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/Special:MyLanguage/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 "GetBetaFeatureDependencyHooks ", puis nous enregistrons un crochet de ce type qui vérifie certaines dépendances et renvoie true si elle est remplie ou false sinon.
// 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.
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
Cette extension est utilisée par au moins un des projets Wikimédia. Cela signifie probablement que l’extension est assez stable et fonctionnelle pour être utilisée sur des sites à fort trafic. Recherchez le nom de cette extension dans le CommonSettings.php de Wikimédia et dans le fichier de configuration InitialiseSettings.php pour situer les endroits où elle est installée. Une liste complète des extensions installées sur un Wiki donné peut être visualisée sur la page Special:Version de ce wiki. |
Cette extension est incluse dans les fermes de wikis ou les hôtes suivants et / ou les paquets : Cette liste ne fait pas autorité. Certaines fermes de wikis ou hôtes et / ou paquets peuvent contenir cette extension même s'ils ne sont pas listés ici. Vérifiez toujours cela avec votre ferme de wikis ou votre hôte ou votre paquet avant de confirmer. |