Extension:BetaFeatures
Stav rozšíření: stabilní |
|
---|---|
Implementace | Média, Háček , Databáze |
Popis | Umožňuje ostatním rozšířením zaregistrovat své beta funkce v uživatelských předvolbách |
Autoři | Mark Holmquist (MarkTraceur diskuse ) |
Nejnovější verze | 0.1 (Continous updates) |
Zásady kompatibility | Vydání snímků současně s MediaWiki. Hlavní vývojová větev není zpětně kompatibilní. |
MediaWiki | 1.25+ |
PHP | 5.4+ |
Změny v databázi | Ano |
Tabulky | betafeatures_user_counts |
Licence | GNU General Public License 2.0 nebo novější |
Stáhnout | Template:WikimediaDownload/gerritonly |
Příklad | Special:Preferences#mw-prefsection-betafeatures |
Special |
|
|
|
Přeložte rozšíření BetaFeatures, používá-li lokalizaci z translatewiki.net | |
Problémy | Otevřené úkoly · Nahlásit chybu |
Rozšíření BetaFeatures umožňuje dalším MediaWiki rozšířením zaregistrovat beta funkce se seznamem uživatelských preferencí na wiki. Ke splnění své funkce využívá stávající architekturu uživatelských preferencí a několik speciálních stránek.
Instalace
- Stáhněte soubor/y a vložte je do adresáře pojmenovaného
BetaFeatures
ve vaší složceextensions/
.
Vývojáři a přispěvatelé kódu by si místo toho měli nainstalovat rozšíření from Git pomocí:cdextensions/ gitclonehttps://gerrit.wikimedia.org/r/mediawiki/extensions/BetaFeatures
- Na konec vašeho souboru LocalSettings.php přidejte následující kód:
wfLoadExtension( 'BetaFeatures' );
- Spusťte aktualizační skript , který automaticky provede všechny nezbytné databázové změny, jaké rozšíření vyžaduje.
- Vyžaduje nastavení v konfiguračním souboru.
- Yes Dokončeno – Přejděte na stránku Special:Version vaší wiki a zkontrolujte, zda bylo rozšíření úspěšně nainstalováno.
Použití nových háčků ve vašem rozšíření
Použití tohoto rozšíření pro podporu vaší beta funkce je snadné. Zaregistrujte háček typu GetBetaFeaturePreferences
ve vašem souboru extension.json
– syntaxe je téměř identická s háčkem GetPreferences
, s malými změnami pro podporu typu preference, kterou v tomto případě potřebujeme.
V extension.json
:
"Hooks":{ "GetBetaFeaturePreferences":"MediaWiki\\Extension\\MyExtension\\Hooks::onGetBetaFeaturePreferences" },
V 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'] = [ // První dvě jsou klávesy zpráv 'label-message' => 'myextension-awesome-feature-message', 'desc-message' => 'myextension-awesome-feature-description', // Cesty k obrázkům, které reprezentují daný prvek. // Obrázek se obvykle liší pro jazyky s písmem ltr a rtl. // Obrázky pro konkrétní jazyky lze také specifikovat pomocí kódu jazyka. 'screenshot' => array( 'ru' => "$extensionAssetsPath/MyExtension/images/screenshot-ru.png", 'ltr' => "$extensionAssetsPath/MyExtension/images/screenshot-ltr.png", 'rtl' => "$extensionAssetsPath/MyExtension/images/screenshot-rtl.png", ), // Odkaz na informace o funkci - možná použijte podstránky na mw.org? 'info-link' => 'https://www.mediawiki.org/wiki/Special:MyLanguage/Extension:MyExtension/MyFeature', // Odkaz na diskusi o této funkci - diskusní stránky by mohly fungovat 'discussion-link' => 'https://www.mediawiki.org/wiki/Special:MyLanguage/Help_talk:Extension:MyExtension/MyFeature', ]; } }
'label-message'
, 'desc-message'
, 'info-link'
a 'discussion-link'
. Ujistěte se, že jste je všechny využili!Pak můžete pomocí funkce BetaFeatures zkontrolovat, zda je daná funkce povolena.
// SpecialMyExtension.php class SpecialMyExtension extends SpecialPage { public function execute() { if ( BetaFeatures::isFeatureEnabled( $this->getUser(), 'my-awesome-feature' ) ) { // Implementujte funkci! } } }
Můžete také použít normální kontrolu preferencí, ale nekontrolujte pravdivé nebo nepravdivé hodnoty - použijte hodnoty z třídy HTMLFeatureField
.
// SpecialMyExtension.php class SpecialMyExtension extends SpecialPage { public function execute() { if ( $this->getUser()->getOption( 'my-awesome-feature' ) === HTMLFeatureField::OPTION_ENABLED ) { // Implementujte funkci! } } }
Protože by třída BetaFeatures
měla být přítomna všude, můžete funkci convenience použít v libovolném háčku, speciální stránce nebo v čemkoli jiném, co chcete. Jen si dávejte pozor na potenciální problémy s výkonem nebo ukládáním do mezipaměti, které by tyto změny mohly způsobit.
Pokud chcete používat rozšíření také bez BetaFeatures, měli byste také zkontrolovat jeho existenci, např.:
if ( !ExtensionRegistry::getInstance()->isLoaded( 'BetaFeatures' ) || \BetaFeatures::isFeatureEnabled( $user, 'my-awesome-feature' ) ) { // Implementujte funkci! }
Nastavení
Konfigurační proměnnou $wgBetaFeaturesWhitelist
lze použít k omezení zobrazení beta funkcí v nastavení.
Ve výchozím nastavení je prázdné a zobrazeny jsou všechny beta funkce.
Pokud se používá, musí být beta funkce uvedena na seznamu povolených, aby se zobrazila v nastavení.
Tato konfigurační proměnná přijímá pole řetězců.
Každý řetězec by měl být názvem beta funkce, jak je uvedeno v definici preference předané proměnné onGetBetaFeaturePreferences()
.
Například ve výše uvedeném kódu je název beta funkce myextension-awesome-feature
, takže byste museli tento řetězec přidat do pole $wgBetaFeaturesWhitelist
v konfiguraci vaší wiki:
$wgBetaFeaturesWhitelist = [ 'myextension-awesome-feature' ];
Pokročilá využití
Chcete vidět něco opravdu skvělého?
Automatický zápis skupin
V tomto příkladu zaregistrujeme preferenci s "automatickým zápisem" – pokud ji uživatel zaškrtne a objeví se nové funkce, které jsou v určité skupině, bude uživatel do těchto funkcí automaticky zaregistrován.
// MyExtensionHooks.php class MyExtensionHooks { static function getPreferences( $user, &$prefs ) { global $wgExtensionAssetsPath; $prefs['my-awesome-feature-auto-enroll'] = array( // První dvě jsou klávesy zpráv 'label-message' => 'beta-feature-autoenroll-message', 'desc-message' => 'beta-feature-autoenroll-description', // Odkaz na informace o funkci - možná použijte podstránky na mw.org? 'info-link' => 'https://wwww.mediawiki.org/wiki/Special:MyLanguage/MyFeature', // Odkaz na diskusi o této funkci - diskusní stránky by mohly fungovat 'discussion-link' => 'https://www.mediawiki.org/wiki/Talk:MyFeature', // Povolit automatický zápis pro tuto skupinu 'auto-enrollment' => 'my-awesome-feature-group', ); $prefs['my-awesome-feature'] = array( // První dvě jsou klávesy zpráv 'label-message' => 'beta-feature-message', 'desc-message' => 'beta-feature-description', // Cesty k obrázkům, které reprezentují daný prvek. // Obrázek se obvykle liší pro jazyky s písmem ltr a rtl. // Obrázky pro konkrétní jazyky lze také specifikovat pomocí kódu jazyka. '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', ); } }
Správa závislostí
Dále můžeme definovat správu závislostí pro každou funkci.
Abychom toho dosáhli, nejprve zaregistrujeme název háčku, který chceme pro toto použít, pomocí háčku GetBetaFeatureDependencyHooks
, poté zaregistrujeme háček daného typu, který kontroluje nějakou závislost a vrací true
, pokud je splněna, nebo false
, pokud ne.
// 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; } }
Tuto funkci můžete (削除) zneužít (削除ここまで) k deaktivaci funkcí pro jednotlivé wikiny, pokud jsou označeny jako závislé. Ale to zní fakt hackersky. Asi byste neměli. Už teď slyším, jak o tom přemýšlíte, prostě s tím přestaňte.
Databázové záležitosti
BetaFeatures definuje a používá databázovou tabulku (betafeatures_user_counts
). Pokud se ji ale pokusíte použít lokálně, můžete se v ní zmást.
Frontu úloh používáme ke spuštění aktualizací této tabulky po vypršení platnosti mezipaměti (TTL 30 minut). Pokud je vaše wiki nakonfigurována tak, aby spouštěla úlohy při každém požadavku, bude to zhruba jeden požadavek každých 30 minut relativně pomalé, ale zbytek bude relativně rychlý. Pokud nakonfigurujete wiki tak, aby spouštěla úlohy přes cron, bude to fungovat mnohem lépe.
Řešení problémů
Počty použití
Počty používání nemusí přesně odrážet počet uživatelů, kteří mají v daném okamžiku aktivovány některé beta funkce. Měly by být interpretovány jako přibližné hodnoty.
Toto číslo je vypočítáno úlohou, která může být zpožděna nebo běžet příliš dlouho. V minulosti existovala pro tato čísla také 30minutová mezipaměť.
Související odkazy
- Stable extensions/cs
- Media handling extensions/cs
- Hook extensions/cs
- Database extensions/cs
- GPL licensed extensions/cs
- Extensions in Wikimedia version control/cs
- ExtensionTypes extensions/cs
- GetPreferences extensions/cs
- LoadExtensionSchemaUpdates extensions/cs
- MakeGlobalVariablesScript extensions/cs
- PreferencesGetIcon extensions/cs
- SaveUserOptions extensions/cs
- SkinTemplateNavigation::Universal extensions/cs
- UserGetDefaultOptions extensions/cs
- All extensions/cs
- Extensions used on Wikimedia/cs
- Extensions included in Canasta/cs
- Extensions included in Miraheze/cs
- Extensions included in WikiForge/cs
- Beta Features/cs