Phabricator のプロジェクト名 #BetaFeatures

Extension:BetaFeatures/ja

From MediaWiki.org
Jump to navigation Jump to search
This page is a translated version of the page Extension:BetaFeatures and the translation is 100% complete.

Other languages:
العربية • ‎български • ‎català • ‎dansk • ‎Deutsch • ‎English • ‎español • ‎suomi • ‎français • ‎עברית • ‎հայերեն • ‎Bahasa Indonesia • ‎italiano • ‎日本語 • ‎한국어 • ‎polski • ‎português • ‎português do Brasil • ‎русский • ‎sicilianu • ‎سنڌي • ‎中文
MediaWiki 拡張機能マニュアルManual:Extensions
Crystal Clear action run.svg
BetaFeatures

リリースの状態:Extension status 安定

BetaFeatures 2013-09-06.png
実装Template:Extension#type Media, Hook, Database
説明Template:Extension#description 他の拡張機能が利用者の個人設定にベータ機能を登録できるようにする
作者Template:Extension#username Mark Holmquist (MarkTraceurtalk)
最新バージョンTemplate:Extension#version 0.1 (Continous updates)
MediaWikiTemplate:Extension#mediawiki 1.25+
PHPTemplate:Extension#php 5.4+
データベースの変更Template:Extension#needs-updatephp はい
ライセンスTemplate:Extension#license GNU General Public License 2.0 or later
ダウンロード Template:WikimediaDownload/gerritonly
Template:Extension#example Multimedia Alpha site
名前空間Template:Extension#namespace

Special

パラメーターTemplate:Extension#parameters
  • $wgBetaFeaturesWhitelist
  • $wgBeatFeatures
使用するフックTemplate:Extension#hook
UserSaveOptionsManual:Hooks/UserSaveOptions
GetPreferencesManual:Hooks/GetPreferences
PersonalUrlsManual:Hooks/PersonalUrls
LoadExtensionSchemaUpdatesManual:Hooks/LoadExtensionSchemaUpdates
MakeGlobalVariablesScriptManual:Hooks/MakeGlobalVariablesScript
ExtensionTypesManual:Hooks/ExtensionTypes

translatewiki.net で翻訳を利用できる場合は、BetaFeatures 拡張機能の翻訳にご協力ください

使用状況とバージョン マトリクスを確認してください。

問題点Phabricator

未解決のタスク · バグを報告

BetaFeatures拡張機能は他のMediaWiki拡張機能がウィキ上の個人設定のリストにベータ機能を登録することを可能にします。既存の個人設定アーキテクチャといくつかの特別ページを使用してその機能を実現します。

インストール

  • ダウンロードして、ファイルを extensions/ フォルダー内の BetaFeatures という名前のディレクトリ内に配置します。
  • 以下のコードを LocalSettings.php の末尾に追加します:
    wfLoadExtension( 'BetaFeatures' );
    
  • 更新スクリプトを実行します。このスクリプトは、この拡張機能が必要とするデータベース テーブルを自動的に作成します。
  • YesY 完了 – ウィキの「Special:Version」に移動して、拡張機能が正しくインストールされたことを確認します。

MediaWiki 1.24 以前を稼働させている利用者へ:

上記の手順では、wfLoadExtension() を使用してこの拡張機能をインストールする新しい方法を記載しています。 この拡張機能をこれらの過去のバージョン (MediaWiki 1.24 以前) にインストールする必要がある場合は、wfLoadExtension( 'BetaFeatures' ); の代わりに以下を使用する必要があります:

require_once "$IP/extensions/BetaFeatures/BetaFeatures.php";

ご利用の拡張機能に新しいフックを取り入れる

この拡張機能を使用してベータ機能をサポートするのは簡単です。拡張機能のメインファイルに「GetBetaFeaturePreferences」タイプのフックを登録する - 構文はGetPreferences hookとほとんど同じですが、この場合に必要な設定の種類を少し変更してサポートしています。

// MyExtension.php
$wgAutoloadClasses['MyExtensionHooks'] = __DIR__ . '/MyExtensionHooks.php';
$wgHooks['GetBetaFeaturePreferences'][] = 'MyExtensionHooks::getPreferences';
現在、'label-message'と'desc-message'、'info-link'及び'discussion-link'が必須です。使用しているかどうか確認をお願いします!
// 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/MyFeature',
            // Link to discussion about the feature - talk pages might work
            'discussion-link' => 'https://www.mediawiki.org/wiki/Talk: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はすべての場面で利用できるようにする必要があるため、便利な機能に対してフックや特別ページほか利用者が探したいものを対応させることができます。ただそれらの変更から、一時的に性能あるいはキャッシュに障害が起こる可能性にご留意ください。

高度な使用法

ちょっとかっこいいものをお見せしましょうか?

自動登録グループ

この例では、「自動登録」の設定を登録します。利用者がこれをチェックし、特定のグループに属する新しい機能が出されると、利用者は自動的にその機能に登録されます。

// 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を利用する設定にすると、状況はより改善されます。

関連項目