Extension:测试功能
![]() 发行状态: 稳定版 |
|
---|---|
![]() |
|
实现 | 媒体, 函数钩 , 数据库 |
描述 | 允许其他扩展作为测试功能在用户设置中启用 |
作者 | Mark Holmquist (MarkTraceur留言) |
最新版本 | 0.1 (Continous updates) |
兼容性政策 | 快照跟随MediaWiki发布。 master分支不向后兼容。 |
MediaWiki | 1.25+ |
PHP | 5.4+ |
数据库更改 | 是 |
表 | betafeatures_user_counts |
许可协议 | GNU通用公眾授權條款2.0或更新版本 |
下載 | |
示例 | Special:Preferences#mw-prefsection-betafeatures |
Special |
|
|
|
季度下載量 | 61 (Ranked 86th) |
正在使用的公开wiki数 | 1,031 (Ranked 249th) |
前往translatewiki.net翻譯BetaFeatures扩展 | |
問題 | 开启的任务 · 报告错误 |
测试功能(BetaFeatures)扩展允许其他MediaWiki扩展向wiki用户提供测试反馈。它通过用户设置界面和一些特殊页面记载测试中的一些数据。
安裝
- 下载文件,并将解压后的
BetaFeatures
文件夹移动到extensions/
目录中。
开发者和代码贡献人员应从Git安装扩展,输入:cd extensions/
git clone https://gerrit.wikimedia.org/r/mediawiki/extensions/BetaFeatures - 将下列代码放置在您的LocalSettings.php 的底部:
wfLoadExtension( 'BetaFeatures' );
- 运行更新脚本,它将自动创建此扩展必须依赖的数据库表。
- 按需求配置。
- 完成 – 在您的wiki上导航至Special:Version,以验证已成功安装扩展。
对您的扩展使用新钩子
使用此扩展程序支持您的Beta功能非常简单。在您的extension.json
文件中注册一个类型为“GetBetaFeaturePreferences
”的钩子——语法几乎与GetPreferences
钩子相同,只需稍作更改即可支持本例中需要的首选项类型。
在extension.json
中:
"Hooks": {
"GetBetaFeaturePreferences": "MediaWiki\\Extension\\MyExtension\\Hooks::onGetBetaFeaturePreferences"
},
在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'
和'discussion-link'
。请确保您使用了全部!然后,您可以使用测试功能提供的便捷功能来检查该功能是否已启用。
// SpecialMyExtension.php
class SpecialMyExtension extends SpecialPage {
public function execute() {
if ( BetaFeatures::isFeatureEnabled( $this->getUser(), 'my-awesome-feature' ) ) {
// Implement the feature!
}
}
}
您也可以使用常规首选项检查,但不要检查真值或假值 - 使用HTMLFeatureField
类中的值。
// SpecialMyExtension.php
class SpecialMyExtension extends SpecialPage {
public function execute() {
if ( $this->getUser()->getOption( 'my-awesome-feature' ) === HTMLFeatureField::OPTION_ENABLED ) {
// Implement the feature!
}
}
}
由于BetaFeatures
类应该无处不在,因此您可以在任何钩子、特殊页面或您想要的任何其他内容中使用便利函数。请注意这些更改可能会引入的潜在性能或缓存问题。
如果您还想不通过测试功能使用您的扩展,您还应该检查它是否存在,例如:
if (
!ExtensionRegistry::getInstance()->isLoaded( 'BetaFeatures' )
|| \BetaFeatures::isFeatureEnabled( $user, 'my-awesome-feature' )
) {
// Implement the feature!
}
配置
$wgBetaFeaturesWhitelist
配置变量可用于限制首选项中显示的测试功能。
默认情况下,它为空,并显示所有测试功能。
如果使用它,那么为了在参数设置中显示测试版功能,需要在白名单中列出。
此配置变量接受字符串数组。
每个字符串应是传递给onGetBetaFeaturePreferences()
的首选项定义中指定的测试功能的名称。
例如,在上面给出的代码中,测试功能的名称是myextension-awesome-feature
,因此您需要将该字符串添加到您的维基配置的$wgBetaFeaturesWhitelist
数组中:
$wgBetaFeaturesWhitelist = [
'myextension-awesome-feature'
];
高级用法
想尝试更酷的玩法?!
自动参与组
在此示例中,我们定义了一个“自动启用所有新测试功能”的选项 - 如果用户选中此选项,并且特定组中出现新功能,则用户将自动开启这些功能。
// 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',
);
}
}
附属管理
接下来,我们实际上可以定义每个功能的依赖关系管理。为此,我们首先用钩子“GetBetaFeatureDependencyHooks ”注册我们想要用于此目的的钩子的名称,然后我们注册一个该类型的钩子,该钩子检查某些依赖关系,如果满足,则返回真,否则返回假。
// 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;
}
}
如果功能被标记为依赖功能,您可以滥用此功能来禁用每个wiki的功能。但这听起来真的很骇人听闻。您可能不应该这样做。我能听见您现在在想它,停手吧。
数据库填充
有一个数据库表(betafeatures_user_counts
)由测试功能定义和使用。但是,如果您尝试在本地使用它,您可能会对它感到困惑。
当缓存过期(30分钟TTL)时,我们使用作业队列来运行此表的更新。如果您的wiki配置为对每个请求运行作业,这将使每30分钟大约一个请求的速度非常慢,但其余的请求会相对较快。如果您将您的wiki配置为通过cron运行作业将会好很多。
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.
参见
此扩展用于一个或多个维基媒体项目。 这可能意味着扩展足够稳定、运作足够良好,可以用在这样的高流量的网站上。 请在维基媒体的CommonSettings.php和InitialiseSettings.php配置文件中查找此扩展的名称以查看哪些网站安装了该扩展。 特定wiki上的已安装的扩展的完整列表位于Special:Version页面。 |
此扩展在以下wiki农场/托管网站和/或软件包中提供: 這不是一份權威名單。 即使某些wiki农场/托管网站和/或软件包未在这里列出,它们也可能提供此扩展。 请检查你的wiki农场/托管网站或软件包以确认提供情况。 |