Ekstensi:BetaFeatures
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 | |
Contoh | Special:Preferences#mw-prefsection-betafeatures |
Special |
|
|
|
Quarterly downloads | 49 (Ranked 91st) |
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 folderextensions/
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',
];
}
}
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.
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.
Lihat pula
Ekstensi ini sedang digunakan di salah satu atau lebih proyek Wikimedia. Ini kemungkinan berarti ekstensi ini stabil dan bekerja cukup baik untuk digunakan oleh situs web berlalu lintas tinggi. Cari nama ekstensi ini di berkas konfigurasi CommonSettings.php dan InitialiseSettings.php Wikimedia untuk melihat di mana dipasangnya. Daftar lengkap ekstensi yang dipasang di suatu wiki bisa dilihat di halaman Special:Version wiki. |
Ekstensi ini sudah termasuk dalam paket-paket dan/atau keluarga wiki berikut: Ini bukan daftar yang otoritafi. Some wiki farms/hosts and/or packages may contain this extension even if they are not listed here. Selalu periksa keluarga wiki atau bundel Anda untuk mengonfirmasi. |