Ekstensi:BetaFeatures

This page is a translated version of the page Extension:BetaFeatures and the translation is 100% complete.
Ekstensi MediaWiki
BetaFeatures
Status rilis stabil
Implementasi Media, Hook , Basis data
Deskripsi Memungkinkan ekstensi lain mendaftarkan fitur beta mereka ke dalam preferensi pengguna
Perancang awal Mark Holmquist (MarkTraceurbicara)
Versi terbaru 0.1 (Continous updates)
Kebijakan kompatibilitas Snapshots releases along with MediaWiki. Master is not backward compatible.
MediaWiki 1.25+
PHP 5.4+
Perubahan basis data Ya
Tabel betafeatures_user_counts
Lisensi Lisensi Publik Umum GNU 2.0 atau lebih baru
Unduh Template:WikimediaDownload/gerritonly
Contoh Special:Preferences#mw-prefsection-betafeatures
Special
  • $wgBetaFeatures
  • $wgBetaFeaturesAllowList
Quarterly downloads 74 (Ranked 72nd)
Public wikis using 1,031 (Ranked 249th)
Terjemahkan ekstensi BetaFeatures jika tersedia di translatewiki.net
Masalah Tugas terbuka · Laporkan kekutu

Ekstensi BetaFeatures (bahasa Indonesia: Fitur Beta) memungkinkan ekstensi MediaWiki lainnya untuk mendaftarkan fitur beta ke daftar preferensi pengguna di wiki. Ekstensi ini menggunakan arsitektur preferensi pengguna yang sudah ada dan beberapa halaman spesial untuk mencapai fungsinya.

Pemasangan

  • Unduh dan letakkan berkas-berkasnya di dalam sebuah direktori yang bernama BetaFeatures di folder extensions/ Anda.
    Developers and code contributors should install the extension from Git instead, using:cd extensions/
    git clone https://gerrit.wikimedia.org/r/mediawiki/extensions/BetaFeatures
  • Tambahkan kode berikut di bagian bawah LocalSettings.php Anda:
    wfLoadExtension( 'BetaFeatures' );
    
  • Jalankan skrip pembaruan yang akan membuat tabel basis data yang diperlukan ekstensi ini secara otomatis.
  • Atur konfigurasi seperlunya.
  •   Selesai – Telusuri ke Special:Version di wiki Anda untuk memastikan ekstensinya berhasil dipasang.

Menggunakan hook baru di ekstensi Anda

Menggunakan ekstensi ini untuk mendukung fitur beta Anda itu mudah. Daftarkan hook bertipe "GetBetaFeaturePreferences " di berkas extension.json Anda — sintaksnya nyaris sama persis dengan hook GetPreferences , dengan perubahan kecil untuk mendukung tipe preferensi yang kita butuhkan dalam kasus ini.

Di extension.json:

    "Hooks": {
        "GetBetaFeaturePreferences": "MediaWiki\\Extension\\MyExtension\\Hooks::onGetBetaFeaturePreferences"
    },

Di 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',
        ];
    }
}
Untuk sekarang, 'label-message', 'desc-message', 'info-link', dan 'discussion-link' diperlukan. Pastikan Anda menggunakan semuanya!

Lalu, Anda bisa menggunakan fungsi kenyamanan yang disediakan oleh BetaFeatures untuk memeriksa apakah fitur dinyalakan.

// SpecialMyExtension.php
class SpecialMyExtension extends SpecialPage {

    public function execute() {
        if ( BetaFeatures::isFeatureEnabled( $this->getUser(), 'my-awesome-feature' ) ) {
            // Implement the feature!
        }
    }
}

Anda bisa juga menggunakan mengecek preferensi biasa, tetapi jangan mengecek nilai benar atau salah - menggunakan nilai dari kelas HTMLFeatureField.

// SpecialMyExtension.php
class SpecialMyExtension extends SpecialPage {

    public function execute() {
        if ( $this->getUser()->getOption( 'my-awesome-feature' ) === HTMLFeatureField::OPTION_ENABLED ) {
            // Implement the feature!
        }
    }
}

Karena kelas BetaFeatures harus ada di semua tempat, Anda bisa menggunakan fungsi kenyamanan di hook, halaman istimewa, atau di manapun Anda mau. Perhatikan saja bahwa ada kemungkinan terjadi masalah performa atau tembolok yang disebabkan oleh perubahan tersebut.

Jika Anda juga ingin menggunakan ekstensi Anda tanpa BetaFeatures, Anda sebaiknya juga mengecek keberadaannya, misalnya:

if (
    !ExtensionRegistry::getInstance()->isLoaded( 'BetaFeatures' )
    || \BetaFeatures::isFeatureEnabled( $user, 'my-awesome-feature' )
) {
    // Implement the feature!
}

Konfigurasi

Variabel konfigurasi $wgBetaFeaturesWhitelist bisa digunakan untuk membatasi fitur beta yang ditampilkan di preferensi. Secara bawaan isinya kosong, dan semua fitur beta ditampilkan.

Jika variabelnya digunakan maka untuk menampilkan suatu fitur beta di preferensi, maka fiturnya harus dimasukkan ke daftar putih. Variabel konfigurasi ini menerima selarik string. Masing-masing string seharusnya berupa nama dari fitur beta sebagaimana yang ditetapkan di definisi preferensi dan diberikan ke onGetBetaFeaturePreferences(). Sebagai contoh, di kode di atas, nama dari fitur betanya adalah myextension-awesome-feature, jadi Anda perlu menambahkan string itu ke larik $wgBetaFeaturesWhitelist di konfigurasi wiki Anda:

$wgBetaFeaturesWhitelist = [
        'myextension-awesome-feature' 
];

Penggunaan lanjutan

Ingin melihat sesuatu yang sangat keren?

Kelompok otomatis-memasukkan

Dengan contoh ini, kita memasukkan preferensi "auto-enroll" - jika seorang pengguna mencentang ini, dan fitur baru yang berada dalam suatu kelompok muncul, pengguna tersebut akan secara otomatis dimasukkan ke dalam fitur tersebut.

// 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',
        );
    }
}

Manajemen dependensi

Berikutnya, kita bisa mendefinisikan manajemen dependensi per fitur. Untuk melakukan ini kita pertama-tama mendaftarkan name dari hook yang kita ingin gunakan untuk ini dengan hook "GetBetaFeatureDependencyHooks ", kemudian kita daftarkan hook bertipe itu yang memeriksa dependensi, dan menghasilkan nilai true apabila dependensinya dipenuhi atau false jika tidak.

// 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;
    }
}

Anda bisa menyalahgunakan fitur ini untuk melakukan penonaktifan fitur per wiki, jika mereka ditandai sebagai dependen. Tetapi itu terdengar sangat canggung. Anda sebaiknya tidak melakukannya. Aku bisa mendengar Anda sedang memikirkannya, hentikan saja.

Urusan basis data

Terdapat tabel basis data (betafeatures_user_counts) yang didefinisikan, dan digunakan, oleh BetaFeatures. Tetapi Anda mungkin kebingungan jika Anda mencoba menggunakannya secara lokal.

Kami menggunakan antrean pekerjaan untuk menjalankan pembaruan untuk tabel ini, ketika temboloknya kedaluwarsa (30 menit TTL). Jika wiki Anda dikonfigurasi untuk menjalankan pekerjaan begitu diminta, ini akan membuat satu permintaan setaip 30 menit sangat lambat, tetapi sisanya akan relatif cepat. Jika Anda mengonfigurasi wiki Anda untuk menjalankan pekerjaan via cron, hal-hal akan bekerja dengan lebih baik.

Lihat pula