Jump to content
MediaWiki

Extension:BetaFeatures

From mediawiki.org
This page is a translated version of the page Extension:BetaFeatures and the translation is 100% complete.
Příručka k rozšířením MediaWiki
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
  • $wgBetaFeatures
  • $wgBetaFeaturesAllowList
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žce extensions/.
    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',
 ];
 }
}
Prozatím je vyžadováno '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

Toto rozšíření se používá na jednom nebo více projektech Wikimedia. Pravděpodobně to znamená, že rozšíření je stabilní a funguje dostatečně dobře, aby jej mohly používat weby s tak vysokou návštěvností. Vyhledejte tento název rozšíření v konfiguračních souborech CommonSettings.php a InitialiseSettings.php Wikimedie, abyste viděli, kde je nainstalováno. Úplný seznam rozšíření nainstalovaných na konkrétní wiki lze vidět na stránce wiki Special:Version.
Toto rozšíření je zahrnuto v následujících wiki farmách/hostitelích a/nebo balíčcích: Toto není autoritativní seznam. Některé wiki farmy/hostitelé a/nebo balíčky mohou toto rozšíření obsahovat, i když zde nejsou uvedeny. Pro potvrzení se vždy obraťte na své wiki farmy/hostitele nebo balíček.

AltStyle によって変換されたページ (->オリジナル) /