Extension:BetaFeatures
![]() リリースの状態: 安定 |
|
---|---|
![]() |
|
実装 | メディア, フック , データベース |
説明 | 他の拡張機能が利用者の個人設定にベータ機能を登録できるようにする |
作者 | 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 |
|
|
|
Quarterly downloads | 119 (Ranked 70th) |
Public wikis using | 1,031 (Ranked 249th) |
translatewiki.net で翻訳を利用できる場合は、BetaFeatures 拡張機能の翻訳にご協力ください | |
問題点 | 未解決のタスク · バグを報告 |
BetaFeatures拡張機能は他のMediaWiki拡張機能がウィキ上の個人設定のリストにベータ機能を登録することを可能にします。既存の個人設定アーキテクチャといくつかの特別ページを使用してその機能を実現します。
インストール
- ダウンロードして、ファイルを
extensions/
フォルダー内のBetaFeatures
という名前のディレクトリ内に配置します。 - 以下のコードを LocalSettings.php ファイルの末尾に追加します:
wfLoadExtension( 'BetaFeatures' );
- 更新スクリプトを実行します。このスクリプトは、この拡張機能が必要とするデータベーステーブルを自動的に作成します。
- 必要に応じて設定します。
完了 – ウィキの「Special:Version」に移動して、拡張機能が正しくインストールされたことを確認します。
ご利用の拡張機能に新しいフックを取り入れる
この拡張機能を使用してベータ機能をサポートするのは簡単です。拡張機能の 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',
];
}
}
確認後、ベータ版機能が提供する便利機能を使い、有効になったかどうかチェックできます。
// 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 "で登録し、それに続いて依存関係をチェックする同じタイプのフックを登録、一致したらtrue、不一致ならfalseを返します。
// 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;
}
}
依存関係がマークしてある場合は、この機能を不正利用使用してウィキ単位で機能を無効にすることができます。そうは言っても作業がハッキングみたいに見えます。手を出さないほうがいいと迷いませんでしたか。今この瞬間、そう考えている姿が目に見えるようですが、ではやめましょう。
データベースとの関連
BetaFeaturesは対応するデータベースのテーブル(betafeatures_user_counts
)を設定して使っています。ただローカルでそのテーブルを利用しようとしても、かえって混乱するかもしれません。
このテーブルの更新はキャッシュの期限切れ(合計30分)ごとにジョブキューで実行しています。ご利用のウィキがリクエスト単位でジョブ実行を設定している場合、テーブルの設定条件が原因で30分ごとのリクエストの遅延のみ深刻に遅く、その他の処理は比較的速まります。もしご利用のウィキでジョブ実行にcronを利用する設定にすると、状況はより改善されます。
関連項目
![]() | この拡張機能は 1 つ以上のウィキメディアのプロジェクトで使用されています。 これはおそらく、この拡張機能が安定していて高いトラフィックのウェブサイトでも十分に動作することを意味します。 この拡張機能がインストールされている場所を確認するには、ウィキメディアの設定ファイル CommonSettings.php および InitialiseSettings.php 内で、この拡張機能の名前を探してください。 特定のウィキにインストールされている拡張機能の完全な一覧は、そのウィキの Special:Version ページにあります。 |
![]() | この拡張機能は以下のウィキ ファーム/ウィキ ホスト/パッケージに含まれています: これは正式な一覧ではありません。 一部のウィキ ファーム/ウィキ ホスト/パッケージは、ここに記載されていなくてもこの拡張機能を含んでいる場合があります。 必ずご利用のウィキ ファーム、ウィキ ホスト、バンドルで確認してください。 |
- Stable extensions/ja
- Media handling extensions/ja
- Hook extensions/ja
- Database extensions/ja
- GPL licensed extensions/ja
- Extensions in Wikimedia version control/ja
- ExtensionTypes extensions/ja
- GetPreferences extensions/ja
- LoadExtensionSchemaUpdates extensions/ja
- MakeGlobalVariablesScript extensions/ja
- PreferencesGetIcon extensions/ja
- SaveUserOptions extensions/ja
- SkinTemplateNavigation::Universal extensions/ja
- UserGetDefaultOptions extensions/ja
- All extensions/ja
- Extensions used on Wikimedia/ja
- Extensions included in Canasta/ja
- Extensions included in Miraheze/ja
- Extensions included in WikiForge/ja
- Extensions included in WikiTide/ja
- Beta Features/ja